diff options
Diffstat (limited to 'Project/Workspace.cpp')
-rw-r--r-- | Project/Workspace.cpp | 64 |
1 files changed, 43 insertions, 21 deletions
diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp index 1a91bb0..7ada5e5 100644 --- a/Project/Workspace.cpp +++ b/Project/Workspace.cpp @@ -156,7 +156,7 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event) bool foundElement = false; if(m_mode == MODE_INSERT_TEXT) { m_mode = MODE_EDIT; - } else if(m_mode == MODE_INSERT || m_mode == MODE_DRAG_INSERT) { + } else if(m_mode == MODE_INSERT || m_mode == MODE_DRAG_INSERT || m_mode == MODE_DRAG_INSERT_TEXT) { // Get the last element inserted on the list. Element* newElement = *(m_elementList.end() - 1); for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) { @@ -300,6 +300,14 @@ void Workspace::OnLeftDoubleClick(wxMouseEvent& event) element->SetOnline(element->IsOnline() ? false : true); } } + + //Text element + for(auto it = m_textList.begin(); it != m_textList.end(); ++it) { + Text* text = *it; + if(text->Contains(m_camera->ScreenToWorld(event.GetPosition()))) { + text->ShowForm(this, m_elementList); + } + } } void Workspace::OnRightClickDown(wxMouseEvent& event) @@ -459,7 +467,8 @@ void Workspace::OnMouseMotion(wxMouseEvent& event) } break; case MODE_DRAG: - case MODE_DRAG_INSERT: { + case MODE_DRAG_INSERT: + case MODE_DRAG_INSERT_TEXT: { m_camera->SetTranslation(event.GetPosition()); redraw = true; } break; @@ -572,24 +581,32 @@ void Workspace::OnMouseMotion(wxMouseEvent& event) void Workspace::OnMiddleDown(wxMouseEvent& event) { // Set to drag mode. - if(m_mode != MODE_INSERT && m_mode != MODE_DRAG_INSERT) { + if(m_mode != MODE_INSERT && m_mode != MODE_INSERT_TEXT && m_mode != MODE_DRAG_INSERT && + m_mode != MODE_DRAG_INSERT_TEXT) { m_mode = MODE_DRAG; + } else if(m_mode == MODE_INSERT_TEXT) { + m_mode = MODE_DRAG_INSERT_TEXT; } else { m_mode = MODE_DRAG_INSERT; } m_camera->StartTranslation(m_camera->ScreenToWorld(event.GetPosition())); UpdateStatusBar(); } + void Workspace::OnMiddleUp(wxMouseEvent& event) { - if(m_mode != MODE_INSERT && m_mode != MODE_DRAG_INSERT) { + if(m_mode != MODE_INSERT && m_mode != MODE_INSERT_TEXT && m_mode != MODE_DRAG_INSERT && + m_mode != MODE_DRAG_INSERT_TEXT) { // Set to edit mode back. m_mode = MODE_EDIT; + } else if(m_mode == MODE_DRAG_INSERT_TEXT) { + m_mode = MODE_INSERT_TEXT; } else if(m_mode == MODE_DRAG_INSERT) { m_mode = MODE_INSERT; } UpdateStatusBar(); } + void Workspace::OnScroll(wxMouseEvent& event) { if(event.GetWheelRotation() > 0) @@ -603,6 +620,9 @@ void Workspace::OnScroll(wxMouseEvent& event) void Workspace::OnKeyDown(wxKeyEvent& event) { + bool insertingElement = false; + if(m_mode == MODE_INSERT || m_mode == MODE_INSERT_TEXT) insertingElement = true; + char key = event.GetUnicodeKey(); if(key != WXK_NONE) { switch(key) { @@ -612,8 +632,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) m_elementList.pop_back(); // Removes the last element being inserted. m_mode = MODE_EDIT; Redraw(); - } - else if(m_mode == MODE_INSERT_TEXT) { + } else if(m_mode == MODE_INSERT_TEXT) { m_textList.pop_back(); m_mode = MODE_EDIT; Redraw(); @@ -624,11 +643,13 @@ void Workspace::OnKeyDown(wxKeyEvent& event) DeleteSelectedElements(); } break; case 'A': { - Text* newBus = new Text(m_camera->ScreenToWorld(event.GetPosition())); - m_textList.push_back(newBus); - m_mode = MODE_INSERT_TEXT; - m_statusBar->SetStatusText(_("Insert Text: Click to insert, ESC to cancel.")); - Redraw(); + if(!insertingElement) { + Text* newBus = new Text(m_camera->ScreenToWorld(event.GetPosition())); + m_textList.push_back(newBus); + m_mode = MODE_INSERT_TEXT; + m_statusBar->SetStatusText(_("Insert Text: Click to insert, ESC to cancel.")); + Redraw(); + } } case 'F': { if(event.GetModifiers() == wxMOD_SHIFT) { @@ -641,7 +662,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) } break; case 'B': // Insert a bus. { - if(m_mode != MODE_INSERT) { + if(!insertingElement) { Bus* newBus = new Bus(m_camera->ScreenToWorld(event.GetPosition()), wxString::Format(_("Bus %d"), GetElementNumber(ID_BUS))); IncrementElementNumber(ID_BUS); @@ -652,7 +673,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) } } break; case 'L': { - if(m_mode != MODE_INSERT) { + if(!insertingElement) { if(event.GetModifiers() == wxMOD_SHIFT) { // Insert a load. Load* newLoad = new Load(wxString::Format(_("Load %d"), GetElementNumber(ID_LOAD))); IncrementElementNumber(ID_LOAD); @@ -671,7 +692,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) } break; case 'T': // Insert a transformer. { - if(m_mode != MODE_INSERT) { + if(!insertingElement) { Transformer* newTransformer = new Transformer(wxString::Format(_("Transformer %d"), GetElementNumber(ID_TRANSFORMER))); IncrementElementNumber(ID_TRANSFORMER); @@ -683,7 +704,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) } break; case 'G': // Insert a generator. { - if(m_mode != MODE_INSERT) { + if(!insertingElement) { SyncGenerator* newGenerator = new SyncGenerator(wxString::Format(_("Generator %d"), GetElementNumber(ID_SYNCGENERATOR))); IncrementElementNumber(ID_SYNCGENERATOR); @@ -694,7 +715,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) } } break; case 'I': { - if(m_mode != MODE_INSERT) { + if(!insertingElement) { if(event.GetModifiers() == wxMOD_SHIFT) { // Insert an inductor. Inductor* newInductor = new Inductor(wxString::Format(_("Inductor %d"), GetElementNumber(ID_INDUCTOR))); @@ -716,7 +737,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) } break; case 'K': // Insert a synchronous condenser. { - if(m_mode != MODE_INSERT) { + if(!insertingElement) { SyncMotor* newSyncCondenser = new SyncMotor(wxString::Format(_("Synchronous condenser %d"), GetElementNumber(ID_SYNCMOTOR))); IncrementElementNumber(ID_SYNCMOTOR); @@ -727,7 +748,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) } } break; case 'C': { - if(m_mode != MODE_INSERT) { + if(!insertingElement) { if(event.GetModifiers() == wxMOD_SHIFT) { // Insert a capacitor. Capacitor* newCapacitor = new Capacitor(wxString::Format(_("Capacitor %d"), GetElementNumber(ID_CAPACITOR))); @@ -757,7 +778,8 @@ void Workspace::UpdateStatusBar() case MODE_INSERT: case MODE_INSERT_TEXT: - case MODE_DRAG_INSERT: { + case MODE_DRAG_INSERT: + case MODE_DRAG_INSERT_TEXT: { m_statusBar->SetStatusText(_("MODE: INSERT"), 1); } break; @@ -872,8 +894,8 @@ void Workspace::RotateSelectedElements(bool clockwise) element->StartMove(m_camera->GetMousePosition()); } } - - //Rotate text element + + // Rotate text element for(auto it = m_textList.begin(); it != m_textList.end(); it++) { Text* text = *it; if(text->IsSelected()) { |