summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThales1330 <thaleslima.ufu@gmail.com>2016-08-08 17:01:53 -0300
committerThales1330 <thaleslima.ufu@gmail.com>2016-08-08 17:01:53 -0300
commitb5324f48c855b0c82ccf6da7d5a008fe5cf1c17e (patch)
tree5879b694e565cf445b6f3c9a59782f72ab7543d5
parent139b076149594e6cf508aea269b061aa8b428d9c (diff)
downloadPSP.git-b5324f48c855b0c82ccf6da7d5a008fe5cf1c17e.tar.gz
PSP.git-b5324f48c855b0c82ccf6da7d5a008fe5cf1c17e.tar.xz
PSP.git-b5324f48c855b0c82ccf6da7d5a008fe5cf1c17e.zip
Start Power Line implementation
gogogogo
-rw-r--r--.codelite/.tern-port2
-rw-r--r--.codelite/.tern-project2
-rw-r--r--.codelite/PSP.session32
-rw-r--r--.codelite/PSP.tagsbin80414720 -> 80427008 bytes
-rw-r--r--.codelite/compilation.dbbin21504 -> 24576 bytes
-rw-r--r--.codelite/refactoring.dbbin411648 -> 413696 bytes
-rw-r--r--Project/Bus.cpp7
-rw-r--r--Project/Bus.h3
-rw-r--r--Project/Element.h1
-rw-r--r--Project/Line.cpp12
-rw-r--r--Project/Line.h21
-rw-r--r--Project/Project.mk19
-rw-r--r--Project/Project.project2
-rw-r--r--Project/Project.txt2
-rw-r--r--Project/Release/Bus.cpp.obin14533 -> 15231 bytes
-rw-r--r--Project/Release/Element.cpp.obin4924 -> 4934 bytes
-rw-r--r--Project/Release/Line.cpp.obin0 -> 3314 bytes
-rw-r--r--Project/Release/Line.cpp.o.d3
-rw-r--r--Project/Release/PSP-UFU.exebin3242477 -> 3244991 bytes
-rw-r--r--Project/Release/Workspace.cpp.obin88804 -> 91417 bytes
-rw-r--r--Project/Release/Workspace.cpp.o.d6
-rw-r--r--Project/Workspace.cpp347
-rw-r--r--Project/Workspace.h2
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
index 5c684ce..4c413a6 100644
--- a/.codelite/PSP.tags
+++ b/.codelite/PSP.tags
Binary files differ
diff --git a/.codelite/compilation.db b/.codelite/compilation.db
index d5073c8..c72a5c7 100644
--- a/.codelite/compilation.db
+++ b/.codelite/compilation.db
Binary files differ
diff --git a/.codelite/refactoring.db b/.codelite/refactoring.db
index 01cf2f5..f09c782 100644
--- a/.codelite/refactoring.db
+++ b/.codelite/refactoring.db
Binary files differ
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
index 89adaf8..04f54ec 100644
--- a/Project/Release/Bus.cpp.o
+++ b/Project/Release/Bus.cpp.o
Binary files differ
diff --git a/Project/Release/Element.cpp.o b/Project/Release/Element.cpp.o
index 80f7c31..0c54126 100644
--- a/Project/Release/Element.cpp.o
+++ b/Project/Release/Element.cpp.o
Binary files differ
diff --git a/Project/Release/Line.cpp.o b/Project/Release/Line.cpp.o
new file mode 100644
index 0000000..763e73f
--- /dev/null
+++ b/Project/Release/Line.cpp.o
Binary files differ
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
index 894231a..837fa40 100644
--- a/Project/Release/PSP-UFU.exe
+++ b/Project/Release/PSP-UFU.exe
Binary files differ
diff --git a/Project/Release/Workspace.cpp.o b/Project/Release/Workspace.cpp.o
index 8a65ece..0ddf120 100644
--- a/Project/Release/Workspace.cpp.o
+++ b/Project/Release/Workspace.cpp.o
Binary files differ
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
{