From 4ac6a673c16fa55e065b9918d6f56da5fc690741 Mon Sep 17 00:00:00 2001 From: Roland Winklmeier Date: Mon, 4 Aug 2014 20:34:44 +0200 Subject: [PATCH] refs #313 Register hotkey functions instead keyboard keys --- src/blackcore/context_audio_impl.cpp | 30 ++++------------- src/blackcore/context_audio_impl.h | 7 ++-- src/swiftgui_standard/mainwindow.cpp | 39 ++++++++++------------- src/swiftgui_standard/mainwindow.h | 6 ++-- src/swiftgui_standard/mainwindow_init.cpp | 3 +- 5 files changed, 30 insertions(+), 55 deletions(-) diff --git a/src/blackcore/context_audio_impl.cpp b/src/blackcore/context_audio_impl.cpp index f901d77cc..d14903989 100644 --- a/src/blackcore/context_audio_impl.cpp +++ b/src/blackcore/context_audio_impl.cpp @@ -11,6 +11,8 @@ #include "blacksound/soundgenerator.h" #include "blackmisc/notificationsounds.h" +#include "blackmisc/voiceroomlist.h" +#include "blackmisc/hotkeyfunction.h" #include @@ -27,14 +29,16 @@ namespace BlackCore * Init this context */ CContextAudio::CContextAudio(CRuntimeConfig::ContextMode mode, CRuntime *runtime) : - IContextAudio(mode, runtime), m_voice(nullptr), m_keyboard(nullptr) + IContextAudio(mode, runtime), m_voice(nullptr), m_inputManager(nullptr) { // 1. Init by "voice driver" this->m_voice = new CVoiceVatlib(); m_voice->moveToThread(&m_threadVoice); m_threadVoice.start(); - m_keyboard = BlackInput::IKeyboard::getInstance(); + // 2. Register PTT hotkey function + m_inputManager = CInputManager::getInstance(); + m_handlePtt = m_inputManager->registerHotkeyFunc(CHotkeyFunction::Ptt(), m_voice, &CVoiceVatlib::handlePushToTalk); // 3. own aircraft, if possible //if (this->getIContextOwnAircraft()) m_voice->setMyAircraftCallsign(this->getIContextOwnAircraft()->getOwnAircraft().getCallsign()); @@ -366,28 +370,6 @@ namespace BlackCore m_voice->enableAudioLoopback(enable); } - /* - * Settings changed - */ - void CContextAudio::ps_settingsChanged(uint typeValue) - { - if (this->getIContextOwnAircraft()) - { - m_channelCom1->setMyAircraftCallsign(this->getIContextOwnAircraft()->getOwnAircraft().getCallsign()); - m_channelCom2->setMyAircraftCallsign(this->getIContextOwnAircraft()->getOwnAircraft().getCallsign()); - } - if (!this->getIContextSettings()) return; - IContextSettings::SettingsType type = static_cast(typeValue); - if (type == IContextSettings::SettingsHotKeys) - { - CKeyboardKeyList hotKeys = this->getIContextSettings()->getHotkeys(); - Q_ASSERT(!hotKeys.isEmpty()); - CKeyboardKey pttKey = hotKeys.findBy(&BlackMisc::Hardware::CKeyboardKey::getFunction, BlackMisc::Hardware::CKeyboardKey::HotkeyPtt).front(); - m_keyboard->unregisterHotkey(m_handlePtt); - m_handlePtt = m_keyboard->registerHotkey(pttKey, m_voice, &CVoiceVatlib::handlePushToTalk); - } - } - /* * Connection status changed */ diff --git a/src/blackcore/context_audio_impl.h b/src/blackcore/context_audio_impl.h index fbbf94876..c7f12c59b 100644 --- a/src/blackcore/context_audio_impl.h +++ b/src/blackcore/context_audio_impl.h @@ -12,6 +12,7 @@ #include "dbus_server.h" #include "voice_vatlib.h" #include "voice_channel.h" +#include "input_manager.h" #include "blackinput/keyboard.h" #include "blackmisc/voiceroomlist.h" @@ -117,8 +118,6 @@ namespace BlackCore } private slots: - //! Settings have been changed - void ps_settingsChanged(uint typeValue); //! \copydoc IVoice::connectionStatusChanged //! \sa IContextAudio::changedVoiceRooms @@ -136,8 +135,8 @@ namespace BlackCore bool inTransitionState() const; CVoiceVatlib *m_voice; //!< underlying voice lib - BlackInput::IKeyboard *m_keyboard; - BlackInput::IKeyboard::RegistrationHandle m_handlePtt; + CInputManager *m_inputManager; + CInputManager::RegistrationHandle m_handlePtt; QThread m_threadVoice; QPointer m_channelCom1; QPointer m_channelCom2; diff --git a/src/swiftgui_standard/mainwindow.cpp b/src/swiftgui_standard/mainwindow.cpp index adcd0d8ac..7436659aa 100644 --- a/src/swiftgui_standard/mainwindow.cpp +++ b/src/swiftgui_standard/mainwindow.cpp @@ -79,8 +79,6 @@ void MainWindow::gracefulShutdown() if (!this->m_init) return; this->m_init = false; - if (this->m_keyboard) this->m_keyboard->unregisterAllHotkeys(); - if (this->getIContextApplication()) this->getIContextApplication()->notifyAboutComponentChange(IContextApplication::ComponentGui, IContextApplication::ActionStops); @@ -333,7 +331,7 @@ void MainWindow::displayRedirectedOutput(const CStatusMessage &statusMessage, qi void MainWindow::ps_onChangedSetttings(uint typeValue) { IContextSettings::SettingsType type = static_cast(typeValue); - if (type == IContextSettings::SettingsHotKeys) this->ps_registerHotkeys(); + if (type == IContextSettings::SettingsHotKeys) this->ps_registerHotkeyFunctions(); } /* @@ -521,31 +519,26 @@ void MainWindow::ps_toogleWindowStayOnTop() } /* - * Hotkeys + * Hotkey functions */ -void MainWindow::ps_registerHotkeys() +void MainWindow::ps_registerHotkeyFunctions() { - if (!this->getIContextSettings()) qFatal("Missing settings"); - if (!this->m_keyboard) + CInputManager *m_inputManager = BlackCore::CInputManager::getInstance(); + + m_inputManager->registerHotkeyFunc(CHotkeyFunction::Opacity50(), this, [ this ](bool isPressed) { - this->m_keyboard = BlackInput::IKeyboard::getInstance(); - } - else + if (isPressed) this->changeWindowOpacity(50); + }); + + m_inputManager->registerHotkeyFunc(CHotkeyFunction::Opacity100(), this, [ this ](bool isPressed) { - this->m_keyboard->unregisterAllHotkeys(); - } + if (isPressed) this->changeWindowOpacity(100); + }); - CKeyboardKeyList keys = this->getIContextSettings()->getHotkeys(); - if (keys.isEmpty()) return; - - CKeyboardKey key = keys.keyForFunction(CKeyboardKey::HotkeyOpacity50); - if (!key.isEmpty()) this->m_keyboard->registerHotkey(key, this, [ this ](bool isPressed) { if (isPressed) this->ps_changeWindowOpacity(50); }); - - key = keys.keyForFunction(CKeyboardKey::HotkeyOpacity100); - if (!key.isEmpty()) this->m_keyboard->registerHotkey(key, this, [ this ](bool isPressed) { if (isPressed) this->ps_changeWindowOpacity(100); }); - - key = keys.keyForFunction(CKeyboardKey::HotkeyToogleWindowsStayOnTop); - if (!key.isEmpty()) this->m_keyboard->registerHotkey(key, this, [ this ](bool isPressed) { if (isPressed) this->ps_toogleWindowStayOnTop(); }); + m_inputManager->registerHotkeyFunc(CHotkeyFunction::ToogleWindowsStayOnTop(), this, [ this ](bool isPressed) + { + if (isPressed) this->toogleWindowStayOnTop(); + }); } /* diff --git a/src/swiftgui_standard/mainwindow.h b/src/swiftgui_standard/mainwindow.h index 24c2cb93e..40d22e0ca 100644 --- a/src/swiftgui_standard/mainwindow.h +++ b/src/swiftgui_standard/mainwindow.h @@ -15,13 +15,13 @@ #undef interface #include "guimodeenums.h" -#include "blackinput/keyboard.h" #include "blackcore/context_audio.h" #include "blackcore/context_network.h" #include "blackcore/context_settings.h" #include "blackcore/context_application.h" #include "blackcore/context_simulator.h" #include "blackcore/context_runtime.h" +#include "blackcore/input_manager.h" #include "blackgui/components/runtimebasedcomponent.h" #include "blackgui/components/infowindowcomponent.h" #include "blackgui/transpondermodeselector.h" @@ -240,8 +240,8 @@ private slots: //! Toogle Windows stay on top void ps_toogleWindowStayOnTop(); - //! Set the hotkeys - void ps_registerHotkeys(); + //! Set the hotkey functions + void ps_registerHotkeyFunctions(); //! Style sheet has been changed void ps_onStyleSheetsChanged(); diff --git a/src/swiftgui_standard/mainwindow_init.cpp b/src/swiftgui_standard/mainwindow_init.cpp index db4a98d97..6adde5566 100644 --- a/src/swiftgui_standard/mainwindow_init.cpp +++ b/src/swiftgui_standard/mainwindow_init.cpp @@ -20,6 +20,7 @@ #include "blackmisc/icons.h" #include "blackmisc/avselcal.h" #include "blackmisc/project.h" +#include "blackmisc/hotkeyfunction.h" #include #include #include @@ -140,7 +141,7 @@ void MainWindow::init(const CRuntimeConfig &runtimeConfig) this->ui->comp_MainInfoArea->getLogComponent()->appendPlainTextToConsole(CProject::compiledInfo()); // hotkeys - this->ps_registerHotkeys(); + this->ps_registerHotkeyFunctions(); // update timers this->startUpdateTimers();