summaryrefslogtreecommitdiffstats
path: root/Project/Workspace.h
diff options
context:
space:
mode:
Diffstat (limited to 'Project/Workspace.h')
-rw-r--r--Project/Workspace.h42
1 files changed, 38 insertions, 4 deletions
diff --git a/Project/Workspace.h b/Project/Workspace.h
index 193d370..ca4245f 100644
--- a/Project/Workspace.h
+++ b/Project/Workspace.h
@@ -6,12 +6,19 @@
#include <wx/dcclient.h>
#include <wx/msgdlg.h>
+class MouseEventsHandler;
+
#include "WorkspaceBase.h"
+//#include "MouseEventsHandler.h"
#include "Bus.h"
+class Camera;
+
class Workspace : public WorkspaceBase
{
protected:
+ virtual void OnMouseMotion(wxMouseEvent& event);
+ virtual void OnKeyDown(wxKeyEvent& event) = 0;
virtual void OnLeftClickDown(wxMouseEvent& event);
virtual void OnPaint(wxPaintEvent& event);
@@ -19,17 +26,44 @@ class Workspace : public WorkspaceBase
wxGLContext* m_glContext;
wxString m_name;
-
- std::vector<Element*> m_elementList;
+
+ bool m_insertMode = false;
+ bool m_dragMode = false;
+
+ std::vector<Element*> m_elementList;
public:
Workspace(wxWindow* parent, wxString name = wxEmptyString);
~Workspace();
-
- void Redraw() { this->Refresh(); }
+
+ MouseEventsHandler* m_mouseEventsHandler;
+ Camera* m_camera;
wxString GetName() const { return m_name; }
void SetName(wxString name) { m_name = name; }
+ void SetDragMode(bool dragMode) { this->m_dragMode = dragMode; }
+ void SetInsertMode(bool insertMode) { this->m_insertMode = insertMode; }
+ bool IsDragMode() const { return m_dragMode; }
+ const std::vector<Element*>& GetElementList() const { return m_elementList; }
+ bool IsInsertMode() const { return m_insertMode; }
+ void Redraw() { this->Refresh(); }
+};
+
+class Camera
+{
+ private:
+ wxPoint2DDouble m_translation;
+ double m_scale;
+
+ public:
+ Camera();
+ ~Camera();
+
+ void SetScale(double scale) { this->m_scale = scale; }
+ void SetTranslation(const wxPoint2DDouble& translation) { this->m_translation = translation; }
+ double GetScale() const { return m_scale; }
+ const wxPoint2DDouble GetTranslation() const { return m_translation; }
+ wxPoint2DDouble ScreenToWorld(wxPoint2DDouble screenCoords);
};
#endif // WORKSPACE_H