CHDK_DE Vorschauversion  Trunk Rev. 6014
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
user_menu_edit.c-Dateireferenz
#include "camera_info.h"
#include "conf.h"
#include "keyboard.h"
#include "font.h"
#include "lang.h"
#include "fileutil.h"
#include "gui.h"
#include "gui_draw.h"
#include "gui_menu.h"
#include "gui_user_menu.h"
#include "gui_lang.h"
#include "gui_mbox.h"
#include "gui_mpopup.h"
#include "gui_fselect.h"
#include "ctype.h"
#include "module_load.h"
#include "module_def.h"
#include "simple_module.h"
+ Include-Abhängigkeitsdiagramm für user_menu_edit.c:

gehe zum Quellcode dieser Datei

Datenstrukturen

struct  CMenuStacked
 

Makrodefinitionen

#define MENUSTACK_MAXDEPTH   4
 
#define UEDIT_MENU   1
 
#define UEDIT_SCRIPT   2
 
#define UEDIT_MODULE   4
 
#define UEDIT_REMOVE   8
 

Funktionen

static int validrow (int n)
 
static int gui_menu_disp_rows ()
 
static int gui_menu_rows ()
 
void gui_menu_erase_and_redraw ()
 
static int inUserMenu (int n)
 
void add_usermenu_item (unsigned int btn)
 
static void add_usermenu ()
 
static void del_usermenu_item (unsigned int btn)
 
static void del_usermenu ()
 
static void move_usermenu_item (int *cur_menu_item_indx, int dir)
 
static void move_usermenu_item_up (int *cur_menu_item_indx)
 
static void move_usermenu_item_down (int *cur_menu_item_indx)
 
static void add_extern_to_user_menu (const char *fname, char *title, char sym, short type, int *func)
 
static void add_script_to_user_menu (const char *fname, char *title)
 
static void add_module_to_user_menu (const char *fname, char *title)
 
static void gui_menu_set_curr_menu (CMenu *menu_ptr, int top_item, int curr_item)
 
static void gui_init (CMenu *menu_ptr)
 
void gui_menu_back ()
 
void gui_activate_sub_menu (CMenu *sub_menu)
 
static void select_sub_menu ()
 
static void gui_menu_updown (int increment)
 
static void gui_draw_initial ()
 
static void gui_draw_symbol (int num_symbols)
 
static void gui_draw_value ()
 
static void gui_draw_text (char *str, int num_symbols)
 
static void gui_draw_state_value (CMenuItem *c)
 
static void gui_draw (int enforce_redraw)
 
static void gui_uedit_kbd_process_menu_btn ()
 
const char * skip_whitespace (const char *p)
 
const char * skip_toeol (const char *p)
 
const char * skip_eol (const char *p)
 
static int chk_ext (char *ext, char *tst)
 
static void gui_uedit_script_selected (const char *fn)
 
static void gui_uedit_module_selected (const char *fn)
 
static void uedit_set (unsigned int actn)
 
static int gui_uedit_kbd_process ()
 
int _run ()
 
int _module_can_unload ()
 
int _module_exit_alt ()
 
int _module_unload ()
 

Variablen

static CMenucurr_menu
 
static CMenuStacked gui_menu_stack [MENUSTACK_MAXDEPTH]
 
static unsigned int gui_menu_stack_ptr
 
static int gui_menu_curr_item
 
static int gui_menu_top_item
 
static int gui_menu_redraw
 
static int count
 
static int x
 
static int y
 
static int w
 
static int wplus
 
static int num_lines
 
static int len_bool
 
static int len_space
 
static int running = 0
 
static gui_handlergui_mode_old
 
static CMenuItem mod_menu_item
 
static char msgbuf [200]
 
static int imenu
 
static int yy
 
static int xx
 
static int symbol_width
 
static twoColors cl
 
static twoColors cl_symbol
 
static struct mpopup_item popup_uedit []
 
static gui_handler ueditGuiHandler = { GUI_MODE_MODULE, gui_draw, gui_uedit_kbd_process, gui_uedit_kbd_process_menu_btn, 0, 0 }
 
libsimple_sym _librun
 
ModuleInfo _module_info
 

Makro-Dokumentation

#define MENUSTACK_MAXDEPTH   4

Definiert in Zeile 21 der Datei user_menu_edit.c.

#define UEDIT_MENU   1

Definiert in Zeile 586 der Datei user_menu_edit.c.

#define UEDIT_MODULE   4

Definiert in Zeile 588 der Datei user_menu_edit.c.

#define UEDIT_REMOVE   8

Definiert in Zeile 589 der Datei user_menu_edit.c.

#define UEDIT_SCRIPT   2

Definiert in Zeile 587 der Datei user_menu_edit.c.

Dokumentation der Funktionen

int _module_can_unload ( )

Definiert in Zeile 803 der Datei user_menu_edit.c.

804 {
805  return running == 0;
806 }
int _module_exit_alt ( )

Definiert in Zeile 808 der Datei user_menu_edit.c.

809 {
810  running = 0;
811  return 0;
812 }
int _module_unload ( )

Definiert in Zeile 814 der Datei user_menu_edit.c.

815 {
816  conf_save();
817  return 0;
818 }
int _run ( )

Definiert in Zeile 793 der Datei user_menu_edit.c.

794 {
795  running = 1;
796  gui_menu_redraw = 2;
799 
800  return 0;
801 }
static void add_extern_to_user_menu ( const char *  fname,
char *  title,
char  sym,
short  type,
int *  func 
)
static

Definiert in Zeile 243 der Datei user_menu_edit.c.

244 {
245  int i;
246  /*
247  * Insert script/module info at end of existing entries
248  */
251 
252  for(i = 1; i < USER_MENU_ITEMS + 1; i++)
253  {
254  if (!items[i].text) // insert script/module title & full filename in next available spot
255  {
256  if (conf.user_menu_vars.items[i-1].script_file == 0)
259  if (conf.user_menu_vars.items[i-1].script_title == 0)
262 
263  items[i].symbol = sym;
264  items[i].opt_len = 0;
265  items[i].type = type;
266  items[i].text = (int) conf.user_menu_vars.items[i-1].script_title;
267  items[i].value = func;
268  items[i].arg = (int) conf.user_menu_vars.items[i-1].script_file;
269 
273  return;
274  }
275  }
277 }
static void add_module_to_user_menu ( const char *  fname,
char *  title 
)
static

Definiert in Zeile 284 der Datei user_menu_edit.c.

285 {
287 }
static void add_script_to_user_menu ( const char *  fname,
char *  title 
)
static

Definiert in Zeile 279 der Datei user_menu_edit.c.

280 {
282 }
void add_usermenu_item ( unsigned int  btn)

Definiert in Zeile 100 der Datei user_menu_edit.c.

101 {
103  if (btn == MBOX_BTN_YES)
104  {
105  int i;
106 
107  /*
108  * Insert new Item at end of existing entries
109  */
111 
112  for (i = 1; i < USER_MENU_ITEMS + 1; i++)
113  {
114  if (!items[i].text)
115  {
116  items[i] = mod_menu_item;
118  return;
119  }
120  }
122  }
123 }
static int chk_ext ( char *  ext,
char *  tst 
)
static

Definiert in Zeile 603 der Datei user_menu_edit.c.

604 {
605  if (ext && (strlen(ext) == strlen(tst)+1))
606  {
607  int i;
608  for (i=0; i<strlen(tst); i++)
609  if (toupper(ext[i+1]) != toupper(tst[i]))
610  return 0;
611  return 1;
612  }
613  return 0;
614 }
static void del_usermenu ( )
static
static void del_usermenu_item ( unsigned int  btn)
static

Definiert in Zeile 135 der Datei user_menu_edit.c.

136 {
138  if (btn == MBOX_BTN_YES)
139  {
140  int i, c;
141 
142  /*
143  * Delete user menu entry by sliding all the lower valid/existing entries up.
144  */
146 
147  for (c = 1; c < USER_MENU_ITEMS + 1; c++)
148  {
149  if (items[c].text == mod_menu_item.text)
150  {
151  for (i = c; items[i].text; i++)
152  {
153  items[i] = items[i+1];
154 
159 
164  }
165 
167 
169  {
172  }
173 
174  return;
175  }
176  }
177  }
178 }
void gui_activate_sub_menu ( CMenu sub_menu)

Definiert in Zeile 334 der Datei user_menu_edit.c.

335 {
336  // push current menu on stack
340 
341  gui_menu_set_curr_menu(sub_menu, 0, 0);
342 
344 
345  // FIXME check on stack overrun;
347  {
349  gui_menu_stack_ptr = 0;
350  }
351 
352  // Force full redraw
354 }
static void gui_draw ( int  enforce_redraw)
static

Definiert in Zeile 495 der Datei user_menu_edit.c.

496 {
497  int i, j;
498 
499  if ( enforce_redraw )
500  gui_menu_redraw = 2;
501 
502  if (gui_menu_redraw)
503  {
504  if (gui_menu_redraw==2)
506 
507  gui_menu_redraw=0;
508 
510  {
511  if (validrow(imenu))
512  {
517 
518  xx = x;
519 
520  switch (curr_menu->menu[imenu].type & MENUITEM_MASK)
521  {
524  break;
525  case MENUITEM_BOOL:
526  case MENUITEM_INT:
527  case MENUITEM_ENUM:
528  case MENUITEM_ENUM2:
529  gui_draw_value();
530  break;
532  case MENUITEM_SUBMENU:
535  break;
536  case MENUITEM_UP:
539  break;
540  case MENUITEM_PROC:
542  break;
543  case MENUITEM_COLOR_FG:
544  case MENUITEM_COLOR_BG:
545  gui_draw_symbol(1);
547  break;
548  }
549 
550  yy += rbf_font_height();
551  i++;
552  }
553  }
554 
555  // scrollbar
556  if (count > num_lines)
557  {
558  i = num_lines*rbf_font_height()-1 -1; // full height
559  j = i*num_lines/count; // bar height
560  if (j<20) j=20;
561  i = (i-j)*((gui_menu_curr_item<0)?0:gui_menu_curr_item)/(count-1); // top pos
565  }
566  }
567 }
static void gui_draw_initial ( )
static

Definiert in Zeile 414 der Datei user_menu_edit.c.

415 {
417 
418  if (count > num_lines)
419  {
421  wplus = 8;
422  // scrollbar background
424  }
425  else
426  {
427  wplus = 0;
428  if (conf.menu_center)
429  {
431  }
432  else
433  {
435  }
436  }
437 
439 }
static void gui_draw_state_value ( CMenuItem c)
static

Definiert in Zeile 482 der Datei user_menu_edit.c.

483 {
484  int text = curr_menu->menu[imenu].text;
485  if (c[0].text != 0)
486  text = c[0].text;
487 
488  int wid = w-len_space-len_space;
489 
490  gui_draw_symbol(1);
491  xx += rbf_draw_string_len(xx, yy, wid, lang_str(text), cl);
492 }
static void gui_draw_symbol ( int  num_symbols)
static

Definiert in Zeile 448 der Datei user_menu_edit.c.

449 {
451  {
452  xx += rbf_draw_char(xx, yy, ' ', cl_symbol);
454  symbol_width = (symbol_width * num_symbols) + len_space;
455  }
456  else
457  {
458  symbol_width = 0;
459  }
460 
461  xx += rbf_draw_char(xx, yy, ' ', cl);
462 }
static void gui_draw_text ( char *  str,
int  num_symbols 
)
static

Definiert in Zeile 472 der Datei user_menu_edit.c.

473 {
474  gui_draw_symbol(num_symbols);
476  if ((num_symbols == 2) && conf.menu_symbol_enable)
477  xx += rbf_draw_symbol(xx, yy, 0x52, cl_symbol);
478  rbf_draw_char(xx, yy, ' ', cl);
479 }
static void gui_draw_value ( )
static

Definiert in Zeile 465 der Datei user_menu_edit.c.

466 {
467  gui_draw_symbol(1);
469 }
static void gui_init ( CMenu menu_ptr)
static

Definiert in Zeile 302 der Datei user_menu_edit.c.

302  {
303 
304  if (menu_ptr) {
305  gui_menu_set_curr_menu(menu_ptr, 0, 0);
306  gui_menu_stack_ptr = 0;
307  }
308 
312  len_bool = rbf_str_width("\x95");
313  len_space = rbf_char_width(' ');
314 
315  gui_menu_redraw=2;
316 }
void gui_menu_back ( )

Definiert in Zeile 320 der Datei user_menu_edit.c.

static int gui_menu_disp_rows ( )
static

Definiert in Zeile 59 der Datei user_menu_edit.c.

60 {
61  int n, m;
62  // Count the numer of rows in current menu
63  for(n = 0, m = 0; curr_menu->menu[n].text; n++)
64  if (validrow(n)) m++;
65  return m;
66 }
void gui_menu_erase_and_redraw ( )

Definiert in Zeile 78 der Datei user_menu_edit.c.

79 {
80  gui_menu_redraw = 2;
82 }
static int gui_menu_rows ( )
static

Definiert in Zeile 68 der Datei user_menu_edit.c.

69 {
70  int n;
71  // Count the numer of rows in current menu
72  for(n = 0; curr_menu->menu[n].text; n++);
73  return n;
74 }
static void gui_menu_set_curr_menu ( CMenu menu_ptr,
int  top_item,
int  curr_item 
)
static

Definiert in Zeile 290 der Datei user_menu_edit.c.

291 {
292  curr_menu = menu_ptr;
293  gui_menu_top_item = top_item;
295  while (!validrow(gui_menu_curr_item))
296  {
298  }
299 }
static void gui_menu_updown ( int  increment)
static

Definiert in Zeile 364 der Datei user_menu_edit.c.

365 {
366  int c, j;
367 
368  if (count == 0) return;
369 
370  // Determine number of rows to move (1 or 4)
372 
373  for (j = 0; j < c; ++j)
374  {
375  do
376  {
377  // Move to next or previous row
378  gui_menu_curr_item += increment;
379 
380  if (gui_menu_curr_item < 0) // Off top, move to bottom
381  {
384  }
385  else if (gui_menu_curr_item >= gui_menu_rows()) // Off bottom, move to top
386  {
388  }
389  else if (increment == 1) // Still in menu, if moving down adjust scroll if needed
390  {
392  {
395  }
396  }
397  else // Still in menu, and moving up, adjust scroll
398  {
401  }
402 
403  // Check in case scroll moved off top of menu
405  } while (!validrow(gui_menu_curr_item));
406 
407  // Redraw menu if needed
408  if (gui_menu_redraw == 0) gui_menu_redraw=1;
409  }
410 }
static int gui_uedit_kbd_process ( )
static

Definiert in Zeile 720 der Datei user_menu_edit.c.

720  {
721 
723  {
724  case JOGDIAL_LEFT:
725  case KEY_UP:
726  gui_menu_updown(-1);
727  break;
728  case JOGDIAL_RIGHT:
729  case KEY_DOWN:
730  gui_menu_updown(1);
731  break;
732  case FRONTDIAL_LEFT:
733  case KEY_LEFT:
735  {
737  }
738  else
739  {
740  del_usermenu();
741  }
742  break;
743  case KEY_SHOOT_HALF:
744  case KEY_ERASE:
745  del_usermenu();
746  break;
747  case FRONTDIAL_RIGHT:
748  case KEY_RIGHT:
750  {
752  }
753  else
754  {
755  add_usermenu();
756  }
757  break;
758  case KEY_SET:
760  {
762  }
763  else
764  {
766  {
767  case MENUITEM_UP:
768  gui_menu_back();
769  break;
770  case MENUITEM_SUBMENU:
771  select_sub_menu();
772  break;
773  }
774  }
775  break;
776  case KEY_DISPLAY:
777  gui_menu_back();
778  break;
779  }
780 
781  return 0;
782 }
static void gui_uedit_kbd_process_menu_btn ( )
static

Definiert in Zeile 571 der Datei user_menu_edit.c.

572 {
574  {
575  running = 0;
577  }
578  else
579  {
582  }
583 }
static void gui_uedit_module_selected ( const char *  fn)
static

Definiert in Zeile 668 der Datei user_menu_edit.c.

669 {
670  if (fn)
671  {
672  char *ext = strrchr(fn,'.');
673  if (chk_ext(ext,"flt"))
674  {
676  flat_hdr* mod = module_preload(fn, fn, v); // Pass fn as both path and name (file browser sends us full path to module)
677  if (mod != 0)
678  {
679  if (mod->_module_info->lib->run != 0) // Simple Module?
680  {
681  char *n;
682  if (mod->_module_info->moduleName < 0)
683  n = lang_str(-mod->_module_info->moduleName);
684  else
685  n = (char*)mod->_module_info->moduleName;
687  free(mod);
688  }
689  else
690  {
693  }
694  }
695  }
696  }
697 }
static void gui_uedit_script_selected ( const char *  fn)
static

Definiert in Zeile 616 der Datei user_menu_edit.c.

617 {
618  if (fn)
619  {
620  char *ext = strrchr(fn,'.');
621  if (chk_ext(ext,"lua") || chk_ext(ext,"bas"))
622  {
623  char* buf;
624 
625  buf = load_file(fn, 0, 1);
626 
627  if (buf)
628  {
629  char script_title[36];
630  register const char *ptr = buf;
631  char *c;
632 
633  // Build title
634 
635  c=strrchr(fn, '/');
636  strncpy(script_title, (c)?c+1:fn, sizeof(script_title));
637  script_title[sizeof(script_title)-1]=0;
638 
639  while (ptr[0])
640  {
641  ptr = skip_whitespace(ptr);
642  if (ptr[0]=='@') {
643  if (strncmp("@title", ptr, 6)==0)
644  {
645  ptr = ptr + 6;
646  register int i=0;
647 
648  ptr = skip_whitespace(ptr);
649  while (i<(int)(sizeof(script_title)-1) && ptr[i] && ptr[i]!='\r' && ptr[i]!='\n')
650  {
651  script_title[i]=ptr[i];
652  ++i;
653  }
654  script_title[i]=0;
655  break;
656  }
657  }
658  ptr = skip_eol(ptr);
659  }
660 
661  add_script_to_user_menu(fn, script_title);
662  free(buf);
663  }
664  }
665  }
666 }
static int inUserMenu ( int  n)
static

Definiert in Zeile 85 der Datei user_menu_edit.c.

86 {
87  int i;
88  for (i=1; user_submenu.menu[i].text != 0; i++)
89  {
91  return 1;
92  }
93  return 0;
94 }
static void move_usermenu_item ( int *  cur_menu_item_indx,
int  dir 
)
static

Definiert in Zeile 190 der Datei user_menu_edit.c.

191 {
192  int src_index, dst_index ;
193  char *tbuff;
194 
195  src_index = *cur_menu_item_indx ;
196  dst_index = *cur_menu_item_indx + dir;
197 
198  // Move current user menu item up (dir = -1) or down (dir = 1)
200 
201  CMenuItem tmp_menu_item = items[dst_index];
202  items[dst_index] = items[src_index];
203  items[src_index] = tmp_menu_item;
204 
205  src_index--; dst_index--;
206 
207  tbuff = conf.user_menu_vars.items[dst_index].script_file;
209  conf.user_menu_vars.items[src_index].script_file = tbuff;
210 
211  tbuff = conf.user_menu_vars.items[dst_index].script_title;
213  conf.user_menu_vars.items[src_index].script_title = tbuff;
214 
215  *cur_menu_item_indx += dir;
216 
219 }
static void move_usermenu_item_down ( int *  cur_menu_item_indx)
static

Definiert in Zeile 230 der Datei user_menu_edit.c.

231 {
232  // don't allow moving link to main menu
233  if (*cur_menu_item_indx == 0)
234  return;
235 
236  /*
237  * Move entry down below next entry if next entry is not empty
238  */
239  if((*cur_menu_item_indx < (USER_MENU_ITEMS)) && (user_submenu.menu[*cur_menu_item_indx +1].text))
240  move_usermenu_item(cur_menu_item_indx, 1);
241 }
static void move_usermenu_item_up ( int *  cur_menu_item_indx)
static

Definiert in Zeile 221 der Datei user_menu_edit.c.

222 {
223  /*
224  * Move entry up
225  */
226  if (*cur_menu_item_indx > 1)
227  move_usermenu_item(cur_menu_item_indx, -1);
228 }
static void select_sub_menu ( )
static

Definiert in Zeile 357 der Datei user_menu_edit.c.

const char* skip_eol ( const char *  p)

Definiert in Zeile 601 der Datei user_menu_edit.c.

601 { p = skip_toeol(p); if (*p == '\r') p++; if (*p == '\n') p++; return p; } // Skip past end of line
const char* skip_toeol ( const char *  p)

Definiert in Zeile 600 der Datei user_menu_edit.c.

600 { while (*p && *p!='\r' && *p!='\n') p++; return p; } // Skip to end of line
const char* skip_whitespace ( const char *  p)

Definiert in Zeile 599 der Datei user_menu_edit.c.

599 { while (*p==' ' || *p=='\t') p++; return p; } // Skip past whitespace
static void uedit_set ( unsigned int  actn)
static

Definiert in Zeile 699 der Datei user_menu_edit.c.

700 {
701  switch (actn)
702  {
703  case UEDIT_MENU:
705  break;
706  case UEDIT_SCRIPT:
708  break;
709  case UEDIT_MODULE:
711  break;
712  case UEDIT_REMOVE:
713  del_usermenu();
714  break;
715  }
717 }
static int validrow ( int  n)
static

Definiert in Zeile 48 der Datei user_menu_edit.c.

49 {
51  ((curr_menu->menu[n].type & MENUITEM_SCRIPT_PARAM) != MENUITEM_SCRIPT_PARAM) &&
52  ((curr_menu->menu[n].type & MENUITEM_TEXT) != MENUITEM_TEXT) &&
55  return 1;
56  return 0;
57 }

Variablen-Dokumentation

libsimple_sym _librun
Initialisierung:

Definiert in Zeile 820 der Datei user_menu_edit.c.

twoColors cl
static

Definiert in Zeile 445 der Datei user_menu_edit.c.

twoColors cl_symbol
static

Definiert in Zeile 445 der Datei user_menu_edit.c.

int count
static

Definiert in Zeile 39 der Datei user_menu_edit.c.

CMenu* curr_menu
static

Definiert in Zeile 32 der Datei user_menu_edit.c.

int gui_menu_curr_item
static

Definiert in Zeile 35 der Datei user_menu_edit.c.

int gui_menu_redraw
static

Definiert in Zeile 37 der Datei user_menu_edit.c.

CMenuStacked gui_menu_stack[MENUSTACK_MAXDEPTH]
static

Definiert in Zeile 33 der Datei user_menu_edit.c.

unsigned int gui_menu_stack_ptr
static

Definiert in Zeile 34 der Datei user_menu_edit.c.

int gui_menu_top_item
static

Definiert in Zeile 36 der Datei user_menu_edit.c.

gui_handler* gui_mode_old
static

Definiert in Zeile 45 der Datei user_menu_edit.c.

int imenu
static

Definiert in Zeile 444 der Datei user_menu_edit.c.

int len_bool
static

Definiert in Zeile 42 der Datei user_menu_edit.c.

int len_space
static

Definiert in Zeile 42 der Datei user_menu_edit.c.

CMenuItem mod_menu_item
static

Definiert in Zeile 97 der Datei user_menu_edit.c.

char msgbuf[200]
static

Definiert in Zeile 98 der Datei user_menu_edit.c.

int num_lines
static

Definiert in Zeile 41 der Datei user_menu_edit.c.

struct mpopup_item popup_uedit[]
static
int running = 0
static

Definiert in Zeile 44 der Datei user_menu_edit.c.

int symbol_width
static

Definiert in Zeile 444 der Datei user_menu_edit.c.

Definiert in Zeile 786 der Datei user_menu_edit.c.

int w
static

Definiert in Zeile 41 der Datei user_menu_edit.c.

int wplus
static

Definiert in Zeile 41 der Datei user_menu_edit.c.

int x
static

Definiert in Zeile 40 der Datei user_menu_edit.c.

int xx
static

Definiert in Zeile 444 der Datei user_menu_edit.c.

int y
static

Definiert in Zeile 40 der Datei user_menu_edit.c.

int yy
static

Definiert in Zeile 444 der Datei user_menu_edit.c.