diff options
-rw-r--r-- | apps/plugins/solitaire.c | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c index 933a7226ca..89b3966dfd 100644 --- a/apps/plugins/solitaire.c +++ b/apps/plugins/solitaire.c | |||
@@ -592,7 +592,7 @@ static void create_unhide_option_string(void) | |||
592 | void solitaire_init(void); | 592 | void solitaire_init(void); |
593 | 593 | ||
594 | /* menu return codes */ | 594 | /* menu return codes */ |
595 | enum { MENU_RESUME, MENU_QUIT, MENU_USB }; | 595 | enum { MENU_RESUME, MENU_SAVE_AND_QUIT, MENU_QUIT, MENU_USB }; |
596 | 596 | ||
597 | int solitaire_menu(bool in_game) | 597 | int solitaire_menu(bool in_game) |
598 | { | 598 | { |
@@ -600,9 +600,9 @@ int solitaire_menu(bool in_game) | |||
600 | int result = -1; | 600 | int result = -1; |
601 | int i = 0; | 601 | int i = 0; |
602 | 602 | ||
603 | struct menu_item items[6]; | 603 | struct menu_item items[7]; |
604 | 604 | ||
605 | if (in_game) | 605 | if( in_game ) |
606 | { | 606 | { |
607 | items[i++].desc = "Resume Game"; | 607 | items[i++].desc = "Resume Game"; |
608 | items[i++].desc = "Restart Game"; | 608 | items[i++].desc = "Restart Game"; |
@@ -615,6 +615,10 @@ int solitaire_menu(bool in_game) | |||
615 | items[i++].desc = unhide_option_string; | 615 | items[i++].desc = unhide_option_string; |
616 | items[i++].desc = "Help"; | 616 | items[i++].desc = "Help"; |
617 | items[i++].desc = "Audio Playback"; | 617 | items[i++].desc = "Audio Playback"; |
618 | if( in_game ) | ||
619 | { | ||
620 | items[i++].desc = "Save and Quit"; | ||
621 | } | ||
618 | items[i++].desc = "Quit"; | 622 | items[i++].desc = "Quit"; |
619 | 623 | ||
620 | create_draw_option_string(); | 624 | create_draw_option_string(); |
@@ -665,6 +669,13 @@ int solitaire_menu(bool in_game) | |||
665 | break; | 669 | break; |
666 | 670 | ||
667 | case 5: | 671 | case 5: |
672 | if( in_game ) | ||
673 | result = MENU_SAVE_AND_QUIT; | ||
674 | else | ||
675 | result = MENU_QUIT; | ||
676 | break; | ||
677 | |||
678 | case 6: | ||
668 | result = MENU_QUIT; | 679 | result = MENU_QUIT; |
669 | break; | 680 | break; |
670 | } | 681 | } |
@@ -1032,7 +1043,7 @@ enum move move_card( int dest_col, int src_card ) | |||
1032 | return MOVE_OK; | 1043 | return MOVE_OK; |
1033 | } | 1044 | } |
1034 | 1045 | ||
1035 | enum { SOLITAIRE_WIN, SOLITAIRE_QUIT_NEW, SOLITAIRE_QUIT, SOLITAIRE_USB }; | 1046 | enum { SOLITAIRE_WIN, SOLITAIRE_SAVE_AND_QUIT, SOLITAIRE_QUIT, SOLITAIRE_USB }; |
1036 | 1047 | ||
1037 | /** | 1048 | /** |
1038 | * Bouncing cards at the end of the game | 1049 | * Bouncing cards at the end of the game |
@@ -1122,6 +1133,7 @@ int open_save_file( int flags ) | |||
1122 | void delete_save_file( void ) | 1133 | void delete_save_file( void ) |
1123 | { | 1134 | { |
1124 | char buf[MAX_PATH]; | 1135 | char buf[MAX_PATH]; |
1136 | get_save_filename( buf ); | ||
1125 | rb->remove( buf ); | 1137 | rb->remove( buf ); |
1126 | } | 1138 | } |
1127 | 1139 | ||
@@ -1233,7 +1245,7 @@ int solitaire( int skipmenu ) | |||
1233 | switch( solitaire_menu(false) ) | 1245 | switch( solitaire_menu(false) ) |
1234 | { | 1246 | { |
1235 | case MENU_QUIT: | 1247 | case MENU_QUIT: |
1236 | return SOLITAIRE_QUIT_NEW; | 1248 | return SOLITAIRE_QUIT; |
1237 | 1249 | ||
1238 | case MENU_USB: | 1250 | case MENU_USB: |
1239 | return SOLITAIRE_USB; | 1251 | return SOLITAIRE_USB; |
@@ -1694,6 +1706,9 @@ int solitaire( int skipmenu ) | |||
1694 | case SOL_QUIT: | 1706 | case SOL_QUIT: |
1695 | switch( solitaire_menu(true) ) | 1707 | switch( solitaire_menu(true) ) |
1696 | { | 1708 | { |
1709 | case MENU_SAVE_AND_QUIT: | ||
1710 | return SOLITAIRE_SAVE_AND_QUIT; | ||
1711 | |||
1697 | case MENU_QUIT: | 1712 | case MENU_QUIT: |
1698 | return SOLITAIRE_QUIT; | 1713 | return SOLITAIRE_QUIT; |
1699 | 1714 | ||
@@ -1703,7 +1718,7 @@ int solitaire( int skipmenu ) | |||
1703 | break; | 1718 | break; |
1704 | 1719 | ||
1705 | case SYS_POWEROFF: | 1720 | case SYS_POWEROFF: |
1706 | return SOLITAIRE_QUIT; | 1721 | return SOLITAIRE_SAVE_AND_QUIT; |
1707 | 1722 | ||
1708 | default: | 1723 | default: |
1709 | if( rb->default_event_handler( button ) == SYS_USB_CONNECTED ) | 1724 | if( rb->default_event_handler( button ) == SYS_USB_CONNECTED ) |
@@ -1745,7 +1760,10 @@ enum plugin_status plugin_start( struct plugin_api* api, void* parameter ) | |||
1745 | rb->memcpy(&sol, &sol_disk, sizeof(sol)); /* copy to running config */ | 1760 | rb->memcpy(&sol, &sol_disk, sizeof(sol)); /* copy to running config */ |
1746 | 1761 | ||
1747 | if( load_game() == 0 ) | 1762 | if( load_game() == 0 ) |
1763 | { | ||
1764 | rb->splash( HZ, "Resuming saved game." ); | ||
1748 | result = SOLITAIRE_QUIT; | 1765 | result = SOLITAIRE_QUIT; |
1766 | } | ||
1749 | else | 1767 | else |
1750 | result = SOLITAIRE_WIN; | 1768 | result = SOLITAIRE_WIN; |
1751 | 1769 | ||
@@ -1756,11 +1774,10 @@ enum plugin_status plugin_start( struct plugin_api* api, void* parameter ) | |||
1756 | * winning instead of quiting) */ | 1774 | * winning instead of quiting) */ |
1757 | while( ( result = solitaire( result ) ) == SOLITAIRE_WIN ); | 1775 | while( ( result = solitaire( result ) ) == SOLITAIRE_WIN ); |
1758 | 1776 | ||
1759 | if( result != SOLITAIRE_QUIT_NEW ) | 1777 | if( result == SOLITAIRE_QUIT ) |
1760 | save_game(); | ||
1761 | else | ||
1762 | /* XXX: Not sure if this is the best spot to delete the save file */ | ||
1763 | delete_save_file(); | 1778 | delete_save_file(); |
1779 | else /* result == SOLITAIRE_USB || result == SOLITAIRE_SAVE_AND_QUIT */ | ||
1780 | save_game(); | ||
1764 | 1781 | ||
1765 | if (rb->memcmp(&sol, &sol_disk, sizeof(sol))) /* save settings if changed */ | 1782 | if (rb->memcmp(&sol, &sol_disk, sizeof(sol))) /* save settings if changed */ |
1766 | { | 1783 | { |