00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <qevent.h>
00011 #include "qwt_event_pattern.h"
00012
00019 QwtEventPattern::QwtEventPattern():
00020 d_mousePattern(MousePatternCount),
00021 d_keyPattern(KeyPatternCount)
00022 {
00023 initKeyPattern();
00024 initMousePattern(3);
00025 }
00026
00028 QwtEventPattern::~QwtEventPattern()
00029 {
00030 }
00031
00038 void QwtEventPattern::initMousePattern(int numButtons)
00039 {
00040 d_mousePattern.resize(MousePatternCount);
00041
00042 switch(numButtons)
00043 {
00044 case 1:
00045 {
00046 setMousePattern(MouseSelect1, Qt::LeftButton);
00047 setMousePattern(MouseSelect2, Qt::LeftButton, Qt::ControlButton);
00048 setMousePattern(MouseSelect3, Qt::LeftButton, Qt::AltButton);
00049 break;
00050 }
00051 case 2:
00052 {
00053 setMousePattern(MouseSelect1, Qt::LeftButton);
00054 setMousePattern(MouseSelect2, Qt::RightButton);
00055 setMousePattern(MouseSelect3, Qt::LeftButton, Qt::AltButton);
00056 break;
00057 }
00058 default:
00059 {
00060 setMousePattern(MouseSelect1, Qt::LeftButton);
00061 setMousePattern(MouseSelect2, Qt::RightButton);
00062 setMousePattern(MouseSelect3, Qt::MidButton);
00063 }
00064 }
00065 for ( int i = 0; i < 3; i++ )
00066 {
00067 setMousePattern(MouseSelect4 + i,
00068 d_mousePattern[MouseSelect1 + i].button,
00069 d_mousePattern[MouseSelect1 + i].state | Qt::ShiftButton);
00070 }
00071 }
00072
00078 void QwtEventPattern::initKeyPattern()
00079 {
00080 d_keyPattern.resize(KeyPatternCount);
00081
00082 setKeyPattern(KeySelect1, Qt::Key_Return);
00083 setKeyPattern(KeySelect2, Qt::Key_Space);
00084 setKeyPattern(KeyAbort, Qt::Key_Escape);
00085
00086 setKeyPattern(KeyLeft, Qt::Key_Left);
00087 setKeyPattern(KeyRight, Qt::Key_Right);
00088 setKeyPattern(KeyUp, Qt::Key_Up);
00089 setKeyPattern(KeyDown, Qt::Key_Down);
00090
00091 setKeyPattern(KeyRedo, Qt::Key_Plus);
00092 setKeyPattern(KeyUndo, Qt::Key_Minus);
00093 setKeyPattern(KeyHome, Qt::Key_Escape);
00094 }
00095
00105 void QwtEventPattern::setMousePattern(uint pattern, int button, int state)
00106 {
00107 if ( pattern < d_mousePattern.count() )
00108 {
00109 d_mousePattern[int(pattern)].button = button;
00110 d_mousePattern[int(pattern)].state = state;
00111 }
00112 }
00113
00123 void QwtEventPattern::setKeyPattern(uint pattern, int key, int state)
00124 {
00125 if ( pattern < d_keyPattern.count() )
00126 {
00127 d_keyPattern[int(pattern)].key = key;
00128 d_keyPattern[int(pattern)].state = state;
00129 }
00130 }
00131
00133 void QwtEventPattern::setMousePattern(const QwtArray<MousePattern> &pattern)
00134 {
00135 d_mousePattern = pattern;
00136 }
00137
00139 void QwtEventPattern::setKeyPattern(const QwtArray<KeyPattern> &pattern)
00140 {
00141 d_keyPattern = pattern;
00142 }
00143
00145 const QwtArray<QwtEventPattern::MousePattern> &
00146 QwtEventPattern::mousePattern() const
00147 {
00148 return d_mousePattern;
00149 }
00150
00152 const QwtArray<QwtEventPattern::KeyPattern> &
00153 QwtEventPattern::keyPattern() const
00154 {
00155 return d_keyPattern;
00156 }
00157
00159 QwtArray<QwtEventPattern::MousePattern> &QwtEventPattern::mousePattern()
00160 {
00161 return d_mousePattern;
00162 }
00163
00165 QwtArray<QwtEventPattern::KeyPattern> &QwtEventPattern::keyPattern()
00166 {
00167 return d_keyPattern;
00168 }
00169
00183 bool QwtEventPattern::mouseMatch(uint pattern, const QMouseEvent *e) const
00184 {
00185 bool ok = FALSE;
00186
00187 if ( e && pattern < d_mousePattern.count() )
00188 ok = mouseMatch(d_mousePattern[int(pattern)], e);
00189
00190 return ok;
00191 }
00192
00207 bool QwtEventPattern::mouseMatch(const MousePattern &pattern,
00208 const QMouseEvent *e) const
00209 {
00210 return (e->button() == pattern.button) &&
00211 ((e->state() & Qt::KeyButtonMask) == (pattern.state & Qt::KeyButtonMask));
00212 }
00213
00227 bool QwtEventPattern::keyMatch(uint pattern, const QKeyEvent *e) const
00228 {
00229 bool ok = FALSE;
00230
00231 if ( e && pattern < d_keyPattern.count() )
00232 ok = keyMatch(d_keyPattern[int(pattern)], e);
00233
00234 return ok;
00235 }
00236
00251 bool QwtEventPattern::keyMatch(
00252 const KeyPattern &pattern, const QKeyEvent *e) const
00253 {
00254 return (e->key() == pattern.key) &&
00255 ((e->state() & Qt::KeyButtonMask) == (pattern.state & Qt::KeyButtonMask));
00256 }