summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2007-02-26 08:17:07 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2007-02-26 08:17:07 +0000
commit1ba493e4b440a331be6e05a633dda7b33be5d803 (patch)
tree4ea8883a6656f7670ffa4dc555c395f8e03a567a
parent6b704b894140db35880352475dacca36bbbcc2ee (diff)
downloadrockbox-1ba493e4b440a331be6e05a633dda7b33be5d803.tar.gz
rockbox-1ba493e4b440a331be6e05a633dda7b33be5d803.zip
get the button bar working like it used to (hopefully)
Remove tabs git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12492 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/menu.c270
1 files changed, 143 insertions, 127 deletions
diff --git a/apps/menu.c b/apps/menu.c
index 39b7e0dc39..a66652b608 100644
--- a/apps/menu.c
+++ b/apps/menu.c
@@ -318,11 +318,11 @@ static char * get_menu_item_name(int selected_item,void * data, char *buffer)
318 } 318 }
319 319
320 menu = menu->submenus[selected_item]; 320 menu = menu->submenus[selected_item];
321 321
322 if (menu->flags&MENU_DYNAMIC_DESC) 322 if (menu->flags&MENU_DYNAMIC_DESC)
323 return menu->menu_get_name_and_icon->list_get_name(selected_item, 323 return menu->menu_get_name_and_icon->list_get_name(selected_item,
324 menu->menu_get_name_and_icon->list_get_name_data, buffer); 324 menu->menu_get_name_and_icon->list_get_name_data, buffer);
325 325
326 type = (menu->flags&MENU_TYPE_MASK); 326 type = (menu->flags&MENU_TYPE_MASK);
327 if (type == MT_SETTING) 327 if (type == MT_SETTING)
328 { 328 {
@@ -338,15 +338,15 @@ static char * get_menu_item_name(int selected_item,void * data, char *buffer)
338static void menu_get_icon(int selected_item, void * data, ICON * icon) 338static void menu_get_icon(int selected_item, void * data, ICON * icon)
339{ 339{
340 const struct menu_item_ex *menu = (const struct menu_item_ex *)data; 340 const struct menu_item_ex *menu = (const struct menu_item_ex *)data;
341 ICON menu_icon = NOICON; 341 ICON menu_icon = NOICON;
342 selected_item = get_menu_selection(selected_item, menu); 342 selected_item = get_menu_selection(selected_item, menu);
343 343
344 menu = menu->submenus[selected_item]; 344 menu = menu->submenus[selected_item];
345 if (menu->flags&MENU_HAS_DESC) 345 if (menu->flags&MENU_HAS_DESC)
346 menu_icon = menu->callback_and_desc->icon; 346 menu_icon = menu->callback_and_desc->icon;
347 else if (menu->flags&MENU_DYNAMIC_DESC) 347 else if (menu->flags&MENU_DYNAMIC_DESC)
348 menu_icon = menu->menu_get_name_and_icon->icon; 348 menu_icon = menu->menu_get_name_and_icon->icon;
349 349
350 switch (menu->flags&MENU_TYPE_MASK) 350 switch (menu->flags&MENU_TYPE_MASK)
351 { 351 {
352 case MT_SETTING: 352 case MT_SETTING:
@@ -446,119 +446,119 @@ static void talk_menu_item(const struct menu_item_ex *menu,
446/* returns true if the menu needs to be redrwan */ 446/* returns true if the menu needs to be redrwan */
447bool do_setting_from_menu(const struct menu_item_ex *temp) 447bool do_setting_from_menu(const struct menu_item_ex *temp)
448{ 448{
449 int setting_id; 449 int setting_id;
450 const struct settings_list *setting = find_setting( 450 const struct settings_list *setting = find_setting(
451 temp->variable, 451 temp->variable,
452 &setting_id); 452 &setting_id);
453 bool ret_val = false; 453 bool ret_val = false;
454 if (setting) 454 if (setting)
455 { 455 {
456 if ((setting->flags&F_BOOL_SETTING) == F_BOOL_SETTING) 456 if ((setting->flags&F_BOOL_SETTING) == F_BOOL_SETTING)
457 { 457 {
458 bool temp_var, *var; 458 bool temp_var, *var;
459 bool show_icons = global_settings.show_icons; 459 bool show_icons = global_settings.show_icons;
460 if (setting->flags&F_TEMPVAR) 460 if (setting->flags&F_TEMPVAR)
461 { 461 {
462 temp_var = *(bool*)setting->setting; 462 temp_var = *(bool*)setting->setting;
463 var = &temp_var; 463 var = &temp_var;
464 } 464 }
465 else 465 else
466 { 466 {
467 var = (bool*)setting->setting; 467 var = (bool*)setting->setting;
468 } 468 }
469 set_bool_options(str(setting->lang_id),var, 469 set_bool_options(str(setting->lang_id),var,
470 STR(setting->bool_setting->lang_yes), 470 STR(setting->bool_setting->lang_yes),
471 STR(setting->bool_setting->lang_no), 471 STR(setting->bool_setting->lang_no),
472 setting->bool_setting->option_callback); 472 setting->bool_setting->option_callback);
473 if (setting->flags&F_TEMPVAR) 473 if (setting->flags&F_TEMPVAR)
474 *(bool*)setting->setting = temp_var; 474 *(bool*)setting->setting = temp_var;
475 if (show_icons != global_settings.show_icons) 475 if (show_icons != global_settings.show_icons)
476 ret_val = true; 476 ret_val = true;
477 } 477 }
478 else if (setting->flags&F_T_SOUND) 478 else if (setting->flags&F_T_SOUND)
479 { 479 {
480 set_sound(str(setting->lang_id), setting->setting, 480 set_sound(str(setting->lang_id), setting->setting,
481 setting->sound_setting->setting); 481 setting->sound_setting->setting);
482 } 482 }
483 else /* other setting, must be an INT type */ 483 else /* other setting, must be an INT type */
484 { 484 {
485 int temp_var, *var; 485 int temp_var, *var;
486 if (setting->flags&F_TEMPVAR) 486 if (setting->flags&F_TEMPVAR)
487 { 487 {
488 temp_var = *(int*)setting->setting; 488 temp_var = *(int*)setting->setting;
489 var = &temp_var; 489 var = &temp_var;
490 } 490 }
491 else 491 else
492 { 492 {
493 var = (int*)setting->setting; 493 var = (int*)setting->setting;
494 } 494 }
495 if (setting->flags&F_INT_SETTING) 495 if (setting->flags&F_INT_SETTING)
496 { 496 {
497 int min, max, step; 497 int min, max, step;
498 if (setting->flags&F_FLIPLIST) 498 if (setting->flags&F_FLIPLIST)
499 { 499 {
500 min = setting->int_setting->max; 500 min = setting->int_setting->max;
501 max = setting->int_setting->min; 501 max = setting->int_setting->min;
502 step = -setting->int_setting->step; 502 step = -setting->int_setting->step;
503 } 503 }
504 else 504 else
505 { 505 {
506 max = setting->int_setting->max; 506 max = setting->int_setting->max;
507 min = setting->int_setting->min; 507 min = setting->int_setting->min;
508 step = setting->int_setting->step; 508 step = setting->int_setting->step;
509 } 509 }
510 set_int_ex(str(setting->lang_id), 510 set_int_ex(str(setting->lang_id),
511 NULL, 511 NULL,
512 setting->int_setting->unit,var, 512 setting->int_setting->unit,var,
513 setting->int_setting->option_callback, 513 setting->int_setting->option_callback,
514 step, min, max, 514 step, min, max,
515 setting->int_setting->formatter, 515 setting->int_setting->formatter,
516 setting->int_setting->get_talk_id); 516 setting->int_setting->get_talk_id);
517 } 517 }
518 else if (setting->flags&F_CHOICE_SETTING) 518 else if (setting->flags&F_CHOICE_SETTING)
519 { 519 {
520 static struct opt_items options[MAX_OPTIONS]; 520 static struct opt_items options[MAX_OPTIONS];
521 char buffer[256]; 521 char buffer[256];
522 char *buf_start = buffer; 522 char *buf_start = buffer;
523 int buf_free = 256; 523 int buf_free = 256;
524 int i,j, count = setting->choice_setting->count; 524 int i,j, count = setting->choice_setting->count;
525 for (i=0, j=0; i<count && i<MAX_OPTIONS; i++) 525 for (i=0, j=0; i<count && i<MAX_OPTIONS; i++)
526 { 526 {
527 if (setting->flags&F_CHOICETALKS) 527 if (setting->flags&F_CHOICETALKS)
528 { 528 {
529 if (cfg_int_to_string(setting_id, i, 529 if (cfg_int_to_string(setting_id, i,
530 buf_start, buf_free)) 530 buf_start, buf_free))
531 { 531 {
532 int len = strlen(buf_start) +1; 532 int len = strlen(buf_start) +1;
533 options[j].string = buf_start; 533 options[j].string = buf_start;
534 buf_start += len; 534 buf_start += len;
535 buf_free -= len; 535 buf_free -= len;
536 options[j].voice_id = 536 options[j].voice_id =
537 setting->choice_setting->talks[i]; 537 setting->choice_setting->talks[i];
538 j++; 538 j++;
539 } 539 }
540 } 540 }
541 else 541 else
542 { 542 {
543 options[j].string = 543 options[j].string =
544 P2STR(setting-> 544 P2STR(setting->
545 choice_setting->desc[i]); 545 choice_setting->desc[i]);
546 options[j].voice_id = 546 options[j].voice_id =
547 P2ID(setting-> 547 P2ID(setting->
548 choice_setting->desc[i]); 548 choice_setting->desc[i]);
549 j++; 549 j++;
550 } 550 }
551 } 551 }
552 set_option(str(setting->lang_id), var, INT, 552 set_option(str(setting->lang_id), var, INT,
553 options,j, 553 options,j,
554 setting-> 554 setting->
555 choice_setting->option_callback); 555 choice_setting->option_callback);
556 } 556 }
557 if (setting->flags&F_TEMPVAR) 557 if (setting->flags&F_TEMPVAR)
558 *(int*)setting->setting = temp_var; 558 *(int*)setting->setting = temp_var;
559 } 559 }
560 } 560 }
561 return ret_val; 561 return ret_val;
562} 562}
563 563
564int do_menu(const struct menu_item_ex *start_menu) 564int do_menu(const struct menu_item_ex *start_menu)
@@ -568,7 +568,10 @@ int do_menu(const struct menu_item_ex *start_menu)
568 struct gui_synclist lists; 568 struct gui_synclist lists;
569 const struct menu_item_ex *temp, *menu; 569 const struct menu_item_ex *temp, *menu;
570 int ret = 0; 570 int ret = 0;
571 571#ifdef HAS_BUTTONBAR
572 struct gui_buttonbar buttonbar;
573#endif
574
572 const struct menu_item_ex *menu_stack[MAX_MENUS]; 575 const struct menu_item_ex *menu_stack[MAX_MENUS];
573 int menu_stack_selected_item[MAX_MENUS]; 576 int menu_stack_selected_item[MAX_MENUS];
574 int stack_top = 0; 577 int stack_top = 0;
@@ -577,7 +580,12 @@ int do_menu(const struct menu_item_ex *start_menu)
577 if (start_menu == NULL) 580 if (start_menu == NULL)
578 menu = &main_menu_; 581 menu = &main_menu_;
579 else menu = start_menu; 582 else menu = start_menu;
580 583#ifdef HAS_BUTTONBAR
584 gui_buttonbar_init(&buttonbar);
585 gui_buttonbar_set_display(&buttonbar, &(screens[SCREEN_MAIN]) );
586 gui_buttonbar_set(&buttonbar, "<<<", "", "");
587 gui_buttonbar_draw(&buttonbar);
588#endif
581 init_menu_lists(menu,&lists,selected,true); 589 init_menu_lists(menu,&lists,selected,true);
582 in_stringlist = ((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID); 590 in_stringlist = ((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID);
583 591
@@ -637,6 +645,10 @@ int do_menu(const struct menu_item_ex *start_menu)
637 else if (action == ACTION_STD_OK) 645 else if (action == ACTION_STD_OK)
638 { 646 {
639 int type; 647 int type;
648#ifdef HAS_BUTTONBAR
649 gui_buttonbar_unset(&buttonbar);
650 gui_buttonbar_draw(&buttonbar);
651#endif
640 selected = get_menu_selection(gui_synclist_get_sel_pos(&lists), menu); 652 selected = get_menu_selection(gui_synclist_get_sel_pos(&lists), menu);
641 temp = menu->submenus[selected]; 653 temp = menu->submenus[selected];
642 if (in_stringlist) 654 if (in_stringlist)
@@ -676,7 +688,7 @@ int do_menu(const struct menu_item_ex *start_menu)
676 case MT_SETTING: 688 case MT_SETTING:
677 { 689 {
678 if (do_setting_from_menu(temp)) 690 if (do_setting_from_menu(temp))
679 init_menu_lists(menu, &lists, 0, true); 691 init_menu_lists(menu, &lists, 0, true);
680 break; 692 break;
681 } 693 }
682 case MT_RETURN_ID: 694 case MT_RETURN_ID:
@@ -700,6 +712,10 @@ int do_menu(const struct menu_item_ex *start_menu)
700 menu_callback(ACTION_EXIT_MENUITEM,temp); 712 menu_callback(ACTION_EXIT_MENUITEM,temp);
701 /* callback was changed, so reload the menu's callback */ 713 /* callback was changed, so reload the menu's callback */
702 get_menu_callback(menu, &menu_callback); 714 get_menu_callback(menu, &menu_callback);
715#ifdef HAS_BUTTONBAR
716 gui_buttonbar_set(&buttonbar, "<<<", "", "");
717 gui_buttonbar_draw(&buttonbar);
718#endif
703 } 719 }
704 else if(default_event_handler(action) == SYS_USB_CONNECTED) 720 else if(default_event_handler(action) == SYS_USB_CONNECTED)
705 ret = MENU_ATTACHED_USB; 721 ret = MENU_ATTACHED_USB;