summaryrefslogtreecommitdiffstats
path: root/Project/Workspace.cpp
diff options
context:
space:
mode:
authorThales1330 <thaleslima.ufu@gmail.com>2016-08-18 19:10:04 -0300
committerThales1330 <thaleslima.ufu@gmail.com>2016-08-18 19:10:04 -0300
commit05525745c0b0d189484da3c45f95356d7558e2cf (patch)
treee05100d4711e4050985e3d550bf9053a3c22942f /Project/Workspace.cpp
parente58cec073cbd982246898c733ae21b9f2b92b2b7 (diff)
downloadPSP.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.cpp74
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();
+ }
+ }
+}