summaryrefslogtreecommitdiffstats
path: root/Project/Workspace.cpp
diff options
context:
space:
mode:
authorThales1330 <thaleslima.ufu@gmail.com>2016-08-09 17:45:09 -0300
committerThales1330 <thaleslima.ufu@gmail.com>2016-08-09 17:45:09 -0300
commit0a85e05fa7aa0e2b950c2c3bcec5d45f25b1c0e2 (patch)
tree3ff5ec1cdeafafd58916e41151d437b44f49754f /Project/Workspace.cpp
parentb5324f48c855b0c82ccf6da7d5a008fe5cf1c17e (diff)
downloadPSP.git-0a85e05fa7aa0e2b950c2c3bcec5d45f25b1c0e2.tar.gz
PSP.git-0a85e05fa7aa0e2b950c2c3bcec5d45f25b1c0e2.tar.xz
PSP.git-0a85e05fa7aa0e2b950c2c3bcec5d45f25b1c0e2.zip
Line under implementation
Diffstat (limited to 'Project/Workspace.cpp')
-rw-r--r--Project/Workspace.cpp75
1 files changed, 42 insertions, 33 deletions
diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp
index 107d859..2bfeeac 100644
--- a/Project/Workspace.cpp
+++ b/Project/Workspace.cpp
@@ -58,12 +58,11 @@ Workspace::Workspace(wxWindow* parent, wxString name, wxStatusBar* statusBar) :
Workspace::~Workspace()
{
- std::vector<Element*>::iterator it = m_elementList.begin();
- while(it != m_elementList.end()) {
- if(!(*it)) delete *it;
- it++;
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
+ if(*it) delete *it;
}
- if(!m_camera) delete m_camera;
+ m_elementList.clear();
+ if(m_camera) delete m_camera;
}
void Workspace::OnPaint(wxPaintEvent& event)
@@ -79,11 +78,9 @@ void Workspace::OnPaint(wxPaintEvent& event)
// Draw
// Elements
- std::vector<Element*>::iterator it = m_elementList.begin();
- while(it != m_elementList.end()) {
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
Element* element = *it;
element->Draw(m_camera->GetTranslation(), m_camera->GetScale());
- it++;
}
// Selection rectangle
@@ -136,13 +133,31 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event)
{
bool foundElement = false;
if(m_mode == MODE_INSERT) {
- m_mode = MODE_EDIT;
+ // Too confuse...
+ Element* newElement = *(m_elementList.end() - 1);
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
+ Element* element = *it;
+ if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
+ if(typeid(*element) == typeid(Bus)) {
+ element->SetSelected();
+ foundElement = true;
+ if(newElement->AddParent(element, m_camera->ScreenToWorld(event.GetPosition()))) {
+ m_mode = MODE_EDIT;
+ }
+ }
+ }
+ }
+ if(!foundElement) {
+ if(typeid(*newElement) == typeid(Line)) {
+ newElement->AddPoint(m_camera->ScreenToWorld(event.GetPosition()));
+ }
+ }
+ foundElement = true;
}
else
{
bool clickPickbox = false;
- std::vector<Element*>::iterator it = m_elementList.begin();
- while(it != m_elementList.end()) {
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
Element* element = *it;
element->ResetPickboxes(); // Reset pickbox state.
element->StartMove(m_camera->ScreenToWorld(event.GetPosition()));
@@ -162,9 +177,9 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event)
m_mode = MODE_MOVE_ELEMENT;
}
}
- it++;
}
}
+
if(!foundElement) {
m_mode = MODE_SELECTION_RECT;
m_startSelRect = m_camera->ScreenToWorld(event.GetPosition());
@@ -178,8 +193,7 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event)
void Workspace::OnLeftClickUp(wxMouseEvent& event)
{
bool foundPickbox = false;
- std::vector<Element*>::iterator it = m_elementList.begin();
- while(it != m_elementList.end()) {
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
Element* element = *it;
if(m_mode == MODE_SELECTION_RECT) {
@@ -208,14 +222,14 @@ void Workspace::OnLeftClickUp(wxMouseEvent& event)
element->ShowPickbox(false);
}
}
-
- it++;
}
if(!foundPickbox) {
SetCursor(wxCURSOR_ARROW);
}
- m_mode = MODE_EDIT;
+ if(m_mode != MODE_INSERT) {
+ m_mode = MODE_EDIT;
+ }
m_selectionRect = wxRect2DDouble(0, 0, 0, 0);
Redraw();
UpdateStatusBar();
@@ -227,9 +241,10 @@ void Workspace::OnMouseMotion(wxMouseEvent& event)
{
case MODE_INSERT:
{
- std::vector<Element*>::iterator it = m_elementList.end() - 1;
- Element* element = *it;
- element->Insert(NULL, m_camera->ScreenToWorld(event.GetPosition()));
+ Element* newElement = *(m_elementList.end() - 1);
+ if(typeid(*newElement) == typeid(Bus)) {
+ newElement->SetPosition(m_camera->ScreenToWorld(event.GetPosition()));
+ }
Redraw();
}
break;
@@ -245,8 +260,7 @@ void Workspace::OnMouseMotion(wxMouseEvent& event)
{
bool foundPickbox = false;
bool redraw = false;
- std::vector<Element*>::iterator it = m_elementList.begin();
- while(it != m_elementList.end()) {
+ 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()))) {
@@ -270,7 +284,6 @@ void Workspace::OnMouseMotion(wxMouseEvent& event)
SetCursor(wxCURSOR_ARROW);
}
}
- it++;
}
if(redraw) Redraw();
}
@@ -278,28 +291,24 @@ void Workspace::OnMouseMotion(wxMouseEvent& event)
case MODE_MOVE_PICKBOX:
{
- std::vector<Element*>::iterator it = m_elementList.begin();
- while(it != m_elementList.end()) {
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
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()) {
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
Element* element = *it;
if(element->IsSelected()) {
element->Move(m_camera->ScreenToWorld(event.GetPosition()));
Redraw();
}
- it++;
}
}
break;
@@ -347,7 +356,9 @@ void Workspace::OnMiddleDown(wxMouseEvent& event)
}
void Workspace::OnMiddleUp(wxMouseEvent& event)
{
- m_mode = MODE_EDIT;
+ if(m_mode != MODE_INSERT) {
+ m_mode = MODE_EDIT;
+ }
UpdateStatusBar();
}
void Workspace::OnScroll(wxMouseEvent& event)
@@ -378,13 +389,11 @@ void Workspace::OnKeyDown(wxKeyEvent& event)
break;
case 'R': // Rotate the selected elements.
{
- std::vector<Element*>::iterator it = m_elementList.begin();
- while(it != m_elementList.end()) {
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
Element* element = *it;
if(element->IsSelected()) {
element->Rotate();
}
- it++;
}
Redraw();
}