From eb873afc8bc2ba14070b094786e6318f68d64fd4 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 30 Apr 2021 19:10:52 +0200 Subject: [PATCH] merged emulation and UI event mapping tabs --- docs/graphics/eventmapping.png | Bin 4530 -> 4575 bytes docs/graphics/eventmapping_devsports.png | Bin 4654 -> 4641 bytes docs/graphics/eventmapping_mouse.png | Bin 3256 -> 3275 bytes docs/graphics/eventmapping_remap.png | Bin 4490 -> 4536 bytes docs/index.html | 9 +-- src/emucore/EventHandler.cxx | 7 +- src/emucore/EventHandler.hxx | 3 +- src/gui/EventMappingWidget.cxx | 92 ++++++++++------------- src/gui/EventMappingWidget.hxx | 3 +- src/gui/InputDialog.cxx | 79 +++++++------------ src/gui/InputDialog.hxx | 4 +- 11 files changed, 75 insertions(+), 122 deletions(-) diff --git a/docs/graphics/eventmapping.png b/docs/graphics/eventmapping.png index 5ae1268bc94e0fe22bf3c62ae2b4e4b60f022fcd..0132387ba25519cc3f88d673f08610318c4cd6d1 100644 GIT binary patch delta 4526 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 b(ve&3pp35iP{Z+u43n{uxgqYRQ_Oz=4%sD| delta 4480 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 diff --git a/docs/graphics/eventmapping_mouse.png b/docs/graphics/eventmapping_mouse.png index 0e8383c20da1d8eb54e5c5b4905d7b5deb2c1422..8d97700903a1afc0fb4ca52c40699a66784f4790 100644 GIT binary patch delta 2934 zcmV-+3yJi&8Os@vaDT%901m?e$8V@)000a*Nklr9Y z_8qvK1l)$PfNTDCT{k0^uGxtkZtF7~N_R+5-qW6%{o!^d*MH4Y+}+6H-tz2VC~kY| zZu@T^^K&roR&R9Xr%r#-8!oW>w%s!j>TU_QYwUmaY;+-Hdy0F!F=v4{Dvw(-W?QHU zocpCI;GQDxcI9zPP1Oi)Yi)Q8cMrxKiev(AWA`)#+_nq*x2XxZq3*gsFei*_?ygMWN-osKqdne86mMBCEct1)}cDyeSkm*IzfX5fyi?Ka+>#2rz?Sio%< z>u9(GKl9(jfdpL60`8{tk8Xw@M|Z{$#azX5FQd}3* z#gpzaVShs1JsVU_NdlK~1Et|ygL`qOJk4f?J0wWju>r0rLmT+)WAsnL) zoqv#GC|&UeebtG@;r?$z*!Pxhomf!1V?yb^PH!yThogzBB(?inWo}`EOA{Rg&`0*= zZ4%3p(yfo1*JR7b^URJ{js2QsjK?-SBa7FMY9pc zXVMKFuD9bic0=!pxW*&yARVsxYL68n`hU$`LT)rj4;+|?e9|E^UsrX#{`@h&bd!OI zTUPIkQMf(AA8hxT5K8A*Ik?{L3Ai?lvhjQg8^0gUvxm5(3b~SfA)gxehyH(d=_Z4S z26uFP(e24`Np@`B{ZT2dJM>G0k_)&l#T+-BGbKV8r?2Zz^;0dWyL1pS#ZAW-gMW?L zL)8piYvU2u^P5P@xUO0dT(c({^HtpncTvk6&sv6?j4vwM^aQJ(Sh|AXQtMIF+Ixa) zwtWMj;_<f~fXi9Hhn8Kd@;|h^`mD9Sbs2k9D+kf_`6xaC2 zyjPh&E*UDwjMb1I3%HyGT+RY6X90H;`s43UiT3cgWaSM%d+b>^1b^IFuJpHu54zgixjRwSPwK}P zaO2$_b!$9B>u{BKtC-n+(|^jOgiGdmitXas3GmMKvJzLNGu=dD<{eoJ}(^)y`bkIHeC+BEJ&S8y4(IL)}eD&i`&_(CMc zW>weLdR%`YT8As#>~}KF`1vjKOk8ENWxE-Az-LN|=reCZ2g7}mfPc$bz~wC9au#qo z3%HvQ`ph*{a^B>(QpvR5@(LKsv;{x2C{E*+xv#y3w%}*p3vMMpvvt+b=b()rCp-|n z72HaGX6r=nZIOnk!gKW7G3GjsSK;S+#yPOjHTO*1_xPCuuD0J4SB7;0Hix^|&m3^$ zVkq92)pkpFvEwzzRezpyi@59k%!x6R)r8!bU>p}*FZh|g&}Xh8+yHVGa5)ROoCRFY z0xoBv6S)b!VLo%XrJ8fMXO|jOrU@xAd5+!2<}**!dvGhxXLbuL)8#UH zKf~DohNYXOpIs+a{(OE|pZPhs)#fwn<9j+4(voBg>&B&(Eq|Qb6L4cZ&%v!W!Pigs zG-c%oWVVj5$eeZVqjKE4iEm>*b0u8s)q4@{iuueG*H=fGEt@>0bcJ{w?urS%N{ryD z^pr@y)=%%378%yvC*xL_&+ONKNtVm-gC;hNOcvD_ekjGRg+zx7pNRW>KlA)c@?veF z&wMak`Lw42UjrrF?~~vP7k|D^pC2_f1?0WBRbvD0K)`*SfV)DoaM!xb>C6V%`weyX z!G+J5v>YrlldhqZdbo>Oorl}2`nd5qjba7~?l3^MBbg{t0k`5BKC&Ndjp2r|!dbYP zdh?lwD`kJ@P1$Y&gc9isvR%I1;);Vep}28vLEeNi3s;80M-k)qT7vi0^b2LL)$O(rym zd$@xM1)p}1c8IIo^LY1g$t#bgF}vls>6@|>T=J@j95;-FPse>^%qebI#WBOR39rBv z>C^;@E5a!W8FLdFgnzhi%xiIFKT^6j2leZ2AGqm6gk=84D6X4XP{1WG*X}3a%0AXz zf71I!xT9~%4ihwD%S^5ay@>14C9BlQp)qKYAu@eQx6|f2 zk@+Qa(2105F8y1>?H}Ti>5->^rg!dr0D)z{1p>ntHlIYn23aUJ!< z)nft^7nCIHK7WO0>4bC6q%Nc9s)!pN@5*tBA4`Y~S4_iA++fic^-kR2zExwm&OVE{ zx1&jUEy6(rlhF!qlb;HT zf9r<(@8jrC7&B)9m$QJ&S-|D2W8!{(%u@AJv?Tp`hkPWs%`DZ&U6B4Svkv(cxU-T2 zE^vXn72K{nxgW#EO)dRGl6y9;&P~^}rwO=SR|u5myM)`g!`c%)-lW*Q8n-=}{FFd) z-1byFDeXgC7h*fOMUEV|cuFSXY8$eEf8Ln%w@%wjF!tBsmPtyuCcCZ6WvdUIg4>b` z(?#5-a~XIs?rAcv$?nMk#C%V|btiR*+q@dLn}_SG@pN2mw$7L{+;+?Rj zbZt3iM$yspxUrVGYe;ruZrceLqEL5pTxaL6#+`EAZE2OAQFpsjLtExfw{Y6LR5ksp zTjsglj8OM{%WU&~2Y0g2X9g~CfeYMe=>zwUQrrc8-m16@(w}!o;%7dJfXi9HqpP1M)h1*-Iqph5!Hn07*qoM6N<$g6@L^ssI20 delta 2918 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 Q$^ZZW07*qoM6N<$g1+bO-v9sr diff --git a/docs/graphics/eventmapping_remap.png b/docs/graphics/eventmapping_remap.png index 9382691b387fb2e7c581538221630aaad5c474c2..7b7594ac11ef0359f1e4520cadc926c136156bf5 100644 GIT binary patch delta 4486 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 remap an event:
  1. Enter Options Menu and click the Input Settings button.
  2. -
  3. If you wish to remap emulation events, click the 'Emulation Events' tab. Here - you can also filter for the type of events. - Otherwise, click the 'UI Events' tab for user interface events.
  4. -
  5. Select event you want to remap and click the 'Map' button.
  6. +
  7. Click the 'Event Mappings' tab. Here you can also filter the list of events by type. +
  8. Select the event you want to remap and click the 'Map' button.
  9. Now define the input:
    • Either press a key, a modifier key (Control, Shift...) or a modifier+key combination.
    • diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 4a0349394..204009867 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -2535,7 +2535,7 @@ StringList EventHandler::getActionList(const Event::EventSet& events, EventMode } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -VariantList EventHandler::getComboList(EventMode /**/) const +VariantList EventHandler::getComboList() const { // For now, this only works in emulation mode VariantList l; @@ -3436,8 +3436,3 @@ const Event::EventSet EventHandler::DebugEvents = { Event::ToggleColorLoss, Event::ToggleJitter, }; - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const Event::EventSet EventHandler::EditEvents = { - -}; diff --git a/src/emucore/EventHandler.hxx b/src/emucore/EventHandler.hxx index 645ef4a74..847d948aa 100644 --- a/src/emucore/EventHandler.hxx +++ b/src/emucore/EventHandler.hxx @@ -175,7 +175,7 @@ class EventHandler bool frying() const { return myFryingFlag; } StringList getActionList(Event::Group group) const; - VariantList getComboList(EventMode mode) const; + VariantList getComboList() const; /** Used to access the list of events assigned to a specific combo event. */ StringList getComboListForEvent(Event::Type event) const; @@ -548,7 +548,6 @@ class EventHandler static const Event::EventSet DevicesEvents; static const Event::EventSet ComboEvents; static const Event::EventSet DebugEvents; - static const Event::EventSet EditEvents; /** The following methods take care of assigning action mappings. diff --git a/src/gui/EventMappingWidget.cxx b/src/gui/EventMappingWidget.cxx index 584365b58..50767b0b5 100644 --- a/src/gui/EventMappingWidget.cxx +++ b/src/gui/EventMappingWidget.cxx @@ -36,11 +36,9 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EventMappingWidget::EventMappingWidget(GuiObject* boss, const GUI::Font& font, - int x, int y, int w, int h, - EventMode mode) + int x, int y, int w, int h) : Widget(boss, font, x, y, w, h), - CommandSender(boss), - myEventMode{mode} + CommandSender(boss) { const int lineHeight = boss->dialog().lineHeight(), fontWidth = boss->dialog().fontWidth(), @@ -54,31 +52,29 @@ EventMappingWidget::EventMappingWidget(GuiObject* boss, const GUI::Font& font, const int listWidth = _w - buttonWidth - HBORDER * 2 - fontWidth; int listHeight = _h - (2 + ACTION_LINES) * lineHeight - VBORDER + 2; - if(mode == EventMode::kEmulationMode) - { - VariantList items; + VariantList items; - items.clear(); - VarList::push_back(items, "All", Event::Group::Emulation); - VarList::push_back(items, "Miscellaneous", Event::Group::Misc); - VarList::push_back(items, "Video & Audio", Event::Group::AudioVideo); - VarList::push_back(items, "States", Event::Group::States); - VarList::push_back(items, "Console", Event::Group::Console); - VarList::push_back(items, "Joystick", Event::Group::Joystick); - VarList::push_back(items, "Paddles", Event::Group::Paddles); - VarList::push_back(items, "Keyboard", Event::Group::Keyboard); - VarList::push_back(items, "Input Devices & Ports", Event::Group::Devices); - VarList::push_back(items, "Combo", Event::Group::Combo); - VarList::push_back(items, "Debug", Event::Group::Debug); + items.clear(); + VarList::push_back(items, "Emulation", Event::Group::Emulation); + VarList::push_back(items, " Miscellaneous", Event::Group::Misc); + VarList::push_back(items, " Video & Audio", Event::Group::AudioVideo); + VarList::push_back(items, " States", Event::Group::States); + VarList::push_back(items, " Console", Event::Group::Console); + VarList::push_back(items, " Joystick", Event::Group::Joystick); + VarList::push_back(items, " Paddles", Event::Group::Paddles); + VarList::push_back(items, " Keyboard", Event::Group::Keyboard); + VarList::push_back(items, " Input Devices & Ports", Event::Group::Devices); + VarList::push_back(items, " Combo", Event::Group::Combo); + VarList::push_back(items, " Debug", Event::Group::Debug); + VarList::push_back(items, "User Interface", Event::Group::Menu); - myFilterPopup = new PopUpWidget(boss, font, xpos, ypos, - listWidth - font.getStringWidth("Events ") - PopUpWidget::dropDownWidth(font), - lineHeight, items, "Events ", 0, kFilterCmd); - myFilterPopup->setTarget(this); - addFocusWidget(myFilterPopup); - ypos += lineHeight * 1.5; - listHeight -= lineHeight * 1.5; - } + myFilterPopup = new PopUpWidget(boss, font, xpos, ypos, + listWidth - font.getStringWidth("Events ") - PopUpWidget::dropDownWidth(font), + lineHeight, items, "Events ", 0, kFilterCmd); + myFilterPopup->setTarget(this); + addFocusWidget(myFilterPopup); + ypos += lineHeight * 1.5; + listHeight -= lineHeight * 1.5; myActionsList = new StringListWidget(boss, font, xpos, ypos, listWidth, listHeight); myActionsList->setTarget(this); @@ -118,18 +114,15 @@ EventMappingWidget::EventMappingWidget(GuiObject* boss, const GUI::Font& font, myResetButton->setTarget(this); addFocusWidget(myResetButton); - if(mode == EventMode::kEmulationMode) - { - ypos += buttonHeight + VGAP * 2; - myComboButton = new ButtonWidget(boss, font, xpos, ypos, - buttonWidth, buttonHeight, - "Combo" + ELLIPSIS, kComboCmd); - myComboButton->setTarget(this); - addFocusWidget(myComboButton); + ypos += buttonHeight + VGAP * 2; + myComboButton = new ButtonWidget(boss, font, xpos, ypos, + buttonWidth, buttonHeight, + "Combo" + ELLIPSIS, kComboCmd); + myComboButton->setTarget(this); + addFocusWidget(myComboButton); - VariantList combolist = instance().eventHandler().getComboList(mode); - myComboDialog = make_unique(boss, font, combolist); - } + VariantList combolist = instance().eventHandler().getComboList(); + myComboDialog = make_unique(boss, font, combolist); // Show message for currently selected event xpos = HBORDER; @@ -149,9 +142,7 @@ void EventMappingWidget::loadConfig() { if(myFirstTime) { - if(myFilterPopup) - myFilterPopup->setSelectedIndex(0); - + myFilterPopup->setSelectedIndex(0); myFirstTime = false; } @@ -171,10 +162,11 @@ void EventMappingWidget::saveConfig() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void EventMappingWidget::updateActions() { - if(myFilterPopup) - myEventGroup = Event::Group(myFilterPopup->getSelectedTag().toInt()); - else - myEventGroup = Event::Group::Menu; + myEventGroup = Event::Group(myFilterPopup->getSelectedTag().toInt()); + myEventMode = myEventGroup == Event::Group::Menu + ? myEventMode = EventMode::kMenuMode + : myEventMode = EventMode::kEmulationMode; + StringList actions = instance().eventHandler().getActionList(myEventGroup); myActionsList->setList(actions); @@ -294,13 +286,11 @@ void EventMappingWidget::enableButtons(bool state) myCancelMapButton->setEnabled(!state); myEraseButton->setEnabled(state); myResetButton->setEnabled(state); - if(myComboButton) - { - Event::Type e = - instance().eventHandler().eventAtIndex(myActionSelected, myEventGroup); - myComboButton->setEnabled(state && e >= Event::Combo1 && e <= Event::Combo16); - } + Event::Type e = + instance().eventHandler().eventAtIndex(myActionSelected, myEventGroup); + + myComboButton->setEnabled(state && e >= Event::Combo1 && e <= Event::Combo16); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/EventMappingWidget.hxx b/src/gui/EventMappingWidget.hxx index fb7d8c603..117f0f061 100644 --- a/src/gui/EventMappingWidget.hxx +++ b/src/gui/EventMappingWidget.hxx @@ -39,8 +39,7 @@ class EventMappingWidget : public Widget, public CommandSender public: EventMappingWidget(GuiObject* boss, const GUI::Font& font, - int x, int y, int w, int h, - EventMode mode); + int x, int y, int w, int h); ~EventMappingWidget() override = default; bool remapMode() { return myRemapStatus; } diff --git a/src/gui/InputDialog.cxx b/src/gui/InputDialog.cxx index d6784472d..ca18d5239 100644 --- a/src/gui/InputDialog.cxx +++ b/src/gui/InputDialog.cxx @@ -64,30 +64,19 @@ InputDialog::InputDialog(OSystem& osystem, DialogContainer& parent, _h -_th - VGAP - buttonHeight - VBORDER * 2); addTabWidget(myTab); - // 1) Event mapper for emulation actions - tabID = myTab->addTab(" Emul. Events ", TabWidget::AUTO_WIDTH); - myEmulEventMapper = new EventMappingWidget(myTab, _font, 2, 2, + // 1) Event mapper + tabID = myTab->addTab(" Event Mappings ", TabWidget::AUTO_WIDTH); + myEventMapper = new EventMappingWidget(myTab, _font, 2, 2, myTab->getWidth(), - myTab->getHeight() - VGAP, - EventMode::kEmulationMode); - myTab->setParentWidget(tabID, myEmulEventMapper); - addToFocusList(myEmulEventMapper->getFocusList(), myTab, tabID); + myTab->getHeight() - VGAP); + myTab->setParentWidget(tabID, myEventMapper); + addToFocusList(myEventMapper->getFocusList(), myTab, tabID); myTab->parentWidget(tabID)->setHelpAnchor("Remapping"); - // 2) Event mapper for UI actions - tabID = myTab->addTab(" UI Events ", TabWidget::AUTO_WIDTH); - myMenuEventMapper = new EventMappingWidget(myTab, _font, 2, 2, - myTab->getWidth(), - myTab->getHeight() - VGAP, - EventMode::kMenuMode); - myTab->setParentWidget(tabID, myMenuEventMapper); - addToFocusList(myMenuEventMapper->getFocusList(), myTab, tabID); - myTab->parentWidget(tabID)->setHelpAnchor("Remapping"); - - // 3) Devices & ports + // 2) Devices & ports addDevicePortTab(); - // 4) Mouse + // 3) Mouse addMouseTab(); // Finalize the tabs, and activate the first tab @@ -120,7 +109,7 @@ void InputDialog::addDevicePortTab() WidgetArray wid; // Devices/ports - tabID = myTab->addTab("Devices & Ports", TabWidget::AUTO_WIDTH); + tabID = myTab->addTab(" Devices & Ports ", TabWidget::AUTO_WIDTH); ypos = VBORDER; lwidth = _font.getStringWidth("Digital paddle sensitivity "); @@ -255,7 +244,7 @@ void InputDialog::addMouseTab() VariantList items; // Mouse - tabID = myTab->addTab(" Mouse ", TabWidget::AUTO_WIDTH); + tabID = myTab->addTab(" Mouse ", TabWidget::AUTO_WIDTH); ypos = VBORDER; lwidth = _font.getStringWidth("Use mouse as a controller "); @@ -497,14 +486,10 @@ void InputDialog::setDefaults() switch(myTab->getActiveTab()) { case 0: // Emulation events - myEmulEventMapper->setDefaults(); + myEventMapper->setDefaults(); break; - case 1: // UI events - myMenuEventMapper->setDefaults(); - break; - - case 2: // Devices & Ports + case 1: // Devices & Ports // Joystick deadzone myDeadzone->setValue(0); @@ -537,7 +522,7 @@ void InputDialog::setDefaults() myAVoxPort->setSelectedIndex(0); break; - case 3: // Mouse + case 2: // Mouse // Use mouse as a controller myMouseControl->setSelected("analog"); @@ -564,17 +549,15 @@ void InputDialog::setDefaults() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool InputDialog::repeatEnabled() { - return !myEmulEventMapper->isRemapping() && !myMenuEventMapper->isRemapping(); + return !myEventMapper->isRemapping(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void InputDialog::handleKeyDown(StellaKey key, StellaMod mod, bool repeated) { // Remap key events in remap mode, otherwise pass to parent dialog - if (myEmulEventMapper->remapMode()) - myEmulEventMapper->handleKeyDown(key, mod); - else if (myMenuEventMapper->remapMode()) - myMenuEventMapper->handleKeyDown(key, mod); + if (myEventMapper->remapMode()) + myEventMapper->handleKeyDown(key, mod); else Dialog::handleKeyDown(key, mod); } @@ -583,10 +566,8 @@ void InputDialog::handleKeyDown(StellaKey key, StellaMod mod, bool repeated) void InputDialog::handleKeyUp(StellaKey key, StellaMod mod) { // Remap key events in remap mode, otherwise pass to parent dialog - if (myEmulEventMapper->remapMode()) - myEmulEventMapper->handleKeyUp(key, mod); - else if (myMenuEventMapper->remapMode()) - myMenuEventMapper->handleKeyUp(key, mod); + if (myEventMapper->remapMode()) + myEventMapper->handleKeyUp(key, mod); else Dialog::handleKeyUp(key, mod); } @@ -595,10 +576,8 @@ void InputDialog::handleKeyUp(StellaKey key, StellaMod mod) void InputDialog::handleJoyDown(int stick, int button, bool longPress) { // Remap joystick buttons in remap mode, otherwise pass to parent dialog - if(myEmulEventMapper->remapMode()) - myEmulEventMapper->handleJoyDown(stick, button); - else if(myMenuEventMapper->remapMode()) - myMenuEventMapper->handleJoyDown(stick, button); + if(myEventMapper->remapMode()) + myEventMapper->handleJoyDown(stick, button); else Dialog::handleJoyDown(stick, button); } @@ -607,10 +586,8 @@ void InputDialog::handleJoyDown(int stick, int button, bool longPress) void InputDialog::handleJoyUp(int stick, int button) { // Remap joystick buttons in remap mode, otherwise pass to parent dialog - if (myEmulEventMapper->remapMode()) - myEmulEventMapper->handleJoyUp(stick, button); - else if (myMenuEventMapper->remapMode()) - myMenuEventMapper->handleJoyUp(stick, button); + if (myEventMapper->remapMode()) + myEventMapper->handleJoyUp(stick, button); else Dialog::handleJoyUp(stick, button); } @@ -619,10 +596,8 @@ void InputDialog::handleJoyUp(int stick, int button) void InputDialog::handleJoyAxis(int stick, JoyAxis axis, JoyDir adir, int button) { // Remap joystick axis in remap mode, otherwise pass to parent dialog - if(myEmulEventMapper->remapMode()) - myEmulEventMapper->handleJoyAxis(stick, axis, adir, button); - else if(myMenuEventMapper->remapMode()) - myMenuEventMapper->handleJoyAxis(stick, axis, adir, button); + if(myEventMapper->remapMode()) + myEventMapper->handleJoyAxis(stick, axis, adir, button); else Dialog::handleJoyAxis(stick, axis, adir, button); } @@ -631,10 +606,8 @@ void InputDialog::handleJoyAxis(int stick, JoyAxis axis, JoyDir adir, int button bool InputDialog::handleJoyHat(int stick, int hat, JoyHatDir hdir, int button) { // Remap joystick hat in remap mode, otherwise pass to parent dialog - if(myEmulEventMapper->remapMode()) - return myEmulEventMapper->handleJoyHat(stick, hat, hdir, button); - else if(myMenuEventMapper->remapMode()) - return myMenuEventMapper->handleJoyHat(stick, hat, hdir, button); + if(myEventMapper->remapMode()) + return myEventMapper->handleJoyHat(stick, hat, hdir, button); else return Dialog::handleJoyHat(stick, hat, hdir, button); } diff --git a/src/gui/InputDialog.hxx b/src/gui/InputDialog.hxx index 7faf9d0e8..e2faeca0f 100644 --- a/src/gui/InputDialog.hxx +++ b/src/gui/InputDialog.hxx @@ -89,8 +89,8 @@ class InputDialog : public Dialog TabWidget* myTab{nullptr}; - EventMappingWidget* myEmulEventMapper{nullptr}; - EventMappingWidget* myMenuEventMapper{nullptr}; + EventMappingWidget* myEventMapper{nullptr}; +// EventMappingWidget* myMenuEventMapper{nullptr}; CheckboxWidget* mySAPort{nullptr};