-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 @@ -8,3 +8,3 @@ #include <qbuttongroup.h> - +#include <qmessagebox.h> #include <qaccel.h> @@ -12,2 +12,4 @@ #include <qlabel.h> + +/* non gui */ #include <qtimer.h> @@ -161,3 +163,3 @@ OKeyPair::List OKeyPair::hardwareKeys() { */ -bool OKeyPair::operator==( const OKeyPair& pair) { +bool OKeyPair::operator==( const OKeyPair& pair)const { if ( m_key != pair.m_key ) return false; @@ -171,3 +173,3 @@ bool OKeyPair::operator==( const OKeyPair& pair) { */ -bool OKeyPair::operator!=( const OKeyPair& pair) { +bool OKeyPair::operator!=( const OKeyPair& pair)const { return !(*this == pair); @@ -373,3 +375,3 @@ bool OKeyConfigItem::isEmpty()const { */ -bool OKeyConfigItem::operator==( const OKeyConfigItem& conf ) { +bool OKeyConfigItem::operator==( const OKeyConfigItem& conf )const { /* if ( isEmpty() == conf.isEmpty() ) return true; @@ -391,3 +393,3 @@ bool OKeyConfigItem::operator==( const OKeyConfigItem& conf ) { -bool OKeyConfigItem::operator!=( const OKeyConfigItem& conf ) { +bool OKeyConfigItem::operator!=( const OKeyConfigItem& conf )const { return !( *this == conf ); @@ -485,4 +487,3 @@ 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() ); @@ -490,2 +491,3 @@ void OKeyConfigManager::load() { OKeyPair okey( key, mod ); + if ( !m_blackKeys.contains( okey ) && key != -1 && mod != -1 ) @@ -508,4 +510,4 @@ void OKeyConfigManager::save() { */ - 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() ) @@ -516,3 +518,3 @@ 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()) && @@ -578,3 +580,2 @@ 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; @@ -588,3 +589,2 @@ 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; @@ -762,2 +762,5 @@ namespace Private { + /* + * the virtual and hardware key events have both issues... + */ void fixupKeys( int& key, int &mod, QKeyEvent* e ) { @@ -1010,3 +1013,2 @@ void OKeyConfigWidget::slotListViewItem( QListViewItem* _item) { void OKeyConfigWidget::slotNoKey() { - qWarning( "No Key" ); m_none->setChecked( true ); @@ -1070,2 +1072,35 @@ 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, @@ -1076,5 +1111,6 @@ void OKeyConfigWidget::updateItem( Opie::Ui::Private::OKeyListViewItem *item, */ - if ( !newItem.isEmpty() ) { + if ( !newItem.isEmpty() && !sanityCheck(item, newItem )) + return; + - } @@ -1130,3 +1166,2 @@ void OKeyChooserConfigDialog::keyPressEvent( QKeyEvent* ev ) { - qWarning( "Key Press Event" ); int mod, key; @@ -1155,5 +1190,5 @@ void OKeyChooserConfigDialog::keyPressEvent( QKeyEvent* ev ) { } - if (mod ) { + if (mod ) m_mod |= mod; - }else + else m_key = key; @@ -1161,3 +1196,3 @@ void OKeyChooserConfigDialog::keyPressEvent( QKeyEvent* ev ) { if ( ( !mod || m_key ) && !m_timer->isActive() ) - m_timer->start( 50, true ); + m_timer->start( 150, true ); 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 @@ -51,4 +51,4 @@ public: - bool operator==( const OKeyPair& ); - bool operator!=( const OKeyPair& ); + bool operator==( const OKeyPair& )const; + bool operator!=( const OKeyPair& )const; @@ -97,4 +97,4 @@ public: - bool operator==( const OKeyConfigItem& ); - bool operator!=( const OKeyConfigItem& ); + bool operator==( const OKeyConfigItem& )const; + bool operator!=( const OKeyConfigItem& )const; @@ -255,4 +255,6 @@ 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(); |