mirror of
https://github.com/Oibaf66/frodo-wii.git
synced 2024-11-22 11:29:24 +01:00
Put in current filename (and copy the tmp path if needed)
This commit is contained in:
parent
89a9e72a79
commit
6191f99dcf
@ -1,10 +1,14 @@
|
|||||||
|
#include <unistd.h> /* unlink */
|
||||||
|
|
||||||
#include "menu.hh"
|
#include "menu.hh"
|
||||||
#include "file_browser.hh"
|
#include "file_browser.hh"
|
||||||
#include "game_info.hh"
|
#include "game_info.hh"
|
||||||
#include "game_info_box.hh"
|
#include "game_info_box.hh"
|
||||||
|
#include "utils.hh"
|
||||||
|
|
||||||
static const char *game_exts[] = {".d64", ".D64", ".t64", ".T64",
|
static const char *game_exts[] = {".d64", ".D64", ".t64", ".T64",
|
||||||
".prg",".PRG", ".p00", ".P00", NULL};
|
".prg",".PRG", ".p00", ".P00", NULL};
|
||||||
|
static const char *prg_exts[] = {".prg",".PRG", ".p00", ".P00", NULL};
|
||||||
|
|
||||||
class DiscMenu;
|
class DiscMenu;
|
||||||
|
|
||||||
@ -48,6 +52,46 @@ public:
|
|||||||
virtual void selectCallback(int which)
|
virtual void selectCallback(int which)
|
||||||
{
|
{
|
||||||
const char *fileName = this->pp_msgs[this->cur_sel];
|
const char *fileName = this->pp_msgs[this->cur_sel];
|
||||||
|
const char *save_game = strrchr(fileName, '/');
|
||||||
|
|
||||||
|
if (!save_game)
|
||||||
|
save_game = fileName;
|
||||||
|
else
|
||||||
|
save_game = save_game + 1; /* Skip '/' */
|
||||||
|
strncpy(Gui::gui->np->DrivePath[0], fileName, sizeof(Gui::gui->np->DrivePath[0]));
|
||||||
|
|
||||||
|
if (ext_matches_list(fileName, prg_exts)) {
|
||||||
|
char tmp_filename[255];
|
||||||
|
FILE *src, *dst;
|
||||||
|
|
||||||
|
snprintf(tmp_filename, sizeof(tmp_filename), "%s/a", Gui::gui->tmp_path);
|
||||||
|
|
||||||
|
/* Clean temp dir first (we only want one file) */
|
||||||
|
unlink(tmp_filename);
|
||||||
|
|
||||||
|
src = fopen(Gui::gui->np->DrivePath[0], "r");
|
||||||
|
if (src != NULL)
|
||||||
|
{
|
||||||
|
snprintf(Gui::gui->np->DrivePath[0], sizeof(Gui::gui->np->DrivePath[0]),
|
||||||
|
"%s", Gui::gui->tmp_path);
|
||||||
|
|
||||||
|
/* Special handling of .prg: Copy to TMP_PATH and
|
||||||
|
* load that as a dir */
|
||||||
|
dst = fopen(tmp_filename, "w");
|
||||||
|
if (dst)
|
||||||
|
{
|
||||||
|
Uint8 buf[1024];
|
||||||
|
size_t v;
|
||||||
|
|
||||||
|
do {
|
||||||
|
v = fread(buf, 1, sizeof(buf), src);
|
||||||
|
fwrite(buf, 1, v, dst);
|
||||||
|
} while (v > 0);
|
||||||
|
fclose(dst);
|
||||||
|
}
|
||||||
|
fclose(src);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Gui::gui->timerController->disarm(this);
|
Gui::gui->timerController->disarm(this);
|
||||||
Gui::gui->dv->loadGameInfo(fileName);
|
Gui::gui->dv->loadGameInfo(fileName);
|
||||||
@ -56,6 +100,7 @@ public:
|
|||||||
Gui::gui->updateGameInfo(Gui::gui->dv->gameInfo->gi);
|
Gui::gui->updateGameInfo(Gui::gui->dv->gameInfo->gi);
|
||||||
else
|
else
|
||||||
Gui::gui->updateGameInfo(new GameInfo(fileName));
|
Gui::gui->updateGameInfo(new GameInfo(fileName));
|
||||||
|
Gui::gui->popView();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void hoverCallback(int which)
|
virtual void hoverCallback(int which)
|
||||||
|
2
gui.cpp
2
gui.cpp
@ -16,6 +16,7 @@ extern SDL_Surface *screen;
|
|||||||
#define THEME_ROOT_PATH "themes"
|
#define THEME_ROOT_PATH "themes"
|
||||||
#define METADATA_ROOT_PATH "metadata"
|
#define METADATA_ROOT_PATH "metadata"
|
||||||
#define GAME_ROOT_PATH "discs"
|
#define GAME_ROOT_PATH "discs"
|
||||||
|
#define TMP_ROOT_PATH "tmp"
|
||||||
|
|
||||||
static const char *get_theme_path(const char *dir, const char *what)
|
static const char *get_theme_path(const char *dir, const char *what)
|
||||||
{
|
{
|
||||||
@ -83,6 +84,7 @@ Gui::Gui()
|
|||||||
this->theme_base_path = THEME_ROOT_PATH;
|
this->theme_base_path = THEME_ROOT_PATH;
|
||||||
this->metadata_base_path = METADATA_ROOT_PATH;
|
this->metadata_base_path = METADATA_ROOT_PATH;
|
||||||
this->game_base_path = GAME_ROOT_PATH;
|
this->game_base_path = GAME_ROOT_PATH;
|
||||||
|
this->tmp_path = TMP_ROOT_PATH;
|
||||||
|
|
||||||
this->cur_gameInfo = new GameInfo();
|
this->cur_gameInfo = new GameInfo();
|
||||||
this->gameInfoChanged = false;
|
this->gameInfoChanged = false;
|
||||||
|
1
gui.hh
1
gui.hh
@ -113,6 +113,7 @@ public:
|
|||||||
const char *metadata_base_path;
|
const char *metadata_base_path;
|
||||||
const char *theme_base_path;
|
const char *theme_base_path;
|
||||||
const char *game_base_path;
|
const char *game_base_path;
|
||||||
|
const char *tmp_path;
|
||||||
|
|
||||||
GameInfo *cur_gameInfo;
|
GameInfo *cur_gameInfo;
|
||||||
bool gameInfoChanged;
|
bool gameInfoChanged;
|
||||||
|
2
utils.hh
2
utils.hh
@ -69,6 +69,8 @@ static inline void *xrealloc(void *ptr, size_t sz)
|
|||||||
|
|
||||||
TTF_Font *read_and_alloc_font(const char *path, int pt_size);
|
TTF_Font *read_and_alloc_font(const char *path, int pt_size);
|
||||||
|
|
||||||
|
bool ext_matches_list(const char *name, const char **exts);
|
||||||
|
|
||||||
const char **get_file_list(const char *base_dir, const char *exts[]);
|
const char **get_file_list(const char *base_dir, const char *exts[]);
|
||||||
|
|
||||||
void *sdl_surface_to_png(SDL_Surface *src, size_t *out_sz);
|
void *sdl_surface_to_png(SDL_Surface *src, size_t *out_sz);
|
||||||
|
Loading…
Reference in New Issue
Block a user