diff options
author | Nils Wallménius <nils@rockbox.org> | 2007-06-14 20:02:27 +0000 |
---|---|---|
committer | Nils Wallménius <nils@rockbox.org> | 2007-06-14 20:02:27 +0000 |
commit | 5bb7edeb36c3d5d058836da720b32ffc3ccc2ae8 (patch) | |
tree | 6b41f196c421c2d894edb097dc31cac33ce69090 /apps/plugins/vu_meter.c | |
parent | 61cf9b8513517d9844050fecf5dc1c48fe4c065b (diff) | |
download | rockbox-5bb7edeb36c3d5d058836da720b32ffc3ccc2ae8.tar.gz rockbox-5bb7edeb36c3d5d058836da720b32ffc3ccc2ae8.zip |
Replace VU meter menu with a new one using the new menu api, fixes some
problems:
* Up/Down buttons are no longer reversed.
* The menu looks much better with reversed bg/fg colors instead of
inversed.
* Menu uses userfont.
Add the set_bool_options function to the plugin api and bump api
version.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13629 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/vu_meter.c')
-rw-r--r-- | apps/plugins/vu_meter.c | 216 |
1 files changed, 79 insertions, 137 deletions
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c index ae378b07de..64ad8f22b4 100644 --- a/apps/plugins/vu_meter.c +++ b/apps/plugins/vu_meter.c | |||
@@ -28,8 +28,6 @@ PLUGIN_HEADER | |||
28 | #define VUMETER_MENU BUTTON_F1 | 28 | #define VUMETER_MENU BUTTON_F1 |
29 | #define VUMETER_MENU_EXIT BUTTON_F1 | 29 | #define VUMETER_MENU_EXIT BUTTON_F1 |
30 | #define VUMETER_MENU_EXIT2 BUTTON_OFF | 30 | #define VUMETER_MENU_EXIT2 BUTTON_OFF |
31 | #define VUMETER_LEFT BUTTON_LEFT | ||
32 | #define VUMETER_RIGHT BUTTON_RIGHT | ||
33 | #define VUMETER_UP BUTTON_UP | 31 | #define VUMETER_UP BUTTON_UP |
34 | #define VUMETER_DOWN BUTTON_DOWN | 32 | #define VUMETER_DOWN BUTTON_DOWN |
35 | 33 | ||
@@ -39,8 +37,6 @@ PLUGIN_HEADER | |||
39 | #define VUMETER_MENU BUTTON_F1 | 37 | #define VUMETER_MENU BUTTON_F1 |
40 | #define VUMETER_MENU_EXIT BUTTON_F1 | 38 | #define VUMETER_MENU_EXIT BUTTON_F1 |
41 | #define VUMETER_MENU_EXIT2 BUTTON_OFF | 39 | #define VUMETER_MENU_EXIT2 BUTTON_OFF |
42 | #define VUMETER_LEFT BUTTON_LEFT | ||
43 | #define VUMETER_RIGHT BUTTON_RIGHT | ||
44 | #define VUMETER_UP BUTTON_UP | 40 | #define VUMETER_UP BUTTON_UP |
45 | #define VUMETER_DOWN BUTTON_DOWN | 41 | #define VUMETER_DOWN BUTTON_DOWN |
46 | 42 | ||
@@ -52,8 +48,6 @@ PLUGIN_HEADER | |||
52 | #define VUMETER_MENU (BUTTON_MENU | BUTTON_REPEAT) | 48 | #define VUMETER_MENU (BUTTON_MENU | BUTTON_REPEAT) |
53 | #define VUMETER_MENU_EXIT BUTTON_MENU | 49 | #define VUMETER_MENU_EXIT BUTTON_MENU |
54 | #define VUMETER_MENU_EXIT2 BUTTON_OFF | 50 | #define VUMETER_MENU_EXIT2 BUTTON_OFF |
55 | #define VUMETER_LEFT BUTTON_LEFT | ||
56 | #define VUMETER_RIGHT BUTTON_RIGHT | ||
57 | #define VUMETER_UP BUTTON_UP | 51 | #define VUMETER_UP BUTTON_UP |
58 | #define VUMETER_DOWN BUTTON_DOWN | 52 | #define VUMETER_DOWN BUTTON_DOWN |
59 | 53 | ||
@@ -62,10 +56,9 @@ PLUGIN_HEADER | |||
62 | #define VUMETER_QUIT BUTTON_OFF | 56 | #define VUMETER_QUIT BUTTON_OFF |
63 | #define VUMETER_HELP BUTTON_ON | 57 | #define VUMETER_HELP BUTTON_ON |
64 | #define VUMETER_MENU BUTTON_SELECT | 58 | #define VUMETER_MENU BUTTON_SELECT |
59 | #define VUMETER_MENU2 BUTTON_MODE | ||
65 | #define VUMETER_MENU_EXIT BUTTON_SELECT | 60 | #define VUMETER_MENU_EXIT BUTTON_SELECT |
66 | #define VUMETER_MENU_EXIT2 BUTTON_OFF | 61 | #define VUMETER_MENU_EXIT2 BUTTON_OFF |
67 | #define VUMETER_LEFT BUTTON_LEFT | ||
68 | #define VUMETER_RIGHT BUTTON_RIGHT | ||
69 | #define VUMETER_UP BUTTON_UP | 62 | #define VUMETER_UP BUTTON_UP |
70 | #define VUMETER_DOWN BUTTON_DOWN | 63 | #define VUMETER_DOWN BUTTON_DOWN |
71 | 64 | ||
@@ -78,8 +71,6 @@ PLUGIN_HEADER | |||
78 | #define VUMETER_MENU BUTTON_SELECT | 71 | #define VUMETER_MENU BUTTON_SELECT |
79 | #define VUMETER_MENU_EXIT BUTTON_SELECT | 72 | #define VUMETER_MENU_EXIT BUTTON_SELECT |
80 | #define VUMETER_MENU_EXIT2 BUTTON_MENU | 73 | #define VUMETER_MENU_EXIT2 BUTTON_MENU |
81 | #define VUMETER_LEFT BUTTON_LEFT | ||
82 | #define VUMETER_RIGHT BUTTON_RIGHT | ||
83 | #define VUMETER_UP BUTTON_SCROLL_FWD | 74 | #define VUMETER_UP BUTTON_SCROLL_FWD |
84 | #define VUMETER_DOWN BUTTON_SCROLL_BACK | 75 | #define VUMETER_DOWN BUTTON_SCROLL_BACK |
85 | 76 | ||
@@ -89,8 +80,6 @@ PLUGIN_HEADER | |||
89 | #define VUMETER_MENU BUTTON_MENU | 80 | #define VUMETER_MENU BUTTON_MENU |
90 | #define VUMETER_MENU_EXIT BUTTON_MENU | 81 | #define VUMETER_MENU_EXIT BUTTON_MENU |
91 | #define VUMETER_MENU_EXIT2 BUTTON_POWER | 82 | #define VUMETER_MENU_EXIT2 BUTTON_POWER |
92 | #define VUMETER_LEFT BUTTON_LEFT | ||
93 | #define VUMETER_RIGHT BUTTON_RIGHT | ||
94 | #define VUMETER_UP BUTTON_UP | 83 | #define VUMETER_UP BUTTON_UP |
95 | #define VUMETER_DOWN BUTTON_DOWN | 84 | #define VUMETER_DOWN BUTTON_DOWN |
96 | 85 | ||
@@ -100,8 +89,6 @@ PLUGIN_HEADER | |||
100 | #define VUMETER_MENU BUTTON_SELECT | 89 | #define VUMETER_MENU BUTTON_SELECT |
101 | #define VUMETER_MENU_EXIT BUTTON_SELECT | 90 | #define VUMETER_MENU_EXIT BUTTON_SELECT |
102 | #define VUMETER_MENU_EXIT2 BUTTON_POWER | 91 | #define VUMETER_MENU_EXIT2 BUTTON_POWER |
103 | #define VUMETER_LEFT BUTTON_LEFT | ||
104 | #define VUMETER_RIGHT BUTTON_RIGHT | ||
105 | #define VUMETER_UP BUTTON_SCROLL_DOWN | 92 | #define VUMETER_UP BUTTON_SCROLL_DOWN |
106 | #define VUMETER_DOWN BUTTON_SCROLL_UP | 93 | #define VUMETER_DOWN BUTTON_SCROLL_UP |
107 | 94 | ||
@@ -111,8 +98,6 @@ PLUGIN_HEADER | |||
111 | #define VUMETER_MENU BUTTON_SELECT | 98 | #define VUMETER_MENU BUTTON_SELECT |
112 | #define VUMETER_MENU_EXIT BUTTON_SELECT | 99 | #define VUMETER_MENU_EXIT BUTTON_SELECT |
113 | #define VUMETER_MENU_EXIT2 BUTTON_POWER | 100 | #define VUMETER_MENU_EXIT2 BUTTON_POWER |
114 | #define VUMETER_LEFT BUTTON_LEFT | ||
115 | #define VUMETER_RIGHT BUTTON_RIGHT | ||
116 | #define VUMETER_UP BUTTON_UP | 101 | #define VUMETER_UP BUTTON_UP |
117 | #define VUMETER_DOWN BUTTON_DOWN | 102 | #define VUMETER_DOWN BUTTON_DOWN |
118 | 103 | ||
@@ -122,8 +107,6 @@ PLUGIN_HEADER | |||
122 | #define VUMETER_MENU BUTTON_REW | 107 | #define VUMETER_MENU BUTTON_REW |
123 | #define VUMETER_MENU_EXIT BUTTON_REW | 108 | #define VUMETER_MENU_EXIT BUTTON_REW |
124 | #define VUMETER_MENU_EXIT2 BUTTON_POWER | 109 | #define VUMETER_MENU_EXIT2 BUTTON_POWER |
125 | #define VUMETER_LEFT BUTTON_LEFT | ||
126 | #define VUMETER_RIGHT BUTTON_RIGHT | ||
127 | #define VUMETER_UP BUTTON_SCROLL_UP | 110 | #define VUMETER_UP BUTTON_SCROLL_UP |
128 | #define VUMETER_DOWN BUTTON_SCROLL_DOWN | 111 | #define VUMETER_DOWN BUTTON_SCROLL_DOWN |
129 | 112 | ||
@@ -171,8 +154,8 @@ const int digital_lead = (LCD_WIDTH - (((int)(LCD_WIDTH / 11))*11) ) / 2; | |||
171 | 154 | ||
172 | const int digital_block_height = (LCD_HEIGHT - 54) / 2 ; | 155 | const int digital_block_height = (LCD_HEIGHT - 54) / 2 ; |
173 | 156 | ||
174 | #define ANALOG 1 /* The two meter types */ | 157 | #define ANALOG 0 /* The two meter types */ |
175 | #define DIGITAL 2 | 158 | #define DIGITAL 1 |
176 | 159 | ||
177 | int left_needle_top_y; | 160 | int left_needle_top_y; |
178 | int left_needle_top_x; | 161 | int left_needle_top_x; |
@@ -360,135 +343,88 @@ void change_volume(int delta) { | |||
360 | } | 343 | } |
361 | } | 344 | } |
362 | 345 | ||
363 | void change_settings(void) | 346 | static bool vu_meter_menu(void) |
364 | { | 347 | { |
365 | int selected_setting=0; | 348 | int selection; |
366 | bool quit=false; | 349 | bool menu_quit = false; |
367 | while(!quit) | 350 | bool exit = false; |
368 | { | 351 | |
369 | rb->lcd_clear_display(); | 352 | MENUITEM_STRINGLIST(menu,"VU Meter Menu",NULL,"Meter Type","Scale", |
370 | 353 | "Minimeters","Decay Speed","Quit"); | |
371 | rb->lcd_putsxy(33, 0, "Settings"); | 354 | |
372 | 355 | static const struct opt_items meter_type_option[2] = { | |
373 | rb->lcd_putsxy(0, 8, "Meter type:"); | 356 | { "Analog", -1 }, |
374 | if(settings.meter_type==ANALOG) | 357 | { "Digital", -1 }, |
375 | rb->lcd_putsxy(67, 8, "Analog"); | 358 | }; |
376 | else | 359 | |
377 | rb->lcd_putsxy(67, 8, "Digital"); | 360 | static const struct opt_items decay_speed_option[7] = { |
378 | 361 | { "No Decay", -1 }, | |
379 | if(settings.meter_type==ANALOG) { | 362 | { "Very Fast", -1 }, |
380 | rb->lcd_putsxy(0, 16, "Scale:"); | 363 | { "Fast", -1 }, |
381 | if(settings.analog_use_db_scale) | 364 | { "Medium", -1 }, |
382 | rb->lcd_putsxy(36, 16, "dBfs"); | 365 | { "Medium-Slow", -1 }, |
383 | else | 366 | { "Slow", -1 }, |
384 | rb->lcd_putsxy(36, 16, "Linear"); | 367 | { "Very Slow", -1 }, |
385 | 368 | }; | |
386 | rb->lcd_putsxy(0, 24, "Minimeters:"); | 369 | |
387 | if(settings.analog_minimeters) | 370 | while (!menu_quit) { |
388 | rb->lcd_putsxy(65, 24, "On"); | 371 | switch(rb->do_menu(&menu, &selection)) |
389 | else | ||
390 | rb->lcd_putsxy(65, 24, "Off"); | ||
391 | |||
392 | rb->lcd_putsxy(0, 32, "Decay Speed:"); | ||
393 | switch(settings.analog_decay) { | ||
394 | case 0: rb->lcd_putsxy(10, 40, "No Decay"); break; | ||
395 | case 1: rb->lcd_putsxy(10, 40, "Very Fast"); break; | ||
396 | case 2: rb->lcd_putsxy(10, 40, "Fast"); break; | ||
397 | case 3: rb->lcd_putsxy(10, 40, "Medium"); break; | ||
398 | case 4: rb->lcd_putsxy(10, 40, "Medium-Slow"); break; | ||
399 | case 5: rb->lcd_putsxy(10, 40, "Slow"); break; | ||
400 | case 6: rb->lcd_putsxy(10, 40, "Very Slow"); break; | ||
401 | } | ||
402 | } | ||
403 | else { | ||
404 | rb->lcd_putsxy(0, 16, "Scale:"); | ||
405 | if(settings.digital_use_db_scale) | ||
406 | rb->lcd_putsxy(36, 16, "dBfs"); | ||
407 | else | ||
408 | rb->lcd_putsxy(36, 16, "Linear"); | ||
409 | |||
410 | rb->lcd_putsxy(0, 24, "Minimeters:"); | ||
411 | if(settings.digital_minimeters) | ||
412 | rb->lcd_putsxy(65, 24, "On"); | ||
413 | else | ||
414 | rb->lcd_putsxy(65, 24, "Off"); | ||
415 | |||
416 | rb->lcd_putsxy(0, 32, "Decay Speed:"); | ||
417 | switch(settings.digital_decay) { | ||
418 | case 0: rb->lcd_putsxy(10, 40, "No Decay"); break; | ||
419 | case 1: rb->lcd_putsxy(10, 40, "Very Fast"); break; | ||
420 | case 2: rb->lcd_putsxy(10, 40, "Fast"); break; | ||
421 | case 3: rb->lcd_putsxy(10, 40, "Medium"); break; | ||
422 | case 4: rb->lcd_putsxy(10, 40, "Medium-Slow"); break; | ||
423 | case 5: rb->lcd_putsxy(10, 40, "Slow"); break; | ||
424 | case 6: rb->lcd_putsxy(10, 40, "Very Slow"); break; | ||
425 | } | ||
426 | } | ||
427 | |||
428 | rb->lcd_set_drawmode(DRMODE_COMPLEMENT); | ||
429 | rb->lcd_fillrect(0, selected_setting*8+8,111,8); | ||
430 | rb->lcd_set_drawmode(DRMODE_SOLID); | ||
431 | rb->lcd_update(); | ||
432 | |||
433 | switch(rb->button_get_w_tmo(1)) | ||
434 | { | 372 | { |
435 | case VUMETER_MENU_EXIT: | 373 | case 0: |
436 | case VUMETER_MENU_EXIT2: | 374 | rb->set_option("Meter Type", &settings.meter_type, INT, |
437 | quit = true; | 375 | meter_type_option, 2, NULL); |
438 | break; | 376 | break; |
439 | 377 | ||
440 | case VUMETER_LEFT: | 378 | case 1: |
441 | if(selected_setting==0) | 379 | if(settings.meter_type==ANALOG) |
442 | settings.meter_type == DIGITAL ? settings.meter_type = ANALOG : settings.meter_type++; | 380 | { |
443 | if(settings.meter_type==ANALOG) { | 381 | rb->set_bool_options("Scale", &settings.analog_use_db_scale, |
444 | if(selected_setting==1) | 382 | "dBfs", -1, "Linear", -1, NULL); |
445 | settings.analog_use_db_scale = !settings.analog_use_db_scale; | ||
446 | if(selected_setting==2) | ||
447 | settings.analog_minimeters = !settings.analog_minimeters; | ||
448 | if(selected_setting==3) | ||
449 | settings.analog_decay == 0 ? settings.analog_decay = 6 : settings.analog_decay--; | ||
450 | } | 383 | } |
451 | else { | 384 | else |
452 | if(selected_setting==1) | 385 | { |
453 | settings.digital_use_db_scale = !settings.digital_use_db_scale; | 386 | rb->set_bool_options("Scale", &settings.digital_use_db_scale, |
454 | if(selected_setting==2) | 387 | "dBfs", -1, "Linear", -1, NULL); |
455 | settings.digital_minimeters = !settings.digital_minimeters; | ||
456 | if(selected_setting==3) | ||
457 | settings.digital_decay == 0 ? settings.digital_decay = 6 : settings.digital_decay--; | ||
458 | } | 388 | } |
459 | break; | 389 | break; |
460 | 390 | ||
461 | case VUMETER_RIGHT: | 391 | case 2: |
462 | if(selected_setting==0) | 392 | if(settings.meter_type==ANALOG) |
463 | settings.meter_type == DIGITAL ? settings.meter_type = ANALOG : settings.meter_type++; | 393 | { |
464 | if(settings.meter_type==ANALOG) { | 394 | rb->set_bool("Enable Minimeters", |
465 | if(selected_setting==1) | 395 | &settings.analog_minimeters); |
466 | settings.analog_use_db_scale = !settings.analog_use_db_scale; | ||
467 | if(selected_setting==2) | ||
468 | settings.analog_minimeters = !settings.analog_minimeters; | ||
469 | if(selected_setting==3) | ||
470 | settings.analog_decay == 6 ? settings.analog_decay = 0 : settings.analog_decay++; | ||
471 | } | 396 | } |
472 | else { | 397 | else |
473 | if(selected_setting==1) | 398 | { |
474 | settings.digital_use_db_scale = !settings.digital_use_db_scale; | 399 | rb->set_bool("Enable Minimeters", |
475 | if(selected_setting==2) | 400 | &settings.digital_minimeters); |
476 | settings.digital_minimeters = !settings.digital_minimeters; | ||
477 | if(selected_setting==3) | ||
478 | settings.digital_decay == 6 ? settings.digital_decay = 0 : settings.digital_decay++; | ||
479 | } | 401 | } |
480 | break; | 402 | break; |
481 | 403 | ||
482 | case VUMETER_UP: | 404 | case 3: |
483 | case VUMETER_UP|BUTTON_REPEAT: | 405 | if(settings.meter_type==ANALOG) |
484 | selected_setting == 3 ? selected_setting=0 : selected_setting++; | 406 | { |
407 | rb->set_option("Decay Speed", &settings.analog_decay, INT, | ||
408 | decay_speed_option, 7, NULL); | ||
409 | } | ||
410 | else | ||
411 | { | ||
412 | rb->set_option("Decay Speed", &settings.digital_decay, INT, | ||
413 | decay_speed_option, 7, NULL); | ||
414 | } | ||
485 | break; | 415 | break; |
486 | 416 | ||
487 | case VUMETER_DOWN: | 417 | case 4: |
488 | case VUMETER_DOWN|BUTTON_REPEAT: | 418 | exit = true; |
489 | selected_setting == 0 ? selected_setting=3 : selected_setting--; | 419 | /* fall through to exit the menu */ |
420 | default: | ||
421 | menu_quit = true; | ||
422 | break; | ||
490 | } | 423 | } |
491 | } | 424 | } |
425 | /* the menu uses the userfont, set it back to sysfont */ | ||
426 | rb->lcd_setfont(FONT_SYSFIXED); | ||
427 | return exit; | ||
492 | } | 428 | } |
493 | 429 | ||
494 | void draw_analog_minimeters(void) { | 430 | void draw_analog_minimeters(void) { |
@@ -708,11 +644,17 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) { | |||
708 | break; | 644 | break; |
709 | 645 | ||
710 | case VUMETER_MENU: | 646 | case VUMETER_MENU: |
647 | |||
648 | #ifdef VUMETER_MENU2 | ||
649 | case VUMETER_MENU2: | ||
650 | #endif | ||
651 | |||
711 | #ifdef VUMETER_MENU_PRE | 652 | #ifdef VUMETER_MENU_PRE |
712 | if (lastbutton != VUMETER_MENU_PRE) | 653 | if (lastbutton != VUMETER_MENU_PRE) |
713 | break; | 654 | break; |
714 | #endif | 655 | #endif |
715 | change_settings(); | 656 | if(vu_meter_menu()) |
657 | return PLUGIN_OK; | ||
716 | break; | 658 | break; |
717 | 659 | ||
718 | case VUMETER_UP: | 660 | case VUMETER_UP: |