summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.codelite/.tern-port2
-rw-r--r--.codelite/PSP.session16
-rw-r--r--.codelite/PSP.tagsbin80412672 -> 80412672 bytes
-rw-r--r--.codelite/compilation.dbbin21504 -> 21504 bytes
-rw-r--r--.codelite/refactoring.dbbin393216 -> 401408 bytes
-rw-r--r--Project/Project.mk2
-rw-r--r--Project/Release/MainFrame.cpp.obin117620 -> 117620 bytes
-rw-r--r--Project/Release/PSP-UFU.exebin3241173 -> 3242405 bytes
-rw-r--r--Project/Release/Workspace.cpp.obin87410 -> 88864 bytes
-rw-r--r--Project/Workspace.cpp100
-rw-r--r--Project/Workspace.h7
11 files changed, 95 insertions, 32 deletions
diff --git a/.codelite/.tern-port b/.codelite/.tern-port
index 7b204a1..71d1d13 100644
--- a/.codelite/.tern-port
+++ b/.codelite/.tern-port
@@ -1 +1 @@
-49710 \ No newline at end of file
+64904 \ No newline at end of file
diff --git a/.codelite/PSP.session b/.codelite/PSP.session
index 872b5ce..d3a6335 100644
--- a/.codelite/PSP.session
+++ b/.codelite/PSP.session
@@ -5,22 +5,22 @@
<TabInfoArray Name="TabInfoArray">
<TabInfo>
<wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Workspace.cpp" Name="FileName"/>
- <int Value="123" Name="FirstVisibleLine"/>
- <int Value="148" Name="CurrentLine"/>
+ <int Value="62" Name="FirstVisibleLine"/>
+ <int Value="87" 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="48" Name="FirstVisibleLine"/>
- <int Value="48" Name="CurrentLine"/>
+ <int Value="36" Name="FirstVisibleLine"/>
+ <int Value="21" 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="57" Name="FirstVisibleLine"/>
- <int Value="73" Name="CurrentLine"/>
+ <int Value="12" Name="FirstVisibleLine"/>
+ <int Value="25" Name="CurrentLine"/>
<wxArrayString Name="Bookmarks"/>
<IntVector Name="CollapsedFolds"/>
</TabInfo>
@@ -33,8 +33,8 @@
</TabInfo>
<TabInfo>
<wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Element.cpp" Name="FileName"/>
- <int Value="56" Name="FirstVisibleLine"/>
- <int Value="75" Name="CurrentLine"/>
+ <int Value="8" Name="FirstVisibleLine"/>
+ <int Value="32" Name="CurrentLine"/>
<wxArrayString Name="Bookmarks"/>
<IntVector Name="CollapsedFolds"/>
</TabInfo>
diff --git a/.codelite/PSP.tags b/.codelite/PSP.tags
index 8ab6deb..d943253 100644
--- a/.codelite/PSP.tags
+++ b/.codelite/PSP.tags
Binary files differ
diff --git a/.codelite/compilation.db b/.codelite/compilation.db
index a363395..f97137e 100644
--- a/.codelite/compilation.db
+++ b/.codelite/compilation.db
Binary files differ
diff --git a/.codelite/refactoring.db b/.codelite/refactoring.db
index 573449d..9021470 100644
--- a/.codelite/refactoring.db
+++ b/.codelite/refactoring.db
Binary files differ
diff --git a/Project/Project.mk b/Project/Project.mk
index 4ab79c8..1ef9bb1 100644
--- a/Project/Project.mk
+++ b/Project/Project.mk
@@ -13,7 +13,7 @@ CurrentFileName :=
CurrentFilePath :=
CurrentFileFullPath :=
User :=Thales
-Date :=03/08/2016
+Date :=05/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
diff --git a/Project/Release/MainFrame.cpp.o b/Project/Release/MainFrame.cpp.o
index 569d5cb..8d43ca7 100644
--- a/Project/Release/MainFrame.cpp.o
+++ b/Project/Release/MainFrame.cpp.o
Binary files differ
diff --git a/Project/Release/PSP-UFU.exe b/Project/Release/PSP-UFU.exe
index e248987..7b86997 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 c952bbc..e9d4782 100644
--- a/Project/Release/Workspace.cpp.o
+++ b/Project/Release/Workspace.cpp.o
Binary files differ
diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp
index 08f66c7..db56eb7 100644
--- a/Project/Workspace.cpp
+++ b/Project/Workspace.cpp
@@ -48,6 +48,7 @@ Workspace::Workspace(wxWindow* parent, wxString name, wxStatusBar* statusBar) :
m_statusBar = statusBar;
m_glContext = new wxGLContext(m_glCanvas);
m_camera = new Camera();
+ m_selectionRect = wxRect2DDouble(0, 0, 0, 0);
const int widths[4] = {-3, -1, 100, 100};
m_statusBar->SetStatusWidths(4, widths);
@@ -74,6 +75,8 @@ void Workspace::OnPaint(wxPaintEvent& event)
glTranslated(m_camera->GetTranslation().m_x, m_camera->GetTranslation().m_y, 0.0); // Translation
// Draw
+
+ // Elements
std::vector<Element*>::iterator it = m_elementList.begin();
while(it != m_elementList.end()) {
Element* element = *it;
@@ -81,6 +84,22 @@ void Workspace::OnPaint(wxPaintEvent& event)
it++;
}
+ // Selection rectangle
+ glColor4d(0.0, 0.5, 1.0, 1.0);
+ glBegin(GL_LINE_LOOP);
+ glVertex2d(m_selectionRect.m_x, m_selectionRect.m_y);
+ glVertex2d(m_selectionRect.m_x, m_selectionRect.m_y + m_selectionRect.m_height);
+ glVertex2d(m_selectionRect.m_x + m_selectionRect.m_width, m_selectionRect.m_y + m_selectionRect.m_height);
+ glVertex2d(m_selectionRect.m_x + m_selectionRect.m_width, m_selectionRect.m_y);
+ glEnd();
+ glColor4d(0.0, 0.5, 1.0, 0.3);
+ glBegin(GL_QUADS);
+ glVertex2d(m_selectionRect.m_x, m_selectionRect.m_y);
+ glVertex2d(m_selectionRect.m_x, m_selectionRect.m_y + m_selectionRect.m_height);
+ glVertex2d(m_selectionRect.m_x + m_selectionRect.m_width, m_selectionRect.m_y + m_selectionRect.m_height);
+ glVertex2d(m_selectionRect.m_x + m_selectionRect.m_width, m_selectionRect.m_y);
+ glEnd();
+
glFlush(); // Sends all pending information directly to the GPU.
m_glCanvas->SwapBuffers();
event.Skip();
@@ -113,6 +132,7 @@ void Workspace::SetViewport()
void Workspace::OnLeftClickDown(wxMouseEvent& event)
{
+ bool foundElement = false;
if(m_mode == MODE_INSERT) {
m_mode = MODE_EDIT;
}
@@ -128,6 +148,7 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event)
if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
element->SetSelected();
element->ShowPickbox();
+ foundElement = true;
if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) {
m_mode = MODE_MOVE_PICKBOX;
@@ -137,25 +158,14 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event)
m_mode = MODE_MOVE_ELEMENT;
}
}
- /*else if(!event.ControlDown() && m_mode != MODE_MOVE_ELEMENT)
- {
- element->SetSelected(false);
- }*/
it++;
}
-
- // Deselect elements.
- if(!event.ControlDown() && m_mode != MODE_MOVE_ELEMENT) {
- it = m_elementList.begin();
- while(it != m_elementList.end()) {
- Element* element = *it;
- if(!element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
- element->SetSelected(false);
- }
- it++;
- }
- }
}
+ if(!foundElement) {
+ m_mode = MODE_SELECTION_RECT;
+ m_startSelRect = m_camera->ScreenToWorld(event.GetPosition());
+ }
+
Redraw();
UpdateStatusBar();
event.Skip();
@@ -163,24 +173,43 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event)
void Workspace::OnLeftClickUp(wxMouseEvent& event)
{
- m_mode = MODE_EDIT;
-
bool foundPickbox = false;
std::vector<Element*>::iterator it = m_elementList.begin();
while(it != m_elementList.end()) {
Element* element = *it;
- if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) {
- foundPickbox = true;
+ if(m_mode == MODE_SELECTION_RECT) {
+ if(m_selectionRect.Intersects(element->GetRect())) {
+ element->SetSelected();
+ }
+ else
+ {
+ element->SetSelected(false);
+ }
+ }
+ else
+ {
+ // Deselect
+ if(!event.ControlDown()) {
+ if(!element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
+ element->SetSelected(false);
+ }
+ }
+
+ if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) {
+ foundPickbox = true;
+ }
}
it++;
}
-
if(!foundPickbox) {
SetCursor(wxCURSOR_ARROW);
}
+ m_mode = MODE_EDIT;
+ m_selectionRect = wxRect2DDouble(0, 0, 0, 0);
+ Redraw();
UpdateStatusBar();
}
@@ -266,6 +295,34 @@ void Workspace::OnMouseMotion(wxMouseEvent& event)
}
}
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();
@@ -362,6 +419,7 @@ void Workspace::UpdateStatusBar()
case MODE_MOVE_ELEMENT:
case MODE_MOVE_PICKBOX:
+ case MODE_SELECTION_RECT:
case MODE_EDIT:
{
m_statusBar->SetStatusText(wxT(""));
diff --git a/Project/Workspace.h b/Project/Workspace.h
index a7eca1b..2e47f3b 100644
--- a/Project/Workspace.h
+++ b/Project/Workspace.h
@@ -18,7 +18,8 @@ enum WorkspaceMode
MODE_MOVE_ELEMENT,
MODE_MOVE_PICKBOX,
MODE_DRAG,
- MODE_INSERT
+ MODE_INSERT,
+ MODE_SELECTION_RECT
};
class Workspace : public WorkspaceBase
@@ -54,6 +55,10 @@ class Workspace : public WorkspaceBase
std::vector<Element*> m_elementList;
void UpdateStatusBar();
+
+ private:
+ wxRect2DDouble m_selectionRect;
+ wxPoint2DDouble m_startSelRect;
};
class Camera