Changeset 1505 for trunk/core/gui.c
- Timestamp:
- 12/26/11 01:24:43 (18 months ago)
- Location:
- trunk
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
core/gui.c (modified) (39 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/reyalp-flt (added) merged: 1467,1471-1477,1481,1483,1488-1489,1493-1495,1498
- Property svn:mergeinfo changed
-
trunk/core/gui.c
r1497 r1505 14 14 #include "gui_mbox.h" 15 15 #include "gui_mpopup.h" 16 #ifdef OPT_GAME_REVERSI17 #include "gui_reversi.h"18 #endif19 #ifdef OPT_GAME_SOKOBAN20 #include "gui_sokoban.h"21 #endif22 #ifdef OPT_GAME_CONNECT423 #include "gui_4wins.h"24 #endif25 #ifdef OPT_GAME_MASTERMIND26 #include "gui_mastermind.h"27 #endif28 16 #include "console.h" 29 17 #ifdef OPT_DEBUGGING 30 18 #include "gui_debug.h" 31 #include "gui_bench.h"32 19 #endif 33 20 #include "gui_fselect.h" … … 39 26 #include "gui_read.h" 40 27 #endif 41 #ifdef OPT_CALENDAR42 #include "gui_calendar.h"43 #endif44 28 #include "gui_grid.h" 45 29 #include "histogram.h" … … 51 35 #endif 52 36 #ifdef OPT_EDGEOVERLAY 53 #include " edgeoverlay.h"37 #include "modules.h" 54 38 #endif 55 39 #ifdef OPT_SCRIPTING … … 57 41 int script_params_has_changed=0; 58 42 #endif 43 #include "module_load.h" 44 59 45 //------------------------------------------------------------------- 60 46 … … 160 146 static void gui_show_build_info(int arg); 161 147 static void gui_show_memory_info(int arg); 162 static void gui_draw_palette(int arg); 163 static void gui_draw_reversi(int arg); 164 static void gui_draw_sokoban(int arg); 165 static void gui_draw_4wins(int arg); 166 static void gui_draw_mastermind(int arg); 148 static void gui_modules_menu_load(); 149 167 150 #ifdef OPT_DEBUGGING 168 static void gui_draw_debug(int arg);169 static void gui_draw_bench(int arg);170 151 void gui_compare_props(int arg); 171 152 static void gui_menuproc_break_card(int arg); … … 318 299 #endif 319 300 320 static CMenuItem games_submenu_items[] = {321 #ifdef OPT_GAME_REVERSI322 MENU_ITEM(0x38,LANG_MENU_GAMES_REVERSI, MENUITEM_PROC, gui_draw_reversi, 0 ),323 #endif324 #ifdef OPT_GAME_SOKOBAN325 MENU_ITEM(0x38,LANG_MENU_GAMES_SOKOBAN, MENUITEM_PROC, gui_draw_sokoban, 0 ),326 #endif327 #ifdef OPT_GAME_CONNECT4328 MENU_ITEM(0x38,LANG_MENU_GAMES_CONNECT4, MENUITEM_PROC, gui_draw_4wins, 0 ),329 #endif330 #ifdef OPT_GAME_MASTERMIND331 MENU_ITEM(0x38,LANG_MENU_GAMES_MASTERMIND, MENUITEM_PROC, gui_draw_mastermind, 0 ),332 #endif333 MENU_ITEM(0x51,LANG_MENU_BACK, MENUITEM_UP, 0, 0 ),334 {0}335 };336 static CMenu games_submenu = {0x38,LANG_MENU_GAMES_TITLE, NULL, games_submenu_items };337 338 301 static const char* gui_autoiso_shutter_modes[] = { "Auto", "1/8s", "1/15s", "1/30s", "1/60s", "1/125s", "1/250s", "1/500s", "1/1000s"}; 339 302 static CMenuItem autoiso_submenu_items[] = { … … 377 340 MENU_ITEM(0x2a,LANG_MENU_DEBUG_TASKLIST_START, MENUITEM_INT|MENUITEM_F_UNSIGNED|MENUITEM_F_MINMAX, &debug_tasklist_start, MENU_MINMAX(0, 63) ), 378 341 MENU_ITEM(0x5c,LANG_MENU_DEBUG_SHOW_MISC_VALS, MENUITEM_BOOL, &conf.debug_misc_vals_show, 0 ), 379 MENU_ITEM(0x2a,LANG_MENU_DEBUG_MEMORY_BROWSER, MENUITEM_PROC, gui_draw_debug, 0 ),380 MENU_ITEM(0x2a,LANG_MENU_DEBUG_BENCHMARK, MENUITEM_PROC, gui_draw_bench, 0 ),381 342 MENU_ENUM2(0x5c,LANG_MENU_DEBUG_SHORTCUT_ACTION, &conf.debug_shortcut_action, gui_debug_shortcut_modes ), 382 343 MENU_ITEM(0x5c,LANG_MENU_RAW_TIMER, MENUITEM_BOOL, &conf.raw_timer, 0 ), … … 397 358 static CMenuItem misc_submenu_items[] = { 398 359 MENU_ITEM(0x35,LANG_MENU_MISC_FILE_BROWSER, MENUITEM_PROC, gui_draw_fselect, 0 ), 399 #ifdef OPT_CALENDAR 400 MENU_ITEM(0x36,LANG_MENU_MISC_CALENDAR, MENUITEM_PROC, gui_draw_calendar, 0 ), 401 #endif 360 MENU_ITEM(0x65,(int)"Modules", MENUITEM_TEXT, 0, 0 ), 402 361 #ifdef OPT_TEXTREADER 403 362 MENU_ITEM(0x37,LANG_MENU_MISC_TEXT_READER, MENUITEM_SUBMENU, &reader_submenu, 0 ), 404 #endif405 #if defined (OPT_GAME_REVERSI) || (OPT_GAME_SOKOBAN || (OPT_GAME_CONNECT4) || OPT_GAME_MASTERMIND)406 MENU_ITEM(0x38,LANG_MENU_MISC_GAMES, MENUITEM_SUBMENU, &games_submenu, 0 ),407 363 #endif 408 364 #if CAM_SWIVEL_SCREEN … … 418 374 #endif 419 375 MENU_ITEM(0x5d,LANG_MENU_MISC_DISABLE_LCD_OFF, MENUITEM_ENUM, gui_alt_power_enum, 0 ), 420 MENU_ITEM(0x65,LANG_MENU_MISC_PALETTE, MENUITEM_PROC, gui_draw_palette, 0 ),421 376 MENU_ITEM(0x80,LANG_MENU_MISC_BUILD_INFO, MENUITEM_PROC, gui_show_build_info, 0 ), 422 377 MENU_ITEM(0x80,LANG_MENU_MISC_MEMORY_INFO, MENUITEM_PROC, gui_show_memory_info, 0 ), … … 1085 1040 gui_enum_value_change(&conf.curve_enable,change,sizeof(modes)/sizeof(modes[0])); 1086 1041 1087 if(change )1042 if(change && curve_init_mode) 1088 1043 curve_init_mode(); 1089 1044 return modes[conf.curve_enable]; … … 1138 1093 1139 1094 void gui_load_script(int arg) { 1140 gui_fselect_init(LANG_STR_SELECT_SCRIPT_FILE, conf.script_file, "A/CHDK/SCRIPTS", gui_load_script_selected);1095 module_fselect_init(LANG_STR_SELECT_SCRIPT_FILE, conf.script_file, "A/CHDK/SCRIPTS", gui_load_script_selected); 1141 1096 } 1142 1097 … … 1517 1472 void gui_raw_develop(int arg){ 1518 1473 int m=mode_get(); 1519 gui_fselect_init(LANG_RAW_DEVELOP_SELECT_FILE, "A/DCIM", "A", raw_fselect_cb);1474 module_fselect_init(LANG_RAW_DEVELOP_SELECT_FILE, "A/DCIM", "A", raw_fselect_cb); 1520 1475 } 1521 1476 … … 1630 1585 1631 1586 //------------------------------------------------------------------- 1632 static volatile enum Gui_Mode gui_mode; 1587 static volatile gui_mode_t gui_mode; // current gui mode. if <GUI_MODE_LASTIDX - idx in guiHandlers (core modes), otherwise pointer to gui_handler object (module modes) 1588 1633 1589 static volatile int gui_restore; 1634 1590 static volatile int gui_in_redraw; … … 1638 1594 static Conf old_conf; 1639 1595 #endif 1596 1597 extern gui_handler guiHandlers[]; 1640 1598 1641 1599 //------------------------------------------------------------------- … … 1650 1608 } 1651 1609 gui_splash = (conf.splash_show)?SPLASH_TIME:0; 1610 1611 gui_modules_menu_load(); 1652 1612 user_menu_restore(); 1653 1613 gui_lang_init(); … … 1660 1620 #ifdef OPT_CURVES 1661 1621 // initialize curves, loading files if required by current mode 1662 curve_init_mode();1622 //curve_init_mode(); // @tsv it will be initialize on first load 1663 1623 #endif 1664 1624 #if ZOOM_OVERRIDE … … 1666 1626 // if (conf.zoom_override) shooting_set_zoom(conf.zoom_override_value); 1667 1627 #endif 1628 } 1629 1630 1631 //------------------------------------------------------------------- 1632 void gui_modules_menu_load(int arg){ 1633 1634 misc_submenu_items[1].type=MENUITEM_TEXT; 1635 1636 unsigned int argv[] ={ (unsigned int)MODULES_PATH, 1637 (unsigned int)(&misc_submenu_items[1]) 1638 }; 1639 module_run("modmenu.flt", 0, 2,argv, UNLOAD_IF_ERR ); 1668 1640 } 1669 1641 … … 1674 1646 // TODO we could sanity check here, but curve_set_type should fail gracefullish 1675 1647 strcpy(conf.curve_file,fn); 1676 if(conf.curve_enable == 1 )1648 if(conf.curve_enable == 1 && curve_init_mode) 1677 1649 curve_init_mode(); 1678 1650 } … … 1681 1653 //------------------------------------------------------------------- 1682 1654 void gui_load_curve(int arg) { 1683 gui_fselect_init(LANG_STR_SELECT_CURVE_FILE, conf.curve_file, CURVE_DIR, gui_load_curve_selected); 1684 } 1685 1686 #endif 1687 //------------------------------------------------------------------- 1688 enum Gui_Mode gui_get_mode() { 1655 module_fselect_init(LANG_STR_SELECT_CURVE_FILE, conf.curve_file, CURVE_DIR, gui_load_curve_selected); 1656 } 1657 1658 #endif 1659 1660 1661 // Small hack: use understandable name to reused data member 1662 #define binded_gui_mode_ptr kbd_process 1663 1664 //------------------------------------------------------------------- 1665 gui_mode_t gui_get_mode() { 1666 if ( gui_mode >= GUI_MODE_COUNT ) 1667 { 1668 int mode; 1669 for (mode=0;mode<GUI_MODE_COUNT;mode++) 1670 { 1671 if ( (guiHandlers[mode].flags & GUI_MODE_FLAG_ALIAS) && 1672 guiHandlers[mode].binded_gui_mode_ptr == (void*)gui_mode ) 1673 return mode; 1674 } 1675 } 1689 1676 return gui_mode; 1690 1677 } 1691 1678 1692 1679 //------------------------------------------------------------------- 1693 void gui_set_mode(enum Gui_Mode mode) { 1680 void gui_set_mode(gui_mode_t mode) 1681 { 1682 if ( gui_mode == mode ) 1683 return; 1684 1685 if ( mode < GUI_MODE_COUNT && 1686 (guiHandlers[mode].flags & GUI_MODE_FLAG_ALIAS) ) 1687 { 1688 mode = (unsigned int)guiHandlers[mode].binded_gui_mode_ptr; 1689 } 1690 1691 // Sanity check for case module pointer - is this really gui_handler 1692 if ( mode >= GUI_MODE_COUNT && ((gui_handler*)mode)->magicnum != GUI_MODE_MAGICNUM ) { 1693 // If sanity failed (module is unload) - set to default mode 1694 gui_mode = GUI_MODE_NONE; 1695 draw_restore(); 1696 return; 1697 } 1698 1694 1699 #ifdef CAM_TOUCHSCREEN_UI 1695 1700 if (((gui_mode == 0) != (mode == 0)) || // Change from GUI_MODE_NONE to any other or vice-versa … … 1699 1704 gui_mode = mode; 1700 1705 } 1706 1707 //------------------------------------------------------------------- 1708 // PURPOSE: bind module struct to 1709 // RETUN: 0 - fail, 1 - ok 1710 int gui_bind_mode(int core_mode, gui_handler* handler) { 1711 1712 // sanity checks 1713 if ( core_mode >= GUI_MODE_COUNT || 1714 (guiHandlers[core_mode].flags & GUI_MODE_FLAG_ALIAS)==0 1715 ) 1716 return 0; 1717 1718 if ( handler && handler->magicnum != GUI_MODE_MAGICNUM ) 1719 return 0; 1720 1721 // check is this module is already binded (loaded with different name) 1722 gui_handler* bind_gui_handler = (gui_handler*)guiHandlers[core_mode].binded_gui_mode_ptr; 1723 if ( bind_gui_handler && bind_gui_handler->magicnum == GUI_MODE_MAGICNUM ) 1724 return 0; 1725 1726 guiHandlers[core_mode].binded_gui_mode_ptr = (void*)handler; 1727 return 1; 1728 } 1729 1730 #undef binded_gui_mode_ptr 1731 1701 1732 1702 1733 //------------------------------------------------------------------- … … 1961 1992 } 1962 1993 1963 // Menu button handled for text reader1964 #ifdef OPT_TEXTREADER1965 void gui_read_kbd_process_menu_btn()1966 {1967 gui_read_kbd_process();1968 gui_default_kbd_process_menu_btn();1969 }1970 #endif1971 1972 1994 // Menu button handled for Menu mode 1973 1995 void gui_menu_kbd_process_menu_btn() … … 1988 2010 1989 2011 //------------------------------------------------------------------- 1990 // Structure to store gui redraw and kbd process handlers for each mode1991 typedef struct 2012 // GUI handler table (entries must be in the same order and have the same number of entries as Gui_Mode enum) 2013 gui_handler guiHandlers[GUI_MODE_COUNT] = 1992 2014 { 1993 void (*redraw)(void); // Called to redraw screen 1994 void (*kbd_process)(void); // Main button handler for mode 1995 void (*kbd_process_menu_btn)(void); // Menu button handler for mode 1996 } gui_handler; 1997 1998 // GUI handler table (entries must be in the same order and have the same number of entries as Gui_Mode enum) 1999 gui_handler guiHandlers[] = 2000 { 2001 /*GUI_MODE_NONE*/ { gui_draw_osd, 0, 0 }, 2002 /*GUI_MODE_ALT*/ { gui_chdk_draw, gui_chdk_kbd_process, gui_chdk_kbd_process_menu_btn }, 2003 /*GUI_MODE_MENU*/ { gui_menu_draw, gui_menu_kbd_process, gui_menu_kbd_process_menu_btn }, 2004 /*GUI_MODE_PALETTE*/ { gui_palette_draw, gui_palette_kbd_process, gui_default_kbd_process_menu_btn }, 2005 /*GUI_MODE_MBOX*/ { gui_mbox_draw, gui_mbox_kbd_process, 0 }, 2006 #ifdef OPT_GAME_REVERSI 2007 /*GUI_MODE_REVERSI*/ { gui_reversi_draw, gui_reversi_kbd_process, gui_default_kbd_process_menu_btn }, 2008 #else 2009 { 0, 0, 0 }, 2010 #endif 2011 #ifdef OPT_GAME_SOKOBAN 2012 /*GUI_MODE_SOKOBAN*/ { gui_sokoban_draw, gui_sokoban_kbd_process, gui_default_kbd_process_menu_btn }, 2013 #else 2014 { 0, 0, 0 }, 2015 #endif 2016 #ifdef OPT_DEBUGGING 2017 /*GUI_MODE_DEBUG*/ { gui_debug_draw, gui_debug_kbd_process, gui_default_kbd_process_menu_btn }, 2018 #else 2019 { 0, 0, 0 }, 2020 #endif 2021 /*GUI_MODE_FSELECT*/ { gui_fselect_draw, gui_fselect_kbd_process, gui_fselect_kbd_process }, 2022 #ifdef OPT_TEXTREADER 2023 /*GUI_MODE_READ*/ { gui_read_draw, gui_read_kbd_process, gui_read_kbd_process_menu_btn }, 2024 #else 2025 { 0, 0, 0 }, 2026 #endif 2027 /*GUI_MODE_OSD*/ { gui_osd_draw, gui_osd_kbd_process, gui_default_kbd_process_menu_btn }, 2028 #ifdef OPT_CALENDAR 2029 /*GUI_MODE_CALENDAR*/ { gui_calendar_draw, gui_calendar_kbd_process, gui_default_kbd_process_menu_btn }, 2030 #else 2031 { 0, 0, 0 }, 2032 #endif 2033 #ifdef OPT_DEBUGGING 2034 /*GUI_MODE_BENCH*/ { gui_bench_draw, gui_bench_kbd_process, gui_default_kbd_process_menu_btn }, 2035 #else 2036 { 0, 0, 0 }, 2037 #endif 2038 /*GUI_MODE_MPOPUP*/ { gui_mpopup_draw, gui_mpopup_kbd_process, gui_mpopup_kbd_process }, 2039 #ifdef OPT_GAME_CONNECT4 2040 /*GUI_MODE_4WINS*/ { gui_4wins_draw, gui_4wins_kbd_process, gui_default_kbd_process_menu_btn }, 2041 #else 2042 { 0, 0, 0 }, 2043 #endif 2044 #ifdef OPT_GAME_MASTERMIND 2045 /*GUI_MODE_MASTERMIND*/ { gui_mastermind_draw, gui_mastermind_kbd_process, gui_default_kbd_process_menu_btn }, 2046 #else 2047 { 0, 0, 0 }, 2048 #endif 2015 /*GUI_MODE_NONE*/ { gui_draw_osd, 0, 0, 0, GUI_MODE_MAGICNUM }, 2016 /*GUI_MODE_ALT*/ { gui_chdk_draw, gui_chdk_kbd_process, gui_chdk_kbd_process_menu_btn, 0, GUI_MODE_MAGICNUM }, 2017 /*GUI_MODE_MENU*/ { gui_menu_draw, gui_menu_kbd_process, gui_menu_kbd_process_menu_btn, 0, GUI_MODE_MAGICNUM }, 2018 /*GUI_MODE_ALIAS_PALETTE*/ { 0, 0, 0, GUI_MODE_FLAG_ALIAS, GUI_MODE_MAGICNUM }, 2019 /*GUI_MODE_MBOX*/ { gui_mbox_draw, gui_mbox_kbd_process, 0, GUI_MODE_FLAG_NORESTORE_ON_SWITCH, GUI_MODE_MAGICNUM }, 2020 /*GUI_MODE_ALIAS_FSELECT*/ { 0, 0, 0, GUI_MODE_FLAG_ALIAS, GUI_MODE_MAGICNUM }, 2021 /*GUI_MODE_OSD*/ { gui_osd_draw, gui_osd_kbd_process, gui_default_kbd_process_menu_btn, 0, GUI_MODE_MAGICNUM }, // THIS IS OSD LAYOUT EDITOR 2022 /*GUI_MODE_ALIAS_MPOPUP*/ { 0, 0, 0, GUI_MODE_FLAG_ALIAS, GUI_MODE_MAGICNUM }, 2049 2023 }; 2024 2050 2025 2051 2026 //------------------------------------------------------------------- … … 2053 2028 void gui_redraw() 2054 2029 { 2055 enum Gui_Mode gui_mode_old; 2030 static gui_mode_t gui_mode_prev_tick = GUI_MODE_NONE; 2031 gui_mode_t gui_mode_old; 2032 2033 static int flag_gui_enforce_redraw = 0; 2056 2034 2057 2035 #ifdef CAM_DETECT_SCREEN_ERASE … … 2059 2037 { 2060 2038 draw_set_guard(); 2061 gui_menu_force_redraw(); 2062 gui_fselect_force_redraw(); 2039 2040 flag_gui_enforce_redraw |= GUI_REDRAWFLAG_ERASEGUARD; 2041 //gui_menu_force_redraw(); 2042 //gui_fselect_force_redraw(); //@tsv 2063 2043 #ifdef CAM_TOUCHSCREEN_UI 2064 2044 extern int redraw_buttons; … … 2079 2059 2080 2060 // Call redraw handler 2081 if (guiHandlers[gui_mode].redraw) guiHandlers[gui_mode].redraw(); 2061 gui_handler* cur_gui_handler = (gui_mode<GUI_MODE_COUNT)? (&guiHandlers[gui_mode]) : (gui_handler*)gui_mode; 2062 if (cur_gui_handler->redraw) cur_gui_handler->redraw(flag_gui_enforce_redraw); 2063 flag_gui_enforce_redraw=0; 2082 2064 2083 2065 // Forced redraw if needed 2084 2066 gui_in_redraw = 0; 2085 if ((gui_mode_old != gui_mode && (gui_mode_old != GUI_MODE_NONE && gui_mode_old != GUI_MODE_ALT) && (gui_mode != GUI_MODE_MBOX && gui_mode != GUI_MODE_MPOPUP)) || gui_restore) { 2086 if (gui_restore) gui_menu_force_redraw(); 2067 cur_gui_handler = (gui_mode<GUI_MODE_COUNT)? (&guiHandlers[gui_mode]) : (gui_handler*)gui_mode; 2068 if ((gui_mode_old != gui_mode 2069 && (gui_mode_old != GUI_MODE_NONE && gui_mode_old != GUI_MODE_ALT) 2070 && !(cur_gui_handler->flags & GUI_MODE_FLAG_NORESTORE_ON_SWITCH)) 2071 || gui_restore ) 2072 { 2073 2074 if (gui_restore) 2075 flag_gui_enforce_redraw |= GUI_REDRAWFLAG_DRAW_RESTORED; 2087 2076 gui_restore = 0; 2088 if (gui_mode != GUI_MODE_REVERSI && gui_mode != GUI_MODE_SOKOBAN && gui_mode != GUI_MODE_4WINS && gui_mode != GUI_MODE_MASTERMIND) 2077 2078 if ( !( cur_gui_handler->flags & GUI_MODE_FLAG_NODRAWRESTORE) ) 2089 2079 draw_restore(); 2090 2080 } 2081 2082 if ( gui_mode_prev_tick != gui_mode ) { 2083 flag_gui_enforce_redraw |= GUI_REDRAWFLAG_MODE_WAS_CHANGED; 2084 gui_mode_prev_tick = gui_mode; 2085 } 2091 2086 } 2092 2087 … … 2095 2090 void gui_kbd_process() 2096 2091 { 2092 gui_handler* cur_gui_handler = (gui_mode<GUI_MODE_COUNT)? (&guiHandlers[gui_mode]) : (gui_handler*)gui_mode; 2093 2097 2094 // Call menu button handler if menu button pressed 2098 2095 if (kbd_is_key_clicked(KEY_MENU)) 2099 2096 { 2100 if ( guiHandlers[gui_mode].kbd_process_menu_btn) guiHandlers[gui_mode].kbd_process_menu_btn();2097 if (cur_gui_handler->kbd_process_menu_btn) cur_gui_handler->kbd_process_menu_btn(); 2101 2098 return; 2102 2099 } 2103 2100 2104 2101 // Call mode handler for other buttons 2105 if ( guiHandlers[gui_mode].kbd_process) guiHandlers[gui_mode].kbd_process();2102 if (cur_gui_handler->kbd_process) cur_gui_handler->kbd_process(); 2106 2103 } 2107 2104 … … 2143 2140 #endif 2144 2141 draw_restore(); 2145 if (gui_mode == GUI_MODE_READ && !rbf_load(conf.menu_rbf_file))2146 rbf_load_from_8x16(current_font);2147 2142 rbf_set_codepage(FONT_CP_WIN); 2148 2143 vid_turn_on_updates(); 2149 2144 gui_set_mode(GUI_MODE_NONE); 2145 2146 // Unload all modules which are marked as safe to unload 2147 module_async_unload_allrunned(0); 2150 2148 2151 2149 conf_update_prevent_shutdown(); … … 2607 2605 2608 2606 //------------------------------------------------------------------- 2609 void gui_draw_palette(int arg) {2610 draw_restore();2611 gui_palette_init(PALETTE_MODE_DEFAULT, 0x00, NULL);2612 gui_set_mode(GUI_MODE_PALETTE);2613 }2614 2615 //-------------------------------------------------------------------2616 2607 void gui_show_build_info(int arg) { 2617 2608 static char buf[192]; … … 2639 2630 2640 2631 //------------------------------------------------------------------- 2641 #ifdef OPT_GAME_REVERSI 2642 void gui_draw_reversi(int arg) { 2643 if ((mode_get()&MODE_MASK) != MODE_PLAY) { 2644 gui_mbox_init(LANG_MSG_INFO_TITLE, LANG_MSG_SWITCH_TO_PLAY_MODE, 2645 MBOX_FUNC_RESTORE|MBOX_TEXT_CENTER, NULL); 2646 return; 2647 } 2648 2649 gui_set_mode(GUI_MODE_REVERSI); 2650 gui_reversi_init(); 2651 } 2652 #endif 2653 2654 //------------------------------------------------------------------- 2655 #ifdef OPT_GAME_SOKOBAN 2656 void gui_draw_sokoban(int arg) { 2657 if ((mode_get()&MODE_MASK) != MODE_PLAY) { 2658 gui_mbox_init(LANG_MSG_INFO_TITLE, LANG_MSG_SWITCH_TO_PLAY_MODE, 2659 MBOX_FUNC_RESTORE|MBOX_TEXT_CENTER, NULL); 2660 return; 2661 } 2662 if ( gui_sokoban_init() ) 2663 gui_set_mode(GUI_MODE_SOKOBAN); 2664 } 2665 #endif 2666 //------------------------------------------------------------------- 2667 #ifdef OPT_GAME_CONNECT4 2668 void gui_draw_4wins(int arg) { 2669 if ((mode_get()&MODE_MASK) != MODE_PLAY) { 2670 gui_mbox_init(LANG_MSG_INFO_TITLE, LANG_MSG_SWITCH_TO_PLAY_MODE, 2671 MBOX_FUNC_RESTORE|MBOX_TEXT_CENTER, NULL); 2672 return; 2673 } 2674 if ( gui_4wins_init() ) 2675 gui_set_mode(GUI_MODE_4WINS); 2676 } 2677 #endif 2678 //------------------------------------------------------------------- 2679 #ifdef OPT_GAME_MASTERMIND 2680 void gui_draw_mastermind(int arg) { 2681 if ((mode_get()&MODE_MASK) != MODE_PLAY) { 2682 gui_mbox_init(LANG_MSG_INFO_TITLE, LANG_MSG_SWITCH_TO_PLAY_MODE, 2683 MBOX_FUNC_RESTORE|MBOX_TEXT_CENTER, NULL); 2684 return; 2685 } 2686 if ( gui_mastermind_init() ) 2687 gui_set_mode(GUI_MODE_MASTERMIND); 2688 } 2689 #endif 2690 //------------------------------------------------------------------- 2691 #ifdef OPT_DEBUGGING 2692 void gui_draw_debug(int arg) { 2693 // gui_debug_init(0x2510); 2694 // gui_debug_init(0x127E0); 2695 // gui_debug_init(0x7F5B8); 2696 // gui_debug_init(malloc(16)); 2697 gui_debug_init((void*)conf.mem_view_addr_init); 2698 } 2699 2700 //------------------------------------------------------------------- 2701 void gui_draw_bench(int arg) { 2702 gui_set_mode(GUI_MODE_BENCH); 2703 gui_bench_init(); 2704 } 2705 #endif 2706 //------------------------------------------------------------------- 2707 2632 void gui_menu_run_fltmodule(int arg) { 2633 module_run((char*)arg, 0, 0,0, UNLOAD_IF_ERR); 2634 } 2635 2636 //------------------------------------------------------------------- 2708 2637 void gui_draw_splash(char* logo, int logo_size) { 2709 2638 coord w, h, x, y; … … 2764 2693 //------------------------------------------------------------------- 2765 2694 void gui_draw_fselect(int arg) { 2766 gui_fselect_init(LANG_STR_FILE_BROWSER, "A", "A", NULL);2695 module_fselect_init(LANG_STR_FILE_BROWSER, "A", "A", NULL); 2767 2696 } 2768 2697 … … 2773 2702 } 2774 2703 void gui_grid_lines_load(int arg) { 2775 gui_fselect_init(LANG_STR_SELECT_GRID_FILE, conf.grid_lines_file, "A/CHDK/GRIDS", gui_grid_lines_load_selected);2704 module_fselect_init(LANG_STR_SELECT_GRID_FILE, conf.grid_lines_file, "A/CHDK/GRIDS", gui_grid_lines_load_selected); 2776 2705 } 2777 2706 … … 2789 2718 rbf_load_from_8x16(current_font); 2790 2719 rbf_set_codepage(conf.reader_codepage); 2791 gui_set_mode(GUI_MODE_READ); 2792 gui_read_init(fn); 2720 2721 unsigned int argv[] ={ (unsigned int)fn }; 2722 module_run("txtread.flt", 0, sizeof(argv)/sizeof(argv[0]), argv, UNLOAD_IF_ERR); 2793 2723 } 2794 2724 } 2795 2725 2796 2726 void gui_draw_read(int arg) { 2797 gui_fselect_init(LANG_STR_SELECT_TEXT_FILE, conf.reader_file, "A/CHDK/BOOKS", gui_draw_read_selected);2727 module_fselect_init_w_mode(LANG_STR_SELECT_TEXT_FILE, conf.reader_file, "A/CHDK/BOOKS", gui_draw_read_selected, 1); 2798 2728 void gui_fselect_set_key_redraw(int n); 2799 gui_fselect_set_key_redraw(1);2729 //gui_fselect_set_key_redraw(1); @tsv 2800 2730 } 2801 2731 … … 2818 2748 #ifdef OPT_EDGEOVERLAY 2819 2749 static void gui_load_edge_selected( const char* fn ) { 2820 if( fn )2821 load_edge_overlay(fn);2750 if( fn && module_edgeovr_load()) 2751 load_edge_overlay(fn); 2822 2752 } 2823 2753 2824 2754 void gui_menuproc_edge_save(int arg) { 2825 save_edge_overlay(); 2755 if ( module_edgeovr_load() ) 2756 save_edge_overlay(); 2826 2757 } 2827 2758 2828 2759 void gui_menuproc_edge_load(int arg) { 2829 gui_fselect_init(LANG_MENU_EDGE_LOAD, EDGE_SAVE_DIR, EDGE_SAVE_DIR, gui_load_edge_selected); 2830 } 2831 #endif 2832 2833 //------------------------------------------------------------------- 2834 #ifdef OPT_CALENDAR 2835 void gui_draw_calendar(int arg) { 2836 gui_set_mode(GUI_MODE_CALENDAR); 2837 gui_calendar_init(); 2838 } 2839 #endif 2760 module_fselect_init(LANG_MENU_EDGE_LOAD, EDGE_SAVE_DIR, EDGE_SAVE_DIR, gui_load_edge_selected); 2761 } 2762 #endif 2763 2840 2764 //------------------------------------------------------------------- 2841 2765 #ifdef OPT_TEXTREADER … … 2846 2770 } 2847 2771 void gui_draw_load_rbf(int arg) { 2848 gui_fselect_init(LANG_STR_SELECT_FONT_FILE, conf.reader_rbf_file, "A/CHDK/FONTS", gui_draw_rbf_selected);2772 module_fselect_init(LANG_STR_SELECT_FONT_FILE, conf.reader_rbf_file, "A/CHDK/FONTS", gui_draw_rbf_selected); 2849 2773 } 2850 2774 #endif … … 2860 2784 } 2861 2785 void gui_draw_load_menu_rbf(int arg) { 2862 gui_fselect_init(LANG_STR_SELECT_FONT_FILE, conf.menu_rbf_file, "A/CHDK/FONTS", gui_draw_menu_rbf_selected);2786 module_fselect_init(LANG_STR_SELECT_FONT_FILE, conf.menu_rbf_file, "A/CHDK/FONTS", gui_draw_menu_rbf_selected); 2863 2787 } 2864 2788 … … 2872 2796 } 2873 2797 void gui_draw_load_symbol_rbf(int arg) { 2874 gui_fselect_init(LANG_STR_SELECT_SYMBOL_FILE, conf.menu_symbol_rbf_file, "A/CHDK/SYMBOLS", gui_draw_symbol_rbf_selected);2798 module_fselect_init(LANG_STR_SELECT_SYMBOL_FILE, conf.menu_symbol_rbf_file, "A/CHDK/SYMBOLS", gui_draw_symbol_rbf_selected); 2875 2799 } 2876 2800 … … 2884 2808 } 2885 2809 void gui_draw_load_lang(int arg) { 2886 gui_fselect_init(LANG_STR_SELECT_LANG_FILE, conf.lang_file, "A/CHDK/LANG", gui_draw_lang_selected);2887 } 2888 2889 int find_mnu(CMenu *curr_menu, int mnu, int count)2810 module_fselect_init(LANG_STR_SELECT_LANG_FILE, conf.lang_file, "A/CHDK/LANG", gui_draw_lang_selected); 2811 } 2812 2813 CMenuItem* find_mnu(CMenu *curr_menu, int itemid ) 2890 2814 { 2891 2815 int gui_menu_curr_item; 2816 CMenuItem* rv=0; 2817 2818 if ( itemid==0 ) 2819 return 0; 2892 2820 2893 2821 gui_menu_curr_item = 0; 2894 2822 while(curr_menu->menu[gui_menu_curr_item].text) { 2895 if (curr_menu->menu[gui_menu_curr_item].text == mnu){ 2896 user_submenu_items[count] = curr_menu->menu[gui_menu_curr_item]; 2897 return 1; 2823 if ( lang_strhash31(curr_menu->menu[gui_menu_curr_item].text) == itemid){ 2824 return (CMenuItem*) &(curr_menu->menu[gui_menu_curr_item]); 2898 2825 } 2899 2826 if ((curr_menu->menu[gui_menu_curr_item].type & MENUITEM_MASK) == MENUITEM_SUBMENU) 2900 if (curr_menu->menu[gui_menu_curr_item].text != LANG_MENU_USER_MENU) 2901 if (find_mnu((CMenu*)(curr_menu->menu[gui_menu_curr_item].value), mnu, count)) return 1; 2827 if (curr_menu->menu[gui_menu_curr_item].text != LANG_MENU_USER_MENU) { 2828 rv = find_mnu((CMenu*)(curr_menu->menu[gui_menu_curr_item].value), itemid); 2829 if ( rv ) 2830 return rv; 2831 } 2902 2832 gui_menu_curr_item++; 2903 2833 } … … 2912 2842 * conf.user_menu_vars only traks/saves the real user entries. 2913 2843 */ 2914 conf.user_menu_vars[x] = user_submenu_items[x+1].text;2844 conf.user_menu_vars[x] = lang_strhash31(user_submenu_items[x+1].text); 2915 2845 } 2916 2846 } 2917 2847 2918 2848 void user_menu_restore() { 2919 int x; 2849 int x; 2850 CMenuItem* item=0; 2851 2920 2852 for (x=0; x<USER_MENU_ITEMS; x++) { 2921 2853 /* … … 2923 2855 * conf.user_menu_vars only traks/saves the real user entries. 2924 2856 */ 2925 find_mnu(&root_menu, conf.user_menu_vars[x], x+1); 2857 item = find_mnu(&root_menu, conf.user_menu_vars[x]); 2858 if ( item ) 2859 user_submenu_items[x+1] = *item; 2926 2860 } 2927 2861 }
Note: See TracChangeset
for help on using the changeset viewer.