summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Project/Camera.cpp38
-rw-r--r--Project/Camera.h35
-rw-r--r--Project/ControlEditor.cpp281
-rw-r--r--Project/ControlEditor.h59
-rw-r--r--Project/ControlEditor.wxcp51
-rw-r--r--Project/ControlEditorBase.cpp17
-rw-r--r--Project/ControlEditorBase.h7
-rw-r--r--Project/MainFrame.cpp6
-rw-r--r--Project/Project.mk32
-rw-r--r--Project/Project.project4
-rw-r--r--Project/Project.txt2
-rw-r--r--Project/TransferFunction.cpp10
-rw-r--r--Project/TransferFunction.h14
-rw-r--r--Project/Workspace.cpp40
-rw-r--r--Project/Workspace.h75
15 files changed, 473 insertions, 198 deletions
diff --git a/Project/Camera.cpp b/Project/Camera.cpp
new file mode 100644
index 0000000..248a835
--- /dev/null
+++ b/Project/Camera.cpp
@@ -0,0 +1,38 @@
+#include "Camera.h"
+
+Camera::Camera()
+{
+ m_translation = wxPoint2DDouble(0, 0);
+ m_scale = 1.0;
+}
+
+Camera::~Camera() {}
+wxPoint2DDouble Camera::ScreenToWorld(wxPoint2DDouble screenCoords) const
+{
+ return wxPoint2DDouble(
+ screenCoords.m_x / m_scale - m_translation.m_x, screenCoords.m_y / m_scale - m_translation.m_y);
+}
+
+void Camera::SetTranslation(wxPoint2DDouble screenPoint)
+{
+ m_translation = screenPoint / m_scale - m_translationStartPt;
+}
+
+void Camera::SetScale(wxPoint2DDouble screenPoint, double delta)
+{
+ m_translation -= screenPoint * (1.0 - m_scale) / m_scale;
+
+ m_scale += delta;
+
+ // Limits: 5% - 300%
+ if(m_scale < m_zoomMin) m_scale = m_zoomMin;
+ if(m_scale > m_zoomMax) m_scale = m_zoomMax;
+
+ m_translation += screenPoint * (1.0 - m_scale) / m_scale;
+}
+
+wxPoint2DDouble Camera::GetMousePosition(bool worldCoords) const
+{
+ if(worldCoords) return ScreenToWorld(m_mousePosition);
+ return m_mousePosition;
+} \ No newline at end of file
diff --git a/Project/Camera.h b/Project/Camera.h
new file mode 100644
index 0000000..141047f
--- /dev/null
+++ b/Project/Camera.h
@@ -0,0 +1,35 @@
+#ifndef CAMERA_H
+#define CAMERA_H
+
+#include <wx/geometry.h>
+
+class Camera
+{
+public:
+ Camera();
+ ~Camera();
+
+ void SetScale(wxPoint2DDouble screenPoint, double delta);
+ void SetScale(double scale) { m_scale = scale; }
+ void SetTranslation(wxPoint2DDouble screenPoint);
+ void StartTranslation(wxPoint2DDouble startPoint) { this->m_translationStartPt = startPoint; }
+ void UpdateMousePosition(wxPoint2DDouble mousePosition) { this->m_mousePosition = mousePosition; }
+ double GetScale() const { return m_scale; }
+ wxPoint2DDouble GetTranslation() const { return m_translation; }
+ wxPoint2DDouble GetMousePosition(bool worldCoords = true) const;
+ wxPoint2DDouble ScreenToWorld(wxPoint2DDouble screenCoords) const;
+ double GetZoomMin() const { return m_zoomMin; }
+ double GetZoomMax() const { return m_zoomMax; }
+
+protected:
+ wxPoint2DDouble m_translation;
+ wxPoint2DDouble m_translationStartPt;
+ double m_scale;
+
+ wxPoint2DDouble m_mousePosition;
+
+ double m_zoomMin = 0.01;
+ double m_zoomMax = 3.0;
+};
+
+#endif // CAMERA_H
diff --git a/Project/ControlEditor.cpp b/Project/ControlEditor.cpp
index 1d1587c..f75478c 100644
--- a/Project/ControlEditor.cpp
+++ b/Project/ControlEditor.cpp
@@ -1,6 +1,107 @@
#include "ControlEditor.h"
-ControlEditor::ControlEditor(wxWindow* parent) : ControlEditorBase(parent) { BuildControlElementPanel(); }
+#include "Camera.h"
+#include "ControlElement.h"
+#include "TransferFunction.h"
+
+ControlElementButton::ControlElementButton(wxWindow* parent, wxString label, wxImage image, wxWindowID id)
+ : wxWindow(parent, id)
+{
+ SetBackgroundColour(*wxWHITE);
+ // m_font = wxFont(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
+ m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+ m_label = label;
+ m_image = image;
+ m_imageSize = wxSize(image.GetWidth(), image.GetHeight());
+
+ // Calculate label size.
+ wxScreenDC dc;
+ dc.SetFont(m_font);
+ wxSize textSize = dc.GetTextExtent(label);
+
+ int buttonWidth = 0;
+ if(textSize.GetWidth() > m_imageSize.GetWidth()) {
+ buttonWidth = textSize.GetWidth();
+ m_imagePosition = wxPoint((buttonWidth - m_imageSize.GetWidth()) / 2 + m_borderSize, m_borderSize);
+ m_labelPosition = wxPoint(m_borderSize, m_imageSize.GetHeight() + m_borderSize);
+ } else {
+ buttonWidth = m_imageSize.GetWidth();
+ m_imagePosition = wxPoint(m_borderSize, m_borderSize);
+ m_labelPosition =
+ wxPoint((buttonWidth - textSize.GetWidth()) / 2 + m_borderSize, m_imageSize.GetHeight() + m_borderSize);
+ }
+ m_buttonSize =
+ wxSize(buttonWidth + 2 * m_borderSize, textSize.GetHeight() + m_imageSize.GetHeight() + 2 * m_borderSize);
+ SetMinSize(m_buttonSize + wxSize(m_borderSize, m_borderSize));
+
+ // Events.
+ Bind(wxEVT_PAINT, &ControlElementButton::OnPaint, this);
+ Bind(wxEVT_ENTER_WINDOW, &ControlElementButton::OnMouseEnter, this);
+ Bind(wxEVT_LEAVE_WINDOW, &ControlElementButton::OnMouseLeave, this);
+ Bind(wxEVT_LEFT_DOWN, &ControlElementButton::OnLeftClickDown, this);
+ Bind(wxEVT_LEFT_UP, &ControlElementButton::OnLeftClickUp, this);
+}
+
+ControlElementButton::~ControlElementButton() {}
+void ControlElementButton::OnPaint(wxPaintEvent& event)
+{
+ wxPaintDC dc(this);
+ wxGraphicsContext* gc = wxGraphicsContext::Create(dc);
+ if(gc) {
+ if(m_mouseAbove) {
+ if(m_selected) {
+ gc->SetPen(wxPen(wxColour(0, 125, 255, 255), m_borderSize - 1));
+ gc->SetBrush(wxBrush(wxColour(0, 125, 255, 100)));
+ } else {
+ gc->SetPen(*wxTRANSPARENT_PEN);
+ gc->SetBrush(wxBrush(wxColour(0, 125, 255, 70)));
+ }
+ gc->DrawRectangle(m_borderSize / 2, m_borderSize / 2, m_buttonSize.GetWidth(), m_buttonSize.GetHeight());
+ }
+ gc->DrawBitmap(gc->CreateBitmapFromImage(m_image), m_imagePosition.x, m_imagePosition.y, m_imageSize.GetWidth(),
+ m_imageSize.GetHeight());
+ gc->SetFont(m_font, *wxBLACK);
+ gc->DrawText(m_label, m_labelPosition.x, m_labelPosition.y);
+ delete gc;
+ }
+}
+
+void ControlElementButton::OnMouseEnter(wxMouseEvent& event)
+{
+ m_mouseAbove = true;
+ Refresh();
+ event.Skip();
+}
+
+void ControlElementButton::OnMouseLeave(wxMouseEvent& event)
+{
+ m_mouseAbove = false;
+ Refresh();
+ event.Skip();
+}
+
+void ControlElementButton::OnLeftClickDown(wxMouseEvent& event)
+{
+ m_selected = true;
+ Refresh();
+ event.Skip();
+}
+
+void ControlElementButton::OnLeftClickUp(wxMouseEvent& event)
+{
+ m_selected = false;
+ Refresh();
+ event.Skip();
+}
+
+ControlEditor::ControlEditor(wxWindow* parent)
+ : ControlEditorBase(parent)
+{
+ BuildControlElementPanel();
+ m_glContext = new wxGLContext(m_glCanvas);
+ m_camera = new Camera();
+ m_selectionRect = wxRect2DDouble(0, 0, 0, 0);
+}
ControlEditor::~ControlEditor()
{
// m_tfButton->Disconnect(wxEVT_LEFT_DOWN, wxMouseEventHandler(ControlEditor::LeftClickDown), m_tfButton, this);
@@ -12,8 +113,8 @@ void ControlEditor::BuildControlElementPanel()
wxWrapSizer* wrapSizer = new wxWrapSizer();
m_panelControlElements->SetSizer(wrapSizer);
- ControlElementButton* ioButton = new ControlElementButton(m_panelControlElements, _("In/Out"),
- wxImage("..\\data\\images\\control\\io.png"), ID_IO);
+ ControlElementButton* ioButton = new ControlElementButton(
+ m_panelControlElements, _("In/Out"), wxImage("..\\data\\images\\control\\io.png"), ID_IO);
wrapSizer->Add(ioButton, 0, wxALL, 5);
ioButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this);
@@ -22,8 +123,8 @@ void ControlEditor::BuildControlElementPanel()
wrapSizer->Add(tfButton, 0, wxALL, 5);
tfButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this);
- ControlElementButton* sumButton = new ControlElementButton(m_panelControlElements, _("Sum"),
- wxImage("..\\data\\images\\control\\sum.png"), ID_SUM);
+ ControlElementButton* sumButton = new ControlElementButton(
+ m_panelControlElements, _("Sum"), wxImage("..\\data\\images\\control\\sum.png"), ID_SUM);
wrapSizer->Add(sumButton, 0, wxALL, 5);
sumButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this);
@@ -47,8 +148,8 @@ void ControlEditor::BuildControlElementPanel()
wrapSizer->Add(multButton, 0, wxALL, 5);
multButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this);
- ControlElementButton* satButton = new ControlElementButton(m_panelControlElements, _("Saturation"),
- wxImage("..\\data\\images\\control\\sat.png"), ID_SAT);
+ ControlElementButton* satButton = new ControlElementButton(
+ m_panelControlElements, _("Saturation"), wxImage("..\\data\\images\\control\\sat.png"), ID_SAT);
wrapSizer->Add(satButton, 0, wxALL, 5);
satButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this);
@@ -64,6 +165,31 @@ void ControlEditor::LeftClickDown(wxMouseEvent& event)
event.Skip();
}
+void ControlEditor::SetViewport()
+{
+ glClearColor(1.0, 1.0, 1.0, 1.0); // White background.
+ glClear(GL_COLOR_BUFFER_BIT);
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_TEXTURE_2D);
+ glEnable(GL_COLOR_MATERIAL);
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable(GL_LINE_SMOOTH);
+
+ double width = m_glCanvas->GetSize().x - 1;
+ double height = m_glCanvas->GetSize().y - 1;
+
+ // Viewport fit the screen.
+ glViewport(0, 0, width, height);
+
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluOrtho2D(0.0, width, height, 0.0);
+
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+}
+
void ControlEditor::AddElement(ControlElementButtonID id)
{
switch(id) {
@@ -97,92 +223,93 @@ void ControlEditor::AddElement(ControlElementButtonID id)
}
}
-ControlElementButton::ControlElementButton(wxWindow* parent, wxString label, wxImage image, wxWindowID id)
- : wxWindow(parent, id)
+void ControlEditor::OnPaint(wxPaintEvent& event)
{
- SetBackgroundColour(*wxWHITE);
- //m_font = wxFont(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
- m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
- m_label = label;
- m_image = image;
- m_imageSize = wxSize(image.GetWidth(), image.GetHeight());
+ wxPaintDC dc(m_glCanvas);
+ m_glContext->SetCurrent(*m_glCanvas);
+ SetViewport();
- // Calculate label size.
- wxScreenDC dc;
- dc.SetFont(m_font);
- wxSize textSize = dc.GetTextExtent(label);
+ // Set GLCanvas scale and translation.
+ glScaled(m_camera->GetScale(), m_camera->GetScale(), 0.0); // Scale
+ glTranslated(m_camera->GetTranslation().m_x, m_camera->GetTranslation().m_y, 0.0); // Translation
- int buttonWidth = 0;
- if(textSize.GetWidth() > m_imageSize.GetWidth()) {
- buttonWidth = textSize.GetWidth();
- m_imagePosition = wxPoint((buttonWidth - m_imageSize.GetWidth()) / 2 + m_borderSize, m_borderSize);
- m_labelPosition = wxPoint(m_borderSize, m_imageSize.GetHeight() + m_borderSize);
- } else {
- buttonWidth = m_imageSize.GetWidth();
- m_imagePosition = wxPoint(m_borderSize, m_borderSize);
- m_labelPosition =
- wxPoint((buttonWidth - textSize.GetWidth()) / 2 + m_borderSize, m_imageSize.GetHeight() + m_borderSize);
- }
- m_buttonSize =
- wxSize(buttonWidth + 2 * m_borderSize, textSize.GetHeight() + m_imageSize.GetHeight() + 2 * m_borderSize);
- SetMinSize(m_buttonSize + wxSize(m_borderSize, m_borderSize));
+ // Selection rectangle
+ glLineWidth(1.0);
+ 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();
- // Events.
- Bind(wxEVT_PAINT, &ControlElementButton::OnPaint, this);
- Bind(wxEVT_ENTER_WINDOW, &ControlElementButton::OnMouseEnter, this);
- Bind(wxEVT_LEAVE_WINDOW, &ControlElementButton::OnMouseLeave, this);
- Bind(wxEVT_LEFT_DOWN, &ControlElementButton::OnLeftClickDown, this);
- Bind(wxEVT_LEFT_UP, &ControlElementButton::OnLeftClickUp, this);
+ glFlush(); // Sends all pending information directly to the GPU.
+ m_glCanvas->SwapBuffers();
+ event.Skip();
}
+void ControlEditor::OnDoubleClick(wxMouseEvent& event) {}
-ControlElementButton::~ControlElementButton() {}
-void ControlElementButton::OnPaint(wxPaintEvent& event)
+void ControlEditor::OnLeftClickDown(wxMouseEvent& event)
{
- wxPaintDC dc(this);
- wxGraphicsContext* gc = wxGraphicsContext::Create(dc);
- if(gc) {
- if(m_mouseAbove) {
- if(m_selected) {
- gc->SetPen(wxPen(wxColour(0, 125, 255, 255), m_borderSize - 1));
- gc->SetBrush(wxBrush(wxColour(0, 125, 255, 100)));
- } else {
- gc->SetPen(*wxTRANSPARENT_PEN);
- gc->SetBrush(wxBrush(wxColour(0, 125, 255, 70)));
- }
- gc->DrawRectangle(m_borderSize / 2, m_borderSize / 2, m_buttonSize.GetWidth(), m_buttonSize.GetHeight());
- }
- gc->DrawBitmap(gc->CreateBitmapFromImage(m_image), m_imagePosition.x, m_imagePosition.y, m_imageSize.GetWidth(),
- m_imageSize.GetHeight());
- gc->SetFont(m_font, *wxBLACK);
- gc->DrawText(m_label, m_labelPosition.x, m_labelPosition.y);
- delete gc;
- }
-}
+ wxPoint2DDouble clickPoint = event.GetPosition();
-void ControlElementButton::OnMouseEnter(wxMouseEvent& event)
-{
- m_mouseAbove = true;
- Refresh();
- event.Skip();
-}
+ m_mode = MODE_SELECTION_RECT;
+ m_startSelRect = m_camera->ScreenToWorld(clickPoint);
-void ControlElementButton::OnMouseLeave(wxMouseEvent& event)
-{
- m_mouseAbove = false;
- Refresh();
+ Redraw();
event.Skip();
}
-void ControlElementButton::OnLeftClickDown(wxMouseEvent& event)
+void ControlEditor::OnLeftClickUp(wxMouseEvent& event)
{
- m_selected = true;
- Refresh();
+ if(m_mode != MODE_INSERT) {
+ m_mode = MODE_EDIT;
+ }
+ m_selectionRect = wxRect2DDouble(0, 0, 0, 0);
+ Redraw();
event.Skip();
}
-void ControlElementButton::OnLeftClickUp(wxMouseEvent& event)
+void ControlEditor::OnMiddleDown(wxMouseEvent& event) {}
+void ControlEditor::OnMiddleUp(wxMouseEvent& event) {}
+
+void ControlEditor::OnMouseMotion(wxMouseEvent& event)
{
- m_selected = false;
- Refresh();
+ wxPoint2DDouble clickPoint = event.GetPosition();
+ bool redraw = false;
+
+ switch(m_mode) {
+ case MODE_SELECTION_RECT: {
+ wxPoint2DDouble currentPos = m_camera->ScreenToWorld(clickPoint);
+ 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 = true;
+ } break;
+ default:
+ break;
+ }
+ if(redraw) Redraw();
event.Skip();
}
diff --git a/Project/ControlEditor.h b/Project/ControlEditor.h
index 723831a..e121690 100644
--- a/Project/ControlEditor.h
+++ b/Project/ControlEditor.h
@@ -6,19 +6,14 @@
#include <wx/dcclient.h>
#include <wx/dcscreen.h>
#include <wx/graphics.h>
+#include <GL/gl.h>
+#include <GL/glu.h>
-enum ControlElementButtonID
-{
- ID_IO = 0,
- ID_TF,
- ID_SUM,
- ID_CONST,
- ID_LIMITER,
- ID_GAIN,
- ID_MULT,
- ID_SAT,
- ID_RATELIM
-};
+class Camera;
+class ControlElement;
+class TransferFunction;
+
+enum ControlElementButtonID { ID_IO = 0, ID_TF, ID_SUM, ID_CONST, ID_LIMITER, ID_GAIN, ID_MULT, ID_SAT, ID_RATELIM };
class ControlElementButton : public wxWindow
{
@@ -36,30 +31,58 @@ protected:
wxString m_label;
wxFont m_font;
wxPoint m_labelPosition;
-
+
wxImage m_image;
wxSize m_imageSize;
wxPoint m_imagePosition;
-
+
int m_borderSize = 2;
bool m_mouseAbove = false;
bool m_selected = false;
-
+
wxSize m_buttonSize;
};
class ControlEditor : public ControlEditorBase
{
public:
+ enum ControlEditorMode {
+ MODE_EDIT = 0,
+ MODE_MOVE_ELEMENT,
+ MODE_DRAG,
+ MODE_DRAG_INSERT,
+ MODE_INSERT,
+ MODE_SELECTION_RECT,
+ MODE_PASTE,
+ MODE_DRAG_PASTE
+ };
ControlEditor(wxWindow* parent);
virtual ~ControlEditor();
-
+
virtual void AddElement(ControlElementButtonID id);
+ virtual void Redraw() { m_glCanvas->Refresh(); }
protected:
- void BuildControlElementPanel();
+ virtual void OnDoubleClick(wxMouseEvent& event);
+ virtual void OnLeftClickDown(wxMouseEvent& event);
+ virtual void OnLeftClickUp(wxMouseEvent& event);
+ virtual void OnMiddleDown(wxMouseEvent& event);
+ virtual void OnMiddleUp(wxMouseEvent& event);
+ virtual void OnMouseMotion(wxMouseEvent& event);
+ virtual void OnPaint(wxPaintEvent& event);
virtual void LeftClickDown(wxMouseEvent& event);
- wxButton* m_tfButton;
+ void BuildControlElementPanel();
+ void SetViewport();
+
+ wxGLContext* m_glContext = NULL;
+ Camera* m_camera = NULL;
+
+ ControlEditorMode m_mode = MODE_EDIT;
+
+ wxRect2DDouble m_selectionRect;
+ wxPoint2DDouble m_startSelRect;
+
+ std::vector<ControlElement*> m_elementList;
};
#endif // CONTROLEDITOR_H
diff --git a/Project/ControlEditor.wxcp b/Project/ControlEditor.wxcp
index 5ea38e9..b587276 100644
--- a/Project/ControlEditor.wxcp
+++ b/Project/ControlEditor.wxcp
@@ -1084,7 +1084,56 @@
"m_label": "WX_GL_SAMPLES",
"m_value": ""
}],
- "m_events": [],
+ "m_events": [{
+ "m_eventName": "wxEVT_PAINT",
+ "m_eventClass": "wxPaintEvent",
+ "m_eventHandler": "wxPaintEventHandler",
+ "m_functionNameAndSignature": "OnPaint(wxPaintEvent& event)",
+ "m_description": "Process a wxEVT_PAINT event",
+ "m_noBody": false
+ }, {
+ "m_eventName": "wxEVT_LEFT_DOWN",
+ "m_eventClass": "wxMouseEvent",
+ "m_eventHandler": "wxMouseEventHandler",
+ "m_functionNameAndSignature": "OnLeftClickDown(wxMouseEvent& event)",
+ "m_description": "Process a wxEVT_LEFT_DOWN event. The handler of this event should normally call event.Skip() to allow the default processing to take place as otherwise the window under mouse wouldn't get the focus.",
+ "m_noBody": false
+ }, {
+ "m_eventName": "wxEVT_LEFT_UP",
+ "m_eventClass": "wxMouseEvent",
+ "m_eventHandler": "wxMouseEventHandler",
+ "m_functionNameAndSignature": "OnLeftClickUp(wxMouseEvent& event)",
+ "m_description": "Process a wxEVT_LEFT_UP event.",
+ "m_noBody": false
+ }, {
+ "m_eventName": "wxEVT_LEFT_DCLICK",
+ "m_eventClass": "wxMouseEvent",
+ "m_eventHandler": "wxMouseEventHandler",
+ "m_functionNameAndSignature": "OnDoubleClick(wxMouseEvent& event)",
+ "m_description": "Process a wxEVT_LEFT_DCLICK event.",
+ "m_noBody": false
+ }, {
+ "m_eventName": "wxEVT_MIDDLE_DOWN",
+ "m_eventClass": "wxMouseEvent",
+ "m_eventHandler": "wxMouseEventHandler",
+ "m_functionNameAndSignature": "OnMiddleDown(wxMouseEvent& event)",
+ "m_description": "Process a wxEVT_MIDDLE_DOWN event",
+ "m_noBody": false
+ }, {
+ "m_eventName": "wxEVT_MIDDLE_UP",
+ "m_eventClass": "wxMouseEvent",
+ "m_eventHandler": "wxMouseEventHandler",
+ "m_functionNameAndSignature": "OnMiddleUp(wxMouseEvent& event)",
+ "m_description": "Process a wxEVT_MIDDLE_UP event",
+ "m_noBody": false
+ }, {
+ "m_eventName": "wxEVT_MOTION",
+ "m_eventClass": "wxMouseEvent",
+ "m_eventHandler": "wxMouseEventHandler",
+ "m_functionNameAndSignature": "OnMouseMotion(wxMouseEvent& event)",
+ "m_description": "Process a wxEVT_MOTION event",
+ "m_noBody": false
+ }],
"m_children": []
}]
}]
diff --git a/Project/ControlEditorBase.cpp b/Project/ControlEditorBase.cpp
index 440069e..bc0a1aa 100644
--- a/Project/ControlEditorBase.cpp
+++ b/Project/ControlEditorBase.cpp
@@ -96,10 +96,27 @@ ControlEditorBase::ControlEditorBase(wxWindow* parent, wxWindowID id, const wxSt
wxPersistenceManager::Get().Restore(this);
}
#endif
+ // Connect events
+ m_glCanvas->Connect(wxEVT_PAINT, wxPaintEventHandler(ControlEditorBase::OnPaint), NULL, this);
+ m_glCanvas->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(ControlEditorBase::OnLeftClickDown), NULL, this);
+ m_glCanvas->Connect(wxEVT_LEFT_UP, wxMouseEventHandler(ControlEditorBase::OnLeftClickUp), NULL, this);
+ m_glCanvas->Connect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(ControlEditorBase::OnDoubleClick), NULL, this);
+ m_glCanvas->Connect(wxEVT_MIDDLE_DOWN, wxMouseEventHandler(ControlEditorBase::OnMiddleDown), NULL, this);
+ m_glCanvas->Connect(wxEVT_MIDDLE_UP, wxMouseEventHandler(ControlEditorBase::OnMiddleUp), NULL, this);
+ m_glCanvas->Connect(wxEVT_MOTION, wxMouseEventHandler(ControlEditorBase::OnMouseMotion), NULL, this);
+
}
ControlEditorBase::~ControlEditorBase()
{
+ m_glCanvas->Disconnect(wxEVT_PAINT, wxPaintEventHandler(ControlEditorBase::OnPaint), NULL, this);
+ m_glCanvas->Disconnect(wxEVT_LEFT_DOWN, wxMouseEventHandler(ControlEditorBase::OnLeftClickDown), NULL, this);
+ m_glCanvas->Disconnect(wxEVT_LEFT_UP, wxMouseEventHandler(ControlEditorBase::OnLeftClickUp), NULL, this);
+ m_glCanvas->Disconnect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(ControlEditorBase::OnDoubleClick), NULL, this);
+ m_glCanvas->Disconnect(wxEVT_MIDDLE_DOWN, wxMouseEventHandler(ControlEditorBase::OnMiddleDown), NULL, this);
+ m_glCanvas->Disconnect(wxEVT_MIDDLE_UP, wxMouseEventHandler(ControlEditorBase::OnMiddleUp), NULL, this);
+ m_glCanvas->Disconnect(wxEVT_MOTION, wxMouseEventHandler(ControlEditorBase::OnMouseMotion), NULL, this);
+
m_auimgr->UnInit();
delete m_auimgr;
diff --git a/Project/ControlEditorBase.h b/Project/ControlEditorBase.h
index e74bf49..5bee173 100644
--- a/Project/ControlEditorBase.h
+++ b/Project/ControlEditorBase.h
@@ -48,6 +48,13 @@ protected:
wxStatusBar* m_statusBarMain;
protected:
+ virtual void OnPaint(wxPaintEvent& event) { event.Skip(); }
+ virtual void OnLeftClickDown(wxMouseEvent& event) { event.Skip(); }
+ virtual void OnLeftClickUp(wxMouseEvent& event) { event.Skip(); }
+ virtual void OnDoubleClick(wxMouseEvent& event) { event.Skip(); }
+ virtual void OnMiddleDown(wxMouseEvent& event) { event.Skip(); }
+ virtual void OnMiddleUp(wxMouseEvent& event) { event.Skip(); }
+ virtual void OnMouseMotion(wxMouseEvent& event) { event.Skip(); }
public:
wxToolBar* GetToolbarMain() { return m_toolbarMain; }
diff --git a/Project/MainFrame.cpp b/Project/MainFrame.cpp
index 6049a8d..87c547e 100644
--- a/Project/MainFrame.cpp
+++ b/Project/MainFrame.cpp
@@ -197,7 +197,7 @@ void MainFrame::OnMoveClick(wxRibbonButtonBarEvent& event)
element->StartMove(averagePos);
}
}
- workspace->SetWorkspaceMode(MODE_MOVE_ELEMENT);
+ workspace->SetWorkspaceMode(Workspace::MODE_MOVE_ELEMENT);
}
}
@@ -303,7 +303,7 @@ void MainFrame::OnAddElementsClick(wxCommandEvent& event)
Workspace* workspace = static_cast<Workspace*>(m_auiNotebook->GetCurrentPage());
if(workspace) {
- if(workspace->GetWorkspaceMode() != MODE_INSERT) {
+ if(workspace->GetWorkspaceMode() != Workspace::MODE_INSERT) {
auto elementList = workspace->GetElementList();
wxString statusBarText = "";
bool newElement = false;
@@ -382,7 +382,7 @@ void MainFrame::OnAddElementsClick(wxCommandEvent& event)
}
if(newElement) {
workspace->SetElementList(elementList);
- workspace->SetWorkspaceMode(MODE_INSERT);
+ workspace->SetWorkspaceMode(Workspace::MODE_INSERT);
workspace->SetStatusBarText(statusBarText);
workspace->Redraw();
}
diff --git a/Project/Project.mk b/Project/Project.mk
index 9f3bcce..6fb7752 100644
--- a/Project/Project.mk
+++ b/Project/Project.mk
@@ -13,8 +13,8 @@ CurrentFileName :=
CurrentFilePath :=
CurrentFileFullPath :=
User :=Thales
-Date :=20/01/2017
-CodeLitePath :="C:/Program Files (x86)/CodeLite"
+Date :=24/01/2017
+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,15 +61,15 @@ 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)/ElementDataObject.cpp$(ObjectSuffix) $(IntermediateDirectory)/Element.cpp$(ObjectSuffix) $(IntermediateDirectory)/ArtMetro.cpp$(ObjectSuffix) $(IntermediateDirectory)/wxGLString.cpp$(ObjectSuffix) $(IntermediateDirectory)/MainFrame.cpp$(ObjectSuffix) $(IntermediateDirectory)/Workspace.cpp$(ObjectSuffix) $(IntermediateDirectory)/FileHanding.cpp$(ObjectSuffix) $(IntermediateDirectory)/ControlEditor.cpp$(ObjectSuffix) \
- $(IntermediateDirectory)/MainFrameBitmaps.cpp$(ObjectSuffix) $(IntermediateDirectory)/WorkspaceBitmaps.cpp$(ObjectSuffix) $(IntermediateDirectory)/BusFormBitmaps.cpp$(ObjectSuffix) $(IntermediateDirectory)/ElementFormBitmaps.cpp$(ObjectSuffix) $(IntermediateDirectory)/ControlEditorBitmaps.cpp$(ObjectSuffix) $(IntermediateDirectory)/MainFrameBase.cpp$(ObjectSuffix) $(IntermediateDirectory)/WorkspaceBase.cpp$(ObjectSuffix) $(IntermediateDirectory)/ElementForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/ControlEditorBase.cpp$(ObjectSuffix) $(IntermediateDirectory)/Bus.cpp$(ObjectSuffix) \
- $(IntermediateDirectory)/Line.cpp$(ObjectSuffix) $(IntermediateDirectory)/Transformer.cpp$(ObjectSuffix) $(IntermediateDirectory)/Machines.cpp$(ObjectSuffix) $(IntermediateDirectory)/SyncGenerator.cpp$(ObjectSuffix) $(IntermediateDirectory)/IndMotor.cpp$(ObjectSuffix) $(IntermediateDirectory)/Branch.cpp$(ObjectSuffix) $(IntermediateDirectory)/SyncMotor.cpp$(ObjectSuffix) $(IntermediateDirectory)/Shunt.cpp$(ObjectSuffix) $(IntermediateDirectory)/Load.cpp$(ObjectSuffix) $(IntermediateDirectory)/Inductor.cpp$(ObjectSuffix) \
- $(IntermediateDirectory)/Capacitor.cpp$(ObjectSuffix) $(IntermediateDirectory)/PowerElement.cpp$(ObjectSuffix) $(IntermediateDirectory)/ElectricCalculation.cpp$(ObjectSuffix) $(IntermediateDirectory)/PowerFlow.cpp$(ObjectSuffix) $(IntermediateDirectory)/Fault.cpp$(ObjectSuffix) $(IntermediateDirectory)/Text.cpp$(ObjectSuffix) $(IntermediateDirectory)/GraphicalElement.cpp$(ObjectSuffix) $(IntermediateDirectory)/ControlElement.cpp$(ObjectSuffix) $(IntermediateDirectory)/BusForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/GeneratorStabForm.cpp$(ObjectSuffix) \
- $(IntermediateDirectory)/LineForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/SwitchingForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/TransformerForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/LoadForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/ReactiveShuntElementForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/IndMotorForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/SyncMachineForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/TextForm.cpp$(ObjectSuffix)
+ $(IntermediateDirectory)/Camera.cpp$(ObjectSuffix) $(IntermediateDirectory)/MainFrameBitmaps.cpp$(ObjectSuffix) $(IntermediateDirectory)/WorkspaceBitmaps.cpp$(ObjectSuffix) $(IntermediateDirectory)/BusFormBitmaps.cpp$(ObjectSuffix) $(IntermediateDirectory)/ElementFormBitmaps.cpp$(ObjectSuffix) $(IntermediateDirectory)/ControlEditorBitmaps.cpp$(ObjectSuffix) $(IntermediateDirectory)/MainFrameBase.cpp$(ObjectSuffix) $(IntermediateDirectory)/WorkspaceBase.cpp$(ObjectSuffix) $(IntermediateDirectory)/ElementForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/ControlEditorBase.cpp$(ObjectSuffix) \
+ $(IntermediateDirectory)/Bus.cpp$(ObjectSuffix) $(IntermediateDirectory)/Line.cpp$(ObjectSuffix) $(IntermediateDirectory)/Transformer.cpp$(ObjectSuffix) $(IntermediateDirectory)/Machines.cpp$(ObjectSuffix) $(IntermediateDirectory)/SyncGenerator.cpp$(ObjectSuffix) $(IntermediateDirectory)/IndMotor.cpp$(ObjectSuffix) $(IntermediateDirectory)/Branch.cpp$(ObjectSuffix) $(IntermediateDirectory)/SyncMotor.cpp$(ObjectSuffix) $(IntermediateDirectory)/Shunt.cpp$(ObjectSuffix) $(IntermediateDirectory)/Load.cpp$(ObjectSuffix) \
+ $(IntermediateDirectory)/Inductor.cpp$(ObjectSuffix) $(IntermediateDirectory)/Capacitor.cpp$(ObjectSuffix) $(IntermediateDirectory)/PowerElement.cpp$(ObjectSuffix) $(IntermediateDirectory)/ElectricCalculation.cpp$(ObjectSuffix) $(IntermediateDirectory)/PowerFlow.cpp$(ObjectSuffix) $(IntermediateDirectory)/Fault.cpp$(ObjectSuffix) $(IntermediateDirectory)/Text.cpp$(ObjectSuffix) $(IntermediateDirectory)/GraphicalElement.cpp$(ObjectSuffix) $(IntermediateDirectory)/ControlElement.cpp$(ObjectSuffix) $(IntermediateDirectory)/BusForm.cpp$(ObjectSuffix) \
+ $(IntermediateDirectory)/GeneratorStabForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/LineForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/SwitchingForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/TransformerForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/LoadForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/ReactiveShuntElementForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/IndMotorForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/SyncMachineForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/TextForm.cpp$(ObjectSuffix) $(IntermediateDirectory)/TransferFunction.cpp$(ObjectSuffix) \
+
@@ -174,6 +174,14 @@ $(IntermediateDirectory)/ControlEditor.cpp$(DependSuffix): ControlEditor.cpp
$(IntermediateDirectory)/ControlEditor.cpp$(PreprocessSuffix): ControlEditor.cpp
$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/ControlEditor.cpp$(PreprocessSuffix) ControlEditor.cpp
+$(IntermediateDirectory)/Camera.cpp$(ObjectSuffix): Camera.cpp $(IntermediateDirectory)/Camera.cpp$(DependSuffix)
+ $(CXX) $(IncludePCH) $(SourceSwitch) "C:/Users/Thales/Documents/GitHub/PSP/Project/Camera.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/Camera.cpp$(ObjectSuffix) $(IncludePath)
+$(IntermediateDirectory)/Camera.cpp$(DependSuffix): Camera.cpp
+ @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/Camera.cpp$(ObjectSuffix) -MF$(IntermediateDirectory)/Camera.cpp$(DependSuffix) -MM Camera.cpp
+
+$(IntermediateDirectory)/Camera.cpp$(PreprocessSuffix): Camera.cpp
+ $(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/Camera.cpp$(PreprocessSuffix) Camera.cpp
+
$(IntermediateDirectory)/MainFrameBitmaps.cpp$(ObjectSuffix): MainFrameBitmaps.cpp $(IntermediateDirectory)/MainFrameBitmaps.cpp$(DependSuffix)
$(CXX) $(IncludePCH) $(SourceSwitch) "C:/Users/Thales/Documents/GitHub/PSP/Project/MainFrameBitmaps.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/MainFrameBitmaps.cpp$(ObjectSuffix) $(IncludePath)
$(IntermediateDirectory)/MainFrameBitmaps.cpp$(DependSuffix): MainFrameBitmaps.cpp
@@ -478,6 +486,14 @@ $(IntermediateDirectory)/TextForm.cpp$(DependSuffix): TextForm.cpp
$(IntermediateDirectory)/TextForm.cpp$(PreprocessSuffix): TextForm.cpp
$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/TextForm.cpp$(PreprocessSuffix) TextForm.cpp
+$(IntermediateDirectory)/TransferFunction.cpp$(ObjectSuffix): TransferFunction.cpp $(IntermediateDirectory)/TransferFunction.cpp$(DependSuffix)
+ $(CXX) $(IncludePCH) $(SourceSwitch) "C:/Users/Thales/Documents/GitHub/PSP/Project/TransferFunction.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/TransferFunction.cpp$(ObjectSuffix) $(IncludePath)
+$(IntermediateDirectory)/TransferFunction.cpp$(DependSuffix): TransferFunction.cpp
+ @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) -MG -MP -MT$(IntermediateDirectory)/TransferFunction.cpp$(ObjectSuffix) -MF$(IntermediateDirectory)/TransferFunction.cpp$(DependSuffix) -MM TransferFunction.cpp
+
+$(IntermediateDirectory)/TransferFunction.cpp$(PreprocessSuffix): TransferFunction.cpp
+ $(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/TransferFunction.cpp$(PreprocessSuffix) TransferFunction.cpp
+
-include $(IntermediateDirectory)/*$(DependSuffix)
##
diff --git a/Project/Project.project b/Project/Project.project
index 3d0ec6f..c03c768 100644
--- a/Project/Project.project
+++ b/Project/Project.project
@@ -63,6 +63,7 @@
<File Name="TextForm.cpp"/>
</VirtualDirectory>
<File Name="ControlEditor.cpp"/>
+ <File Name="Camera.cpp"/>
</VirtualDirectory>
<File Name="main.cpp"/>
</VirtualDirectory>
@@ -102,6 +103,8 @@
</VirtualDirectory>
<VirtualDirectory Name="control element">
<File Name="ControlElement.h"/>
+ <File Name="TransferFunction.h"/>
+ <File Name="TransferFunction.cpp"/>
</VirtualDirectory>
</VirtualDirectory>
<VirtualDirectory Name="view">
@@ -127,6 +130,7 @@
<File Name="TextForm.h"/>
</VirtualDirectory>
<File Name="ControlEditor.h"/>
+ <File Name="Camera.h"/>
</VirtualDirectory>
</VirtualDirectory>
<VirtualDirectory Name="resources">
diff --git a/Project/Project.txt b/Project/Project.txt
index c70ee11..c70cfdf 100644
--- a/Project/Project.txt
+++ b/Project/Project.txt
@@ -1 +1 @@
-./Release/main.cpp.o ./Release/win_resources.rc.o ./Release/ElementDataObject.cpp.o ./Release/Element.cpp.o ./Release/ArtMetro.cpp.o ./Release/wxGLString.cpp.o ./Release/MainFrame.cpp.o ./Release/Workspace.cpp.o ./Release/FileHanding.cpp.o ./Release/ControlEditor.cpp.o ./Release/MainFrameBitmaps.cpp.o ./Release/WorkspaceBitmaps.cpp.o ./Release/BusFormBitmaps.cpp.o ./Release/ElementFormBitmaps.cpp.o ./Release/ControlEditorBitmaps.cpp.o ./Release/MainFrameBase.cpp.o ./Release/WorkspaceBase.cpp.o ./Release/ElementForm.cpp.o ./Release/ControlEditorBase.cpp.o ./Release/Bus.cpp.o ./Release/Line.cpp.o ./Release/Transformer.cpp.o ./Release/Machines.cpp.o ./Release/SyncGenerator.cpp.o ./Release/IndMotor.cpp.o ./Release/Branch.cpp.o ./Release/SyncMotor.cpp.o ./Release/Shunt.cpp.o ./Release/Load.cpp.o ./Release/Inductor.cpp.o ./Release/Capacitor.cpp.o ./Release/PowerElement.cpp.o ./Release/ElectricCalculation.cpp.o ./Release/PowerFlow.cpp.o ./Release/Fault.cpp.o ./Release/Text.cpp.o ./Release/GraphicalElement.cpp.o ./Release/ControlElement.cpp.o ./Release/BusForm.cpp.o ./Release/GeneratorStabForm.cpp.o ./Release/LineForm.cpp.o ./Release/SwitchingForm.cpp.o ./Release/TransformerForm.cpp.o ./Release/LoadForm.cpp.o ./Release/ReactiveShuntElementForm.cpp.o ./Release/IndMotorForm.cpp.o ./Release/SyncMachineForm.cpp.o ./Release/TextForm.cpp.o
+./Release/main.cpp.o ./Release/win_resources.rc.o ./Release/ElementDataObject.cpp.o ./Release/Element.cpp.o ./Release/ArtMetro.cpp.o ./Release/wxGLString.cpp.o ./Release/MainFrame.cpp.o ./Release/Workspace.cpp.o ./Release/FileHanding.cpp.o ./Release/ControlEditor.cpp.o ./Release/Camera.cpp.o ./Release/MainFrameBitmaps.cpp.o ./Release/WorkspaceBitmaps.cpp.o ./Release/BusFormBitmaps.cpp.o ./Release/ElementFormBitmaps.cpp.o ./Release/ControlEditorBitmaps.cpp.o ./Release/MainFrameBase.cpp.o ./Release/WorkspaceBase.cpp.o ./Release/ElementForm.cpp.o ./Release/ControlEditorBase.cpp.o ./Release/Bus.cpp.o ./Release/Line.cpp.o ./Release/Transformer.cpp.o ./Release/Machines.cpp.o ./Release/SyncGenerator.cpp.o ./Release/IndMotor.cpp.o ./Release/Branch.cpp.o ./Release/SyncMotor.cpp.o ./Release/Shunt.cpp.o ./Release/Load.cpp.o ./Release/Inductor.cpp.o ./Release/Capacitor.cpp.o ./Release/PowerElement.cpp.o ./Release/ElectricCalculation.cpp.o ./Release/PowerFlow.cpp.o ./Release/Fault.cpp.o ./Release/Text.cpp.o ./Release/GraphicalElement.cpp.o ./Release/ControlElement.cpp.o ./Release/BusForm.cpp.o ./Release/GeneratorStabForm.cpp.o ./Release/LineForm.cpp.o ./Release/SwitchingForm.cpp.o ./Release/TransformerForm.cpp.o ./Release/LoadForm.cpp.o ./Release/ReactiveShuntElementForm.cpp.o ./Release/IndMotorForm.cpp.o ./Release/SyncMachineForm.cpp.o ./Release/TextForm.cpp.o ./Release/TransferFunction.cpp.o
diff --git a/Project/TransferFunction.cpp b/Project/TransferFunction.cpp
new file mode 100644
index 0000000..514ca9c
--- /dev/null
+++ b/Project/TransferFunction.cpp
@@ -0,0 +1,10 @@
+#include "TransferFunction.h"
+
+TransferFunction::TransferFunction()
+{
+}
+
+TransferFunction::~TransferFunction()
+{
+}
+
diff --git a/Project/TransferFunction.h b/Project/TransferFunction.h
new file mode 100644
index 0000000..2a5acbb
--- /dev/null
+++ b/Project/TransferFunction.h
@@ -0,0 +1,14 @@
+#ifndef TRANSFERFUNCTION_H
+#define TRANSFERFUNCTION_H
+
+#include "ControlElement.h"
+
+class TransferFunction : public ControlElement
+{
+public:
+ TransferFunction();
+ ~TransferFunction();
+
+};
+
+#endif // TRANSFERFUNCTION_H
diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp
index 1ed8d93..c53bd60 100644
--- a/Project/Workspace.cpp
+++ b/Project/Workspace.cpp
@@ -1,5 +1,5 @@
#include "Workspace.h"
-
+#include "Camera.h"
#include "Element.h"
//#include "Bus.h"
#include "Line.h"
@@ -17,44 +17,6 @@
#include "PowerFlow.h"
#include "Fault.h"
-// Camera
-Camera::Camera()
-{
- m_translation = wxPoint2DDouble(0, 0);
- m_scale = 1.0;
-}
-
-Camera::~Camera() {}
-wxPoint2DDouble Camera::ScreenToWorld(wxPoint2DDouble screenCoords) const
-{
- return wxPoint2DDouble(
- screenCoords.m_x / m_scale - m_translation.m_x, screenCoords.m_y / m_scale - m_translation.m_y);
-}
-
-void Camera::SetTranslation(wxPoint2DDouble screenPoint)
-{
- m_translation = screenPoint / m_scale - m_translationStartPt;
-}
-
-void Camera::SetScale(wxPoint2DDouble screenPoint, double delta)
-{
- m_translation -= screenPoint * (1.0 - m_scale) / m_scale;
-
- m_scale += delta;
-
- // Limits: 5% - 300%
- if(m_scale < m_zoomMin) m_scale = m_zoomMin;
- if(m_scale > m_zoomMax) m_scale = m_zoomMax;
-
- m_translation += screenPoint * (1.0 - m_scale) / m_scale;
-}
-
-wxPoint2DDouble Camera::GetMousePosition(bool worldCoords) const
-{
- if(worldCoords) return ScreenToWorld(m_mousePosition);
- return m_mousePosition;
-}
-
// Workspace
Workspace::Workspace()
: WorkspaceBase(NULL)
diff --git a/Project/Workspace.h b/Project/Workspace.h
index bf98425..bf03a9e 100644
--- a/Project/Workspace.h
+++ b/Project/Workspace.h
@@ -32,21 +32,6 @@ class Text;
class PowerFlow;
class Fault;
-enum WorkspaceMode {
- MODE_EDIT = 0,
- MODE_MOVE_ELEMENT,
- MODE_MOVE_PICKBOX,
- MODE_MOVE_NODE,
- MODE_DRAG,
- MODE_DRAG_INSERT,
- MODE_DRAG_INSERT_TEXT,
- MODE_INSERT,
- MODE_INSERT_TEXT,
- MODE_SELECTION_RECT,
- MODE_PASTE,
- MODE_DRAG_PASTE
-};
-
enum ElementID {
ID_BUS = 0,
ID_LINE,
@@ -65,6 +50,21 @@ enum ElementID {
class Workspace : public WorkspaceBase
{
public:
+ enum WorkspaceMode {
+ MODE_EDIT = 0,
+ MODE_MOVE_ELEMENT,
+ MODE_MOVE_PICKBOX,
+ MODE_MOVE_NODE,
+ MODE_DRAG,
+ MODE_DRAG_INSERT,
+ MODE_DRAG_INSERT_TEXT,
+ MODE_INSERT,
+ MODE_INSERT_TEXT,
+ MODE_SELECTION_RECT,
+ MODE_PASTE,
+ MODE_DRAG_PASTE
+ };
+
Workspace();
Workspace(wxWindow* parent, wxString name = wxEmptyString, wxStatusBar* statusBar = NULL);
~Workspace();
@@ -75,10 +75,10 @@ public:
std::vector<Element*> GetAllElements() const;
WorkspaceMode GetWorkspaceMode() const { return m_mode; }
Camera* GetCamera() const { return m_camera; }
-
+
void CopySelection();
bool Paste();
-
+
wxFileName GetSavedPath() const { return m_savedPath; }
void SetName(wxString name) { m_name = name; }
@@ -92,13 +92,15 @@ public:
void Redraw() { m_glCanvas->Refresh(); }
void RotateSelectedElements(bool clockwise = true);
void DeleteSelectedElements();
- bool GetElementsCorners(wxPoint2DDouble& leftUpCorner, wxPoint2DDouble& rightDownCorner, std::vector<Element*> elementList);
+ bool GetElementsCorners(wxPoint2DDouble& leftUpCorner,
+ wxPoint2DDouble& rightDownCorner,
+ std::vector<Element*> elementList);
void Fit();
void UnselectAll();
void ValidateBusesVoltages(Element* initialBus);
void ValidateElementsVoltages();
-
+
void UpdateElementsID();
void UpdateTextElements();
@@ -139,42 +141,13 @@ protected:
int m_elementNumber[NUM_ELEMENTS];
std::vector<Text*> m_textList;
-
+
wxFileName m_savedPath;
-
+
wxRect2DDouble m_selectionRect;
wxPoint2DDouble m_startSelRect;
-
- bool m_justOpened = false;
-};
-
-class Camera
-{
-public:
- Camera();
- ~Camera();
-
- void SetScale(wxPoint2DDouble screenPoint, double delta);
- void SetScale(double scale) { m_scale = scale; }
- void SetTranslation(wxPoint2DDouble screenPoint);
- void StartTranslation(wxPoint2DDouble startPoint) { this->m_translationStartPt = startPoint; }
- void UpdateMousePosition(wxPoint2DDouble mousePosition) { this->m_mousePosition = mousePosition; }
- double GetScale() const { return m_scale; }
- wxPoint2DDouble GetTranslation() const { return m_translation; }
- wxPoint2DDouble GetMousePosition(bool worldCoords = true) const;
- wxPoint2DDouble ScreenToWorld(wxPoint2DDouble screenCoords) const;
- double GetZoomMin() const { return m_zoomMin; }
- double GetZoomMax() const { return m_zoomMax; }
-protected:
- wxPoint2DDouble m_translation;
- wxPoint2DDouble m_translationStartPt;
- double m_scale;
-
- wxPoint2DDouble m_mousePosition;
-
- double m_zoomMin = 0.01;
- double m_zoomMax = 3.0;
+ bool m_justOpened = false;
};
#endif // WORKSPACE_H