X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=ball%2Fst_save.c;h=509eb944fa2c826d4b53586d47ef5273e83cbee3;hb=428f34e4b4486c5e3714abdbcc234b05215c8e4a;hp=ea0d0d35ba715539dd7127fee1ccbc7bf64c2d96;hpb=cd67609fabc601067fa72d83b0264f1850205349;p=neverball diff --git a/ball/st_save.c b/ball/st_save.c index ea0d0d3..509eb94 100644 --- a/ball/st_save.c +++ b/ball/st_save.c @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2003 Robert Kooima * * NEVERBALL is free software; you can redistribute it and/or modify @@ -13,6 +13,7 @@ */ #include +#include #include "gui.h" #include "game.h" @@ -20,100 +21,114 @@ #include "audio.h" #include "config.h" #include "demo.h" -#include "st_shared.h" +#include "progress.h" +#include "text.h" +#include "st_shared.h" #include "st_save.h" extern struct state st_save; extern struct state st_clobber; -static char filename[MAXNAM]; + +static char filename[MAXSTR]; /*---------------------------------------------------------------------------*/ -static struct state * ok_state; -static struct state * cancel_state; +static struct state *ok_state; +static struct state *cancel_state; -int goto_save(struct state * ok, struct state * cancel) +int goto_save(struct state *ok, struct state *cancel) { - demo_unique(filename); + char fmt[MAXSTR] = ""; + const char *name; + + config_get_s(CONFIG_REPLAY_NAME, fmt, sizeof (fmt) - 1); + name = demo_format_name(fmt, set_id(curr_set()), level_name(curr_level())); + + strncpy(filename, name, sizeof (filename) - 1); + ok_state = ok; cancel_state = cancel; + return goto_state(&st_save); } /*---------------------------------------------------------------------------*/ -#define SAVE_SAVE 2 -#define SAVE_CANCEL 3 - static int file_id; +#define SAVE_SAVE -1 +#define SAVE_CANCEL -2 + static int save_action(int i) { - size_t l = strlen(filename); + char *n; audio_play(AUD_MENU, 1.0f); switch (i) { case SAVE_SAVE: - if (strcmp(filename, "") == 0) - return 1; - if (demo_exists(filename)) + n = text_to_locale(filename); + + if (strlen(n) == 0) + return 1; + + if (demo_exists(n)) return goto_state(&st_clobber); else { - demo_play_save(filename); - return goto_state(ok_state); + demo_rename(n); + return goto_state(ok_state); } case SAVE_CANCEL: - return goto_state(cancel_state); + return goto_state(cancel_state); + + case GUI_CL: + gui_keyboard_lock(); + break; case GUI_BS: - if (l > 0) - { - filename[l - 1] = 0; + if (text_del_char(filename)) gui_set_label(file_id, filename); - } break; default: - if (l < MAXNAM - 1) - { - filename[l + 0] = (char) i; - filename[l + 1] = 0; + if (text_add_char(i, filename, sizeof (filename) - 1, + sizeof (filename) - 1)) gui_set_label(file_id, filename); - } } return 1; } +static int enter_id; + static int save_enter(void) { int id, jd; if ((id = gui_vstack(0))) { - gui_label(id, _("Replay Name"), GUI_MED, GUI_ALL, 0, 0); - - gui_space(id); + gui_label(id, _("Replay Name"), GUI_MED, GUI_ALL, 0, 0); gui_space(id); - + file_id = gui_label(id, filename, GUI_MED, GUI_ALL, gui_yel, gui_yel); - - gui_space(id); + gui_space(id); gui_keyboard(id); + gui_space(id); + if ((jd = gui_harray(id))) { + enter_id = gui_start(jd, _("Save"), GUI_SML, SAVE_SAVE, 0); + gui_space(jd); gui_state(jd, _("Cancel"), GUI_SML, SAVE_CANCEL, 0); - gui_start(jd, _("Save"), GUI_SML, SAVE_SAVE, 0); } - + gui_layout(id, 0, 0); } - + SDL_EnableUNICODE(1); return id; @@ -128,14 +143,14 @@ static void save_leave(int id) static int save_keybd(int c, int d) { if (d) - if ((c & 0xFF80) == 0) - { - c &= 0x7F; - if (c == '\b') - return save_action(GUI_BS); - else if (c > ' ') - return save_action(c); - } + { + gui_focus(enter_id); + + if (c == '\b' || c == 0x7F) + return save_action(GUI_BS); + if (c >= ' ') + return save_action(c); + } return 1; } @@ -144,9 +159,16 @@ static int save_buttn(int b, int d) if (d) { if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b)) - return save_action(gui_token(gui_click())); + { + int c = gui_token(gui_click()); + + if (c >= 0 && !GUI_ISMSK(c)) + return save_action(gui_keyboard_char(c)); + else + return save_action(c); + } if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b)) - return save_action(SAVE_CANCEL); + return save_action(SAVE_CANCEL); } return 1; } @@ -159,8 +181,8 @@ static int clobber_action(int i) if (i == SAVE_SAVE) { - demo_play_save(filename); - return goto_state(ok_state); + demo_rename(text_to_locale(filename)); + return goto_state(ok_state); } return goto_state(&st_save); } @@ -177,8 +199,8 @@ static int clobber_enter(void) if ((jd = gui_harray(id))) { - gui_state(jd, _("Yes"), GUI_SML, SAVE_SAVE, 0); gui_start(jd, _("No"), GUI_SML, SAVE_CANCEL, 1); + gui_state(jd, _("Yes"), GUI_SML, SAVE_SAVE, 0); } gui_pulse(kd, 1.2f); @@ -209,6 +231,7 @@ struct state st_save = { shared_timer, shared_point, shared_stick, + shared_angle, shared_click, save_keybd, save_buttn, @@ -222,6 +245,7 @@ struct state st_clobber = { shared_timer, shared_point, shared_stick, + shared_angle, shared_click, NULL, clobber_buttn,