00001
00002
00003
00004
00005
00006
00007 #ifndef ODP_KEY_MANAGER_WIDGET_H
00008 #define ODP_KEY_MANAGER_WIDGET_H
00009
00010 #include <opie2/oconfig.h>
00011 #include <opie2/odevice.h>
00012
00013 #include <qstring.h>
00014 #include <qpixmap.h>
00015 #include <qcstring.h>
00016 #include <qvaluelist.h>
00017
00018 namespace Opie {
00019 namespace Core {
00020
00031 class OKeyPair {
00032 public:
00033 typedef QValueList<OKeyPair> List;
00034 OKeyPair( int key = -1, int modifier = -1);
00035 ~OKeyPair();
00036
00037 bool operator==( const OKeyPair& )const;
00038 bool operator!=( const OKeyPair& )const;
00039
00040 bool isEmpty()const;
00041
00042 int keycode()const;
00043 int modifier()const;
00044
00045 void setKeycode( int );
00046 void setModifier( int );
00047
00048 static OKeyPair returnKey();
00049 static OKeyPair leftArrowKey();
00050 static OKeyPair rightArrowKey();
00051 static OKeyPair upArrowKey();
00052 static OKeyPair downArrowKey();
00053 static OKeyPair emptyKey();
00054 static OKeyPair::List hardwareKeys();
00055
00056 private:
00057 int m_key;
00058 int m_mod;
00059 class Private;
00060 Private* d;
00061 };
00062
00071 class OKeyConfigItem {
00072 friend class OKeyConfigManager;
00073 public:
00074 typedef QValueList<OKeyConfigItem> List;
00075 OKeyConfigItem( const QString& text = QString::null , const QCString& config_key = QCString(),
00076 const QPixmap& symbol = QPixmap(),
00077 int id = -1,
00078 const OKeyPair& def = OKeyPair::emptyKey(),
00079 QObject *caller = 0, const char* slot = 0);
00080 OKeyConfigItem( const Opie::Core::ODeviceButton& );
00081 ~OKeyConfigItem();
00082
00083 bool operator==( const OKeyConfigItem& )const;
00084 bool operator!=( const OKeyConfigItem& )const;
00085
00086 QString text()const;
00087 QPixmap pixmap()const;
00088 int id()const;
00089
00090
00091
00092 OKeyPair keyPair()const;
00093 OKeyPair defaultKeyPair()const;
00094 QCString configKey()const;
00095
00096
00097 void setText( const QString& text );
00098 void setPixmap( const QPixmap& );
00099 void setKeyPair( const OKeyPair& );
00100 void setDefaultKeyPair( const OKeyPair& );
00101
00102 bool isEmpty()const;
00103
00104 protected:
00105 QObject *object()const;
00106 QCString slot()const;
00107 void setId( int id );
00108 void setConfigKey( const QCString& );
00109
00110 private:
00111 QString m_text;
00112 QCString m_config;
00113 QPixmap m_pix;
00114 int m_id;
00115 OKeyPair m_key;
00116 OKeyPair m_def;
00117 QObject *m_obj;
00118 QCString m_str;
00119 class Private;
00120 Private *d;
00121 };
00122
00123
00124
00143 class OKeyConfigManager : public QObject {
00144 Q_OBJECT
00145 typedef QMap<int, OKeyConfigItem::List> OKeyMapConfigPrivate;
00146 public:
00147 enum EventMask {
00148 MaskPressed = 0x1,
00149 MaskReleased = 0x2,
00150 };
00151
00152 OKeyConfigManager(Opie::Core::OConfig *conf = 0,
00153 const QString& group = QString::null,
00154 const OKeyPair::List &block = OKeyPair::List(),
00155 bool grabkeyboard = false, QObject * par = 0,
00156 const char* name = 0 );
00157 virtual ~OKeyConfigManager();
00158
00159 public slots:
00160 virtual void load();
00161 virtual void save();
00162 void handleWidget( QWidget* );
00163
00164 public:
00165 virtual OKeyConfigItem handleKeyEvent( QKeyEvent* );
00166 int handleKeyEventId( QKeyEvent* );
00167
00168 void addKeyConfig( const OKeyConfigItem& );
00169 void removeKeyConfig( const OKeyConfigItem& );
00170 void clearKeyConfig();
00171
00172 void addToBlackList( const OKeyPair& );
00173 void removeFromBlackList( const OKeyPair& );
00174 void clearBlackList();
00175 OKeyPair::List blackList()const;
00176
00177 bool eventFilter( QObject*, QEvent* );
00178
00186 void setEventMask(uint aMask);
00194 uint eventMask()const;
00202 bool testEventMask(uint aMask);
00210 void addEventMask(uint aMask);
00218 void clearEventMask(uint aMask);
00219
00220 OKeyConfigItem::List keyConfigList()const;
00221
00222 signals:
00228 void actionActivated( QWidget*, QKeyEvent*, const Opie::Core::OKeyConfigItem& );
00229
00237 void actionActivated( QWidget* par, QKeyEvent* key);
00238
00239 private:
00240 OKeyConfigItem::List keyList( int );
00241 OKeyConfigItem::List m_keys;
00242 QValueList<QWidget*> m_widgets;
00243 Opie::Core::OConfig *m_conf;
00244 QString m_group;
00245 OKeyPair::List m_blackKeys;
00246 bool m_grab : 1;
00247 OKeyMapConfigPrivate *m_map;
00248 class Private;
00249 Private *d;
00250 uint m_event_mask;
00251 };
00252
00253 inline bool OKeyConfigManager::testEventMask(uint aMask)
00254 {
00255 return (m_event_mask&aMask)!=0;
00256 }
00257
00258 inline void OKeyConfigManager::addEventMask(uint aMask)
00259 {
00260 m_event_mask |= aMask;
00261 }
00262
00263 inline void OKeyConfigManager::clearEventMask(uint aMask)
00264 {
00265 m_event_mask &= ~aMask;
00266 }
00267
00268 inline void OKeyConfigManager::setEventMask(uint aMask)
00269 {
00270 m_event_mask = aMask;
00271 }
00272
00273 inline uint OKeyConfigManager::eventMask()const
00274 {
00275 return m_event_mask;
00276 }
00277
00278 }
00279 }
00280
00281 #endif