00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_GUI_GL_CANVAS_HH
00020 #define OST_GUI_GL_CANVAS_HH
00021
00022 #include <ost/gfx/glwin_base.hh>
00023 #include <ost/gfx/input.hh>
00024
00025
00026 #include <ost/mol/mol.hh>
00027 #include <ost/gfx/gfx_object_fw.hh>
00028
00029 #include <ost/gui/tools/tool.hh>
00030 #include <ost/gui/scene_menu.hh>
00031
00032
00033 #include <QGLWidget>
00034 #include <QTime>
00035 #include <QBasicTimer>
00036 #include <QMouseEvent>
00037
00038 class QMenu;
00039
00040 namespace ost { namespace gui {
00041
00042 class GLCanvas;
00043
00044 class GLWin;
00045
00046 class DLLEXPORT_OST_GUI GLCanvas : public QGLWidget, public gfx::GLWinBase
00047 {
00048 Q_OBJECT;
00049 public:
00050 GLCanvas(GLWin *gl_win, QWidget* parent,
00051 const QGLFormat& f = QGLFormat::defaultFormat());
00052
00053
00054 virtual void MakeActive();
00055 virtual void DoRefresh();
00056 virtual void StatusMessage(const String& m);
00057 virtual void SetStereo(bool s);
00058 virtual bool HasMultisample() const {return format().sampleBuffers();}
00059
00060
00061 void OnTransform(gfx::InputCommand, int indx,
00062 gfx::TransformTarget, Real val);
00063
00064 void SetTestMode(bool f);
00065
00066 signals:
00067 void ReleaseFocus();
00068
00069 protected:
00070 void Select(const String& query);
00071 void CopySelectionToClipboard();
00072
00073 virtual void initializeGL();
00074 virtual void resizeGL(int w, int h);
00075 virtual void paintGL();
00076
00077 virtual void mouseMoveEvent(QMouseEvent* event);
00078 virtual void mousePressEvent(QMouseEvent* event);
00079 virtual void mouseReleaseEvent(QMouseEvent* event);
00080 virtual void mouseDoubleClickEvent(QMouseEvent* event);
00081
00082 virtual void keyPressEvent(QKeyEvent* event);
00083 virtual void keyReleaseEvent(QKeyEvent* event);
00084 virtual void timerEvent(QTimerEvent * event);
00085 virtual void wheelEvent(QWheelEvent* event);
00086
00087 private slots:
00088 virtual void RequestContextMenu(const QPoint& pos);
00089
00090 private:
00091 bool IsToolEvent(QInputEvent* event) const;
00092 MouseEvent::Buttons TranslateButtons(Qt::MouseButtons buttons) const;
00093 void HandleMousePressEvent(QMouseEvent* event);
00094 void HandleMouseReleaseEvent(QMouseEvent* event);
00095 void HandleMouseMoveEvent(QMouseEvent* event);
00096 void build_context_menu();
00097 void prepare_context_menu(const QPoint& pos);
00098 GLWin* glwin_;
00099 int mouse_key_mask_;
00100 bool refresh_;
00101 QBasicTimer master_timer_;
00102 bool bench_flag_;
00103 QPoint last_pos_;
00104 SceneMenu* scene_menu_;
00105 };
00106
00107 }}
00108
00109 #endif