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