From 6aa0c9fec19fc7242540222e86f74dfc29775b05 Mon Sep 17 00:00:00 2001 From: mjbudd77 Date: Sun, 18 Jul 2021 18:07:58 -0400 Subject: [PATCH] Added main window context menu for Qt GUI. --- src/drivers/Qt/ConsoleWindow.cpp | 59 ++++++++++++++++++++++++++++++++ src/drivers/Qt/ConsoleWindow.h | 18 ++++++---- src/drivers/Qt/GuiConf.cpp | 24 ++++++++++--- src/drivers/Qt/GuiConf.h | 2 ++ src/drivers/Qt/config.cpp | 1 + 5 files changed, 92 insertions(+), 12 deletions(-) diff --git a/src/drivers/Qt/ConsoleWindow.cpp b/src/drivers/Qt/ConsoleWindow.cpp index 34c702bd..a04e7ecc 100644 --- a/src/drivers/Qt/ConsoleWindow.cpp +++ b/src/drivers/Qt/ConsoleWindow.cpp @@ -122,6 +122,7 @@ consoleWin_t::consoleWin_t(QWidget *parent) mainMenuPauseWhenActv = false; g_config->getOption( "SDL.PauseOnMainMenuAccess", &mainMenuPauseWhenActv ); + g_config->getOption( "SDL.ContextMenuEnable", &contextMenuEnable ); g_config->getOption ("SDL.VideoDriver", &use_SDL_video); if ( use_SDL_video ) @@ -498,6 +499,11 @@ void consoleWin_t::setMenuAccessPauseEnable( bool enable ) mainMenuPauseWhenActv = enable; } +void consoleWin_t::setContextMenuEnable( bool enable ) +{ + contextMenuEnable = enable; +} + void consoleWin_t::loadCursor(void) { int cursorVis; @@ -691,6 +697,47 @@ void consoleWin_t::showEvent(QShowEvent *event) initScreenHandler(); } +void consoleWin_t::contextMenuEvent(QContextMenuEvent *event) +{ + QAction *act; + QMenu menu(this); + + if ( !contextMenuEnable ) + { + return; + } + + act = new QAction(tr("Open ROM"), &menu); + connect( act, SIGNAL(triggered(void)), this, SLOT(openROMFile(void)) ); + + menu.addAction( act ); + + act = new QAction(tr("Last ROM Used"), &menu); + act->setEnabled( romList.size() > 0 ); + connect( act, SIGNAL(triggered(void)), this, SLOT(loadMostRecentROM(void)) ); + + menu.addAction( act ); + + menu.addSeparator(); + + act = new QAction(tr("Online Help"), &menu); + connect( act, SIGNAL(triggered(void)), this, SLOT(openOnlineDocs(void)) ); + + menu.addAction( act ); + + menu.addSeparator(); + + act = new QAction(tr("Disable Context Menu via Options -> GUI Config"), &menu); + connect( act, SIGNAL(triggered(void)), this, SLOT(openGuiConfWin(void)) ); + + menu.addAction( act ); + + menu.addSeparator(); + + menu.exec(event->globalPos()); + + event->accept(); +} //--------------------------------------------------------------------------- void consoleWin_t::initHotKeys(void) { @@ -3915,6 +3962,18 @@ void consoleWin_t::syncActionConfig( QAction *act, const char *property ) } } +void consoleWin_t::loadMostRecentROM(void) +{ + if ( romList.size() <= 0 ) + { + return; + } + fceuWrapperLock(); + CloseGame (); + LoadGame ( (romList.back())->c_str() ); + fceuWrapperUnLock(); +} + void consoleWin_t::updatePeriodic(void) { // Process all events before attempting to render viewport diff --git a/src/drivers/Qt/ConsoleWindow.h b/src/drivers/Qt/ConsoleWindow.h index beec99a4..8dba815b 100644 --- a/src/drivers/Qt/ConsoleWindow.h +++ b/src/drivers/Qt/ConsoleWindow.h @@ -165,6 +165,7 @@ class consoleWin_t : public QMainWindow Qt::CursorShape getViewerCursor(void); void setMenuAccessPauseEnable(bool enable); + void setContextMenuEnable(bool enable); protected: consoleMenuBar *menubar; @@ -249,6 +250,7 @@ class consoleWin_t : public QMainWindow bool mainMenuEmuWasPaused; bool mainMenuPauseWhenActv; bool scrHandlerConnected; + bool contextMenuEnable; std::list romList; std::vector afActList; @@ -256,13 +258,14 @@ class consoleWin_t : public QMainWindow unsigned int updateCounter; protected: - void resizeEvent(QResizeEvent *event); - void closeEvent(QCloseEvent *event); - void keyPressEvent(QKeyEvent *event); - void keyReleaseEvent(QKeyEvent *event); - void dragEnterEvent(QDragEnterEvent *event); - void dropEvent(QDropEvent *event); - void showEvent(QShowEvent *event); + void resizeEvent(QResizeEvent *event) override; + void closeEvent(QCloseEvent *event) override; + void keyPressEvent(QKeyEvent *event) override; + void keyReleaseEvent(QKeyEvent *event) override; + void dragEnterEvent(QDragEnterEvent *event) override; + void dropEvent(QDropEvent *event) override; + void showEvent(QShowEvent *event) override; + void contextMenuEvent(QContextMenuEvent *event) override; void syncActionConfig( QAction *act, const char *property ); void showErrorMsgWindow(void); @@ -333,6 +336,7 @@ class consoleWin_t : public QMainWindow void consolePause(void); void toggleGameGenie(bool checked); void loadGameGenieROM(void); + void loadMostRecentROM(void); void setRegionNTSC(void); void setRegionPAL(void); void setRegionDendy(void); diff --git a/src/drivers/Qt/GuiConf.cpp b/src/drivers/Qt/GuiConf.cpp index 56580320..6d6b4dfc 100644 --- a/src/drivers/Qt/GuiConf.cpp +++ b/src/drivers/Qt/GuiConf.cpp @@ -50,7 +50,7 @@ GuiConfDialog_t::GuiConfDialog_t(QWidget *parent) { int useNativeFileDialogVal; int useNativeMenuBarVal, pauseOnMenuAccessVal; - int useCustomQssVal, useCustomQPalVal; + int useCustomQssVal, useCustomQPalVal, contextMenuEnable; QVBoxLayout *mainLayout, *vbox1, *vbox2; QHBoxLayout *hbox, *hbox1; QPushButton *closeButton, *button; @@ -75,6 +75,7 @@ GuiConfDialog_t::GuiConfDialog_t(QWidget *parent) g_config->getOption("SDL.UseCustomQss", &useCustomQssVal); g_config->getOption("SDL.UseCustomQPal", &useCustomQPalVal); g_config->getOption("SDL.PauseOnMainMenuAccess", &pauseOnMenuAccessVal); + g_config->getOption("SDL.ContextMenuEnable", &contextMenuEnable); setWindowTitle(tr("GUI Config")); @@ -124,16 +125,19 @@ GuiConfDialog_t::GuiConfDialog_t(QWidget *parent) mainLayout->setMenuBar( menuBar ); useNativeFileDialog = new QCheckBox(tr("Use Native OS File Dialog")); - useNativeMenuBar = new QCheckBox(tr("Use Native OS Menu Bar")); - pauseOnMenuAccess = new QCheckBox(tr("Pause On Main Menu Access")); + useNativeMenuBar = new QCheckBox(tr("Use Native OS Menu Bar")); + pauseOnMenuAccess = new QCheckBox(tr("Pause On Main Menu Access")); + ctxMenuEnable = new QCheckBox(tr("Context Menu Enable")); useNativeFileDialog->setChecked(useNativeFileDialogVal); useNativeMenuBar->setChecked(useNativeMenuBarVal); pauseOnMenuAccess->setChecked(pauseOnMenuAccessVal); + ctxMenuEnable->setChecked(contextMenuEnable); connect(useNativeFileDialog, SIGNAL(stateChanged(int)), this, SLOT(useNativeFileDialogChanged(int))); - connect(useNativeMenuBar, SIGNAL(stateChanged(int)), this, SLOT(useNativeMenuBarChanged(int))); - connect(pauseOnMenuAccess, SIGNAL(stateChanged(int)), this, SLOT(pauseOnMenuAccessChanged(int))); + connect(useNativeMenuBar , SIGNAL(stateChanged(int)), this, SLOT(useNativeMenuBarChanged(int))); + connect(pauseOnMenuAccess , SIGNAL(stateChanged(int)), this, SLOT(pauseOnMenuAccessChanged(int))); + connect(ctxMenuEnable , SIGNAL(stateChanged(int)), this, SLOT(contextMenuEnableChanged(int))); styleComboBox = new QComboBox(); @@ -234,6 +238,7 @@ GuiConfDialog_t::GuiConfDialog_t(QWidget *parent) vbox1->addWidget(useNativeFileDialog, 1); vbox1->addWidget(useNativeMenuBar, 1); vbox1->addWidget(pauseOnMenuAccess, 1); + vbox1->addWidget(ctxMenuEnable, 1); vbox1->addStretch(10); closeButton = new QPushButton( tr("Close") ); @@ -296,6 +301,15 @@ void GuiConfDialog_t::pauseOnMenuAccessChanged(int state) consoleWindow->setMenuAccessPauseEnable( value ); } //---------------------------------------------------- +void GuiConfDialog_t::contextMenuEnableChanged(int state) +{ + int value = (state == Qt::Unchecked) ? 0 : 1; + + g_config->setOption("SDL.ContextMenuEnable", value); + + consoleWindow->setContextMenuEnable( value ); +} +//---------------------------------------------------- void GuiConfDialog_t::useCustomStyleChanged(int state) { int value = (state == Qt::Unchecked) ? 0 : 1; diff --git a/src/drivers/Qt/GuiConf.h b/src/drivers/Qt/GuiConf.h index 5dbb8aa8..d27affa5 100644 --- a/src/drivers/Qt/GuiConf.h +++ b/src/drivers/Qt/GuiConf.h @@ -143,6 +143,7 @@ protected: QCheckBox *useNativeFileDialog; QCheckBox *useNativeMenuBar; QCheckBox *pauseOnMenuAccess; + QCheckBox *ctxMenuEnable; QCheckBox *useCustomStyle; QCheckBox *useCustomPalette; QComboBox *styleComboBox; @@ -156,6 +157,7 @@ private slots: void useNativeFileDialogChanged(int v); void useNativeMenuBarChanged(int v); void pauseOnMenuAccessChanged(int v); + void contextMenuEnableChanged(int v); void useCustomQPaletteChanged(int v); void useCustomStyleChanged(int v); void styleChanged(int index); diff --git a/src/drivers/Qt/config.cpp b/src/drivers/Qt/config.cpp index 2b6ec438..b0b4f991 100644 --- a/src/drivers/Qt/config.cpp +++ b/src/drivers/Qt/config.cpp @@ -657,6 +657,7 @@ InitConfig() config->addOption("_useNativeFileDialog", "SDL.UseNativeFileDialog", false); config->addOption("_useNativeMenuBar" , "SDL.UseNativeMenuBar", false); config->addOption("SDL.PauseOnMainMenuAccess", false); + config->addOption("SDL.ContextMenuEnable", true); config->addOption("SDL.GuiStyle", ""); config->addOption("SDL.QtStyleSheet", ""); config->addOption("SDL.QPaletteFile", "");