-rw-r--r-- | libopie2/opieui/okeyconfigwidget.cpp | 73 | ||||
-rw-r--r-- | libopie2/opieui/okeyconfigwidget.h | 12 |
2 files changed, 61 insertions, 24 deletions
diff --git a/libopie2/opieui/okeyconfigwidget.cpp b/libopie2/opieui/okeyconfigwidget.cpp index 3e08416..8967d77 100644 --- a/libopie2/opieui/okeyconfigwidget.cpp +++ b/libopie2/opieui/okeyconfigwidget.cpp @@ -7,8 +7,10 @@ #include <qpushbutton.h> #include <qbuttongroup.h> - +#include <qmessagebox.h> #include <qaccel.h> #include <qlayout.h> #include <qlabel.h> + +/* non gui */ #include <qtimer.h> @@ -160,5 +162,5 @@ OKeyPair::List OKeyPair::hardwareKeys() { * @see operator!= */ -bool OKeyPair::operator==( const OKeyPair& pair) { +bool OKeyPair::operator==( const OKeyPair& pair)const { if ( m_key != pair.m_key ) return false; if ( m_mod != pair.m_mod ) return false; @@ -170,5 +172,5 @@ bool OKeyPair::operator==( const OKeyPair& pair) { * Not equal operator. calls the equal operator internally */ -bool OKeyPair::operator!=( const OKeyPair& pair) { +bool OKeyPair::operator!=( const OKeyPair& pair)const { return !(*this == pair); } @@ -372,5 +374,5 @@ bool OKeyConfigItem::isEmpty()const { * Check if the KeyPairs are the same */ -bool OKeyConfigItem::operator==( const OKeyConfigItem& conf ) { +bool OKeyConfigItem::operator==( const OKeyConfigItem& conf )const { /* if ( isEmpty() == conf.isEmpty() ) return true; else if ( isEmpty() != conf.isEmpty() ) return false; @@ -390,5 +392,5 @@ bool OKeyConfigItem::operator==( const OKeyConfigItem& conf ) { } -bool OKeyConfigItem::operator!=( const OKeyConfigItem& conf ) { +bool OKeyConfigItem::operator!=( const OKeyConfigItem& conf )const { return !( *this == conf ); } @@ -484,9 +486,9 @@ void OKeyConfigManager::load() { */ int key, mod; - for( OKeyConfigItem::List::Iterator it = m_keys.begin(); - it != m_keys.end(); ++it ) { + for( OKeyConfigItem::List::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() ); OKeyPair okey( key, mod ); + if ( !m_blackKeys.contains( okey ) && key != -1 && mod != -1 ) (*it).setKeyPair( OKeyPair(key, mod) ); @@ -507,6 +509,6 @@ void OKeyConfigManager::save() { * Write each item */ - for( OKeyConfigItem::List::Iterator it = m_keys.begin(); - it != m_keys.end(); ++it ) { + for( OKeyConfigItem::List::Iterator it = m_keys.begin();it != m_keys.end(); ++it ) { + /* skip empty items */ if ( (*it).isEmpty() ) continue; @@ -515,5 +517,5 @@ void OKeyConfigManager::save() { /* * don't write if it is the default setting - * FIXME allow to remove Keys + * FIXME allow to remove Keys from config if ( (pair.keycode() == deft.keycode()) && (pair.modifier()== deft.modifier() ) ) @@ -577,5 +579,4 @@ int OKeyConfigManager::handleKeyEventId( QKeyEvent* ev) { void OKeyConfigManager::addKeyConfig( const OKeyConfigItem& item ) { m_keys.append( item ); - qWarning( "m_keys count is now %d", m_keys.count() ); delete m_map; m_map = 0; } @@ -587,5 +588,4 @@ void OKeyConfigManager::addKeyConfig( const OKeyConfigItem& item ) { void OKeyConfigManager::removeKeyConfig( const OKeyConfigItem& item ) { m_keys.remove( item ); - qWarning( "m_keys count is now %d", m_keys.count() ); delete m_map; m_map = 0; } @@ -761,4 +761,7 @@ namespace Private { } + /* + * the virtual and hardware key events have both issues... + */ void fixupKeys( int& key, int &mod, QKeyEvent* e ) { key = e->key(); @@ -1009,5 +1012,4 @@ void OKeyConfigWidget::slotListViewItem( QListViewItem* _item) { void OKeyConfigWidget::slotNoKey() { - qWarning( "No Key" ); m_none->setChecked( true ); m_cus ->setChecked( false ); @@ -1069,4 +1071,37 @@ void OKeyConfigWidget::slotConfigure() { } +bool OKeyConfigWidget::sanityCheck( Opie::Ui::Private::OKeyListViewItem* item, + const OKeyPair& newItem ) { + OKeyPair::List bList = item->manager()->blackList(); + for ( OKeyPair::List::Iterator it = bList.begin(); it != bList.end(); ++it ) { + /* black list matched */ + if ( *it == newItem ) { + QMessageBox::warning( 0, tr("Key is on BlackList" ), + tr("<qt>The Key you choose is on the black list " + "and may not be used with this manager. Please " + "use a different key.</qt>" ) ); + return false; + } + } + /* no we need to check the other items which is dog slow */ + QListViewItemIterator it( item->parent() ); + while ( it.current() ) { + /* if not our parent and not us */ + if (it.current()->parent() && it.current() != item) { + /* damn already given away*/ + if ( newItem == static_cast<Opie::Ui::Private::OKeyListViewItem*>(it.current() )->item().keyPair() ) { + QMessageBox::warning( 0, tr("Key is already assigned" ), + tr("<qt>The Key you choose is already taken by " + "a different Item of your config. Please try" + "using a different key.</qt>" ) ); + return false; + } + } + ++it; + } + + return true; +} + void OKeyConfigWidget::updateItem( Opie::Ui::Private::OKeyListViewItem *item, const OKeyPair& newItem) { @@ -1075,7 +1110,8 @@ void OKeyConfigWidget::updateItem( Opie::Ui::Private::OKeyListViewItem *item, * check if another item uses this key which is o(n) at least */ - if ( !newItem.isEmpty() ) { + if ( !newItem.isEmpty() && !sanityCheck(item, newItem )) + return; + - } /* @@ -1129,5 +1165,4 @@ void OKeyChooserConfigDialog::keyPressEvent( QKeyEvent* ev ) { return; - qWarning( "Key Press Event" ); int mod, key; Opie::Ui::Private::fixupKeys( key,mod, ev ); @@ -1154,11 +1189,11 @@ void OKeyChooserConfigDialog::keyPressEvent( QKeyEvent* ev ) { break; } - if (mod ) { + if (mod ) m_mod |= mod; - }else + else m_key = key; if ( ( !mod || m_key ) && !m_timer->isActive() ) - m_timer->start( 50, true ); + m_timer->start( 150, true ); m_keyPair = OKeyPair( m_key, m_mod ); diff --git a/libopie2/opieui/okeyconfigwidget.h b/libopie2/opieui/okeyconfigwidget.h index 9e26719..f75ed99 100644 --- a/libopie2/opieui/okeyconfigwidget.h +++ b/libopie2/opieui/okeyconfigwidget.h @@ -50,6 +50,6 @@ public: ~OKeyPair(); - bool operator==( const OKeyPair& ); - bool operator!=( const OKeyPair& ); + bool operator==( const OKeyPair& )const; + bool operator!=( const OKeyPair& )const; bool isEmpty()const; @@ -96,6 +96,6 @@ public: ~OKeyConfigItem(); - bool operator==( const OKeyConfigItem& ); - bool operator!=( const OKeyConfigItem& ); + bool operator==( const OKeyConfigItem& )const; + bool operator!=( const OKeyConfigItem& )const; QString text()const; @@ -254,6 +254,8 @@ private slots: private: + static bool sanityCheck( Opie::Ui::Private::OKeyListViewItem* man, + const OKeyPair& newItem ); void updateItem( Opie::Ui::Private::OKeyListViewItem* man, - const OKeyPair& newItem); + const OKeyPair& newItem); void initUi(); Opie::Ui::OListView *m_view; |