From 3e7dc3474a5511d9ec37b63c30e19b9feadc57c8 Mon Sep 17 00:00:00 2001 From: mjbudd77 Date: Sun, 6 Mar 2022 21:47:36 -0500 Subject: [PATCH] Added enable/disable button for Qt family keyboard dialog. Added button mapping save, recall and reset to default functions for Qt FKB. --- src/drivers/Qt/FamilyKeyboard.cpp | 107 ++++++++++++++++++++++++++++++ src/drivers/Qt/FamilyKeyboard.h | 4 ++ 2 files changed, 111 insertions(+) diff --git a/src/drivers/Qt/FamilyKeyboard.cpp b/src/drivers/Qt/FamilyKeyboard.cpp index 36f2481a..03f380d8 100644 --- a/src/drivers/Qt/FamilyKeyboard.cpp +++ b/src/drivers/Qt/FamilyKeyboard.cpp @@ -637,10 +637,12 @@ FKBConfigDialog::FKBConfigDialog(QWidget *parent) mainVbox->addLayout( hbox ); statLbl = new QLabel(); + fkbEnaBtn = new QPushButton( tr("Enable") ); closeButton = new QPushButton( tr("Close") ); closeButton->setIcon(style()->standardIcon(QStyle::SP_DialogCloseButton)); closeButton->setAutoDefault(false); + hbox->addWidget(fkbEnaBtn, 1); hbox->addWidget(statLbl, 3); hbox->addStretch(5); hbox->addWidget( closeButton, 1); @@ -660,6 +662,7 @@ FKBConfigDialog::FKBConfigDialog(QWidget *parent) connect( keyTreeHgtAnimation, SIGNAL(finished(void)), this, SLOT(keyTreeResizeDone(void)) ); connect(closeButton , SIGNAL(clicked(void)), this, SLOT(closeWindow(void))); + connect(fkbEnaBtn , SIGNAL(clicked(void)), this, SLOT(toggleFamilyKeyboardEnable(void)) ); updateTimer = new QTimer(this); @@ -683,6 +686,60 @@ FKBConfigDialog::~FKBConfigDialog(void) // Save Window Geometry settings.setValue("familyKeyboard/geometry", saveGeometry()); + + SaveCurrentMapping(); +} +//---------------------------------------------------------------------------- +void FKBConfigDialog::SaveCurrentMapping(void) +{ + std::string prefix; + + // FamilyKeyBoard + prefix = "SDL.Input.FamilyKeyBoard."; + g_config->setOption(prefix + "DeviceType", DefaultFamilyKeyBoardDevice); + g_config->setOption(prefix + "DeviceNum", 0); + for(unsigned int j = 0; j < FAMILYKEYBOARD_NUM_BUTTONS; j++) + { + g_config->setOption(prefix + FamilyKeyBoardNames[j], fkbmap[j].ButtonNum ); + } + g_config->save(); +} +//---------------------------------------------------------------------------- +void FKBConfigDialog::resetDefaultMapping(void) +{ + std::string prefix, device; + int type = 0, devnum = 0; + + // FamilyKeyBoard + prefix = "SDL.Input.FamilyKeyBoard."; + g_config->setOption(prefix + "DeviceType", DefaultFamilyKeyBoardDevice); + g_config->setOption(prefix + "DeviceNum", 0); + + g_config->getOption(prefix + "DeviceType", &device); + + if (device.find("Keyboard") != std::string::npos) + { + type = BUTTC_KEYBOARD; + } + else if (device.find("Joystick") != std::string::npos) + { + type = BUTTC_JOYSTICK; + } + else + { + type = 0; + } + g_config->getOption(prefix + "DeviceNum", &devnum); + + for(unsigned int j = 0; j < FAMILYKEYBOARD_NUM_BUTTONS; j++) + { + g_config->setOption(prefix + FamilyKeyBoardNames[j], DefaultFamilyKeyBoard[j] ); + + fkbmap[j].ButtType = type; + fkbmap[j].DeviceNum = devnum; + fkbmap[j].ButtonNum = DefaultFamilyKeyBoard[j]; + } + g_config->save(); } //---------------------------------------------------------------------------- QMenuBar *FKBConfigDialog::buildMenuBar(void) @@ -750,6 +807,16 @@ QMenuBar *FKBConfigDialog::buildMenuBar(void) confMenu->addAction(act); + confMenu->addSeparator(); + + // Config -> Reset to Defaults + act = new QAction(tr("Reset to Defaults"), this); + //act->setShortcut(QKeySequence::Close); + act->setStatusTip(tr("Reset to Defaults Mappings")); + connect(act, SIGNAL(triggered()), this, SLOT(resetDefaultMapping(void)) ); + + confMenu->addAction(act); + // View viewMenu = menuBar->addMenu(tr("View")); @@ -861,13 +928,53 @@ void FKBConfigDialog::updateStatusLabel(void) if ( fkbActv ) { statLbl->setText( tr("Family Keyboard is Enabled") ); + fkbEnaBtn->setText( tr("Disable") ); } else { statLbl->setText( tr("Family Keyboard is Disabled") ); + fkbEnaBtn->setText( tr("Enable") ); } } //---------------------------------------------------------------------------- +void FKBConfigDialog::toggleFamilyKeyboardEnable(void) +{ + int curNesInput[3], usrNesInput[3]; + + getInputSelection(0, &curNesInput[0], &usrNesInput[0]); + getInputSelection(1, &curNesInput[1], &usrNesInput[1]); + getInputSelection(2, &curNesInput[2], &usrNesInput[2]); + + if ( curNesInput[2] != SIFC_FKB ) + { + ESI port[2]; + ESIFC fcexp; + int fourscore = false, microphone = false; + + curNesInput[2] = SIFC_FKB; + + g_config->getOption("SDL.FourScore", &fourscore); + + microphone = replaceP2StartWithMicrophone; + + port[0] = (ESI)curNesInput[0]; + port[1] = (ESI)curNesInput[1]; + fcexp = (ESIFC)curNesInput[2]; + + FCEUD_SetInput(fourscore, microphone, port[0], port[1], fcexp); + + if ( !isFamilyKeyboardActv() ) + { + toggleFamilyKeyboardFunc(); + } + } + else + { + toggleFamilyKeyboardFunc(); + } + updateStatusLabel(); +} +//---------------------------------------------------------------------------- void FKBConfigDialog::closeEvent(QCloseEvent *event) { printf("FKB Config Close Window Event\n"); diff --git a/src/drivers/Qt/FamilyKeyboard.h b/src/drivers/Qt/FamilyKeyboard.h index 532c8556..c0946907 100644 --- a/src/drivers/Qt/FamilyKeyboard.h +++ b/src/drivers/Qt/FamilyKeyboard.h @@ -149,6 +149,7 @@ protected: QTreeWidget *keyTree; QLabel *statLbl; + QPushButton *fkbEnaBtn; QTimer *updateTimer; @@ -172,6 +173,9 @@ private slots: void mappingSave(void); void mappingSaveAs(void); void toggleTreeView(bool); + void SaveCurrentMapping(void); + void resetDefaultMapping(void); + void toggleFamilyKeyboardEnable(void); void keyTreeResizeDone(void); void keyTreeHeightChange(const QVariant &); void keyTreeItemActivated(QTreeWidgetItem *item, int column);