diff --git a/src/emucore/Event.hxx b/src/emucore/Event.hxx index 3f479daa2..34c7e5b6a 100644 --- a/src/emucore/Event.hxx +++ b/src/emucore/Event.hxx @@ -169,6 +169,7 @@ class Event SALeftAxis0Value, SALeftAxis1Value, SARightAxis0Value, SARightAxis1Value, QTPaddle3AFire, QTPaddle3BFire, QTPaddle4AFire, QTPaddle4BFire, UIHelp, + InputTextDialogMode, LastType }; diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 8a8891789..059f2bbea 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -2153,6 +2153,13 @@ bool EventHandler::changeStateByEvent(Event::Type type) else handled = false; break; + + case Event::InputTextDialogMode: + if(myState != EventHandlerState::INPUTMENU) + enterMenuMode(EventHandlerState::INPUTMENU); + else + leaveMenuMode(); + break; #endif case Event::TimeMachineMode: @@ -2998,6 +3005,11 @@ void EventHandler::setState(EventHandlerState state) enableTextEvents(true); break; + case EventHandlerState::INPUTMENU: + myOverlay = &myOSystem.inputMenu(); + enableTextEvents(true); + break; + case EventHandlerState::TIMEMACHINE: myOSystem.timeMachine().requestResize(); myOverlay = &myOSystem.timeMachine(); diff --git a/src/emucore/EventHandlerConstants.hxx b/src/emucore/EventHandlerConstants.hxx index cf2f34c94..004f1cef9 100644 --- a/src/emucore/EventHandlerConstants.hxx +++ b/src/emucore/EventHandlerConstants.hxx @@ -29,6 +29,7 @@ enum class EventHandlerState { CMDMENU, HIGHSCORESMENU, MESSAGEMENU, + INPUTMENU, DEBUGGER, NONE }; diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index 139848b59..02fa6db78 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -55,6 +55,7 @@ #include "CommandMenu.hxx" #include "HighScoresMenu.hxx" #include "MessageMenu.hxx" + #include "InputMenu.hxx" #include "TimeMachine.hxx" #endif @@ -446,6 +447,19 @@ void FrameBuffer::update(UpdateMode mode) break; // EventHandlerState::MESSAGEMENU } + case EventHandlerState::INPUTMENU: + { + myOSystem.inputMenu().tick(); + redraw |= myOSystem.inputMenu().needsRedraw(); + if(redraw) + { + clear(); + myTIASurface->render(true); + myOSystem.inputMenu().draw(forceRedraw); + } + break; // EventHandlerState::INPUTMENU + } + case EventHandlerState::TIMEMACHINE: { myOSystem.timeMachine().tick(); diff --git a/src/emucore/OSystem.cxx b/src/emucore/OSystem.cxx index fdb1e8cd2..a6e7be04e 100644 --- a/src/emucore/OSystem.cxx +++ b/src/emucore/OSystem.cxx @@ -35,6 +35,7 @@ #include "CommandMenu.hxx" #include "HighScoresMenu.hxx" #include "MessageMenu.hxx" + #include "InputMenu.hxx" #include "Launcher.hxx" #include "TimeMachine.hxx" #include "Widget.hxx" @@ -181,6 +182,7 @@ bool OSystem::initialize(const Settings::Options& options) myHighScoresManager = make_unique(*this); myHighScoresMenu = make_unique(*this); myMessageMenu = make_unique(*this); + myInputMenu = make_unique(*this); myTimeMachine = make_unique(*this); myLauncher = make_unique(*this); @@ -506,6 +508,39 @@ string OSystem::createConsole(const FilesystemNode& rom, const string& md5sum, << " - " << myConsole->getFormatString(); myFrameBuffer->showTextMessage(msg.str()); } + // Check for first PlusROM start + if(true) + // myConsole->cartridge().plusROM().isvalid() && Settings + { + //myEventHandler->changeStateByEvent(Event::OptionsMenuMode); + myEventHandler->changeStateByEvent(Event::InputTextDialogMode); + //TODO: Event::InputTextDialogMode + + +/* + // Inputbox which will pop up when searching RAM + + StringList labels = {"Value"}; + myInputBox = make_unique(boss, lfont, nfont, labels, " "); + myInputBox->setTarget(this); + + + + // Add inputbox in the middle of the RAM widget + uInt32 x = getAbsX() + ((getWidth() - myInputBox->getWidth()) >> 1); + uInt32 y = getAbsY() + ((getHeight() - myInputBox->getHeight()) >> 1); + + myInputBox->show(x, y, dialog().surface().dstRect()); + myInputBox->setText(""); + myInputBox->setMessage(""); + myInputBox->setToolTip(cmd == kSValEntered + ? "Enter search value (leave blank for all)." + : "Enter relative or absolute value\nto compare with searched values."); + myInputBox->setFocus(0); + myInputBox->setEmitSignal(cmd); + myInputBox->setTitle(cmd == kSValEntered ? "Search" : "Compare"); +*/ + } } return EmptyString; diff --git a/src/emucore/OSystem.hxx b/src/emucore/OSystem.hxx index 224ebfd50..6efc24ae2 100644 --- a/src/emucore/OSystem.hxx +++ b/src/emucore/OSystem.hxx @@ -42,6 +42,7 @@ class AudioSettings; class Launcher; class Menu; class MessageMenu; + class InputMenu; class TimeMachine; class VideoAudioDialog; #endif @@ -226,6 +227,13 @@ class OSystem */ MessageMenu& messageMenu() const { return *myMessageMenu; } + /** + Get the input menu of the system. + + @return The input menu object + */ + InputMenu& inputMenu() const { return *myInputMenu; } + /** Get the ROM launcher of the system. @@ -523,6 +531,9 @@ class OSystem // Pointer to the MessageMenu object unique_ptr myMessageMenu; + // Pointer to the InputMenu object + unique_ptr myInputMenu; + // Pointer to the TimeMachine object unique_ptr myTimeMachine; #endif diff --git a/src/gui/InputTextDialog.cxx b/src/gui/InputTextDialog.cxx index 55637413e..ab647c45a 100644 --- a/src/gui/InputTextDialog.cxx +++ b/src/gui/InputTextDialog.cxx @@ -46,6 +46,16 @@ InputTextDialog::InputTextDialog(GuiObject* boss, const GUI::Font& lfont, initialize(lfont, nfont, labels); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +InputTextDialog::InputTextDialog(OSystem& osystem, DialogContainer& parent, + const GUI::Font& font, const StringList& labels, const string& title) + : Dialog(osystem, parent, font, title), + CommandSender(nullptr) +{ + initialize(font, font, labels); +} + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void InputTextDialog::initialize(const GUI::Font& lfont, const GUI::Font& nfont, const StringList& labels) diff --git a/src/gui/InputTextDialog.hxx b/src/gui/InputTextDialog.hxx index 14471b3c6..49229aba5 100644 --- a/src/gui/InputTextDialog.hxx +++ b/src/gui/InputTextDialog.hxx @@ -34,6 +34,9 @@ class InputTextDialog : public Dialog, public CommandSender InputTextDialog(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& nfont, const StringList& labels, const string& title = ""); + InputTextDialog(OSystem& osystem, DialogContainer& parent, const GUI::Font& font, + const StringList& labels, const string& title = ""); + ~InputTextDialog() override = default; /** Place the input dialog onscreen and center it */ diff --git a/src/windows/Stella.vcxproj b/src/windows/Stella.vcxproj index 5a7fbbeb1..5932ed931 100755 --- a/src/windows/Stella.vcxproj +++ b/src/windows/Stella.vcxproj @@ -797,6 +797,7 @@ + @@ -1885,6 +1886,7 @@ + diff --git a/src/windows/Stella.vcxproj.filters b/src/windows/Stella.vcxproj.filters index 7bd3bbeca..f6f8f2bc4 100644 --- a/src/windows/Stella.vcxproj.filters +++ b/src/windows/Stella.vcxproj.filters @@ -1119,6 +1119,9 @@ Source Files\debugger + + Source Files\gui + @@ -2300,6 +2303,9 @@ Header Files\debugger + + Header Files\gui + @@ -2312,4 +2318,4 @@ Resource Files - + \ No newline at end of file