diff options
author | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2016-08-07 21:36:40 -0300 |
---|---|---|
committer | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2016-08-07 21:36:40 -0300 |
commit | 139b076149594e6cf508aea269b061aa8b428d9c (patch) | |
tree | 759b8371bcc2e51d9474b4cc31f1f9bfd489bc06 /Project/Workspace.cpp | |
parent | 0899cd2aea1fe2e71184bd9c6a86f3bd988304e5 (diff) | |
download | PSP.git-139b076149594e6cf508aea269b061aa8b428d9c.tar.gz PSP.git-139b076149594e6cf508aea269b061aa8b428d9c.tar.xz PSP.git-139b076149594e6cf508aea269b061aa8b428d9c.zip |
Some minor fixes
Diffstat (limited to 'Project/Workspace.cpp')
-rw-r--r-- | Project/Workspace.cpp | 332 |
1 files changed, 168 insertions, 164 deletions
diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp index db56eb7..9425d4a 100644 --- a/Project/Workspace.cpp +++ b/Project/Workspace.cpp @@ -71,7 +71,7 @@ void Workspace::OnPaint(wxPaintEvent& event) SetViewport(); // Set GLCanvas scale and translation. - glScaled(m_camera->GetScale(), m_camera->GetScale(), 0.0); // Scale + glScaled(m_camera->GetScale(), m_camera->GetScale(), 0.0); // Scale glTranslated(m_camera->GetTranslation().m_x, m_camera->GetTranslation().m_y, 0.0); // Translation // Draw @@ -179,7 +179,7 @@ void Workspace::OnLeftClickUp(wxMouseEvent& event) Element* element = *it; if(m_mode == MODE_SELECTION_RECT) { - if(m_selectionRect.Intersects(element->GetRect())) { + if(element->Intersects(m_selectionRect)) { element->SetSelected(); } else @@ -199,6 +199,10 @@ void Workspace::OnLeftClickUp(wxMouseEvent& event) if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) { foundPickbox = true; } + else + { + element->ShowPickbox(false); + } } it++; @@ -217,112 +221,112 @@ void Workspace::OnMouseMotion(wxMouseEvent& event) { switch(m_mode) { - case MODE_INSERT: - { - std::vector<Element*>::iterator it = m_elementList.end() - 1; - Element* element = *it; - element->SetPosition(m_camera->ScreenToWorld(event.GetPosition())); - Redraw(); - } - break; - - case MODE_DRAG: - { - m_camera->SetTranslation(event.GetPosition()); - Redraw(); - } - break; - - case MODE_EDIT: - { - bool foundPickbox = false; - bool redraw = false; - std::vector<Element*>::iterator it = m_elementList.begin(); - while(it != m_elementList.end()) { - Element* element = *it; - if(element->IsSelected()) { - if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) { - element->ShowPickbox(); - redraw = true; - - if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) { - foundPickbox = true; - SetCursor(element->GetBestPickboxCursor()); - } - else if(!foundPickbox) - { - SetCursor(wxCURSOR_ARROW); - } - } - else if(!foundPickbox) - { - if(element->IsPickboxShown()) redraw = true; - - element->ShowPickbox(false); - SetCursor(wxCURSOR_ARROW); - } - } - it++; - } - if(redraw) Redraw(); - } - break; - - case MODE_MOVE_PICKBOX: - { - std::vector<Element*>::iterator it = m_elementList.begin(); - while(it != m_elementList.end()) { - Element* element = *it; - if(element->IsSelected()) { - element->MovePickbox(m_camera->ScreenToWorld(event.GetPosition())); - Redraw(); - } - it++; - } - } - break; - - case MODE_MOVE_ELEMENT: - { - std::vector<Element*>::iterator it = m_elementList.begin(); - while(it != m_elementList.end()) { - Element* element = *it; - if(element->IsSelected()) { - element->Move(m_camera->ScreenToWorld(event.GetPosition())); - Redraw(); - } - it++; - } - } - break; - - case MODE_SELECTION_RECT: - { - wxPoint2DDouble currentPos = m_camera->ScreenToWorld(event.GetPosition()); - double x, y, w, h; - if(currentPos.m_x < m_startSelRect.m_x) { - x = currentPos.m_x; - w = m_startSelRect.m_x - currentPos.m_x; - } - else - { - x = m_startSelRect.m_x; - w = currentPos.m_x - m_startSelRect.m_x; - } - if(currentPos.m_y < m_startSelRect.m_y) { - y = currentPos.m_y; - h = m_startSelRect.m_y - currentPos.m_y; - } - else - { - y = m_startSelRect.m_y; - h = currentPos.m_y - m_startSelRect.m_y; - } - - m_selectionRect = wxRect2DDouble(x, y, w, h); - Redraw(); - } - break; + case MODE_INSERT: + { + std::vector<Element*>::iterator it = m_elementList.end() - 1; + Element* element = *it; + element->SetPosition(m_camera->ScreenToWorld(event.GetPosition())); + Redraw(); + } + break; + + case MODE_DRAG: + { + m_camera->SetTranslation(event.GetPosition()); + Redraw(); + } + break; + + case MODE_EDIT: + { + bool foundPickbox = false; + bool redraw = false; + std::vector<Element*>::iterator it = m_elementList.begin(); + while(it != m_elementList.end()) { + Element* element = *it; + if(element->IsSelected()) { + if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) { + element->ShowPickbox(); + redraw = true; + + if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) { + foundPickbox = true; + SetCursor(element->GetBestPickboxCursor()); + } + else if(!foundPickbox) + { + SetCursor(wxCURSOR_ARROW); + } + } + else if(!foundPickbox) + { + if(element->IsPickboxShown()) redraw = true; + + element->ShowPickbox(false); + SetCursor(wxCURSOR_ARROW); + } + } + it++; + } + if(redraw) Redraw(); + } + break; + + case MODE_MOVE_PICKBOX: + { + std::vector<Element*>::iterator it = m_elementList.begin(); + while(it != m_elementList.end()) { + Element* element = *it; + if(element->IsSelected()) { + element->MovePickbox(m_camera->ScreenToWorld(event.GetPosition())); + Redraw(); + } + it++; + } + } + break; + + case MODE_MOVE_ELEMENT: + { + std::vector<Element*>::iterator it = m_elementList.begin(); + while(it != m_elementList.end()) { + Element* element = *it; + if(element->IsSelected()) { + element->Move(m_camera->ScreenToWorld(event.GetPosition())); + Redraw(); + } + it++; + } + } + break; + + case MODE_SELECTION_RECT: + { + wxPoint2DDouble currentPos = m_camera->ScreenToWorld(event.GetPosition()); + double x, y, w, h; + if(currentPos.m_x < m_startSelRect.m_x) { + x = currentPos.m_x; + w = m_startSelRect.m_x - currentPos.m_x; + } + else + { + x = m_startSelRect.m_x; + w = currentPos.m_x - m_startSelRect.m_x; + } + if(currentPos.m_y < m_startSelRect.m_y) { + y = currentPos.m_y; + h = m_startSelRect.m_y - currentPos.m_y; + } + else + { + y = m_startSelRect.m_y; + h = currentPos.m_y - m_startSelRect.m_y; + } + + m_selectionRect = wxRect2DDouble(x, y, w, h); + Redraw(); + } + break; } m_camera->UpdateMousePosition(event.GetPosition()); UpdateStatusBar(); @@ -359,41 +363,41 @@ void Workspace::OnKeyDown(wxKeyEvent& event) if(key != WXK_NONE) { switch(key) { - case WXK_ESCAPE: // Cancel operations. - { - if(m_mode == MODE_INSERT) { - m_elementList.pop_back(); // Removes the last element being inserted. - m_mode = MODE_EDIT; - Redraw(); - } - } - break; - case 'R': // Rotate the selected elements. - { - std::vector<Element*>::iterator it = m_elementList.begin(); - while(it != m_elementList.end()) { - Element* element = *it; - if(element->IsSelected()) { - element->Rotate(); - } - it++; - } - Redraw(); - } - break; - case 'B': // Insert a bus. - { - if(m_mode != MODE_INSERT) { - Bus* newBus = new Bus(m_camera->ScreenToWorld(event.GetPosition())); - m_elementList.push_back(newBus); - m_mode = MODE_INSERT; - m_statusBar->SetStatusText(_("Insert Bus: Click to insert, ESC to cancel.")); - Redraw(); - } - } - break; - default: - break; + case WXK_ESCAPE: // Cancel operations. + { + if(m_mode == MODE_INSERT) { + m_elementList.pop_back(); // Removes the last element being inserted. + m_mode = MODE_EDIT; + Redraw(); + } + } + break; + case 'R': // Rotate the selected elements. + { + std::vector<Element*>::iterator it = m_elementList.begin(); + while(it != m_elementList.end()) { + Element* element = *it; + if(element->IsSelected()) { + element->Rotate(); + } + it++; + } + Redraw(); + } + break; + case 'B': // Insert a bus. + { + if(m_mode != MODE_INSERT) { + Bus* newBus = new Bus(m_camera->ScreenToWorld(event.GetPosition())); + m_elementList.push_back(newBus); + m_mode = MODE_INSERT; + m_statusBar->SetStatusText(_("Insert Bus: Click to insert, ESC to cancel.")); + Redraw(); + } + } + break; + default: + break; } } @@ -405,27 +409,27 @@ void Workspace::UpdateStatusBar() { switch(m_mode) { - case MODE_DRAG: - { - m_statusBar->SetStatusText(_("MODE: DRAG"), 1); - } - break; - - case MODE_INSERT: - { - m_statusBar->SetStatusText(_("MODE: INSERT"), 1); - } - break; - - case MODE_MOVE_ELEMENT: - case MODE_MOVE_PICKBOX: - case MODE_SELECTION_RECT: - case MODE_EDIT: - { - m_statusBar->SetStatusText(wxT("")); - m_statusBar->SetStatusText(_("MODE: EDIT"), 1); - } - break; + case MODE_DRAG: + { + m_statusBar->SetStatusText(_("MODE: DRAG"), 1); + } + break; + + case MODE_INSERT: + { + m_statusBar->SetStatusText(_("MODE: INSERT"), 1); + } + break; + + case MODE_MOVE_ELEMENT: + case MODE_MOVE_PICKBOX: + case MODE_SELECTION_RECT: + case MODE_EDIT: + { + m_statusBar->SetStatusText(wxT("")); + m_statusBar->SetStatusText(_("MODE: EDIT"), 1); + } + break; } m_statusBar->SetStatusText(wxString::Format(_("ZOOM: %d%%"), (int)(m_camera->GetScale() * 100.0)), 2); |