diff options
-rw-r--r-- | .codelite/.tern-port | 2 | ||||
-rw-r--r-- | .codelite/.tern-project | 2 | ||||
-rw-r--r-- | .codelite/PSP.session | 32 | ||||
-rw-r--r-- | .codelite/PSP.tags | bin | 80414720 -> 80427008 bytes | |||
-rw-r--r-- | .codelite/compilation.db | bin | 21504 -> 24576 bytes | |||
-rw-r--r-- | .codelite/refactoring.db | bin | 411648 -> 413696 bytes | |||
-rw-r--r-- | Project/Bus.cpp | 7 | ||||
-rw-r--r-- | Project/Bus.h | 3 | ||||
-rw-r--r-- | Project/Element.h | 1 | ||||
-rw-r--r-- | Project/Line.cpp | 12 | ||||
-rw-r--r-- | Project/Line.h | 21 | ||||
-rw-r--r-- | Project/Project.mk | 19 | ||||
-rw-r--r-- | Project/Project.project | 2 | ||||
-rw-r--r-- | Project/Project.txt | 2 | ||||
-rw-r--r-- | Project/Release/Bus.cpp.o | bin | 14533 -> 15231 bytes | |||
-rw-r--r-- | Project/Release/Element.cpp.o | bin | 4924 -> 4934 bytes | |||
-rw-r--r-- | Project/Release/Line.cpp.o | bin | 0 -> 3314 bytes | |||
-rw-r--r-- | Project/Release/Line.cpp.o.d | 3 | ||||
-rw-r--r-- | Project/Release/PSP-UFU.exe | bin | 3242477 -> 3244991 bytes | |||
-rw-r--r-- | Project/Release/Workspace.cpp.o | bin | 88804 -> 91417 bytes | |||
-rw-r--r-- | Project/Release/Workspace.cpp.o.d | 6 | ||||
-rw-r--r-- | Project/Workspace.cpp | 347 | ||||
-rw-r--r-- | Project/Workspace.h | 2 |
23 files changed, 268 insertions, 193 deletions
diff --git a/.codelite/.tern-port b/.codelite/.tern-port index 335a5be..a4a847a 100644 --- a/.codelite/.tern-port +++ b/.codelite/.tern-port @@ -1 +1 @@ -56113
\ No newline at end of file +50793
\ No newline at end of file diff --git a/.codelite/.tern-project b/.codelite/.tern-project index d5969c6..09b6465 100644 --- a/.codelite/.tern-project +++ b/.codelite/.tern-project @@ -8,8 +8,6 @@ "node_resolve": { }, "node": { - }, - "complete_strings": { } } }
\ No newline at end of file diff --git a/.codelite/PSP.session b/.codelite/PSP.session index d3a6335..9043dab 100644 --- a/.codelite/PSP.session +++ b/.codelite/PSP.session @@ -5,29 +5,29 @@ <TabInfoArray Name="TabInfoArray"> <TabInfo> <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Workspace.cpp" Name="FileName"/> - <int Value="62" Name="FirstVisibleLine"/> - <int Value="87" Name="CurrentLine"/> + <int Value="386" Name="FirstVisibleLine"/> + <int Value="405" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> <TabInfo> <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Workspace.h" Name="FileName"/> - <int Value="36" Name="FirstVisibleLine"/> - <int Value="21" Name="CurrentLine"/> + <int Value="3" Name="FirstVisibleLine"/> + <int Value="24" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> <TabInfo> <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Bus.cpp" Name="FileName"/> - <int Value="12" Name="FirstVisibleLine"/> - <int Value="25" Name="CurrentLine"/> + <int Value="0" Name="FirstVisibleLine"/> + <int Value="10" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> <TabInfo> <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Bus.h" Name="FileName"/> <int Value="0" Name="FirstVisibleLine"/> - <int Value="12" Name="CurrentLine"/> + <int Value="11" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> @@ -40,8 +40,22 @@ </TabInfo> <TabInfo> <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Element.h" Name="FileName"/> - <int Value="41" Name="FirstVisibleLine"/> - <int Value="45" Name="CurrentLine"/> + <int Value="20" Name="FirstVisibleLine"/> + <int Value="43" Name="CurrentLine"/> + <wxArrayString Name="Bookmarks"/> + <IntVector Name="CollapsedFolds"/> + </TabInfo> + <TabInfo> + <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Line.h" Name="FileName"/> + <int Value="0" Name="FirstVisibleLine"/> + <int Value="3" Name="CurrentLine"/> + <wxArrayString Name="Bookmarks"/> + <IntVector Name="CollapsedFolds"/> + </TabInfo> + <TabInfo> + <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Line.cpp" Name="FileName"/> + <int Value="0" Name="FirstVisibleLine"/> + <int Value="0" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> diff --git a/.codelite/PSP.tags b/.codelite/PSP.tags Binary files differindex 5c684ce..4c413a6 100644 --- a/.codelite/PSP.tags +++ b/.codelite/PSP.tags diff --git a/.codelite/compilation.db b/.codelite/compilation.db Binary files differindex d5073c8..c72a5c7 100644 --- a/.codelite/compilation.db +++ b/.codelite/compilation.db diff --git a/.codelite/refactoring.db b/.codelite/refactoring.db Binary files differindex 01cf2f5..f09c782 100644 --- a/.codelite/refactoring.db +++ b/.codelite/refactoring.db diff --git a/Project/Bus.cpp b/Project/Bus.cpp index 923d947..a7ebf59 100644 --- a/Project/Bus.cpp +++ b/Project/Bus.cpp @@ -9,6 +9,7 @@ Bus::Bus(wxPoint2DDouble position) : Element() } Bus::~Bus() {} + void Bus::Draw(wxPoint2DDouble translation, double scale) const { // Draw selection (layer 1) @@ -74,11 +75,7 @@ bool Bus::Contains(wxPoint2DDouble position) const return m_rect.Contains(ptR); } -bool Bus::Intersects(wxRect2DDouble rect) const -{ - return rect.Intersects(m_rect); -} - +bool Bus::Intersects(wxRect2DDouble rect) const { return rect.Intersects(m_rect); } bool Bus::PickboxContains(wxPoint2DDouble position) { m_activePickboxID = ID_PB_NONE; diff --git a/Project/Bus.h b/Project/Bus.h index ccfc9d3..ac271b7 100644 --- a/Project/Bus.h +++ b/Project/Bus.h @@ -9,8 +9,9 @@ class Bus : public Element Bus(); Bus(wxPoint2DDouble position); ~Bus(); + virtual void Insert(Element* parent, wxPoint2DDouble position = wxPoint2DDouble(0.0, 0.0)) { SetPosition(position); }; virtual bool Contains(wxPoint2DDouble position) const; - virtual bool Intersects(wxRect2DDouble rect) const; + virtual bool Intersects(wxRect2DDouble rect) const; virtual void Draw(wxPoint2DDouble translation, double scale) const; virtual void Rotate(); virtual wxCursor GetBestPickboxCursor() const; diff --git a/Project/Element.h b/Project/Element.h index 3080703..a104ec5 100644 --- a/Project/Element.h +++ b/Project/Element.h @@ -41,6 +41,7 @@ class Element double GetAngle() const { return m_angle; } bool IsPickboxShown() const { return m_showPickbox; } // Pure-virtuals methods + virtual void Insert(Element* parent, wxPoint2DDouble position) = 0; virtual void Draw(wxPoint2DDouble translation, double scale) const = 0; virtual void Rotate() = 0; virtual bool Contains(wxPoint2DDouble position) const = 0; diff --git a/Project/Line.cpp b/Project/Line.cpp new file mode 100644 index 0000000..5879555 --- /dev/null +++ b/Project/Line.cpp @@ -0,0 +1,12 @@ +#include "Line.h" + +Line::Line() {} +Line::~Line() {} +bool Line::Contains(wxPoint2DDouble position) const {} +void Line::Draw(wxPoint2DDouble translation, double scale) const {} +wxCursor Line::GetBestPickboxCursor() const {} +void Line::Insert(Element* parent, wxPoint2DDouble position) {} +bool Line::Intersects(wxRect2DDouble rect) const {} +void Line::MovePickbox(wxPoint2DDouble position) {} +bool Line::PickboxContains(wxPoint2DDouble position) {} +void Line::Rotate() {} diff --git a/Project/Line.h b/Project/Line.h new file mode 100644 index 0000000..d98a1c5 --- /dev/null +++ b/Project/Line.h @@ -0,0 +1,21 @@ +#ifndef LINE_H +#define LINE_H + +#include "Element.h" + +class Line : public Element +{ + public: + Line(); + ~Line(); + virtual bool Contains(wxPoint2DDouble position) const; + virtual void Draw(wxPoint2DDouble translation, double scale) const; + virtual wxCursor GetBestPickboxCursor() const; + virtual void Insert(Element* parent, wxPoint2DDouble position); + virtual bool Intersects(wxRect2DDouble rect) const; + virtual void MovePickbox(wxPoint2DDouble position); + virtual bool PickboxContains(wxPoint2DDouble position); + virtual void Rotate(); +}; + +#endif // LINE_H diff --git a/Project/Project.mk b/Project/Project.mk index 0046731..c0d7cc5 100644 --- a/Project/Project.mk +++ b/Project/Project.mk @@ -13,8 +13,8 @@ CurrentFileName := CurrentFilePath := CurrentFileFullPath := User :=Thales -Date :=07/08/2016 -CodeLitePath :="C:/Program Files (x86)/CodeLite" +Date :=08/08/2016 +CodeLitePath :="C:/Program Files/CodeLite" LinkerName :=C:/TDM-GCC-64/bin/g++.exe SharedObjectLinkerName :=C:/TDM-GCC-64/bin/g++.exe -shared -fPIC ObjectSuffix :=.o @@ -61,12 +61,11 @@ AS := C:/TDM-GCC-64/bin/as.exe ## ## User defined environment variables ## -CodeLiteDir:=C:\Program Files (x86)\CodeLite -UNIT_TEST_PP_SRC_DIR:=C:\UnitTest++-1.3 +CodeLiteDir:=C:\Program Files\CodeLite WXWIN:=C:\wxWidgets-3.1.0 WXCFG:=gcc_dll\mswu -Objects0=$(IntermediateDirectory)/main.cpp$(ObjectSuffix) $(IntermediateDirectory)/win_resources.rc$(ObjectSuffix) $(IntermediateDirectory)/Element.cpp$(ObjectSuffix) $(IntermediateDirectory)/Bus.cpp$(ObjectSuffix) $(IntermediateDirectory)/ArtMetro.cpp$(ObjectSuffix) $(IntermediateDirectory)/MainFrame.cpp$(ObjectSuffix) $(IntermediateDirectory)/Workspace.cpp$(ObjectSuffix) $(IntermediateDirectory)/MainFrameBitmaps.cpp$(ObjectSuffix) $(IntermediateDirectory)/WorkspaceBitmaps.cpp$(ObjectSuffix) $(IntermediateDirectory)/MainFrameBase.cpp$(ObjectSuffix) \ - $(IntermediateDirectory)/WorkspaceBase.cpp$(ObjectSuffix) +Objects0=$(IntermediateDirectory)/main.cpp$(ObjectSuffix) $(IntermediateDirectory)/win_resources.rc$(ObjectSuffix) $(IntermediateDirectory)/Element.cpp$(ObjectSuffix) $(IntermediateDirectory)/Bus.cpp$(ObjectSuffix) $(IntermediateDirectory)/Line.cpp$(ObjectSuffix) $(IntermediateDirectory)/ArtMetro.cpp$(ObjectSuffix) $(IntermediateDirectory)/MainFrame.cpp$(ObjectSuffix) $(IntermediateDirectory)/Workspace.cpp$(ObjectSuffix) $(IntermediateDirectory)/MainFrameBitmaps.cpp$(ObjectSuffix) $(IntermediateDirectory)/WorkspaceBitmaps.cpp$(ObjectSuffix) \ + $(IntermediateDirectory)/MainFrameBase.cpp$(ObjectSuffix) $(IntermediateDirectory)/WorkspaceBase.cpp$(ObjectSuffix) @@ -123,6 +122,14 @@ $(IntermediateDirectory)/Bus.cpp$(DependSuffix): Bus.cpp $(IntermediateDirectory)/Bus.cpp$(PreprocessSuffix): Bus.cpp $(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/Bus.cpp$(PreprocessSuffix)Bus.cpp +$(IntermediateDirectory)/Line.cpp$(ObjectSuffix): Line.cpp $(IntermediateDirectory)/Line.cpp$(DependSuffix) + $(CXX) $(IncludePCH) $(SourceSwitch) "C:/Users/Thales/Documents/GitHub/PSP/Project/Line.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/Line.cpp$(ObjectSuffix) $(IncludePath) +$(IntermediateDirectory)/Line.cpp$(DependSuffix): Line.cpp + @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/Line.cpp$(ObjectSuffix) -MF$(IntermediateDirectory)/Line.cpp$(DependSuffix) -MM Line.cpp + +$(IntermediateDirectory)/Line.cpp$(PreprocessSuffix): Line.cpp + $(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/Line.cpp$(PreprocessSuffix)Line.cpp + $(IntermediateDirectory)/ArtMetro.cpp$(ObjectSuffix): ArtMetro.cpp $(IntermediateDirectory)/ArtMetro.cpp$(DependSuffix) $(CXX) $(IncludePCH) $(SourceSwitch) "C:/Users/Thales/Documents/GitHub/PSP/Project/ArtMetro.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/ArtMetro.cpp$(ObjectSuffix) $(IncludePath) $(IntermediateDirectory)/ArtMetro.cpp$(DependSuffix): ArtMetro.cpp diff --git a/Project/Project.project b/Project/Project.project index 10a9413..c6aebe1 100644 --- a/Project/Project.project +++ b/Project/Project.project @@ -11,6 +11,7 @@ <VirtualDirectory Name="model"> <File Name="Element.cpp"/> <File Name="Bus.cpp"/> + <File Name="Line.cpp"/> </VirtualDirectory> <VirtualDirectory Name="view"> <File Name="ArtMetro.cpp"/> @@ -25,6 +26,7 @@ <VirtualDirectory Name="model"> <File Name="Element.h"/> <File Name="Bus.h"/> + <File Name="Line.h"/> </VirtualDirectory> <VirtualDirectory Name="view"> <File Name="ArtMetro.h"/> diff --git a/Project/Project.txt b/Project/Project.txt index 1ae634c..62d31e1 100644 --- a/Project/Project.txt +++ b/Project/Project.txt @@ -1 +1 @@ -./Release/main.cpp.o ./Release/win_resources.rc.o ./Release/Element.cpp.o ./Release/Bus.cpp.o ./Release/ArtMetro.cpp.o ./Release/MainFrame.cpp.o ./Release/Workspace.cpp.o ./Release/MainFrameBitmaps.cpp.o ./Release/WorkspaceBitmaps.cpp.o ./Release/MainFrameBase.cpp.o ./Release/WorkspaceBase.cpp.o +./Release/main.cpp.o ./Release/win_resources.rc.o ./Release/Element.cpp.o ./Release/Bus.cpp.o ./Release/Line.cpp.o ./Release/ArtMetro.cpp.o ./Release/MainFrame.cpp.o ./Release/Workspace.cpp.o ./Release/MainFrameBitmaps.cpp.o ./Release/WorkspaceBitmaps.cpp.o ./Release/MainFrameBase.cpp.o ./Release/WorkspaceBase.cpp.o diff --git a/Project/Release/Bus.cpp.o b/Project/Release/Bus.cpp.o Binary files differindex 89adaf8..04f54ec 100644 --- a/Project/Release/Bus.cpp.o +++ b/Project/Release/Bus.cpp.o diff --git a/Project/Release/Element.cpp.o b/Project/Release/Element.cpp.o Binary files differindex 80f7c31..0c54126 100644 --- a/Project/Release/Element.cpp.o +++ b/Project/Release/Element.cpp.o diff --git a/Project/Release/Line.cpp.o b/Project/Release/Line.cpp.o Binary files differnew file mode 100644 index 0000000..763e73f --- /dev/null +++ b/Project/Release/Line.cpp.o diff --git a/Project/Release/Line.cpp.o.d b/Project/Release/Line.cpp.o.d new file mode 100644 index 0000000..b73a7bb --- /dev/null +++ b/Project/Release/Line.cpp.o.d @@ -0,0 +1,3 @@ +Release/Line.cpp.o: Line.cpp Line.h + +Line.h: diff --git a/Project/Release/PSP-UFU.exe b/Project/Release/PSP-UFU.exe Binary files differindex 894231a..837fa40 100644 --- a/Project/Release/PSP-UFU.exe +++ b/Project/Release/PSP-UFU.exe diff --git a/Project/Release/Workspace.cpp.o b/Project/Release/Workspace.cpp.o Binary files differindex 8a65ece..0ddf120 100644 --- a/Project/Release/Workspace.cpp.o +++ b/Project/Release/Workspace.cpp.o diff --git a/Project/Release/Workspace.cpp.o.d b/Project/Release/Workspace.cpp.o.d index 10db370..a3a5abb 100644 --- a/Project/Release/Workspace.cpp.o.d +++ b/Project/Release/Workspace.cpp.o.d @@ -184,7 +184,7 @@ Release/Workspace.cpp.o: Workspace.cpp Workspace.h \ C:/wxWidgets-3.1.0/include/wx/ioswrap.h \ C:/wxWidgets-3.1.0/include/wx/msw/textctrl.h \ C:/wxWidgets-3.1.0/include/wx/systhemectrl.h \ - C:/wxWidgets-3.1.0/include/wx/msw/treectrl.h Bus.h Element.h + C:/wxWidgets-3.1.0/include/wx/msw/treectrl.h Element.h Bus.h Line.h Workspace.h: @@ -564,6 +564,8 @@ C:/wxWidgets-3.1.0/include/wx/systhemectrl.h: C:/wxWidgets-3.1.0/include/wx/msw/treectrl.h: +Element.h: + Bus.h: -Element.h: +Line.h: diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp index 9425d4a..107d859 100644 --- a/Project/Workspace.cpp +++ b/Project/Workspace.cpp @@ -1,6 +1,8 @@ #include "Workspace.h" +#include "Element.h" #include "Bus.h" +#include "Line.h" // Camera Camera::Camera() @@ -71,7 +73,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 @@ -146,9 +148,11 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event) element->StartMove(m_camera->ScreenToWorld(event.GetPosition())); if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) { - element->SetSelected(); - element->ShowPickbox(); - foundElement = true; + if(!foundElement) { + element->SetSelected(); + element->ShowPickbox(); + foundElement = true; + } if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) { m_mode = MODE_MOVE_PICKBOX; @@ -221,112 +225,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->Insert(NULL, 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(); @@ -363,41 +367,52 @@ 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; + case 'L': // Insert a power line. + { + if(m_mode != MODE_INSERT) { + Line* newLine = new Line(); + m_elementList.push_back(newLine); + m_mode = MODE_INSERT; + m_statusBar->SetStatusText(_("Insert Line: Click on a bus, ESC to cancel.")); + Redraw(); + } + } + break; + default: + break; } } @@ -409,27 +424,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); diff --git a/Project/Workspace.h b/Project/Workspace.h index 2e47f3b..8667fa5 100644 --- a/Project/Workspace.h +++ b/Project/Workspace.h @@ -11,6 +11,8 @@ class Camera; class Element; +class Bus; +class Line; enum WorkspaceMode { |