00001 /*===========================================================================*\ 00002 * * 00003 * OpenFlipper * 00004 * Copyright (C) 2001-2009 by Computer Graphics Group, RWTH Aachen * 00005 * www.openflipper.org * 00006 * * 00007 *---------------------------------------------------------------------------* 00008 * This file is part of OpenFlipper. * 00009 * * 00010 * OpenFlipper is free software: you can redistribute it and/or modify * 00011 * it under the terms of the GNU Lesser General Public License as * 00012 * published by the Free Software Foundation, either version 3 of * 00013 * the License, or (at your option) any later version with the * 00014 * following exceptions: * 00015 * * 00016 * If other files instantiate templates or use macros * 00017 * or inline functions from this file, or you compile this file and * 00018 * link it with other files to produce an executable, this file does * 00019 * not by itself cause the resulting executable to be covered by the * 00020 * GNU Lesser General Public License. This exception does not however * 00021 * invalidate any other reasons why the executable file might be * 00022 * covered by the GNU Lesser General Public License. * 00023 * * 00024 * OpenFlipper is distributed in the hope that it will be useful, * 00025 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00026 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00027 * GNU Lesser General Public License for more details. * 00028 * * 00029 * You should have received a copy of the GNU LesserGeneral Public * 00030 * License along with OpenFlipper. If not, * 00031 * see <http://www.gnu.org/licenses/>. * 00032 * * 00033 \*===========================================================================*/ 00034 00035 /*===========================================================================*\ 00036 * * 00037 * $Revision: 6743 $ * 00038 * $Author: moebius $ * 00039 * $Date: 2009-08-05 11:03:10 +0200 (Mi, 05. Aug 2009) $ * 00040 * * 00041 \*===========================================================================*/ 00042 00043 00044 00045 //============================================================================= 00046 // 00047 // CLASS QtExaminerViewer 00048 // 00049 //============================================================================= 00050 00051 #ifndef ACG_QTEXAMINERVIEWER_HH 00052 #define ACG_QTEXAMINERVIEWER_HH 00053 00054 00055 //== INCLUDES ================================================================= 00056 00057 00058 #include "QtBaseViewer.hh" 00059 00060 #include <QTime> 00061 #include <QMouseEvent> 00062 #include <QWheelEvent> 00063 #include <QKeyEvent> 00064 00065 00066 //== NAMESPACES =============================================================== 00067 00068 00069 namespace ACG { 00070 namespace QtWidgets { 00071 00072 00073 //== FORWARDDECLARATIONS ====================================================== 00074 00075 00076 class QWheel; 00077 class QtQGLWidget_Internal; 00078 class QtSceneGraphWidget; 00079 00080 00081 //== CLASS DEFINITION ========================================================= 00082 00083 00090 class ACGDLLEXPORT QtExaminerViewer : public QtBaseViewer 00091 { 00092 Q_OBJECT 00093 00094 public: 00095 00096 00098 QtExaminerViewer( QWidget* _parent=0, 00099 const char* _name=0, 00100 QStatusBar *_statusBar=0, 00101 const QGLFormat* _format=0, 00102 const QtBaseViewer* _share=0, 00103 Options _options=DefaultOptions ); 00104 00105 // Destructor. 00106 virtual ~QtExaminerViewer() {} 00107 00108 00110 void allowRotation( bool _mode ) { allowRotation_ = _mode; }; 00111 00112 00114 public: 00115 double wheelZoomFactor(); 00116 double wheelZoomFactorShift(); 00117 void setWheelZoomFactor(double _factor); 00118 void setWheelZoomFactorShift(double _factor); 00119 private: 00120 double wZoomFactor_; 00121 double wZoomFactorShift_; 00122 00123 00124 private slots: 00125 00126 void slotAnimation(); 00127 00128 00129 protected: 00130 00132 virtual bool viewKeyPressEvent(QKeyEvent* /* _event */ ) { return false; } 00134 virtual void viewWheelEvent(QWheelEvent* _event); 00136 virtual void viewMouseEvent(QMouseEvent* _event); 00138 virtual void lightMouseEvent(QMouseEvent* _event); 00139 00140 00141 protected: 00142 00143 // mouse interaction 00144 QPoint lastPoint2D_; 00145 00146 00147 private: 00148 00150 bool mapToSphere(const QPoint& _p, Vec3d& _result) const; 00151 00152 00153 // mouse interaction 00154 Vec3d lastPoint3D_; 00155 bool lastPoint_hitSphere_; 00156 bool allowRotation_; 00157 00158 00159 // animation stuff 00160 Vec3d lastRotationAxis_; 00161 double lastRotationAngle_; 00162 QTime lastMoveTime_; 00163 QTimer* timer_; 00164 }; 00165 00166 00167 //============================================================================= 00168 } // namespace QtWidgets 00169 } // namespace ACG 00170 //============================================================================= 00171 #endif // ACG_QTEXAMINERWIDGET_HH defined 00172 //============================================================================= 00173