diff --git a/src/osdep/amiberry_gui.cpp b/src/osdep/amiberry_gui.cpp index 8214873b..c9e0eda9 100644 --- a/src/osdep/amiberry_gui.cpp +++ b/src/osdep/amiberry_gui.cpp @@ -474,6 +474,30 @@ int gui_update() strncat(savestate_fname,"-3.uss", MAX_DPATH - 1); strncat(screenshot_filename,"-3.png", MAX_DPATH - 1); break; + case 4: + strncat(savestate_fname, "-4.uss", MAX_DPATH - 1); + strncat(screenshot_filename, "-4.png", MAX_DPATH - 1); + break; + case 5: + strncat(savestate_fname, "-5.uss", MAX_DPATH - 1); + strncat(screenshot_filename, "-5.png", MAX_DPATH - 1); + break; + case 6: + strncat(savestate_fname, "-6.uss", MAX_DPATH - 1); + strncat(screenshot_filename, "-6.png", MAX_DPATH - 1); + break; + case 7: + strncat(savestate_fname, "-7.uss", MAX_DPATH - 1); + strncat(screenshot_filename, "-7.png", MAX_DPATH - 1); + break; + case 8: + strncat(savestate_fname, "-8.uss", MAX_DPATH - 1); + strncat(screenshot_filename, "-8.png", MAX_DPATH - 1); + break; + case 9: + strncat(savestate_fname, "-9.uss", MAX_DPATH - 1); + strncat(screenshot_filename, "-9.png", MAX_DPATH - 1); + break; default: strncat(savestate_fname,".uss", MAX_DPATH - 1); strncat(screenshot_filename,".png", MAX_DPATH - 1); diff --git a/src/osdep/gui/Navigation.cpp b/src/osdep/gui/Navigation.cpp index a08a8d8d..d04e2d42 100644 --- a/src/osdep/gui/Navigation.cpp +++ b/src/osdep/gui/Navigation.cpp @@ -301,12 +301,18 @@ static NavigationMap navMap[] = {"KeyFullScreen", "KeyActionReplay", "KeyActionReplay", "KeyForQuit", "RetroArchQuit"}, // PanelSavestate - {"State0", "Savestates", "Savestates", "LoadState", "State1"}, - {"State1", "Savestates", "Savestates", "State0", "State2"}, - {"State2", "Savestates", "Savestates", "State1", "State3"}, - {"State3", "Savestates", "Savestates", "State2", "LoadState"}, - {"LoadState", "Savestates", "SaveState", "State3", "State0"}, - {"SaveState", "LoadState", "Savestates", "State3", "State0"}, + { "State0", "Savestates", "Savestates", "LoadState", "State1" }, + { "State1", "Savestates", "Savestates", "State0", "State2" }, + { "State2", "Savestates", "Savestates", "State1", "State3" }, + { "State3", "Savestates", "Savestates", "State2", "State4" }, + { "State4", "Savestates", "Savestates", "State3", "State5" }, + { "State5", "Savestates", "Savestates", "State4", "State6" }, + { "State6", "Savestates", "Savestates", "State5", "State7" }, + { "State7", "Savestates", "Savestates", "State6", "State8" }, + { "State8", "Savestates", "Savestates", "State7", "State9" }, + { "State9", "Savestates", "Savestates", "State8", "LoadState" }, + { "LoadState", "Savestates", "SaveState", "State9", "State0" }, + { "SaveState", "LoadState", "Savestates", "State9", "State0" }, #ifdef ANDROID // PanelOnScreen diff --git a/src/osdep/gui/PanelSavestate.cpp b/src/osdep/gui/PanelSavestate.cpp index a7b57e9b..382a574c 100644 --- a/src/osdep/gui/PanelSavestate.cpp +++ b/src/osdep/gui/PanelSavestate.cpp @@ -23,7 +23,14 @@ static gcn::RadioButton* optState0; static gcn::RadioButton* optState1; static gcn::RadioButton* optState2; static gcn::RadioButton* optState3; -static gcn::Window* wndScreenshot; +static gcn::RadioButton* optState4; +static gcn::RadioButton* optState5; +static gcn::RadioButton* optState6; +static gcn::RadioButton* optState7; +static gcn::RadioButton* optState8; +static gcn::RadioButton* optState9; + +static gcn::Window* grpScreenshot; static gcn::Icon* icoSavestate = nullptr; static gcn::Image* imgSavestate = nullptr; static gcn::Button* cmdLoadState; @@ -44,6 +51,18 @@ public: currentStateNum = 2; else if (actionEvent.getSource() == optState3) currentStateNum = 3; + else if (actionEvent.getSource() == optState4) + currentStateNum = 4; + else if (actionEvent.getSource() == optState5) + currentStateNum = 5; + else if (actionEvent.getSource() == optState6) + currentStateNum = 6; + else if (actionEvent.getSource() == optState7) + currentStateNum = 7; + else if (actionEvent.getSource() == optState8) + currentStateNum = 8; + else if (actionEvent.getSource() == optState9) + currentStateNum = 9; else if (actionEvent.getSource() == cmdLoadState) { //------------------------------------------ @@ -116,30 +135,60 @@ void InitPanelSavestate(const struct _ConfigCategory& category) optState3->setId("State3"); optState3->addActionListener(savestateActionListener); + optState4 = new gcn::RadioButton("4", "radiostategroup"); + optState4->setId("State4"); + optState4->addActionListener(savestateActionListener); + + optState5 = new gcn::RadioButton("5", "radiostategroup"); + optState5->setId("State5"); + optState5->addActionListener(savestateActionListener); + + optState6 = new gcn::RadioButton("6", "radiostategroup"); + optState6->setId("State6"); + optState6->addActionListener(savestateActionListener); + + optState7 = new gcn::RadioButton("7", "radiostategroup"); + optState7->setId("State7"); + optState7->addActionListener(savestateActionListener); + + optState8 = new gcn::RadioButton("8", "radiostategroup"); + optState8->setId("State8"); + optState8->addActionListener(savestateActionListener); + + optState9 = new gcn::RadioButton("9", "radiostategroup"); + optState9->setId("State9"); + optState9->addActionListener(savestateActionListener); + grpNumber = new gcn::Window("Number"); - grpNumber->add(optState0, 5, 10); - grpNumber->add(optState1, 5, 40); - grpNumber->add(optState2, 5, 70); - grpNumber->add(optState3, 5, 100); + grpNumber->add(optState0, 10, 10); + grpNumber->add(optState1, optState0->getX(), optState0->getY() + optState0->getHeight() + DISTANCE_NEXT_Y); + grpNumber->add(optState2, optState0->getX(), optState1->getY() + optState1->getHeight() + DISTANCE_NEXT_Y); + grpNumber->add(optState3, optState0->getX(), optState2->getY() + optState2->getHeight() + DISTANCE_NEXT_Y); + grpNumber->add(optState4, optState0->getX(), optState3->getY() + optState3->getHeight() + DISTANCE_NEXT_Y); + grpNumber->add(optState5, optState0->getX(), optState4->getY() + optState4->getHeight() + DISTANCE_NEXT_Y); + grpNumber->add(optState6, optState0->getX(), optState5->getY() + optState5->getHeight() + DISTANCE_NEXT_Y); + grpNumber->add(optState7, optState0->getX(), optState6->getY() + optState6->getHeight() + DISTANCE_NEXT_Y); + grpNumber->add(optState8, optState0->getX(), optState7->getY() + optState7->getHeight() + DISTANCE_NEXT_Y); + grpNumber->add(optState9, optState0->getX(), optState8->getY() + optState8->getHeight() + DISTANCE_NEXT_Y); grpNumber->setMovable(false); - grpNumber->setSize(BUTTON_WIDTH, 155); + grpNumber->setSize(BUTTON_WIDTH, BUTTON_WIDTH * 4); grpNumber->setTitleBarHeight(TITLEBAR_HEIGHT); grpNumber->setBaseColor(gui_baseCol); - wndScreenshot = new gcn::Window("State screen"); - wndScreenshot->setMovable(false); - wndScreenshot->setSize(300, 300); - wndScreenshot->setTitleBarHeight(TITLEBAR_HEIGHT); - wndScreenshot->setBaseColor(gui_baseCol); + grpScreenshot = new gcn::Window("State screen"); + grpScreenshot->setMovable(false); + grpScreenshot->setSize(300, 300); + grpScreenshot->setTitleBarHeight(TITLEBAR_HEIGHT); + grpScreenshot->setBaseColor(gui_baseCol); cmdLoadState = new gcn::Button("Load State"); - cmdLoadState->setSize(BUTTON_WIDTH, BUTTON_HEIGHT); + cmdLoadState->setSize(BUTTON_WIDTH + 10, BUTTON_HEIGHT); cmdLoadState->setBaseColor(gui_baseCol); cmdLoadState->setId("LoadState"); cmdLoadState->addActionListener(savestateActionListener); cmdSaveState = new gcn::Button("Save State"); - cmdSaveState->setSize(BUTTON_WIDTH, BUTTON_HEIGHT); + cmdSaveState->setSize(BUTTON_WIDTH + 10, BUTTON_HEIGHT); cmdSaveState->setBaseColor(gui_baseCol); cmdSaveState->setId("SaveState"); cmdSaveState->addActionListener(savestateActionListener); @@ -147,8 +196,7 @@ void InitPanelSavestate(const struct _ConfigCategory& category) lblWarningHDDon = new gcn::Label("State saves do not support hard drive emulation."); category.panel->add(grpNumber, DISTANCE_BORDER, DISTANCE_BORDER); - category.panel->add(wndScreenshot, grpNumber->getX() + grpNumber->getWidth() + DISTANCE_NEXT_X * 2, - DISTANCE_BORDER); + category.panel->add(grpScreenshot, grpNumber->getX() + grpNumber->getWidth() + DISTANCE_NEXT_X, DISTANCE_BORDER); const auto posY = category.panel->getHeight() - DISTANCE_BORDER - BUTTON_HEIGHT; category.panel->add(cmdLoadState, DISTANCE_BORDER, posY); category.panel->add(cmdSaveState, DISTANCE_BORDER + BUTTON_WIDTH + DISTANCE_NEXT_X, posY); @@ -164,13 +212,19 @@ void ExitPanelSavestate() delete optState1; delete optState2; delete optState3; + delete optState4; + delete optState5; + delete optState6; + delete optState7; + delete optState8; + delete optState9; delete grpNumber; delete imgSavestate; imgSavestate = nullptr; delete icoSavestate; icoSavestate = nullptr; - delete wndScreenshot; + delete grpScreenshot; delete cmdLoadState; delete cmdSaveState; @@ -184,7 +238,7 @@ void RefreshPanelSavestate() { if (icoSavestate != nullptr) { - wndScreenshot->remove(icoSavestate); + grpScreenshot->remove(icoSavestate); delete icoSavestate; icoSavestate = nullptr; } @@ -208,6 +262,24 @@ void RefreshPanelSavestate() case 3: optState3->setSelected(true); break; + case 4: + optState4->setSelected(true); + break; + case 5: + optState5->setSelected(true); + break; + case 6: + optState6->setSelected(true); + break; + case 7: + optState7->setSelected(true); + break; + case 8: + optState8->setSelected(true); + break; + case 9: + optState9->setSelected(true); + break; default: break; } @@ -219,7 +291,7 @@ void RefreshPanelSavestate() if (f) { fclose(f); - const auto rect = wndScreenshot->getChildrenArea(); + const auto rect = grpScreenshot->getChildrenArea(); auto* loadedImage = IMG_Load(screenshot_filename); if (loadedImage != nullptr) { @@ -238,7 +310,7 @@ void RefreshPanelSavestate() loadedImage = nullptr; imgSavestate = new gcn::SDLImage(scaled, true); icoSavestate = new gcn::Icon(imgSavestate); - wndScreenshot->add(icoSavestate); + grpScreenshot->add(icoSavestate); } } } @@ -248,7 +320,13 @@ void RefreshPanelSavestate() optState1->setEnabled(enabled); optState2->setEnabled(enabled); optState3->setEnabled(enabled); - wndScreenshot->setVisible(enabled); + optState4->setEnabled(enabled); + optState5->setEnabled(enabled); + optState6->setEnabled(enabled); + optState7->setEnabled(enabled); + optState8->setEnabled(enabled); + optState9->setEnabled(enabled); + grpScreenshot->setVisible(enabled); cmdLoadState->setEnabled(enabled); cmdSaveState->setEnabled(enabled); lblWarningHDDon->setVisible(!enabled);