00001 #ifndef QEventToSoEvent_h
00002 #define QEventToSoEvent_h
00003
00004 #include <QWidget>
00005 #include <QMouseEvent>
00006 #include <QWheelEvent>
00007 #include <QKeyEvent>
00008 #include <QTouchEvent>
00009
00010 #include <Inventor/ViewerComponents/SoEventBuilder.h>
00011 #include <Inventor/Qt/SbQtHelper.h>
00012
00016 class QTVIEWERCOMPONENTS_API QEventToSoEvent {
00017 public:
00018
00019 static SoMouseButtonEvent* getMousePressEvent(QMouseEvent* qevent, QWidget* wsource)
00020 {
00021 const float ratio = SbQtHelper::getDevicePixelRatio(wsource);
00022 return m_ivEvent.getMousePressEvent(qevent->x()*ratio, ((wsource->height()-1)-qevent->y())*ratio,
00023 getButtonId(qevent),
00024 qevent->modifiers() & Qt::AltModifier,
00025 qevent->modifiers() & Qt::ControlModifier,
00026 qevent->modifiers() & Qt::ShiftModifier);
00027 }
00028
00029 static SoMouseButtonEvent* getMouseReleaseEvent(QMouseEvent* qevent, QWidget* wsource)
00030 {
00031 const float ratio = SbQtHelper::getDevicePixelRatio(wsource);
00032 return m_ivEvent.getMouseReleaseEvent(qevent->x()*ratio, ((wsource->height()-1)-qevent->y())*ratio,
00033 getButtonId(qevent),
00034 qevent->modifiers() & Qt::AltModifier,
00035 qevent->modifiers() & Qt::ControlModifier,
00036 qevent->modifiers() & Qt::ShiftModifier);
00037 }
00038
00039 static SoMouseButtonEvent* getMouseDoubleClickEvent(QMouseEvent* qevent, QWidget* wsource)
00040 {
00041 const float ratio = SbQtHelper::getDevicePixelRatio(wsource);
00042 return m_ivEvent.getMouseDoubleClickEvent(qevent->x()*ratio, ((wsource->height()-1)-qevent->y())*ratio,
00043 getButtonId(qevent),
00044 qevent->modifiers() & Qt::AltModifier,
00045 qevent->modifiers() & Qt::ControlModifier,
00046 qevent->modifiers() & Qt::ShiftModifier);
00047 }
00048
00049 static SoMouseWheelEvent* getMouseWheelEvent(QWheelEvent * qevent, QWidget* )
00050 {
00051 #if (QT_VERSION > QT_VERSION_CHECK(5, 6, 2))
00052 return m_ivEvent.getMouseWheelEvent(qevent->angleDelta().y(),
00053 qevent->modifiers() & Qt::AltModifier,
00054 qevent->modifiers() & Qt::ControlModifier,
00055 qevent->modifiers() & Qt::ShiftModifier);
00056 #else
00057 return m_ivEvent.getMouseWheelEvent(qevent->delta(),
00058 qevent->modifiers() & Qt::AltModifier,
00059 qevent->modifiers() & Qt::ControlModifier,
00060 qevent->modifiers() & Qt::ShiftModifier);
00061 #endif
00062 }
00063
00064 static SoLocation2Event* getMouseMoveEvent( QMouseEvent* qevent, QWidget* wsource )
00065 {
00066 const float ratio = SbQtHelper::getDevicePixelRatio(wsource);
00067 return m_ivEvent.getMouseMoveEvent(qevent->x()*ratio, ((wsource->height()-1)-qevent->y())*ratio,
00068 qevent->modifiers() & Qt::AltModifier,
00069 qevent->modifiers() & Qt::ControlModifier,
00070 qevent->modifiers() & Qt::ShiftModifier);
00071 }
00072
00073 static SoLocation2Event* getMouseEnterEvent( QEvent* , QWidget* )
00074 {
00075 return m_ivEvent.getMouseEnterEvent(0, 0,
00076 false,
00077 false,
00078 false);
00079 }
00080
00081 static SoLocation2Event* getMouseLeaveEvent( QEvent* , QWidget* )
00082 {
00083 return m_ivEvent.getMouseLeaveEvent(0, 0,
00084 false,
00085 false,
00086 false);
00087 }
00088
00089 static SoKeyboardEvent* getKeyPressEvent( QKeyEvent *qevent, QWidget* )
00090 {
00091 SoKeyboardEvent::Key ivKey = getIvKey(qevent);
00092 return m_ivEvent.getKeyPressEvent(ivKey,
00093 qevent->modifiers() & Qt::AltModifier,
00094 qevent->modifiers() & Qt::ControlModifier,
00095 qevent->modifiers() & Qt::ShiftModifier);
00096 }
00097
00098 static SoKeyboardEvent* getKeyReleaseEvent( QKeyEvent *qevent, QWidget* )
00099 {
00100 SoKeyboardEvent::Key ivKey = getIvKey(qevent);
00101 return m_ivEvent.getKeyReleaseEvent(ivKey,
00102 qevent->modifiers() & Qt::AltModifier,
00103 qevent->modifiers() & Qt::ControlModifier,
00104 qevent->modifiers() & Qt::ShiftModifier);
00105 }
00106
00107 const std::vector<const SoEvent*>& getTouchEvents(QTouchEvent *qevent, QWidget* wsource );
00108
00109 private:
00110 static bool initClass();
00111 static bool s_init;
00112 static SoMouseButtonEvent::Button getButtonId(QMouseEvent* qevent);
00113 static SoKeyboardEvent::Key getIvKey(QKeyEvent *qevent);
00114 static SoEventBuilder m_ivEvent;
00115 std::vector<const SoEvent*> m_soeventlist;
00116
00117
00118 static SoKeyboardEvent::Key keyMap[256];
00119 static SoKeyboardEvent::Key keyMap2[97];
00120 static int keyMapInitFlag;
00121
00122 };
00123
00124 #endif // QEventToSoEvent
00125