diff --git a/BasePlugin/KeyInterface.hh b/BasePlugin/KeyInterface.hh index c5496cd96bbe2f3584ae0a7a4de58eb2b172a37f..7795d481072fc30b62226139ede98931f270bf4e 100644 --- a/BasePlugin/KeyInterface.hh +++ b/BasePlugin/KeyInterface.hh @@ -64,8 +64,9 @@ class KeyInterface { * @param _key the key that should be registered * @param _modifiers the keyboard modifiers * @param _description a short description about the functionality + * @param _multiUse can the key additionally be registered by another plugin */ - virtual void registerKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description) {}; + virtual void registerKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description, bool _multiUse = false) {}; public slots : diff --git a/Core/PluginInfo.hh b/Core/PluginInfo.hh index 9e10f6f25a5b9e8027e24c14bd218507bb38799a..55986c27d74c072d6bfeb78a8b9b9d01d5a61c69 100644 --- a/Core/PluginInfo.hh +++ b/Core/PluginInfo.hh @@ -12,6 +12,7 @@ struct KeyBinding{ int key; Qt::KeyboardModifiers modifiers; QString description; + bool multiUse; }; /** Type defining a currently loaded Plugin */ diff --git a/Core/PluginLoader.cc b/Core/PluginLoader.cc index f108aebddf39359b0cb4a22b22eef65f00b7a734..278ecc0cc5cf24c799b0bd403177f492e6a7c9de 100644 --- a/Core/PluginLoader.cc +++ b/Core/PluginLoader.cc @@ -576,9 +576,9 @@ void Core::loadPlugin(QString filename, bool silent){ if ( keyPlugin && OpenFlipper::Options::gui() ) { supported = supported + "KeyboardEvents "; - if ( checkSignal(plugin,"registerKey(int,Qt::KeyboardModifiers,QString)") ) - connect(plugin,SIGNAL( registerKey(int, Qt::KeyboardModifiers, QString) ), - coreWidget_,SLOT(slotRegisterKey(int, Qt::KeyboardModifiers, QString)) ); + if ( checkSignal(plugin,"registerKey(int,Qt::KeyboardModifiers,QString,bool)") ) + connect(plugin,SIGNAL( registerKey(int, Qt::KeyboardModifiers, QString, bool) ), + coreWidget_,SLOT(slotRegisterKey(int, Qt::KeyboardModifiers, QString, bool)) ); // if ( checkSlot( plugin , "slotKeyEvent(QKeyEvent*)" ) ) // connect(coreWidget_,SIGNAL(PluginKeyEvent(QKeyEvent* )), plugin,SLOT(slotKeyEvent(QKeyEvent*))); diff --git a/widgets/coreWidget/CoreWidget.cc b/widgets/coreWidget/CoreWidget.cc index 81d610ced885607f75be1079bd352f466a48ab91..dd68867db9f08bc466a5f17693fc63fb53b55f5e 100644 --- a/widgets/coreWidget/CoreWidget.cc +++ b/widgets/coreWidget/CoreWidget.cc @@ -403,9 +403,10 @@ CoreWidget::mapKeyPressEvent(QKeyEvent* _e){ if (keyPlugin){ // if ( checkSlot( plugins_[i].plugin , "slotKeyEvent(QKeyEvent*)" ) ) keyPlugin->slotKeyEvent(_e); - - return; } + //only inform further plugins if this is a multiUse key + if (!plugins_[i].keys[k].multiUse) + return; } } @@ -428,9 +429,10 @@ CoreWidget::mapKeyReleaseEvent(QKeyEvent* _e){ if (keyPlugin){ // if ( checkSlot( plugins_[i].plugin , "slotKeyReleaseEvent(QKeyEvent*)" ) ) keyPlugin->slotKeyReleaseEvent(_e); - - return; } + //only inform further plugins if this is a multiUse key + if (!plugins_[i].keys[k].multiUse) + return; } } @@ -438,13 +440,15 @@ CoreWidget::mapKeyReleaseEvent(QKeyEvent* _e){ /** Register a key to a plugin */ void -CoreWidget::slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description){ +CoreWidget::slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description, bool _multiUse){ //first check if the key is already registered by the coreWidget bool found = false; + bool multi = false; for (uint i=0; i < coreKeys_.size(); i++) if (coreKeys_[i].key == _key && coreKeys_[i].modifiers == _modifiers){ found = true; + multi = coreKeys_[i].multiUse; break; } @@ -453,8 +457,11 @@ CoreWidget::slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString for (uint i=0; i < plugins_.size(); i++) for (int k=0; k < plugins_[i].keys.count(); k++) if (plugins_[i].keys[k].key == _key - && plugins_[i].keys[k].modifiers == _modifiers) + && plugins_[i].keys[k].modifiers == _modifiers){ found = true; + multi = plugins_[i].keys[k].multiUse; + break; + } if (found) emit log(LOGERR, "Key already registered elsewhere."); @@ -465,6 +472,8 @@ CoreWidget::slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString kb.key = _key; kb.modifiers = _modifiers; kb.description = _description; + kb.multiUse = multi || _multiUse; + coreKeys_.push_back( kb ); return; } @@ -485,6 +494,7 @@ CoreWidget::slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString kb.key = _key; kb.modifiers = _modifiers; kb.description = _description; + kb.multiUse = multi || _multiUse; pluginInfo->keys.append( kb ); } diff --git a/widgets/coreWidget/CoreWidget.hh b/widgets/coreWidget/CoreWidget.hh index a15bb8b14bb82c40e9cfa43114ce4fef0318bfd1..1441073d61214bb50c565f8385aabbf86583eda6 100644 --- a/widgets/coreWidget/CoreWidget.hh +++ b/widgets/coreWidget/CoreWidget.hh @@ -163,7 +163,7 @@ public: void PluginKeyReleaseEvent(QKeyEvent* ); /// internal signal to register CoreWidget keys - void registerKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description); + void registerKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description, bool _multiUse = false); private: void mapKeyPressEvent(QKeyEvent* _e); @@ -172,7 +172,7 @@ public: std::vector<KeyBinding> coreKeys_; private slots: - void slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description); + void slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description, bool _multiUse = false); /** @} */