123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- /* -*- 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
- *****************************************************************************/
- #ifndef QWT_EVENT_PATTERN
- #define QWT_EVENT_PATTERN 1
- #include "qwt_global.h"
- #include <qnamespace.h>
- #include <qvector.h>
- class QMouseEvent;
- class QKeyEvent;
- /*!
- \brief A collection of event patterns
- QwtEventPattern introduces an level of indirection for mouse and
- keyboard inputs. Those are represented by symbolic names, so
- the application code can be configured by individual mappings.
- \sa QwtPicker, QwtPickerMachine, QwtPlotZoomer
- */
- class QWT_EXPORT QwtEventPattern
- {
- public:
- /*!
- \brief Symbolic mouse input codes
- QwtEventPattern implements 3 different settings for
- mice with 1, 2, or 3 buttons that can be activated
- using initMousePattern(). The default setting is for
- 3 button mice.
- Individual settings can be configured using setMousePattern().
- \sa initMousePattern(), setMousePattern(), setKeyPattern()
- */
- enum MousePatternCode
- {
- /*!
- The default setting for 1, 2 and 3 button mice is:
- - Qt::LeftButton
- - Qt::LeftButton
- - Qt::LeftButton
- */
- MouseSelect1,
- /*!
- The default setting for 1, 2 and 3 button mice is:
- - Qt::LeftButton + Qt::ControlModifier
- - Qt::RightButton
- - Qt::RightButton
- */
- MouseSelect2,
- /*!
- The default setting for 1, 2 and 3 button mice is:
- - Qt::LeftButton + Qt::AltModifier
- - Qt::LeftButton + Qt::AltModifier
- - Qt::MidButton
- */
- MouseSelect3,
- /*!
- The default setting for 1, 2 and 3 button mice is:
- - Qt::LeftButton + Qt::ShiftModifier
- - Qt::LeftButton + Qt::ShiftModifier
- - Qt::LeftButton + Qt::ShiftModifier
- */
- MouseSelect4,
- /*!
- The default setting for 1, 2 and 3 button mice is:
- - Qt::LeftButton + Qt::ControlButton | Qt::ShiftModifier
- - Qt::RightButton + Qt::ShiftModifier
- - Qt::RightButton + Qt::ShiftModifier
- */
- MouseSelect5,
- /*!
- The default setting for 1, 2 and 3 button mice is:
- - Qt::LeftButton + Qt::AltModifier + Qt::ShiftModifier
- - Qt::LeftButton + Qt::AltModifier | Qt::ShiftModifier
- - Qt::MidButton + Qt::ShiftModifier
- */
- MouseSelect6,
- //! Number of mouse patterns
- MousePatternCount
- };
- /*!
- \brief Symbolic keyboard input codes
- Individual settings can be configured using setKeyPattern()
- \sa setKeyPattern(), setMousePattern()
- */
- enum KeyPatternCode
- {
- //! Qt::Key_Return
- KeySelect1,
- //! Qt::Key_Space
- KeySelect2,
- //! Qt::Key_Escape
- KeyAbort,
- //! Qt::Key_Left
- KeyLeft,
- //! Qt::Key_Right
- KeyRight,
- //! Qt::Key_Up
- KeyUp,
- //! Qt::Key_Down
- KeyDown,
- //! Qt::Key_Plus
- KeyRedo,
- //! Qt::Key_Minus
- KeyUndo,
- //! Qt::Key_Escape
- KeyHome,
- //! Number of key patterns
- KeyPatternCount
- };
- //! A pattern for mouse events
- class MousePattern
- {
- public:
- //! Constructor
- MousePattern( Qt::MouseButton btn = Qt::NoButton,
- Qt::KeyboardModifiers modifierCodes = Qt::NoModifier ):
- button( btn ),
- modifiers( modifierCodes )
- {
- }
- //! Button
- Qt::MouseButton button;
- //! Keyboard modifier
- Qt::KeyboardModifiers modifiers;
- };
- //! A pattern for key events
- class KeyPattern
- {
- public:
- //! Constructor
- KeyPattern( int keyCode = Qt::Key_unknown,
- Qt::KeyboardModifiers modifierCodes = Qt::NoModifier ):
- key( keyCode ),
- modifiers( modifierCodes )
- {
- }
- //! Key code
- int key;
- //! Modifiers
- Qt::KeyboardModifiers modifiers;
- };
- QwtEventPattern();
- virtual ~QwtEventPattern();
- void initMousePattern( int numButtons );
- void initKeyPattern();
- void setMousePattern( MousePatternCode, Qt::MouseButton button,
- Qt::KeyboardModifiers = Qt::NoModifier );
- void setKeyPattern( KeyPatternCode, int key,
- Qt::KeyboardModifiers modifiers = Qt::NoModifier );
- void setMousePattern( const QVector<MousePattern> & );
- void setKeyPattern( const QVector<KeyPattern> & );
- const QVector<MousePattern> &mousePattern() const;
- const QVector<KeyPattern> &keyPattern() const;
- QVector<MousePattern> &mousePattern();
- QVector<KeyPattern> &keyPattern();
- bool mouseMatch( MousePatternCode, const QMouseEvent * ) const;
- bool keyMatch( KeyPatternCode, const QKeyEvent * ) const;
- protected:
- virtual bool mouseMatch( const MousePattern &, const QMouseEvent * ) const;
- virtual bool keyMatch( const KeyPattern &, const QKeyEvent * ) const;
- private:
- #if defined(_MSC_VER)
- #pragma warning(push)
- #pragma warning(disable: 4251)
- #endif
- QVector<MousePattern> d_mousePattern;
- QVector<KeyPattern> d_keyPattern;
- #if defined(_MSC_VER)
- #pragma warning(pop)
- #endif
- };
- //! Compare operator
- inline bool operator==( QwtEventPattern::MousePattern b1,
- QwtEventPattern::MousePattern b2 )
- {
- return b1.button == b2.button && b1.modifiers == b2.modifiers;
- }
- //! Compare operator
- inline bool operator==( QwtEventPattern::KeyPattern b1,
- QwtEventPattern::KeyPattern b2 )
- {
- return b1.key == b2.key && b1.modifiers == b2.modifiers;
- }
- #endif
|