summaryrefslogtreecommitdiffstats
path: root/Project/Workspace.cpp
diff options
context:
space:
mode:
authorThales Lima Oliveira <thaleslima.ufu@gmail.com>2016-08-03 00:15:54 -0300
committerThales Lima Oliveira <thaleslima.ufu@gmail.com>2016-08-03 00:15:54 -0300
commit0b720e578e0e91262e04651ce81cd2e7f6828967 (patch)
tree7e011b00acb151fd86f1e400ab836e8ce854dad1 /Project/Workspace.cpp
parent78aac544e1e77f5405260797cee4b94d7a0dfe32 (diff)
downloadPSP.git-0b720e578e0e91262e04651ce81cd2e7f6828967.tar.gz
PSP.git-0b720e578e0e91262e04651ce81cd2e7f6828967.tar.xz
PSP.git-0b720e578e0e91262e04651ce81cd2e7f6828967.zip
More controllers add to bus
Next step: move elements
Diffstat (limited to 'Project/Workspace.cpp')
-rw-r--r--Project/Workspace.cpp38
1 files changed, 34 insertions, 4 deletions
diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp
index e1e5fb2..bae40e6 100644
--- a/Project/Workspace.cpp
+++ b/Project/Workspace.cpp
@@ -124,7 +124,7 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event)
Element* element = *it;
if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
element->SetSelected();
- element->ShowPickbox();
+ element->ShowPickbox();
}
else if(!event.ControlDown())
{
@@ -138,7 +138,13 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event)
event.Skip();
}
-void Workspace::OnLeftClickUp(wxMouseEvent& event) {}
+void Workspace::OnLeftClickUp(wxMouseEvent& event)
+{
+ if(m_mode == MODE_EDIT_ELEMENT) {
+ m_mode = MODE_EDIT;
+ }
+}
+
void Workspace::OnKeyDown(wxKeyEvent& event)
{
char key = event.GetUnicodeKey();
@@ -207,18 +213,41 @@ void Workspace::OnMouseMotion(wxMouseEvent& event)
}
break;
+ case MODE_EDIT_ELEMENT:
case MODE_EDIT:
{
+ bool foundPickbox = 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()))) {
+ // MODE_EDIT_ELEMENT is a flag which indicates that a pickbox is being dragged. He
+ // will work like a shortcut to method Element::MovePickbox until a mouse button is
+ // released.
+ if(element->Contains(m_camera->ScreenToWorld(event.GetPosition())) ||
+ m_mode == MODE_EDIT_ELEMENT)
+ {
element->ShowPickbox();
+ if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition())) ||
+ m_mode == MODE_EDIT_ELEMENT)
+ {
+ foundPickbox = true;
+ SetCursor(element->GetBestPickboxCursor());
+ if(event.Dragging()) {
+ m_mode = MODE_EDIT_ELEMENT;
+ element->MovePickbox(
+ m_camera->ScreenToWorld(event.GetPosition()));
+ }
+ }
+ else if(!foundPickbox)
+ {
+ SetCursor(wxCURSOR_ARROW);
+ }
}
- else
+ else if(!foundPickbox)
{
element->ShowPickbox(false);
+ SetCursor(wxCURSOR_ARROW);
}
}
it++;
@@ -275,6 +304,7 @@ void Workspace::UpdateStatusBar()
}
break;
+ case MODE_EDIT_ELEMENT:
case MODE_EDIT:
{
m_statusBar->SetStatusText(wxT(""));