summaryrefslogtreecommitdiff
path: root/libopie2/opieui/okeyconfigwidget.cpp
Side-by-side diff
Diffstat (limited to 'libopie2/opieui/okeyconfigwidget.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opieui/okeyconfigwidget.cpp408
1 files changed, 408 insertions, 0 deletions
diff --git a/libopie2/opieui/okeyconfigwidget.cpp b/libopie2/opieui/okeyconfigwidget.cpp
new file mode 100644
index 0000000..d52a55f
--- a/dev/null
+++ b/libopie2/opieui/okeyconfigwidget.cpp
@@ -0,0 +1,408 @@
+#include "okeyconfigwidget.h"
+
+
+
+
+using namespace Opie::Ui;
+
+
+/**
+ * The default Constructor of a OKeyPair.
+ * A Key and a Modifier ( Alt/Shift/Ctrl )
+ * needs to be supplied.
+ * Use Qt::Key for the information.
+ * The default arguments create an Empty OKeyPair. If you
+ * want to get an empty OKeyPair use the static method for getting
+ * the emptyKey()
+ *
+ * @see OKeyPair OKeyPair::emptyKey()
+ */
+OKeyPair::OKeyPair( int key, int mod )
+ : m_key( key ), m_mod( mod )
+{}
+
+/**
+ * The destructor
+ */
+OKeyPair::~OKeyPair() {}
+
+
+/**
+ * Is this OKeyPair empty/valid?
+ */
+bool OKeyPair::isEmpty()const {
+ return ( ( m_key == -1 )&& ( m_mod == -1 ) );
+}
+
+/**
+ * get the keycode for this OKeyPair. The Key relates to Qt::Key.
+ *
+ * @see Qt::Key
+ * @see setKey
+ */
+int OKeyPair::keycode()const {
+ return m_key;
+}
+
+/**
+ * get the modifier key for this OKeyPair. The Modifier State relates
+ * to the Qt::Modifier
+ *
+ * @see Qt::Modifier
+ * @see setModifier
+ */
+int OKeyPair::modifier()const {
+ return m_mod;
+}
+
+
+/**
+ * Set the keycode
+ * @param key The Keycode to set
+ *
+ * @see keycode()
+ * @see Qt::Key
+ */
+void OKeyPair::setKeycode( int key ) {
+
+}
+
+/**
+ * Set the modifier key
+ *
+ * @param the Modifier key
+ * @see Qt::Modifier
+ * @see modifier()
+ */
+void OKeyPair::setModifier( int mod ) {
+
+}
+
+/**
+ * Return an OKeyPair for the Return Key without any modifier.
+ */
+OKeyPair OKeyPair::returnKey() {
+ return OKeyPair( Qt::Key_Return, 0 );
+}
+
+/**
+ * Return an OKeyPair for the Left Arrow Key
+ * without any modifier Key
+ */
+OKeyPair OKeyPair::leftArrowKey() {
+ return OKeyPair( Qt::Key_Left, 0 );
+}
+
+/**
+ * Return an OKeyPair for the Right Arrow Key
+ * without any modifier Key
+ */
+OKeyPair OKeyPair::rightArrowKey() {
+ return OKeyPair( Qt::Key_Right, 0 );
+}
+
+/**
+ * Return an OKeyPair for the Up Arrow Key
+ * without any modifier Key
+ */
+OKeyPair OKeyPair::upArrowKey() {
+ return OKeyPair( Qt::Key_Up, 0 );
+}
+
+/**
+ * Return an OKeyPair for the Down Arrow Key
+ * without any modifier Key
+ */
+OKeyPair OKeyPair::downArrowKey() {
+ return OKeyPair( Qt::Key_Down, 0 );
+}
+
+/**
+ * Return an Empty OKeyPair
+ */
+OKeyPair OKeyPair::emptyKey() {
+ return OKeyPair;
+}
+
+/**
+ * This functions uses the Opie::Core::ODevice::buttons
+ * for OKeyPairList
+ *
+ * @see Opie::Core::ODevice
+ * @see Opie::Core::ODeviceButton
+ * @see Opie::Core::ODevice::button
+ */
+OKeyPairList OKeyPair::hardwareKeys() {
+ const QValueList<Opie::Core::ODeviceButton> but = Opie::Core::ODevice::inst()->buttons();
+ OKeyPairList lst;
+
+ for ( QValueList<Opie::Core::ODeviceButton>::Iterator it = but.begin();
+ it != but.end(); ++it )
+ lst.append( OKeyPair( (*it).keycode(), 0 ) );
+
+
+ return lst;
+}
+
+/**
+ * The normal Constructor to create a OKeyConfigItem
+ *
+ * You can set the the key paramater of this item but if
+ * you use this item with the OKeyConfigManager your setting
+ * will be overwritten.
+ *
+ * @param text The text exposed to the user
+ * @param config_key The key used in the config
+ * @param pix A Pixmap associated with this Item
+ * @param key The OKeyPair used
+ * @param def The OKeyPair used as default
+ *
+ */
+OKeyConfigItem::OKeyConfigItem( const QString& text, const QCString& config_key,
+ const QPixmap& pix, int id, const OKeyPair& def,
+ const OKeyPair& key)
+ : m_text( text ), m_config( config_key ), m_pix( pix ),
+ m_id( id ), m_def( def ), m_key( key ) {}
+
+/**
+ * A special Constructor for converting from an Opie::Core::ODeviceButton
+ * delivered by Opie::Core::ODevice::buttons()
+ * There is no Config Key set and both default key and key are set
+ * to Opie::Core::ODeviceButton::keycode() and 0 to modifier
+ *
+ * @see Opie::Core::ODevice
+ * @see Opie::Core::ODeviceButton
+ * @see Opie::Core::ODevice::buttons()
+ */
+OKeyConfigItem::OKeyConfigItem( Opie::Core::ODeviceButton& b )
+ : m_text( b.userText() ), m_pix( b.pixmap() ), m_id( -1 )
+ m_def( OKeyPair( b.keycode(), 0 ) ), m_key( OKeyPair( b.keycode(), 0 ) )
+{}
+
+
+/**
+ * Destructor
+ */
+OKeyConfigItem::~OKeyConfigItem() {}
+
+
+/**
+ * The text exposed to the user
+ *
+ * @see setText
+ */
+QString OKeyConfigItem::text()const {
+ return m_text;
+}
+
+/**
+ * The pixmap shown to the user for your action/key
+ *
+ * @see setPixmap
+ */
+QPixmap OKeyConfigItem::pixmap()const {
+ return m_pix;
+}
+
+/**
+ * Return the OKeyPair this OKeyConfigItem is configured for.
+ *
+ * @see setKeyPair
+ */
+OKeyPair OKeyConfigItem::keyPair()const {
+ return m_key;
+}
+
+/**
+ * Return the default OKeyPair
+ * @see setDefaultKeyPair
+ */
+OKeyPair OKeyConfigItem::defaultKeyPair()const {
+ return m_def;
+}
+
+
+/**
+ * Return the Id you assigned to this item.
+ * setting is only possible by the constructor
+ */
+int OKeyConfigItem::id()const{
+ return m_id;
+}
+
+/**
+ * reutrn the Config Key. Setting it is only possible
+ * by the constructor
+ */
+QCString OKeyConfigItem::configKey()const {
+ return m_config;
+}
+
+/**
+ * Set the text
+ *
+ * @param text Set the Text of this Action to text
+ * @see text()
+ */
+void OKeyConfigItem::setText( const QString& text ) {
+ m_text = text;
+}
+
+/**
+ * Set the pixmap of this action
+ *
+ * @param pix The Pixmap to set
+ * @see pixmap()
+ */
+void OKeyConfigItem::setPixmap( const QPixmap& pix ) {
+ m_pix = pix;
+}
+
+/**
+ * Set the KeyPair the OKeyConfigItem uses.
+ * Your set Key could get overwritten if you use
+ * the manager or GUI to configure the key
+ *
+ * @param key Set the OKeyPair used
+ * @see keyPair()
+ */
+void OKeyConfigItem::setKeyPair( const OKeyPair& key) {
+ m_key = key;
+}
+
+/**
+ * Set the default KeyPair.
+ *
+ * @param key The default keypair
+ * @see defaultKeyPair()
+ */
+void OKeyConfigItem::setDefaultKeyPair( const OKeyPair& key ) {
+ m_def = key;
+}
+
+/**
+ * @internal
+ */
+void OKeyConfigItem::setConfigKey( const QCString& str) {
+ m_config = str;
+ m_config.detach();
+}
+
+/**
+ * @internal
+ */
+void OKeyConfigItem::setId( int id ) {
+ m_id = id;
+}
+
+/**
+ * If the item is not configured isEmpty() will return true
+ * It is empty if no text is present and no default
+ * and no configured key
+ */
+bool OKeyConfigItem::isEmpty()const {
+ if ( !m_def.isEmpty() ) return false;
+ if ( !m_key.isEmpty() ) return false;
+ if ( !m_text.isEmpty() ) return false;
+
+ return true;
+}
+
+/**
+ * \brief c'tor
+ * The Constructor for a OKeyConfigManager
+ *
+ * You can use this manager in multiple ways. Either make it handle
+ * QKeyEvents
+ *
+ * \code
+ * Opie::Core::Config conf = oApp->config();
+ * Opie::Ui::OKeyPairList blackList;
+ * blackList.append(Opie::Ui::OKeyPair::leftArrowKey());
+ * blackList.append(Opie::Ui::OKeyPair::rightArrowKey());
+ * Opie::Ui::OKeyConfigManager *manager = new Opie::Ui::OKeyConfigManager(conf,"key_actions",blackList,
+ * false);
+ * QListView *view = new QListView();
+ * manager->handleWidget(view);
+ * manager->addKeyConfig( Opie::Ui::OKeyPair::returnKey());
+ * manager->load();
+ *
+ * connect(manager,SIGNAL(actionActivated(QWidget*,QKeyEvent*,const Opie::Ui::OKeyConfigItem&)),
+ * this,SLOT(slotHandleKey(QWidget*,QKeyEvent*,const Opie::Ui::OKeyConfigItem&)));
+ *
+ * ....
+ *
+ * void update(){
+ * QDialog diag(true);
+ * QHBoxLayout *lay = new QHBoxLayout(&diag);
+ * Opie::Ui::OKeyConfigWidget *wid = new Opie::Ui::OKeyConfigWidget(manager,&diag);
+ * wid->setChangeMode(Opie::Ui::OKeyConfigWidget::Queu);
+ * lay->addWidget(wid);
+ * if(QPEApplication::execDialog( &diag)== QDialog::Accept){
+ * wid->save();
+ * }
+ * }
+ *
+ * ....
+ * MyListView::keyPressEvent( QKeyEvent* e ){
+ * Opie::Ui::OKeyConfigItem item = manager->handleKeyEvent(e);
+ * if(!item.isEmpty() ){
+ * switch(item.id()){
+ * case My_Delete_Key:
+ * break;
+ * }
+ * }
+ * }
+ *
+ * \endcode
+ *
+ * @param conf The Config where the KeySetting should be stored
+ * @param group The group where the KeySetting will be stored
+ * @param black Which keys shouldn't be allowed to handle
+ * @param grabkeyboard Calls QPEApplication::grabKeyboard to allow handling of DeviceButtons
+ * @param par The parent/owner of this manager
+ * @param name The name of this object
+ */
+OKeyConfigManager::OKeyConfigManager( Opie::Core::OConfig* conf,
+ const QString& group,
+ OKeyPairList black,
+ bool grabkeyboard, QObject* par,
+ const char* name)
+ : QObject( par, name ), m_conf( conf ), m_group( group ),
+ m_blackKeys( black ), m_grab( grabkeyboard )
+{}
+
+
+/**
+ * Destructor
+ */
+OKeyConfigWidget::~OKeyConfigWidget() {}
+
+/**
+ * Load the Configuration from the OConfig
+ * If a Key is restricted but was in the config we will
+ * make the empty
+ * We will change the group of the OConfig Item!
+ */
+void OKeyConfigWidget::load() {
+ m_conf->setGroup( m_group );
+
+ /*
+ * Read each item
+ */
+ int key, mod;
+ for( OKeyConfigItemList::Iterator it = m_keys.begin();
+ it != m_keys.end(); ++it ) {
+ key = m_conf->readNumEntry( (*it).configKey()+"key", (*it).defaultKeyPair().keycode() );
+ mod = m_conf->readNumEntry( (*it).configKey()+"mod", (*it).defaultKeyPair().modifier() );
+ (*it).setKeyPair( OKeyPair(key, mod) );
+ }
+}
+
+/**
+ * We will save the current configuration
+ * to the OConfig. We will change the group.
+ */
+void OKeyConfigWidget::save() {
+
+}