diff options
author | Marcoen Hirschberg <marcoen@gmail.com> | 2007-05-18 22:12:34 +0000 |
---|---|---|
committer | Marcoen Hirschberg <marcoen@gmail.com> | 2007-05-18 22:12:34 +0000 |
commit | 0d02c13bac030ff8a95b2a57e29137c76bbce5a5 (patch) | |
tree | c32c8c386ee91fe0e5765a2ee4fec562d998842c | |
parent | dfcf4276a199eb4044f5312960dfaf8b06bcb7cc (diff) | |
download | rockbox-0d02c13bac030ff8a95b2a57e29137c76bbce5a5.tar.gz rockbox-0d02c13bac030ff8a95b2a57e29137c76bbce5a5.zip |
add a menu to the chessbox plugin, FS #7186 by Mauricio Peccorini
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13405 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | apps/plugins/chessbox/chessbox.c | 107 |
1 files changed, 89 insertions, 18 deletions
diff --git a/apps/plugins/chessbox/chessbox.c b/apps/plugins/chessbox/chessbox.c index 0bd72ebcd8..8db5488105 100644 --- a/apps/plugins/chessbox/chessbox.c +++ b/apps/plugins/chessbox/chessbox.c | |||
@@ -49,7 +49,7 @@ PLUGIN_HEADER | |||
49 | #define CB_PLAY (BUTTON_SELECT | BUTTON_PLAY) | 49 | #define CB_PLAY (BUTTON_SELECT | BUTTON_PLAY) |
50 | #define CB_LEVEL (BUTTON_SELECT | BUTTON_RIGHT) | 50 | #define CB_LEVEL (BUTTON_SELECT | BUTTON_RIGHT) |
51 | #define CB_RESTART (BUTTON_SELECT | BUTTON_LEFT) | 51 | #define CB_RESTART (BUTTON_SELECT | BUTTON_LEFT) |
52 | #define CB_QUIT (BUTTON_SELECT | BUTTON_MENU) | 52 | #define CB_MENU (BUTTON_SELECT | BUTTON_MENU) |
53 | 53 | ||
54 | #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD | 54 | #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD |
55 | #define CB_SELECT BUTTON_SELECT | 55 | #define CB_SELECT BUTTON_SELECT |
@@ -60,7 +60,7 @@ PLUGIN_HEADER | |||
60 | #define CB_PLAY BUTTON_PLAY | 60 | #define CB_PLAY BUTTON_PLAY |
61 | #define CB_LEVEL BUTTON_REC | 61 | #define CB_LEVEL BUTTON_REC |
62 | #define CB_RESTART (BUTTON_SELECT | BUTTON_PLAY) | 62 | #define CB_RESTART (BUTTON_SELECT | BUTTON_PLAY) |
63 | #define CB_QUIT BUTTON_POWER | 63 | #define CB_MENU BUTTON_POWER |
64 | 64 | ||
65 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) | 65 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) |
66 | #define CB_SELECT BUTTON_SELECT | 66 | #define CB_SELECT BUTTON_SELECT |
@@ -71,7 +71,7 @@ PLUGIN_HEADER | |||
71 | #define CB_PLAY BUTTON_ON | 71 | #define CB_PLAY BUTTON_ON |
72 | #define CB_LEVEL BUTTON_MODE | 72 | #define CB_LEVEL BUTTON_MODE |
73 | #define CB_RESTART BUTTON_REC | 73 | #define CB_RESTART BUTTON_REC |
74 | #define CB_QUIT BUTTON_OFF | 74 | #define CB_MENU BUTTON_OFF |
75 | 75 | ||
76 | #define CB_RC_QUIT BUTTON_RC_STOP | 76 | #define CB_RC_QUIT BUTTON_RC_STOP |
77 | 77 | ||
@@ -83,7 +83,7 @@ PLUGIN_HEADER | |||
83 | #define CB_RIGHT BUTTON_RIGHT | 83 | #define CB_RIGHT BUTTON_RIGHT |
84 | #define CB_PLAY BUTTON_PLAY | 84 | #define CB_PLAY BUTTON_PLAY |
85 | #define CB_LEVEL BUTTON_EQ | 85 | #define CB_LEVEL BUTTON_EQ |
86 | #define CB_QUIT BUTTON_MODE | 86 | #define CB_MENU BUTTON_MODE |
87 | 87 | ||
88 | #elif CONFIG_KEYPAD == RECORDER_PAD | 88 | #elif CONFIG_KEYPAD == RECORDER_PAD |
89 | #define CB_SELECT BUTTON_PLAY | 89 | #define CB_SELECT BUTTON_PLAY |
@@ -94,7 +94,7 @@ PLUGIN_HEADER | |||
94 | #define CB_PLAY BUTTON_ON | 94 | #define CB_PLAY BUTTON_ON |
95 | #define CB_LEVEL BUTTON_F1 | 95 | #define CB_LEVEL BUTTON_F1 |
96 | #define CB_RESTART BUTTON_F3 | 96 | #define CB_RESTART BUTTON_F3 |
97 | #define CB_QUIT BUTTON_OFF | 97 | #define CB_MENU BUTTON_OFF |
98 | 98 | ||
99 | #elif CONFIG_KEYPAD == ARCHOS_AV300_PAD | 99 | #elif CONFIG_KEYPAD == ARCHOS_AV300_PAD |
100 | #define CB_SELECT BUTTON_SELECT | 100 | #define CB_SELECT BUTTON_SELECT |
@@ -105,7 +105,7 @@ PLUGIN_HEADER | |||
105 | #define CB_PLAY BUTTON_ON | 105 | #define CB_PLAY BUTTON_ON |
106 | #define CB_LEVEL BUTTON_F1 | 106 | #define CB_LEVEL BUTTON_F1 |
107 | #define CB_RESTART BUTTON_F3 | 107 | #define CB_RESTART BUTTON_F3 |
108 | #define CB_QUIT BUTTON_OFF | 108 | #define CB_MENU BUTTON_OFF |
109 | 109 | ||
110 | #elif CONFIG_KEYPAD == ONDIO_PAD | 110 | #elif CONFIG_KEYPAD == ONDIO_PAD |
111 | #define CB_SELECT_PRE BUTTON_MENU | 111 | #define CB_SELECT_PRE BUTTON_MENU |
@@ -118,7 +118,7 @@ PLUGIN_HEADER | |||
118 | #define CB_PLAY (BUTTON_MENU|BUTTON_REPEAT) | 118 | #define CB_PLAY (BUTTON_MENU|BUTTON_REPEAT) |
119 | #define CB_LEVEL (BUTTON_MENU|BUTTON_OFF) | 119 | #define CB_LEVEL (BUTTON_MENU|BUTTON_OFF) |
120 | #define CB_RESTART (BUTTON_MENU|BUTTON_LEFT) | 120 | #define CB_RESTART (BUTTON_MENU|BUTTON_LEFT) |
121 | #define CB_QUIT BUTTON_OFF | 121 | #define CB_MENU BUTTON_OFF |
122 | 122 | ||
123 | #elif (CONFIG_KEYPAD == GIGABEAT_PAD) | 123 | #elif (CONFIG_KEYPAD == GIGABEAT_PAD) |
124 | #define CB_SELECT BUTTON_SELECT | 124 | #define CB_SELECT BUTTON_SELECT |
@@ -128,7 +128,7 @@ PLUGIN_HEADER | |||
128 | #define CB_RIGHT BUTTON_RIGHT | 128 | #define CB_RIGHT BUTTON_RIGHT |
129 | #define CB_PLAY BUTTON_POWER | 129 | #define CB_PLAY BUTTON_POWER |
130 | #define CB_LEVEL BUTTON_MENU | 130 | #define CB_LEVEL BUTTON_MENU |
131 | #define CB_QUIT BUTTON_A | 131 | #define CB_MENU BUTTON_A |
132 | 132 | ||
133 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD | 133 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD |
134 | #define CB_SELECT BUTTON_REW | 134 | #define CB_SELECT BUTTON_REW |
@@ -139,7 +139,7 @@ PLUGIN_HEADER | |||
139 | #define CB_PLAY BUTTON_PLAY | 139 | #define CB_PLAY BUTTON_PLAY |
140 | #define CB_LEVEL BUTTON_FF | 140 | #define CB_LEVEL BUTTON_FF |
141 | #define CB_RESTART (BUTTON_REW | BUTTON_PLAY) | 141 | #define CB_RESTART (BUTTON_REW | BUTTON_PLAY) |
142 | #define CB_QUIT BUTTON_POWER | 142 | #define CB_MENU BUTTON_POWER |
143 | 143 | ||
144 | #elif CONFIG_KEYPAD == SANSA_E200_PAD | 144 | #elif CONFIG_KEYPAD == SANSA_E200_PAD |
145 | #define CB_SELECT BUTTON_SELECT | 145 | #define CB_SELECT BUTTON_SELECT |
@@ -150,7 +150,7 @@ PLUGIN_HEADER | |||
150 | #define CB_PLAY (BUTTON_SELECT | BUTTON_RIGHT) | 150 | #define CB_PLAY (BUTTON_SELECT | BUTTON_RIGHT) |
151 | #define CB_LEVEL BUTTON_REC | 151 | #define CB_LEVEL BUTTON_REC |
152 | #define CB_RESTART (BUTTON_SELECT | BUTTON_REPEAT) | 152 | #define CB_RESTART (BUTTON_SELECT | BUTTON_REPEAT) |
153 | #define CB_QUIT BUTTON_POWER | 153 | #define CB_MENU BUTTON_POWER |
154 | 154 | ||
155 | #else | 155 | #else |
156 | #error CHESSBOX: Unsupported keypad | 156 | #error CHESSBOX: Unsupported keypad |
@@ -196,10 +196,12 @@ PLUGIN_HEADER | |||
196 | #define COMMAND_MOVE 1 | 196 | #define COMMAND_MOVE 1 |
197 | #define COMMAND_PLAY 2 | 197 | #define COMMAND_PLAY 2 |
198 | #define COMMAND_LEVEL 3 | 198 | #define COMMAND_LEVEL 3 |
199 | #ifdef CB_RESTART | 199 | #define COMMAND_RESTART 4 |
200 | #define COMMAND_RESTART 4 | ||
201 | #endif | ||
202 | #define COMMAND_QUIT 5 | 200 | #define COMMAND_QUIT 5 |
201 | #define COMMAND_MENU 6 | ||
202 | #define COMMAND_SAVE 7 | ||
203 | #define COMMAND_RESTORE 8 | ||
204 | #define COMMAND_RESUME 9 | ||
203 | 205 | ||
204 | /* level+1's string */ | 206 | /* level+1's string */ |
205 | const char *level_string[] = { "Level 1: 60 moves / 5 min" , | 207 | const char *level_string[] = { "Level 1: 60 moves / 5 min" , |
@@ -317,11 +319,14 @@ void cb_wt_callback ( void ) { | |||
317 | switch (button) { | 319 | switch (button) { |
318 | #ifdef CB_RC_QUIT | 320 | #ifdef CB_RC_QUIT |
319 | case CB_RC_QUIT: | 321 | case CB_RC_QUIT: |
320 | #endif | ||
321 | case CB_QUIT: | ||
322 | wt_command = COMMAND_QUIT; | 322 | wt_command = COMMAND_QUIT; |
323 | timeout = true; | 323 | timeout = true; |
324 | break; | 324 | break; |
325 | #endif | ||
326 | case CB_MENU: | ||
327 | wt_command = COMMAND_MENU; | ||
328 | timeout = true; | ||
329 | break; | ||
325 | case CB_PLAY: | 330 | case CB_PLAY: |
326 | wt_command = COMMAND_PLAY; | 331 | wt_command = COMMAND_PLAY; |
327 | timeout = true; | 332 | timeout = true; |
@@ -510,6 +515,46 @@ void cb_restoreposition ( void ) { | |||
510 | Sdepth = 0; | 515 | Sdepth = 0; |
511 | } | 516 | } |
512 | 517 | ||
518 | /* ---- show menu ---- */ | ||
519 | static int cb_menu(void) | ||
520 | { | ||
521 | int selection; | ||
522 | int result; | ||
523 | bool menu_quit = false; | ||
524 | |||
525 | MENUITEM_STRINGLIST(menu,"Chessbox Menu",NULL,"New Game","Resume Game", | ||
526 | "Save Game", "Restore Game", "Quit"); | ||
527 | |||
528 | while(!menu_quit) | ||
529 | { | ||
530 | selection = rb->do_menu(&menu, &selection); | ||
531 | switch(selection) | ||
532 | { | ||
533 | case 0: | ||
534 | menu_quit = true; | ||
535 | result = COMMAND_RESTART; | ||
536 | break; | ||
537 | case 1: | ||
538 | result = COMMAND_RESUME; | ||
539 | menu_quit = true; | ||
540 | break; | ||
541 | case 2: | ||
542 | result = COMMAND_SAVE; | ||
543 | menu_quit = true; | ||
544 | break; | ||
545 | case 3: | ||
546 | result = COMMAND_RESTORE; | ||
547 | menu_quit = true; | ||
548 | break; | ||
549 | case 4: | ||
550 | result = COMMAND_QUIT; | ||
551 | menu_quit = true; | ||
552 | break; | ||
553 | } | ||
554 | } | ||
555 | return result; | ||
556 | } | ||
557 | |||
513 | /* ---- main user loop ---- */ | 558 | /* ---- main user loop ---- */ |
514 | struct cb_command cb_getcommand (void) { | 559 | struct cb_command cb_getcommand (void) { |
515 | static short x = 4 , y = 3 ; | 560 | static short x = 4 , y = 3 ; |
@@ -526,10 +571,12 @@ struct cb_command cb_getcommand (void) { | |||
526 | switch (button) { | 571 | switch (button) { |
527 | #ifdef CB_RC_QUIT | 572 | #ifdef CB_RC_QUIT |
528 | case CB_RC_QUIT: | 573 | case CB_RC_QUIT: |
529 | #endif | ||
530 | case CB_QUIT: | ||
531 | result.type = COMMAND_QUIT; | 574 | result.type = COMMAND_QUIT; |
532 | return result; | 575 | return result; |
576 | #endif | ||
577 | case CB_MENU: | ||
578 | result.type = cb_menu(); | ||
579 | return result; | ||
533 | #ifdef CB_RESTART | 580 | #ifdef CB_RESTART |
534 | case CB_RESTART: | 581 | case CB_RESTART: |
535 | result.type = COMMAND_RESTART; | 582 | result.type = COMMAND_RESTART; |
@@ -707,8 +754,32 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) { | |||
707 | cb_drawboard(); | 754 | cb_drawboard(); |
708 | break; | 755 | break; |
709 | #endif | 756 | #endif |
757 | case COMMAND_RESUME: | ||
758 | cb_drawboard(); | ||
759 | break; | ||
760 | case COMMAND_SAVE: | ||
761 | cb_saveposition(); | ||
762 | cb_drawboard(); | ||
763 | break; | ||
764 | case COMMAND_RESTORE: | ||
765 | /* watch out, it will reset the game if no previous game was saved! */ | ||
766 | |||
767 | /* init board */ | ||
768 | GNUChess_Initialize(); | ||
769 | |||
770 | /* restore saved position, if saved */ | ||
771 | cb_restoreposition(); | ||
772 | |||
773 | cb_drawboard(); | ||
774 | break; | ||
710 | case COMMAND_PLAY: | 775 | case COMMAND_PLAY: |
711 | opponent = !opponent; computer = !computer; | 776 | if (opponent == white) { |
777 | opponent = black; | ||
778 | computer = white; | ||
779 | } else { | ||
780 | opponent = white; | ||
781 | computer = black; | ||
782 | } | ||
712 | rb->splash ( 0 , "Thinking..." ); | 783 | rb->splash ( 0 , "Thinking..." ); |
713 | #ifdef HAVE_ADJUSTABLE_CPU_FREQ | 784 | #ifdef HAVE_ADJUSTABLE_CPU_FREQ |
714 | rb->cpu_boost ( true ); | 785 | rb->cpu_boost ( true ); |