diff options
| author | Johannes Schwarz <ubuntuxer@rockbox.org> | 2009-06-26 17:59:33 +0000 |
|---|---|---|
| committer | Johannes Schwarz <ubuntuxer@rockbox.org> | 2009-06-26 17:59:33 +0000 |
| commit | 73d25744fb01844cc28402dfc4b48a030d270579 (patch) | |
| tree | 34a3e43d7160f263178928553644cf3392a6341b /apps/plugins/mazezam.c | |
| parent | c2565c9bcf02b8b9fe0311a15a731dde449c1552 (diff) | |
| download | rockbox-73d25744fb01844cc28402dfc4b48a030d270579.zip rockbox-73d25744fb01844cc28402dfc4b48a030d270579.tar.gz rockbox-73d25744fb01844cc28402dfc4b48a030d270579.tar.bz2 rockbox-73d25744fb01844cc28402dfc4b48a030d270579.tar.xz | |
FS#10283 simplify plugins' menus by using stringlist with callback (by Teruaki Kawashima - some minor changes by myself)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21523 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/mazezam.c')
| -rw-r--r-- | apps/plugins/mazezam.c | 59 |
1 files changed, 21 insertions, 38 deletions
diff --git a/apps/plugins/mazezam.c b/apps/plugins/mazezam.c index 2e79567..ac7e651 100644 --- a/apps/plugins/mazezam.c +++ b/apps/plugins/mazezam.c @@ -52,13 +52,12 @@ const struct button_mapping *plugin_contexts[] #define MAZEZAM_TEXT_WELLDONE_OPTION "Goodbye" #define MAZEZAM_TEXT_MAZEZAM_MENU "MazezaM Menu" #define MAZEZAM_TEXT_RETRY_LEVEL "Retry level" -#define MAZEZAM_TEXT_AUDIO_PLAYBACK "Audio playback" +#define MAZEZAM_TEXT_AUDIO_PLAYBACK "Playback Control" #define MAZEZAM_TEXT_QUIT "Quit" -#define MAZEZAM_TEXT_BACK "Return" +#define MAZEZAM_TEXT_BACK "Resume Game" #define MAZEZAM_TEXT_MAIN_MENU "MazezaM" #define MAZEZAM_TEXT_CONTINUE "Play from checkpoint" -#define MAZEZAM_TEXT_PLAY_GAME "Play game" -#define MAZEZAM_TEXT_PLAY_NEW_GAME "Play new game" +#define MAZEZAM_TEXT_PLAY_NEW_GAME "Start New Game" #define MAZEZAM_START_LIVES 3 /* how many lives at game start */ #define MAZEZAM_FIRST_CHECKPOINT 3 /* The level at the first checkpoint */ @@ -838,31 +837,16 @@ static void resume_save_data (struct resume_data *r, struct resume_data *old) } /***************************************************************************** -* Offer a main menu with no continue option -******************************************************************************/ -static int main_menu_without_continue(int* start_selection) -{ - MENUITEM_STRINGLIST(menu,MAZEZAM_TEXT_MAIN_MENU,NULL, - MAZEZAM_TEXT_PLAY_GAME, - MAZEZAM_TEXT_QUIT); - return rb->do_menu(&menu, start_selection, NULL, false); -} - -/***************************************************************************** -* Offer a main menu with a continue option +* Manages the main menu ******************************************************************************/ -static int main_menu_with_continue(int* start_selection) +static bool have_continue; +static int main_menu_cb(int action, const struct menu_item_ex *this_item) { - MENUITEM_STRINGLIST(menu,MAZEZAM_TEXT_MAIN_MENU,NULL, - MAZEZAM_TEXT_CONTINUE, - MAZEZAM_TEXT_PLAY_NEW_GAME, - MAZEZAM_TEXT_QUIT); - return rb->do_menu(&menu, start_selection, NULL, false); + if(action == ACTION_REQUEST_MENUITEM + && !have_continue && ((intptr_t)this_item)==0) + return ACTION_EXIT_MENUITEM; + return action; } - -/***************************************************************************** -* Manages the main menu -******************************************************************************/ static void main_menu(void) { /* The initial option is "play game" */ @@ -873,11 +857,14 @@ static void main_menu(void) /* Load data */ resume_load_data(&r_data, &old_data); + MENUITEM_STRINGLIST(menu,MAZEZAM_TEXT_MAIN_MENU,main_menu_cb, + MAZEZAM_TEXT_CONTINUE, + MAZEZAM_TEXT_PLAY_NEW_GAME, + MAZEZAM_TEXT_QUIT); + while (state >= STATE_IN_APPLICATION) { - if (r_data.level == 0) - choice = main_menu_without_continue(&start_selection); - else - choice = main_menu_with_continue(&start_selection); + have_continue = (r_data.level != 0); + choice = rb->do_menu(&menu, &start_selection, NULL, false); switch(choice) { case 0: /* Continue */ @@ -885,14 +872,10 @@ static void main_menu(void) game_loop(&r_data); break; - case 1: /* Quit or Play new game */ - if (r_data.level == 0) - state = STATE_QUIT; - else { /* Play new game */ - r_data.level = 0; - state = STATE_IN_GAME; - game_loop(&r_data); - } + case 1: /* Play new game */ + r_data.level = 0; + state = STATE_IN_GAME; + game_loop(&r_data); break; case MENU_ATTACHED_USB: |