Fixed #652: Increased save state slots to 10

This commit is contained in:
Dimitris Panokostas 2020-07-13 21:55:02 +02:00
parent 44a57cbd41
commit 01fa60c141
3 changed files with 134 additions and 26 deletions

View file

@ -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);

View file

@ -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

View file

@ -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);