You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
281 lines
6.8 KiB
281 lines
6.8 KiB
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- ***************************** |
|
* Qwt Widget Library |
|
* Copyright (C) 1997 Josef Wilgen |
|
* Copyright (C) 2002 Uwe Rathmann |
|
* |
|
* This library is free software; you can redistribute it and/or |
|
* modify it under the terms of the Qwt License, Version 1.0 |
|
*****************************************************************************/ |
|
|
|
#include <qevent.h> |
|
#include "qwt_event_pattern.h" |
|
|
|
/*! |
|
Constructor |
|
|
|
\sa MousePatternCode, KeyPatternCode |
|
*/ |
|
|
|
QwtEventPattern::QwtEventPattern(): |
|
d_mousePattern(MousePatternCount), |
|
d_keyPattern(KeyPatternCount) |
|
{ |
|
initKeyPattern(); |
|
initMousePattern(3); |
|
} |
|
|
|
//! Destructor |
|
QwtEventPattern::~QwtEventPattern() |
|
{ |
|
} |
|
|
|
/*! |
|
Set default mouse patterns, depending on the number of mouse buttons |
|
|
|
\param numButtons Number of mouse buttons ( <= 3 ) |
|
\sa MousePatternCode |
|
*/ |
|
void QwtEventPattern::initMousePattern(int numButtons) |
|
{ |
|
#if QT_VERSION < 0x040000 |
|
const int altButton = Qt::AltButton; |
|
const int controlButton = Qt::ControlButton; |
|
const int shiftButton = Qt::ShiftButton; |
|
#else |
|
const int altButton = Qt::AltModifier; |
|
const int controlButton = Qt::ControlModifier; |
|
const int shiftButton = Qt::ShiftModifier; |
|
#endif |
|
|
|
d_mousePattern.resize(MousePatternCount); |
|
|
|
switch(numButtons) { |
|
case 1: { |
|
setMousePattern(MouseSelect1, Qt::LeftButton); |
|
setMousePattern(MouseSelect2, Qt::LeftButton, controlButton); |
|
setMousePattern(MouseSelect3, Qt::LeftButton, altButton); |
|
break; |
|
} |
|
case 2: { |
|
setMousePattern(MouseSelect1, Qt::LeftButton); |
|
setMousePattern(MouseSelect2, Qt::RightButton); |
|
setMousePattern(MouseSelect3, Qt::LeftButton, altButton); |
|
break; |
|
} |
|
default: { |
|
setMousePattern(MouseSelect1, Qt::LeftButton); |
|
setMousePattern(MouseSelect2, Qt::RightButton); |
|
setMousePattern(MouseSelect3, Qt::MidButton); |
|
} |
|
} |
|
for ( int i = 0; i < 3; i++ ) { |
|
setMousePattern(MouseSelect4 + i, |
|
d_mousePattern[MouseSelect1 + i].button, |
|
d_mousePattern[MouseSelect1 + i].state | shiftButton); |
|
} |
|
} |
|
|
|
/*! |
|
Set default mouse patterns. |
|
|
|
\sa KeyPatternCode |
|
*/ |
|
void QwtEventPattern::initKeyPattern() |
|
{ |
|
d_keyPattern.resize(KeyPatternCount); |
|
|
|
setKeyPattern(KeySelect1, Qt::Key_Return); |
|
setKeyPattern(KeySelect2, Qt::Key_Space); |
|
setKeyPattern(KeyAbort, Qt::Key_Escape); |
|
|
|
setKeyPattern(KeyLeft, Qt::Key_Left); |
|
setKeyPattern(KeyRight, Qt::Key_Right); |
|
setKeyPattern(KeyUp, Qt::Key_Up); |
|
setKeyPattern(KeyDown, Qt::Key_Down); |
|
|
|
setKeyPattern(KeyRedo, Qt::Key_Plus); |
|
setKeyPattern(KeyUndo, Qt::Key_Minus); |
|
setKeyPattern(KeyHome, Qt::Key_Escape); |
|
} |
|
|
|
/*! |
|
Change one mouse pattern |
|
|
|
\param pattern Index of the pattern |
|
\param button Button |
|
\param state State |
|
|
|
\sa QMouseEvent |
|
*/ |
|
void QwtEventPattern::setMousePattern(uint pattern, int button, int state) |
|
{ |
|
if ( pattern < (uint)d_mousePattern.count() ) { |
|
d_mousePattern[int(pattern)].button = button; |
|
d_mousePattern[int(pattern)].state = state; |
|
} |
|
} |
|
|
|
/*! |
|
Change one key pattern |
|
|
|
\param pattern Index of the pattern |
|
\param key Key |
|
\param state State |
|
|
|
\sa QKeyEvent |
|
*/ |
|
void QwtEventPattern::setKeyPattern(uint pattern, int key, int state) |
|
{ |
|
if ( pattern < (uint)d_keyPattern.count() ) { |
|
d_keyPattern[int(pattern)].key = key; |
|
d_keyPattern[int(pattern)].state = state; |
|
} |
|
} |
|
|
|
//! Change the mouse event patterns |
|
void QwtEventPattern::setMousePattern(const QwtArray<MousePattern> &pattern) |
|
{ |
|
d_mousePattern = pattern; |
|
} |
|
|
|
//! Change the key event patterns |
|
void QwtEventPattern::setKeyPattern(const QwtArray<KeyPattern> &pattern) |
|
{ |
|
d_keyPattern = pattern; |
|
} |
|
|
|
//! Return mouse patterns |
|
const QwtArray<QwtEventPattern::MousePattern> & |
|
QwtEventPattern::mousePattern() const |
|
{ |
|
return d_mousePattern; |
|
} |
|
|
|
//! Return key patterns |
|
const QwtArray<QwtEventPattern::KeyPattern> & |
|
QwtEventPattern::keyPattern() const |
|
{ |
|
return d_keyPattern; |
|
} |
|
|
|
//! Return ,ouse patterns |
|
QwtArray<QwtEventPattern::MousePattern> &QwtEventPattern::mousePattern() |
|
{ |
|
return d_mousePattern; |
|
} |
|
|
|
//! Return Key patterns |
|
QwtArray<QwtEventPattern::KeyPattern> &QwtEventPattern::keyPattern() |
|
{ |
|
return d_keyPattern; |
|
} |
|
|
|
/*! |
|
\brief Compare a mouse event with an event pattern. |
|
|
|
A mouse event matches the pattern when both have the same button |
|
value and in the state value the same key flags(Qt::KeyButtonMask) |
|
are set. |
|
|
|
\param pattern Index of the event pattern |
|
\param e Mouse event |
|
\return true if matches |
|
|
|
\sa keyMatch() |
|
*/ |
|
bool QwtEventPattern::mouseMatch(uint pattern, const QMouseEvent *e) const |
|
{ |
|
bool ok = false; |
|
|
|
if ( e && pattern < (uint)d_mousePattern.count() ) |
|
ok = mouseMatch(d_mousePattern[int(pattern)], e); |
|
|
|
return ok; |
|
} |
|
|
|
/*! |
|
\brief Compare a mouse event with an event pattern. |
|
|
|
A mouse event matches the pattern when both have the same button |
|
value and in the state value the same key flags(Qt::KeyButtonMask) |
|
are set. |
|
|
|
\param pattern Mouse event pattern |
|
\param e Mouse event |
|
\return true if matches |
|
|
|
\sa keyMatch() |
|
*/ |
|
|
|
bool QwtEventPattern::mouseMatch(const MousePattern &pattern, |
|
const QMouseEvent *e) const |
|
{ |
|
if ( e->button() != pattern.button ) |
|
return false; |
|
|
|
const bool matched = |
|
#if QT_VERSION < 0x040000 |
|
(e->state() & Qt::KeyButtonMask) == |
|
(pattern.state & Qt::KeyButtonMask); |
|
#else |
|
(e->modifiers() & Qt::KeyboardModifierMask) == |
|
(int)(pattern.state & Qt::KeyboardModifierMask); |
|
#endif |
|
|
|
return matched; |
|
} |
|
|
|
/*! |
|
\brief Compare a key event with an event pattern. |
|
|
|
A key event matches the pattern when both have the same key |
|
value and in the state value the same key flags (Qt::KeyButtonMask) |
|
are set. |
|
|
|
\param pattern Index of the event pattern |
|
\param e Key event |
|
\return true if matches |
|
|
|
\sa mouseMatch() |
|
*/ |
|
bool QwtEventPattern::keyMatch(uint pattern, const QKeyEvent *e) const |
|
{ |
|
bool ok = false; |
|
|
|
if ( e && pattern < (uint)d_keyPattern.count() ) |
|
ok = keyMatch(d_keyPattern[int(pattern)], e); |
|
|
|
return ok; |
|
} |
|
|
|
/*! |
|
\brief Compare a key event with an event pattern. |
|
|
|
A key event matches the pattern when both have the same key |
|
value and in the state value the same key flags (Qt::KeyButtonMask) |
|
are set. |
|
|
|
\param pattern Key event pattern |
|
\param e Key event |
|
\return true if matches |
|
|
|
\sa mouseMatch() |
|
*/ |
|
|
|
bool QwtEventPattern::keyMatch( |
|
const KeyPattern &pattern, const QKeyEvent *e) const |
|
{ |
|
if ( e->key() != pattern.key) |
|
return false; |
|
|
|
const bool matched = |
|
#if QT_VERSION < 0x040000 |
|
(e->state() & Qt::KeyButtonMask) == |
|
(pattern.state & Qt::KeyButtonMask); |
|
#else |
|
(e->modifiers() & Qt::KeyboardModifierMask) == |
|
(int)(pattern.state & Qt::KeyboardModifierMask); |
|
#endif |
|
|
|
return matched; |
|
}
|
|
|