summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/solitaire.c37
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)
592void solitaire_init(void); 592void solitaire_init(void);
593 593
594/* menu return codes */ 594/* menu return codes */
595enum { MENU_RESUME, MENU_QUIT, MENU_USB }; 595enum { MENU_RESUME, MENU_SAVE_AND_QUIT, MENU_QUIT, MENU_USB };
596 596
597int solitaire_menu(bool in_game) 597int 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
1035enum { SOLITAIRE_WIN, SOLITAIRE_QUIT_NEW, SOLITAIRE_QUIT, SOLITAIRE_USB }; 1046enum { 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 )
1122void delete_save_file( void ) 1133void 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 {