diff options
author | Thales1330 <thaleslima.ufu@gmail.com> | 2016-08-18 19:10:04 -0300 |
---|---|---|
committer | Thales1330 <thaleslima.ufu@gmail.com> | 2016-08-18 19:10:04 -0300 |
commit | 05525745c0b0d189484da3c45f95356d7558e2cf (patch) | |
tree | e05100d4711e4050985e3d550bf9053a3c22942f /Project/Workspace.cpp | |
parent | e58cec073cbd982246898c733ae21b9f2b92b2b7 (diff) | |
download | PSP.git-05525745c0b0d189484da3c45f95356d7558e2cf.tar.gz PSP.git-05525745c0b0d189484da3c45f95356d7558e2cf.tar.xz PSP.git-05525745c0b0d189484da3c45f95356d7558e2cf.zip |
Line improvements, context menu implemented
Line still under construction, contex menu base implemented
Diffstat (limited to 'Project/Workspace.cpp')
-rw-r--r-- | Project/Workspace.cpp | 74 |
1 files changed, 66 insertions, 8 deletions
diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp index f33948b..26c913b 100644 --- a/Project/Workspace.cpp +++ b/Project/Workspace.cpp @@ -200,6 +200,26 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event) event.Skip(); } +void Workspace::OnRightClickDown(wxMouseEvent& event) +{ + if(m_mode == MODE_EDIT) { + for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) { + Element* element = *it; + if(element->IsSelected()) { + if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) { + wxMenu menu; + if(element->GetContextMenu(menu)) { + menu.SetClientData(element); + menu.Connect(wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(Workspace::OnPopupClick), NULL, this); + PopupMenu(&menu); + } + } + } + } + } +} + void Workspace::OnLeftClickUp(wxMouseEvent& event) { bool foundPickbox = false; @@ -313,14 +333,11 @@ void Workspace::OnMouseMotion(wxMouseEvent& event) { for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) { Element* element = *it; - //Parent's element moving... - for(int i=0; i<(int)element->GetParentList().size(); i++) { - //wxMessageBox(wxString::Format("%d", element->GetParentList().size())); - //Element* parent = *itp; - Element* parent = element->GetParentList()[i]; - if(parent->IsSelected()) { - element->MoveNode(parent, m_camera->ScreenToWorld(event.GetPosition())); - //itp = element->GetParentList().end();//Exit the for because the element was already moved. + // Parent's element moving... + for(int i = 0; i < (int)element->GetParentList().size(); i++) { + Element* parent = element->GetParentList()[i]; + if(parent->IsSelected()) { + element->MoveNode(parent, m_camera->ScreenToWorld(event.GetPosition())); } } if(element->IsSelected()) { @@ -409,6 +426,13 @@ void Workspace::OnKeyDown(wxKeyEvent& event) { for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) { Element* element = *it; + // Parent's element rotating... + for(int i = 0; i < (int)element->GetParentList().size(); i++) { + Element* parent = element->GetParentList()[i]; + if(parent->IsSelected()) { + element->RotateNode(parent); + } + } if(element->IsSelected()) { element->Rotate(); } @@ -479,3 +503,37 @@ void Workspace::UpdateStatusBar() wxString::Format(wxT("X: %.1f Y: %.1f"), m_camera->GetMousePosition().m_x, m_camera->GetMousePosition().m_y), 3); } + +void Workspace::OnPopupClick(wxCommandEvent& event) +{ + wxMenu* menu = (wxMenu*)event.GetEventObject(); + Element* element = (Element*)menu->GetClientData(); + switch(event.GetId()) + { + case ID_EDIT_BUS: + { + wxMessageBox("Edit bus!"); + } + break; + case ID_EDIT_LINE: + { + wxMessageBox("Edit line!"); + } + break; + case ID_ROTATE: + { + element->Rotate(); + for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) { + Element* nonEditedElement = *it; + // Parent's element rotating... + for(int i = 0; i < (int)nonEditedElement->GetParentList().size(); i++) { + Element* parent = nonEditedElement->GetParentList()[i]; + if(parent == element) { + nonEditedElement->RotateNode(parent); + } + } + } + Redraw(); + } + } +} |