Commit pandora source code

This commit is contained in:
Chips-fr 2015-05-13 18:47:23 +00:00
parent f10bc4f2bf
commit e86cde6318
276 changed files with 263292 additions and 0 deletions

View file

@ -0,0 +1,233 @@
#include <guichan.hpp>
#include <SDL/SDL_ttf.h>
#include <SDL/SDL_image.h>
#include <guichan/sdl.hpp>
#include "sdltruetypefont.hpp"
#include "SelectorEntry.hpp"
#include "UaeRadioButton.hpp"
#include "UaeCheckBox.hpp"
#include "sysconfig.h"
#include "sysdeps.h"
#include "config.h"
#include "options.h"
#include "xwin.h"
#include "custom.h"
#include "drawing.h"
#include "uae.h"
#include "gui.h"
#include "savestate.h"
#include "target.h"
#include "gui_handling.h"
int currentStateNum = 0;
static gcn::Window *grpNumber;
static gcn::UaeRadioButton* optState0;
static gcn::UaeRadioButton* optState1;
static gcn::UaeRadioButton* optState2;
static gcn::UaeRadioButton* optState3;
static gcn::Window *wndScreenshot;
static gcn::Icon* icoSavestate = 0;
static gcn::Image *imgSavestate = 0;
static gcn::Button* cmdLoadState;
static gcn::Button* cmdSaveState;
class SavestateActionListener : public gcn::ActionListener
{
public:
void action(const gcn::ActionEvent& actionEvent)
{
if (actionEvent.getSource() == optState0)
currentStateNum = 0;
else if (actionEvent.getSource() == optState1)
currentStateNum = 1;
else if (actionEvent.getSource() == optState2)
currentStateNum = 2;
else if (actionEvent.getSource() == optState3)
currentStateNum = 3;
else if (actionEvent.getSource() == cmdLoadState)
{
//------------------------------------------
// Load state
//------------------------------------------
if(emulating)
{
if(strlen(savestate_fname) > 0)
{
FILE *f = fopen(savestate_fname,"rb");
if (f)
{
fclose(f);
savestate_initsave(savestate_fname, 2);
savestate_state = STATE_DORESTORE;
gui_running = false;
}
}
if(savestate_state != STATE_DORESTORE)
ShowMessage("Loading savestate", "Statefile doesn't exist.", "", "Ok", "");
}
else
ShowMessage("Loading savestate", "Emulation hasn't started yet.", "", "Ok", "");
}
else if (actionEvent.getSource() == cmdSaveState)
{
//------------------------------------------
// Save current state
//------------------------------------------
if(emulating)
{
savestate_initsave(savestate_fname, 2);
save_state (savestate_fname, "...");
savestate_state = STATE_DOSAVE; // Just to create the screenshot
delay_savestate_frame = 1;
gui_running = false;
}
else
ShowMessage("Saving state", "Emulation hasn't started yet.", "", "Ok", "");
}
RefreshPanelSavestate();
}
};
static SavestateActionListener* savestateActionListener;
void InitPanelSavestate(const struct _ConfigCategory& category)
{
savestateActionListener = new SavestateActionListener();
optState0 = new gcn::UaeRadioButton("0", "radiostategroup");
optState0->setId("State0");
optState0->addActionListener(savestateActionListener);
optState1 = new gcn::UaeRadioButton("1", "radiostategroup");
optState1->setId("State1");
optState1->addActionListener(savestateActionListener);
optState2 = new gcn::UaeRadioButton("2", "radiostategroup");
optState2->setId("State2");
optState2->addActionListener(savestateActionListener);
optState3 = new gcn::UaeRadioButton("3", "radiostategroup");
optState3->setId("State3");
optState3->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->setMovable(false);
grpNumber->setSize(60, 145);
grpNumber->setBaseColor(gui_baseCol);
wndScreenshot = new gcn::Window("State screen");
wndScreenshot->setMovable(false);
wndScreenshot->setSize(400, 300);
wndScreenshot->setBaseColor(gui_baseCol);
cmdLoadState = new gcn::Button("Load State");
cmdLoadState->setSize(BUTTON_WIDTH, 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->setBaseColor(gui_baseCol);
cmdSaveState->setId("SaveState");
cmdSaveState->addActionListener(savestateActionListener);
category.panel->add(grpNumber, DISTANCE_BORDER, DISTANCE_BORDER);
category.panel->add(wndScreenshot, DISTANCE_BORDER + 100, DISTANCE_BORDER);
int buttonY = category.panel->getHeight() - DISTANCE_BORDER - BUTTON_HEIGHT;
category.panel->add(cmdLoadState, DISTANCE_BORDER, buttonY);
category.panel->add(cmdSaveState, DISTANCE_BORDER + BUTTON_WIDTH + DISTANCE_NEXT_X, buttonY);
RefreshPanelSavestate();
}
void ExitPanelSavestate(void)
{
delete optState0;
delete optState1;
delete optState2;
delete optState3;
delete grpNumber;
if(imgSavestate != 0)
delete imgSavestate;
imgSavestate = 0;
if(icoSavestate != 0)
delete icoSavestate;
icoSavestate = 0;
delete wndScreenshot;
delete cmdLoadState;
delete cmdSaveState;
delete savestateActionListener;
}
void RefreshPanelSavestate(void)
{
if(icoSavestate != 0)
{
wndScreenshot->remove(icoSavestate);
delete icoSavestate;
icoSavestate = 0;
}
if(imgSavestate != 0)
{
delete imgSavestate;
imgSavestate = 0;
}
switch(currentStateNum)
{
case 0:
optState0->setSelected(true);
break;
case 1:
optState1->setSelected(true);
break;
case 2:
optState2->setSelected(true);
break;
case 3:
optState3->setSelected(true);
break;
}
gui_update();
if(strlen(screenshot_filename) > 0)
{
FILE *f=fopen(screenshot_filename,"rb");
if (f)
{
fclose(f);
gcn::Rectangle rect = wndScreenshot->getChildrenArea();
SDL_Surface *loadedImage = IMG_Load(screenshot_filename);
if(loadedImage != NULL)
{
SDL_Rect source = {0, 0, 0, 0 };
SDL_Rect target = {0, 0, 0, 0 };
SDL_Surface *scaled = SDL_CreateRGBSurface(loadedImage->flags, rect.width, rect.height, loadedImage->format->BitsPerPixel, loadedImage->format->Rmask, loadedImage->format->Gmask, loadedImage->format->Bmask, loadedImage->format->Amask);
source.w = loadedImage->w;
source.h = loadedImage->h;
target.w = rect.width;
target.h = rect.height;
SDL_SoftStretch(loadedImage, &source, scaled, &target);
SDL_FreeSurface(loadedImage);
imgSavestate = new gcn::SDLImage(scaled, true);
icoSavestate = new gcn::Icon(imgSavestate);
wndScreenshot->add(icoSavestate);
}
}
}
}