1 #pragma once 2 3 #include "gui/ArcBall.h" 4 #include "gui/Settings.h" 5 #include "gui/objects/Point.h" 6 #include "gui/windows/IGraphicsPane.h" 7 #include "objects/wrappers/Optional.h" 8 9 NAMESPACE_SPH_BEGIN 10 11 class Controller; 12 class ICamera; 13 14 class OrthoPane : public IGraphicsPane { 15 private: 16 Controller* controller; 17 18 /// Helper for rotation 19 ArcBall arcBall; 20 21 AutoPtr<ICamera> camera; 22 23 struct { 24 /// Cached last mouse position when dragging the window 25 Pixel position; 26 27 /// Camera rotation matrix when dragging started. 28 AffineMatrix initialMatrix = AffineMatrix::identity(); 29 } dragging; 30 31 struct { 32 Optional<Size> lastIdx; 33 } particle; 34 35 public: 36 OrthoPane(wxWindow* parent, Controller* controller, const GuiSettings& gui); 37 38 ~OrthoPane(); 39 getCamera()40 virtual ICamera& getCamera() override { 41 return *camera; 42 } 43 44 virtual void resetView() override; 45 46 virtual void onTimeStep(const Storage& storage, const Statistics& stats) override; 47 48 private: 49 /// wx event handlers 50 void onPaint(wxPaintEvent& evt); 51 52 void onMouseMotion(wxMouseEvent& evt); 53 54 void onLeftUp(wxMouseEvent& evt); 55 56 void onRightDown(wxMouseEvent& evt); 57 58 void onRightUp(wxMouseEvent& evt); 59 60 void onDoubleClick(wxMouseEvent& evt); 61 62 void onMouseWheel(wxMouseEvent& evt); 63 64 void onResize(wxSizeEvent& evt); 65 }; 66 67 NAMESPACE_SPH_END 68