fluidvis
SXWidget.h
1 #ifndef _SX_SXWIDGET_H_
2 #define _SX_SXWIDGET_H_
3 
9 #include <export/Export.h>
10 #include <sx/SX.h>
11 #include <sx/SXMath.h>
12 #include <GL/glew.h>
13 #include <GL/wglew.h>
14 #include <QWidget>
15 #include <QTimer>
16 #include <QtOpenGL/QGLWidget>
17 #include <boost/unordered_map.hpp>
18 #include <boost/timer.hpp>
19 #include <boost/date_time/posix_time/posix_time.hpp>
20 #include <map>
21 #include <vector>
22 using boost::posix_time::ptime;
23 using boost::posix_time::second_clock;
24 using boost::posix_time::to_simple_string;
25 using namespace std;
26 using namespace boost;
27 
28 namespace sx {
29 
30  class SXWidget;
31 
36  class SXInternalWidget: public QGLWidget {
37 
38  Q_OBJECT
39 
40  private:
41 
45  SXWidget *sxWidget;
46 
51  static map<int,int> keys_qt2sx;
52 
56  static map<int,int> initKeys_qt2sx();
57 
58  void keyPressEvent(QKeyEvent * e);
59 
60  void keyReleaseEvent(QKeyEvent * e);
61 
62  void mousePressEvent(QMouseEvent * e);
63 
64  void mouseReleaseEvent(QMouseEvent * e);
65 
66  void mouseMoveEvent(QMouseEvent * e);
67 
68  void wheelEvent(QWheelEvent * e);
69 
74 
78  SXInternalWidget &operator = (const SXInternalWidget &);
79 
80  public:
81 
85  SXInternalWidget(SXWidget *sxWidget);
86 
91 
95  void initializeGL();
96 
100  void resizeGL(int width, int height);
101 
105  void paintGL();
106 
107  };
108 
112  class SXWidget: public QWidget, public SXRenderArea {
113 
114  Q_OBJECT
115 
116  friend class SXInternalWidget;
117 
118  private:
119 
125  bool constructed;
126 
130  bool processingListeners;
131 
136  bool callStopAfterRender;
137 
141  vector<SXRenderListener *> listeners;
142 
146  vector<SXRenderListener *> initListeners;
147 
152  QTimer timer;
153 
158  boost::timer timeMeasurement;
159 
163  double lastTimeRendered;
164 
168  double currentTimeRendering;
169 
173  int mouseX;
174 
178  int mouseY;
179 
185  double mouseDeltaX;
186 
192  double mouseDeltaY;
193 
198  double lastSetMouseTime;
199 
203  vector<Vector> setMouseDeltas;
204 
208  unordered_map<int,int> keys;
209 
213  unordered_map<int,int> mouseKeys;
214 
219  void updateTime();
220 
224  void addKey(int key);
225 
229  void removeKey(int key);
230 
234  void addMouseKey(MouseButton key);
235 
239  void removeMouseKey(MouseButton key);
240 
244  SXInternalWidget *internalWidget;
245 
249  SXWidget(const SXWidget &);
250 
254  SXWidget &operator = (const SXWidget &);
255 
256  signals:
257 
262  EXW void finishedRendering();
263 
274  EXW void wheelRotates(float degrees);
275 
276  public:
277 
281  EXW SXWidget();
282 
286  EXW ~SXWidget();
287 
293  EXW void renderPeriodically(float time);
294 
298  EXW void stopRenderPeriodically();
299 
304  EXW void addRenderListener(SXRenderListener &l);
305 
309  EXW void deleteRenderListener(SXRenderListener &l);
310 
314  EXW void deleteRenderListeners();
315 
319  EXW double getTime() const;
320 
324  EXW double getDeltaTime() const;
325 
329  EXW int getMouseX() const;
330 
334  EXW int getMouseY() const;
335 
339  EXW double getMouseDeltaX() const;
340 
344  EXW double getMouseDeltaY() const;
345 
349  EXW bool hasKey(int key) const;
350 
354  EXW bool hasMouseKey(MouseButton key) const;
355 
359  EXW int getWidth() const;
360 
364  EXW int getHeight() const;
365 
369  EXW void stopRendering();
370 
374  EXW void setMousePointer(int x, int y);
375 
379  EXW void setShowCursor(bool showCursor);
380 
381  };
382 
383 }
384 
385 #endif
Definition: SX.h:78
MouseButton
Definition: SX.h:28
Definition: SXWidget.h:112
Definition: SX.h:160
Definition: SXWidget.h:36
Definition: Exception.h:13