Changeset 2075


Ignore:
Timestamp:
08/10/12 05:02:54 (10 months ago)
Author:
philmoz
Message:

Update from waterwingz to allow scripts to be added to the User Menu.
http://chdk.setepontos.com/index.php?topic=650.msg89058#msg89058

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/CHDK/LANG/english.lng

    r2069 r2075  
    704704574 "Show HELP" 
    705705575 "Use popup to edit value" 
     706 
     707576 "Add script to User Menu" 
  • trunk/core/conf.c

    r2065 r2075  
    463463    CONF_INFO(293, conf.help_was_shown,                 CONF_DEF_VALUE,     i:0, NULL), 
    464464    CONF_INFO(294, conf.menuedit_popup,                 CONF_DEF_VALUE,     i:1, NULL), 
     465 
     466    // NOTE : there must be USER_MENU_ITEMS entries in this section 
     467    CONF_INFO(295, conf.user_menu_script_file[ 0], CONF_CHAR_PTR,      ptr:"", NULL), 
     468    CONF_INFO(296, conf.user_menu_script_file[ 1], CONF_CHAR_PTR,      ptr:"", NULL), 
     469    CONF_INFO(297, conf.user_menu_script_file[ 2], CONF_CHAR_PTR,      ptr:"", NULL), 
     470    CONF_INFO(298, conf.user_menu_script_file[ 3], CONF_CHAR_PTR,      ptr:"", NULL), 
     471    CONF_INFO(299, conf.user_menu_script_file[ 4], CONF_CHAR_PTR,      ptr:"", NULL), 
     472    CONF_INFO(300, conf.user_menu_script_file[ 5], CONF_CHAR_PTR,      ptr:"", NULL), 
     473    CONF_INFO(301, conf.user_menu_script_file[ 6], CONF_CHAR_PTR,      ptr:"", NULL), 
     474    CONF_INFO(302, conf.user_menu_script_file[ 7], CONF_CHAR_PTR,      ptr:"", NULL), 
     475    CONF_INFO(303, conf.user_menu_script_file[ 8], CONF_CHAR_PTR,      ptr:"", NULL), 
     476    CONF_INFO(304, conf.user_menu_script_file[ 9], CONF_CHAR_PTR,      ptr:"", NULL), 
     477    CONF_INFO(305, conf.user_menu_script_file[10], CONF_CHAR_PTR,      ptr:"", NULL),     
     478    CONF_INFO(306, conf.user_menu_script_file[11], CONF_CHAR_PTR,      ptr:"", NULL), 
     479    CONF_INFO(307, conf.user_menu_script_file[12], CONF_CHAR_PTR,      ptr:"", NULL), 
     480    CONF_INFO(308, conf.user_menu_script_file[13], CONF_CHAR_PTR,      ptr:"", NULL), 
     481 
     482    // NOTE : there must be USER_MENU_ITEMS entries in this section too 
     483    CONF_INFO(309, conf.user_menu_script_title[ 0], CONF_CHAR_PTR,      ptr:"", NULL), 
     484    CONF_INFO(310, conf.user_menu_script_title[ 1], CONF_CHAR_PTR,      ptr:"", NULL), 
     485    CONF_INFO(311, conf.user_menu_script_title[ 2], CONF_CHAR_PTR,      ptr:"", NULL), 
     486    CONF_INFO(312, conf.user_menu_script_title[ 3], CONF_CHAR_PTR,      ptr:"", NULL), 
     487    CONF_INFO(313, conf.user_menu_script_title[ 4], CONF_CHAR_PTR,      ptr:"", NULL), 
     488    CONF_INFO(314, conf.user_menu_script_title[ 5], CONF_CHAR_PTR,      ptr:"", NULL), 
     489    CONF_INFO(315, conf.user_menu_script_title[ 6], CONF_CHAR_PTR,      ptr:"", NULL), 
     490    CONF_INFO(316, conf.user_menu_script_title[ 7], CONF_CHAR_PTR,      ptr:"", NULL), 
     491    CONF_INFO(317, conf.user_menu_script_title[ 8], CONF_CHAR_PTR,      ptr:"", NULL), 
     492    CONF_INFO(318, conf.user_menu_script_title[ 9], CONF_CHAR_PTR,      ptr:"", NULL), 
     493    CONF_INFO(319, conf.user_menu_script_title[10], CONF_CHAR_PTR,      ptr:"", NULL), 
     494    CONF_INFO(320, conf.user_menu_script_title[11], CONF_CHAR_PTR,      ptr:"", NULL), 
     495    CONF_INFO(321, conf.user_menu_script_title[12], CONF_CHAR_PTR,      ptr:"", NULL), 
     496    CONF_INFO(322, conf.user_menu_script_title[13], CONF_CHAR_PTR,      ptr:"", NULL), 
     497 
    465498    }; 
    466499#define CONF_NUM (sizeof(conf_info)/sizeof(conf_info[0])) 
  • trunk/core/gui.c

    r2073 r2075  
    196196} 
    197197 
     198extern void add_script_to_user_menu( char * , char *); 
     199 
     200static void gui_add_script_to_user_menu(int arg) { 
     201    add_script_to_user_menu( conf.script_file ,  script_title ); 
     202} 
     203 
    198204static const char* gui_script_autostart_modes[]=            { "Off", "On", "Once"}; 
    199205 
     
    206212    MENU_ITEM   (0x5c,LANG_MENU_LUA_RESTART,                MENUITEM_BOOL,                      &conf.debug_lua_restart_on_error,   0 ), 
    207213#endif 
     214    MENU_ITEM   (0x35,LANG_MENU_USER_MENU_SCRIPT_ADD,       MENUITEM_PROC,                      gui_add_script_to_user_menu, 0 ), 
    208215    MENU_ITEM   (0x5d,LANG_MENU_SCRIPT_DEFAULT_VAL,         MENUITEM_PROC,                      gui_load_script_default,    0 ), 
    209216    MENU_ITEM(0x5e,LANG_MENU_SCRIPT_PARAM_SET,                          MENUITEM_ENUM,                      gui_script_param_set_enum, &conf.script_param_set ), 
  • trunk/core/gui_lang.h

    r2065 r2075  
    706706#define LANG_MENU_MENUEDIT_POPUP                                575 
    707707 
    708 #define GUI_LANG_ITEMS                          575 
     708#define LANG_MENU_USER_MENU_SCRIPT_ADD          576 
     709  
     710#define GUI_LANG_ITEMS                          576 
    709711 
    710712//------------------------------------------------------------------- 
  • trunk/core/gui_user_menu.c

    r2065 r2075  
    6565} 
    6666 
     67 
     68void gui_load_user_menu_script(const char *fn)  
     69{ 
     70    if (fn) { 
     71        script_load(fn, SCRIPT_LOAD_LAST_PARAMSET ); 
     72        load_params_names_cfg(); 
     73 
     74        // exit menu system on the assumption the user will want to run the script just loaded 
     75 
     76        gui_set_mode(&altGuiHandler); 
     77        kbd_reset_autoclicked_key(); 
     78        rinit(); 
     79    } 
     80} 
     81 
     82 
     83void add_script_to_user_menu( char * fname ,  char * title ) 
     84{ 
     85    int i ; 
     86    /* 
     87     * Insert script info at end of existing entries 
     88     */ 
     89    for(i = 1; i < USER_MENU_ITEMS + 1; i++) 
     90    { 
     91        if(!user_submenu_items[i].text)   // insert script title & full filename in next available spot  
     92        { 
     93            strcpy(conf.user_menu_script_file[i-1], fname) ; 
     94            strcpy(conf.user_menu_script_title[i-1], title) ; 
     95 
     96            user_submenu_items[i].symbol = 0x35; 
     97            user_submenu_items[i].opt_len = 0 ; 
     98            user_submenu_items[i].type = MENUITEM_PROC; 
     99            user_submenu_items[i].text = (int) conf.user_menu_script_title[i-1]; 
     100            user_submenu_items[i].value = (int *) gui_load_user_menu_script ; 
     101            user_submenu_items[i].arg = (int) conf.user_menu_script_file[i-1] ; 
     102             
     103            char buf[200]; 
     104            sprintf(buf,lang_str(LANG_USER_MENU_ITEM_ADDED), lang_str(user_submenu_items[i].text)); 
     105            gui_mbox_init(LANG_MENU_USER_MENU, (int)buf, MBOX_BTN_OK|MBOX_TEXT_CENTER, NULL); 
     106            return; 
     107        } 
     108    } 
     109    gui_mbox_init(LANG_MENU_USER_MENU, LANG_USER_MENU_FULL, MBOX_BTN_OK|MBOX_TEXT_CENTER, NULL); 
     110} 
     111 
     112 
    67113void del_user_menu_item(int* cur_memnu_item_indx) 
    68114{ 
     
    79125    { 
    80126        user_submenu_items[i] = user_submenu_items[i+1]; 
     127        strcpy(conf.user_menu_script_file[i-1], conf.user_menu_script_file[i] ) ; 
     128        strcpy(conf.user_menu_script_title[i-1], conf.user_menu_script_title[i] ) ; 
     129        if( user_submenu_items[i].value == (int *) gui_load_user_menu_script ) {         
     130            user_submenu_items[i].text = (int) conf.user_menu_script_title[i-1]; 
     131            user_submenu_items[i].arg = (int) conf.user_menu_script_file[i-1] ; 
     132        } 
    81133    } 
    82134 
     
    91143static void move_user_menu_item(int* cur_memnu_item_indx, int dir) 
    92144{ 
     145    int src_index, dst_index ; 
     146    char tbuff[CONF_STR_LEN]; 
     147         
     148    src_index=*cur_memnu_item_indx ; 
     149    dst_index=*cur_memnu_item_indx + dir;     
     150         
    93151    // Move current user menu item up (dir = -1) or down (dir = 1) 
    94     CMenuItem tmp_menu_item = user_submenu_items[*cur_memnu_item_indx + dir]; 
    95     user_submenu_items[*cur_memnu_item_indx + dir] = user_submenu_items[*cur_memnu_item_indx]; 
    96     user_submenu_items[*cur_memnu_item_indx] = tmp_menu_item; 
    97     *cur_memnu_item_indx += dir; 
     152         
     153    CMenuItem tmp_menu_item = user_submenu_items[dst_index]; 
     154    user_submenu_items[dst_index] = user_submenu_items[src_index]; 
     155    user_submenu_items[src_index] = tmp_menu_item; 
     156     
     157    src_index-- ; dst_index--; 
     158    
     159    strncpy(tbuff, conf.user_menu_script_file[dst_index],CONF_STR_LEN-1) ; 
     160    strncpy(conf.user_menu_script_file[dst_index], conf.user_menu_script_file[src_index],CONF_STR_LEN-1) ;     
     161    strncpy(conf.user_menu_script_file[src_index], tbuff, CONF_STR_LEN-1); 
     162             
     163    strncpy(tbuff, conf.user_menu_script_title[dst_index],CONF_STR_LEN-1) ; 
     164    strncpy(conf.user_menu_script_title[dst_index], conf.user_menu_script_title[src_index],CONF_STR_LEN-1) ; 
     165    strncpy(conf.user_menu_script_title[src_index], tbuff,CONF_STR_LEN-1) ; 
     166     
     167     src_index++ ; dst_index++ ; 
     168             
     169     if( user_submenu_items[src_index].value == (int *) gui_load_user_menu_script ) {         
     170        user_submenu_items[src_index].text = (int) conf.user_menu_script_title[src_index-1]; 
     171        user_submenu_items[src_index].arg = (int) conf.user_menu_script_file[src_index-1] ; 
     172     } 
     173         
     174     if( user_submenu_items[dst_index].value == (int *) gui_load_user_menu_script ) {         
     175        user_submenu_items[dst_index].text = (int) conf.user_menu_script_title[dst_index-1]; 
     176        user_submenu_items[dst_index].arg = (int) conf.user_menu_script_file[dst_index-1] ; 
     177     } 
     178         
     179     *cur_memnu_item_indx += dir; 
     180 
    98181} 
    99182 
     
    147230void user_menu_save() { 
    148231    int x; 
    149         for (x=0; x<USER_MENU_ITEMS; x++) { 
     232    for (x=0; x<USER_MENU_ITEMS; x++) { 
    150233                /* 
    151234                 * First entry in user_submenu_items is reserved for the "Main Menu" 
    152235                 * conf.user_menu_vars only traks/saves the real user entries. 
    153236                 */ 
    154                 conf.user_menu_vars[x] = lang_strhash31(user_submenu_items[x+1].text); 
    155         } 
     237         
     238        if( user_submenu_items[x+1].text ) 
     239        { 
     240            if ( user_submenu_items[x+1].value ==(int *) gui_load_user_menu_script ) 
     241            { 
     242                conf.user_menu_vars[x] = -1 ;                                           // flag script entries specially  
     243            } 
     244            else 
     245            { 
     246                conf.user_menu_vars[x] = lang_strhash31(user_submenu_items[x+1].text);   // otherwise save a hash 
     247            } 
     248        } 
     249        else 
     250        { 
     251            conf.user_menu_vars[x] = 0 ; 
     252            *(char *)conf.user_menu_script_title[x] = 0; 
     253            *(char*)conf.user_menu_script_file[x] = 0 ; 
     254        } 
     255    }  
    156256} 
    157257 
    158258void user_menu_restore() { 
    159     int x; 
    160         CMenuItem* item=0; 
    161  
    162         for (x=0; x<USER_MENU_ITEMS; x++) { 
    163                 /* 
    164                  * First entry in user_submenu_items is reserved for the "Main Menu" 
    165                  * conf.user_menu_vars only traks/saves the real user entries. 
    166                  */ 
    167                  item = find_mnu(&root_menu, conf.user_menu_vars[x]); 
    168                  if ( item ) 
    169                         user_submenu_items[x+1] = *item; 
    170         } 
    171 } 
     259    int x,y ; 
     260    CMenuItem* item=0; 
     261    /* 
     262     * First entry in user_submenu_items is reserved for the "Main Menu" 
     263     * conf.user_menu_vars only tracks/saves the real user entries. 
     264     */ 
     265        
     266    for (x=0, y=1; x<USER_MENU_ITEMS; x++, y++) { 
     267        
     268        if( conf.user_menu_vars[x] == -1 )              // special flag- there is no hash for script entries 
     269        {    
     270            user_submenu_items[y].symbol = 0x35;        // restore the script entry 
     271            user_submenu_items[y].opt_len = 0 ; 
     272            user_submenu_items[y].type = MENUITEM_PROC; 
     273            user_submenu_items[y].text = (int) conf.user_menu_script_title[x]; 
     274            user_submenu_items[y].value = (int *) gui_load_user_menu_script ; 
     275            user_submenu_items[y].arg = (int) conf.user_menu_script_file[x] ;   
     276         
     277        } 
     278        else 
     279        {  
     280            if(conf.user_menu_vars[x] >0 )              // look up the menu text 
     281                 item = find_mnu(&root_menu, conf.user_menu_vars[x]); 
     282            else item = NULL ; 
     283             
     284            if ( item )                                 // add back in if found 
     285            { 
     286                user_submenu_items[y] = *item; 
     287            } 
     288            else                                        // otherwise clear the menu entry 
     289            { 
     290                user_submenu_items[y].text = 0;             
     291                break ;                                 // and exit - all done ! 
     292            } 
     293        } 
     294    }   
     295} 
     296 
  • trunk/include/conf.h

    r2065 r2075  
    380380        int help_was_shown;             // 0-help wasn't shown yet, 1- help already was shown 
    381381    int menuedit_popup;                 // 0-menuedit in-menu, 1-menu edit is popup 
     382 
     383    // full path & filename 
     384    char user_menu_script_file[USER_MENU_ITEMS][CONF_STR_LEN]; 
     385    // @title string from file                      
     386    char user_menu_script_title[USER_MENU_ITEMS][CONF_STR_LEN]; 
     387 
    382388} Conf; 
    383389 
Note: See TracChangeset for help on using the changeset viewer.