menu: show savestate date

git-svn-id: file:///home/notaz/opt/svn/PicoDrive@951 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
notaz 2012-07-22 14:32:38 +00:00
parent 356473ec96
commit cca8800dfb
3 changed files with 35 additions and 14 deletions

View file

@ -1012,7 +1012,7 @@ char *emu_get_save_fname(int load, int is_sram, int slot)
return NULL;
}
int emu_check_save_file(int slot)
int emu_check_save_file(int slot, int *time)
{
return emu_get_save_fname(1, 0, slot) ? 1 : 0;
}
@ -1239,7 +1239,7 @@ static void run_events_ui(unsigned int which)
if (which & (PEV_STATE_LOAD|PEV_STATE_SAVE))
{
int do_it = 1;
if ( emu_check_save_file(state_slot) &&
if ( emu_check_save_file(state_slot, NULL) &&
(((which & PEV_STATE_LOAD) && (currentConfig.confirm_save & EOPT_CONFIRM_LOAD)) ||
((which & PEV_STATE_SAVE) && (currentConfig.confirm_save & EOPT_CONFIRM_SAVE))) )
{
@ -1292,7 +1292,7 @@ static void run_events_ui(unsigned int which)
}
emu_status_msg("SAVE SLOT %i [%s]", state_slot,
emu_check_save_file(state_slot) ? "USED" : "FREE");
emu_check_save_file(state_slot, NULL) ? "USED" : "FREE");
}
if (which & PEV_MENU)
engineState = PGS_Menu;

View file

@ -133,7 +133,7 @@ int emu_read_config(const char *rom_fname, int no_defaults);
int emu_write_config(int game);
char *emu_get_save_fname(int load, int is_sram, int slot);
int emu_check_save_file(int slot);
int emu_check_save_file(int slot, int *time);
void emu_text_out8 (int x, int y, const char *text);
void emu_text_out16(int x, int y, const char *text);

View file

@ -12,6 +12,8 @@
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
#include <locale.h> // savestate date
#include "menu.h"
#include "fonts.h"
@ -309,6 +311,9 @@ void menu_init(void)
}
fclose(f);
}
// use user's locale for savestate date display
setlocale(LC_TIME, "");
}
static void menu_draw_begin(int need_bg)
@ -965,7 +970,10 @@ rescan:
// ------------ savestate loader ------------
#define STATE_SLOT_COUNT 10
static int state_slot_flags = 0;
static int state_slot_times[STATE_SLOT_COUNT];
static void state_check_slots(void)
{
@ -973,8 +981,9 @@ static void state_check_slots(void)
state_slot_flags = 0;
for (slot = 0; slot < 10; slot++) {
if (emu_check_save_file(slot))
for (slot = 0; slot < STATE_SLOT_COUNT; slot++) {
state_slot_times[slot] = 0;
if (emu_check_save_file(slot, &state_slot_times[slot]))
state_slot_flags |= 1 << slot;
}
}
@ -984,12 +993,13 @@ static void draw_savestate_bg(int slot);
static void draw_savestate_menu(int menu_sel, int is_loading)
{
int i, x, y, w, h;
char time_buf[32];
if (state_slot_flags & (1 << menu_sel))
draw_savestate_bg(menu_sel);
w = (13 + 2) * me_mfont_w;
h = (1+2+10+1) * me_mfont_h;
h = (1+2+STATE_SLOT_COUNT+1) * me_mfont_h;
x = g_menuscreen_w / 2 - w / 2;
if (x < 0) x = 0;
y = g_menuscreen_h / 2 - h / 2;
@ -1004,12 +1014,23 @@ static void draw_savestate_menu(int menu_sel, int is_loading)
text_out16(x, y, is_loading ? "Load state" : "Save state");
y += 3 * me_mfont_h;
menu_draw_selection(x - me_mfont_w * 2, y + menu_sel * me_mfont_h, (13 + 2) * me_mfont_w + 4);
menu_draw_selection(x - me_mfont_w * 2, y + menu_sel * me_mfont_h, (23 + 2) * me_mfont_w + 4);
/* draw all 10 slots */
for (i = 0; i < 10; i++, y += me_mfont_h)
/* draw all slots */
for (i = 0; i < STATE_SLOT_COUNT; i++, y += me_mfont_h)
{
text_out16(x, y, "SLOT %i (%s)", i, (state_slot_flags & (1 << i)) ? "USED" : "free");
if (!(state_slot_flags & (1 << i)))
strcpy(time_buf, "free");
else {
strcpy(time_buf, "USED");
if (state_slot_times[i] != 0) {
time_t time = state_slot_times[i];
struct tm *t = localtime(&time);
strftime(time_buf, sizeof(time_buf), "%x %R", t);
}
}
text_out16(x, y, "SLOT %i (%s)", i, time_buf);
}
text_out16(x, y, "back");
@ -1018,8 +1039,8 @@ static void draw_savestate_menu(int menu_sel, int is_loading)
static int menu_loop_savestate(int is_loading)
{
static int menu_sel = 10;
int menu_sel_max = 10;
static int menu_sel = STATE_SLOT_COUNT;
int menu_sel_max = STATE_SLOT_COUNT;
unsigned long inp = 0;
int ret = 0;
@ -1047,7 +1068,7 @@ static int menu_loop_savestate(int is_loading)
} while (!(state_slot_flags & (1 << menu_sel)) && menu_sel != menu_sel_max && is_loading);
}
if (inp & PBTN_MOK) { // save/load
if (menu_sel < 10) {
if (menu_sel < STATE_SLOT_COUNT) {
state_slot = menu_sel;
if (emu_save_load_game(is_loading, 0)) {
me_update_msg(is_loading ? "Load failed" : "Save failed");