summaryrefslogtreecommitdiff
path: root/libopie2/opieui/okeyconfigwidget.h
Side-by-side diff
Diffstat (limited to 'libopie2/opieui/okeyconfigwidget.h') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opieui/okeyconfigwidget.h142
1 files changed, 121 insertions, 21 deletions
diff --git a/libopie2/opieui/okeyconfigwidget.h b/libopie2/opieui/okeyconfigwidget.h
index bcbb579..0d5d26f 100644
--- a/libopie2/opieui/okeyconfigwidget.h
+++ b/libopie2/opieui/okeyconfigwidget.h
@@ -1,104 +1,204 @@
+/*
+ * Copyright (C) 2004
+ * LGPL v2 zecke@handhelds.org
+ */
+
+
#ifndef ODP_KEY_CONFIG_WIDGET_H
#define ODP_KEY_CONFIG_WIDGET_H
#include <opie2/oconfig.h>
+#include <opie2/odevice.h>
#include <qstring.h>
#include <qpixmap.h>
#include <qbytearray.h>
#include <qhbox.h>
#include <qvaluelist.h>
class QKeyEvent;
namespace Opie {
namespace Ui {
+
+/**
+ * \brief small class representing a Key with possible modifiers
+ * This class holds information about key code and possible
+ * modifier state. That is the lowest level of the key input
+ * functions.
+ * There are also static methods to get special keys.
+ * OKeyPair will be used with \see OKeyConfigItem
+ *
+ * @since 1.2
+ */
+class OKeyPair {
+public:
+ typedef QValueList<OKeyPair> OKeyPairList;
+ OKeyPair( int key = -1, int modifier = -1);
+ ~OKeyPair();
+
+ bool operator==( const OKeyPair& );
+ bool operator!=( const OKeyPair& );
+
+ bool isEmpty()const;
+
+ int keycode()const;
+ int modifier()const;
+
+ void setKeycode( int );
+ void setModifier( int );
+
+ static OKeyPair returnKey();
+ static OKeyPair leftArrowKey();
+ static OKeyPair rightArrowKey();
+ static OKeyPair upArrowKey();
+ static OKeyPair downArrowKey();
+ static OKeyPair emptyKey();
+ static OKeyPairList hardwareKeys();
+
+private:
+ int m_key = -1;
+ int m_mod = -1;
+ class Private;
+ Private* d;
+};
+
+/**
+ * A class to represent an OKeyPair.
+ * It consists out of a Text exposed to the user, Config Key Item,
+ * Pixmap, A default OKeyPair and the set OKeyPair.
+ * You can also pass an id to it
+ *
+ * @since 1.1.2
+ */
class OKeyConfigItem {
friend class OKeyConfigManager;
public:
typedef QValueList<OKeyConfigItem> OKeyConfigItemList;
OKeyConfigItem( const QString& text = QString::null , const QCString& config_key = QCString(),
const QPixmap& symbol = QPixmap(),
- int key = 0, int mod = 0,
- int default_key = 0, int default_modified = 0 );
+ int id = -1,
+ const OKeyPair& set = OKeyPair::emptyKey(),
+ const OKeyPair& def = OKeyPair::emptyKey() );
+ OKeyConfigItem( const Opie::Core::ODeviceButton& );
~OKeyConfigItem();
+ bool operator==( const OKeyConfigItem& );
+ bool operator!=( const OKeyConfigItem& );
+
QString text()const;
QPixmap pixmap()const;
- int key()const;
- int modifier()const;
- int defaultKey()const;
- int defaultModifier()const;
+ int id()const;
+
+ OKeyPair keyPair()const;
+ OKeyPair defaultKeyPair()const;
+ QCString configKey()const;
void setText( const QString& text );
void setPixmap( const QPixmap& );
- void setKey( int );
- void setModied( int );
- void setDefaultKey( int );
- void setDefaultModifier( int );
+ void setKeyPair( const OKeyPair& );
+ void setDefaultKeyPair( const OKeyPair& );
- bool isConfigured()const;
bool isEmpty()const;
+
+protected:
+ void setId( int id );
+ void setConfigKey( const QCString& );
+
private:
+ int m_id;
QString m_text;
QCString m_config;
QPixmap m_pix;
- int m_key;
- int m_mod;
- int m_defKey;
- int m_defMod;
+ OKeyPair m_key;
+ OKeyPair m_def;
class Private;
Private *d;
};
-class OKeyConfig : public QObject {
+
+/**
+ * \brief A manager to load and save Key Actions and get notified
+ * This is the Manager for KeyActions.
+ * You can say from which config and group to read data, to grab the
+ * keyboard to handle hardware keys, you can supply a blacklist of
+ * keys which should not be used by allowed to be used.
+ * You can even pass this manager to a Widget to do the configuration for you.
+ * You need to add OKeyConfigItem for your keys and then issue a load() to
+ * read the Key information.
+ * You can either handle the QKeyEvent yourself and ask this class if it is
+ * handled by your action and let give you the action. Or you can install
+ * the event filter and get a signal.
+ *
+ * @since 1.1.2
+ */
+class OKeyConfigManager : public QObject {
Q_OBJECT
public:
- OKeyConfig(Opie::Core::OConfig *conf = 0, bool grabkeyboard);
- ~OKeyConfig();
+ OKeyConfigManager(Opie::Core::OConfig *conf = 0,
+ const QString& group = QString::null,
+ OKeyPairList &block = OKeyPairList(),
+ bool grabkeyboard = false, QObject *= 0,
+ const char* name = 0 );
+ ~OKeyConfigManager();
void load();
void save();
OKeyConfigItem handleKeyEvent( QKeyEvent* );
QString handleKeyEventString( QKeyEvent* );
void addKeyConfig( const OKeyConfigItem& );
void removeKeyConfig( const OKeyConfigItem& );
+ void addBlackList( const OKeyPair& );
+ void removeBlackList( const OKeyPair& );
+ void clearBlackList();
+ OKeyPairList blackList()const;
+
void handleWidget( QWidget* );
+
+ bool eventFilter( QObject*, QEvent* );
signals:
- void keyConfigChanged( OKeyConfig* );
- void actionActivated( QWidget*, QKeyEvent*, const OKeyConfigItem& );
+ void keyConfigChanged( Opie::Ui::OKeyConfigManager* );
+ void actionActivated( QWidget*, QKeyEvent*, const Opie::Ui::OKeyConfigItem& );
private:
+ OKeyPairList m_blackKeys;
OKeyConfigItemList m_keys;
QValueList<QWidget*> m_widgets;
+ Opie::Core::OConfig *m_conf;
+ QString m_group;
+ bool m_grab : 1;
class Private;
Private *d;
};
class OKeyConfigWidget : public QHBox {
Q_OBJECT
public:
enum ChangeMode { Imediate, Queu };
OKeyConfigWidget( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
- OKeyConfigWidget( OKeyConfig *, QWidget* parent = 0, const char* = 0, WFlags = 0 );
+ OKeyConfigWidget( OKeyConfigManager *, QWidget* parent = 0, const char* = 0, WFlags = 0 );
~OKeyConfigWidget();
void setChangeMode( enum ChangeMode );
ChangeMode changeMode()const;
+ void setKeyConfig( OKeyConfigManager* );
+
void reload();
+ void save();
private:
+ OKeyConfigManager* m_manager;
class Private;
Private *d;
};
}
}