From cbdd6e43d95786b4ee34181ee917065e476d8d3e Mon Sep 17 00:00:00 2001 From: mjbudd77 Date: Mon, 29 Mar 2021 20:52:58 -0400 Subject: [PATCH] Further hot key config rework. --- src/drivers/Qt/ConsoleWindow.cpp | 14 +++++++++++- src/drivers/Qt/HotKeyConf.cpp | 37 ++++++++++++++++++++++++++++++-- src/drivers/Qt/HotKeyConf.h | 17 +++++++++++++-- src/drivers/Qt/config.cpp | 2 +- src/drivers/Qt/input.cpp | 17 +++++++++------ 5 files changed, 75 insertions(+), 12 deletions(-) diff --git a/src/drivers/Qt/ConsoleWindow.cpp b/src/drivers/Qt/ConsoleWindow.cpp index c6b2a85e..58f7706d 100644 --- a/src/drivers/Qt/ConsoleWindow.cpp +++ b/src/drivers/Qt/ConsoleWindow.cpp @@ -898,6 +898,9 @@ void consoleWin_t::createMainMenu(void) emuMenu->addAction(powerAct); + Hotkeys[ HK_POWER ].setAction( powerAct ); + connect( Hotkeys[ HK_POWER ].getShortcut(), SIGNAL(activated()), this, SLOT(powerConsoleCB(void)) ); + // Emulation -> Reset resetAct = new QAction(tr("&Reset"), this); //resetAct->setShortcut( QKeySequence(tr("Ctrl+R"))); @@ -907,6 +910,9 @@ void consoleWin_t::createMainMenu(void) emuMenu->addAction(resetAct); + Hotkeys[ HK_RESET ].setAction( resetAct ); + connect( Hotkeys[ HK_RESET ].getShortcut(), SIGNAL(activated()), this, SLOT(consoleHardReset(void)) ); + // Emulation -> Soft Reset sresetAct = new QAction(tr("&Soft Reset"), this); //sresetAct->setShortcut( QKeySequence(tr("Ctrl+R"))); @@ -918,13 +924,16 @@ void consoleWin_t::createMainMenu(void) // Emulation -> Pause pauseAct = new QAction(tr("&Pause"), this); - pauseAct->setShortcut( QKeySequence(tr("Pause"))); + //pauseAct->setShortcut( QKeySequence(tr("Pause"))); pauseAct->setStatusTip(tr("Pause Console")); pauseAct->setIcon( style()->standardIcon( QStyle::SP_MediaPause ) ); connect(pauseAct, SIGNAL(triggered()), this, SLOT(consolePause(void)) ); emuMenu->addAction(pauseAct); + Hotkeys[ HK_PAUSE ].setAction( pauseAct ); + connect( Hotkeys[ HK_PAUSE ].getShortcut(), SIGNAL(activated()), this, SLOT(consolePause(void)) ); + emuMenu->addSeparator(); // Emulation -> Region @@ -1036,6 +1045,9 @@ void consoleWin_t::createMainMenu(void) emuMenu->addAction(insCoinAct); + Hotkeys[ HK_VS_INSERT_COIN ].setAction( insCoinAct ); + connect( Hotkeys[ HK_VS_INSERT_COIN ].getShortcut(), SIGNAL(activated()), this, SLOT(insertCoin(void)) ); + emuMenu->addSeparator(); // Emulation -> FDS diff --git a/src/drivers/Qt/HotKeyConf.cpp b/src/drivers/Qt/HotKeyConf.cpp index 59cad07d..0e212aca 100644 --- a/src/drivers/Qt/HotKeyConf.cpp +++ b/src/drivers/Qt/HotKeyConf.cpp @@ -52,7 +52,7 @@ HotKeyConfDialog_t::HotKeyConfDialog_t(QWidget *parent) mainLayout = new QVBoxLayout(); - tree = new QTreeWidget(); + tree = new HotKeyConfTree_t(this); tree->setColumnCount(2); @@ -76,6 +76,8 @@ HotKeyConfDialog_t::HotKeyConfDialog_t(QWidget *parent) item = new QTreeWidgetItem(); + item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemNeverHasChildren ); + item->setText(0, QString::fromStdString(optionName)); item->setText(1, QString::fromStdString(keyName)); @@ -131,7 +133,7 @@ void HotKeyConfDialog_t::assignHotkey(QKeyEvent *event) (k == SDLK_LGUI) || (k == SDLK_RGUI) || (k == SDLK_CAPSLOCK); - printf("Assign: '%s' %i 0x%08x\n", ks.toString().toStdString().c_str(), event->key(), event->key() ); + //printf("Assign: '%s' %i 0x%08x\n", ks.toString().toStdString().c_str(), event->key(), event->key() ); if ((k != SDLK_UNKNOWN) && !keyIsModifier) { @@ -207,11 +209,42 @@ void HotKeyConfDialog_t::keyPressEvent(QKeyEvent *event) { //printf("Hotkey Window Key Press: 0x%x \n", event->key() ); assignHotkey(event); + event->accept(); } //---------------------------------------------------------------------------- void HotKeyConfDialog_t::keyReleaseEvent(QKeyEvent *event) { //printf("Hotkey Window Key Release: 0x%x \n", event->key() ); assignHotkey(event); + event->accept(); +} +//---------------------------------------------------------------------------- +HotKeyConfTree_t::HotKeyConfTree_t(QWidget *parent) + : QTreeWidget(parent) +{ + +} +//---------------------------------------------------------------------------- +HotKeyConfTree_t::~HotKeyConfTree_t(void) +{ + +} +//---------------------------------------------------------------------------- +void HotKeyConfTree_t::keyPressEvent(QKeyEvent *event) +{ + if ( parent() ) + { + static_cast(parent())->assignHotkey(event); + } + event->accept(); +} +//---------------------------------------------------------------------------- +void HotKeyConfTree_t::keyReleaseEvent(QKeyEvent *event) +{ + if ( parent() ) + { + static_cast(parent())->assignHotkey(event); + } + event->accept(); } //---------------------------------------------------------------------------- diff --git a/src/drivers/Qt/HotKeyConf.h b/src/drivers/Qt/HotKeyConf.h index 740df4e5..bb2548d9 100644 --- a/src/drivers/Qt/HotKeyConf.h +++ b/src/drivers/Qt/HotKeyConf.h @@ -18,6 +18,19 @@ #include "Qt/main.h" +class HotKeyConfTree_t : public QTreeWidget +{ + Q_OBJECT + +public: + HotKeyConfTree_t(QWidget *parent = 0); + ~HotKeyConfTree_t(void); + +protected: + void keyPressEvent(QKeyEvent *event); + void keyReleaseEvent(QKeyEvent *event); +}; + class HotKeyConfDialog_t : public QDialog { Q_OBJECT @@ -26,13 +39,13 @@ public: HotKeyConfDialog_t(QWidget *parent = 0); ~HotKeyConfDialog_t(void); + void assignHotkey(QKeyEvent *event); protected: void closeEvent(QCloseEvent *event); void keyPressEvent(QKeyEvent *event); void keyReleaseEvent(QKeyEvent *event); - void assignHotkey(QKeyEvent *event); - QTreeWidget *tree; + HotKeyConfTree_t *tree; private: public slots: diff --git a/src/drivers/Qt/config.cpp b/src/drivers/Qt/config.cpp index cc784083..59e4e833 100644 --- a/src/drivers/Qt/config.cpp +++ b/src/drivers/Qt/config.cpp @@ -758,7 +758,7 @@ InitConfig() getHotKeyConfig( i, &hotKeyName, &hotKeySeq ); - printf("Hot Key: '%s' = '%s' \n", hotKeyName, hotKeySeq ); + //printf("Hot Key: '%s' = '%s' \n", hotKeyName, hotKeySeq ); //keyText.assign(" mod="); diff --git a/src/drivers/Qt/input.cpp b/src/drivers/Qt/input.cpp index 95ba2d77..522860e9 100644 --- a/src/drivers/Qt/input.cpp +++ b/src/drivers/Qt/input.cpp @@ -217,11 +217,11 @@ int hotkey_t::init( QWidget *parent ) g_config->getOption (prefix + configName, &keyText); - printf("Initializing: '%s' = '%s'\n", configName, keyText.c_str() ); + //printf("Initializing: '%s' = '%s'\n", configName, keyText.c_str() ); shortcut = new QShortcut( QKeySequence( QString::fromStdString(keyText) ), parent ); - printf("ShortCut: '%s' = '%s'\n", configName, shortcut->key().toString().toStdString().c_str() ); + //printf("ShortCut: '%s' = '%s'\n", configName, shortcut->key().toString().toStdString().c_str() ); conv2SDL(); return 0; @@ -234,13 +234,18 @@ int hotkey_t::readConfig(void) g_config->getOption (prefix + configName, &keyText); - printf("Config: '%s' = '%s'\n", configName, keyText.c_str() ); + //printf("Config: '%s' = '%s'\n", configName, keyText.c_str() ); if ( shortcut ) { shortcut->setKey( QString::fromStdString( keyText ) ); - printf("ShortCut: '%s' = '%s'\n", configName, shortcut->key().toString().toStdString().c_str() ); + //printf("ShortCut: '%s' = '%s'\n", configName, shortcut->key().toString().toStdString().c_str() ); + + if ( act ) + { + act->setText( actText + "\t" + shortcut->key().toString() ); + } } conv2SDL(); @@ -254,12 +259,12 @@ void hotkey_t::conv2SDL(void) SDL_Keycode k = convQtKey2SDLKeyCode((Qt::Key)(shortcut->key()[0] & 0x01FFFFFF) ); SDL_Keymod m = convQtKey2SDLModifier( (Qt::KeyboardModifier)(shortcut->key()[0] & 0xFE000000) ); - printf("Key: '%s' 0x%08x\n", shortcut->key().toString().toStdString().c_str(), shortcut->key()[0] ); + //printf("Key: '%s' 0x%08x\n", shortcut->key().toString().toStdString().c_str(), shortcut->key()[0] ); sdl.value = k; sdl.modifier = m; - printf("Key: SDL: '%s' \n", SDL_GetKeyName(sdl.value) ); + //printf("Key: SDL: '%s' \n", SDL_GetKeyName(sdl.value) ); } void hotkey_t::setConfigName(const char *cName)