diff options
Diffstat (limited to 'apps/menus/recording_menu.c')
-rw-r--r-- | apps/menus/recording_menu.c | 566 |
1 files changed, 142 insertions, 424 deletions
diff --git a/apps/menus/recording_menu.c b/apps/menus/recording_menu.c index 8a26be03e9..9dcdcf5d3e 100644 --- a/apps/menus/recording_menu.c +++ b/apps/menus/recording_menu.c | |||
@@ -63,7 +63,10 @@ | |||
63 | #include "action.h" | 63 | #include "action.h" |
64 | #include "recording.h" | 64 | #include "recording.h" |
65 | #include "sound_menu.h" | 65 | #include "sound_menu.h" |
66 | 66 | #include "option_select.h" | |
67 | #include "settings_list.h" | ||
68 | #include "list.h" | ||
69 | #include "viewport.h" | ||
67 | 70 | ||
68 | static bool no_source_in_menu = false; | 71 | static bool no_source_in_menu = false; |
69 | int recmenu_callback(int action,const struct menu_item_ex *this_item); | 72 | int recmenu_callback(int action,const struct menu_item_ex *this_item); |
@@ -381,477 +384,192 @@ enum trigger_menu_option | |||
381 | TRIG_OPTION_COUNT, | 384 | TRIG_OPTION_COUNT, |
382 | }; | 385 | }; |
383 | 386 | ||
384 | static char* create_thres_str(int threshold, long *voice_id) | 387 | static enum themable_icons trigger_get_icon(int selected_item, void * data) |
385 | { | 388 | { |
386 | static char retval[6]; | 389 | (void)data; |
387 | if (threshold < 0) { | 390 | if ((selected_item % 2) == 0) /* header */ |
388 | if (threshold < -88) { | 391 | return Icon_Menu_setting; |
389 | snprintf (retval, sizeof retval, "%s", str(LANG_DB_INF)); | 392 | return Icon_NOICON; |
390 | if(voice_id) | ||
391 | *voice_id = LANG_DB_INF; | ||
392 | } else { | ||
393 | snprintf (retval, sizeof retval, "%ddb", threshold + 1); | ||
394 | if(voice_id) | ||
395 | *voice_id = TALK_ID(threshold + 1, UNIT_DB); | ||
396 | } | ||
397 | } else { | ||
398 | snprintf (retval, sizeof retval, "%d%%", threshold); | ||
399 | if(voice_id) | ||
400 | *voice_id = TALK_ID(threshold, UNIT_PERCENT); | ||
401 | } | ||
402 | return retval; | ||
403 | } | 393 | } |
404 | 394 | ||
405 | #define INF_DB (-89) | 395 | static char * trigger_get_name(int selected_item, void * data, |
406 | static void change_threshold(int *threshold, int change) | 396 | char * buffer, size_t buffer_len) |
407 | { | 397 | { |
408 | if (global_settings.peak_meter_dbfs) { | 398 | const struct settings_list **settings = |
409 | if (*threshold >= 0) { | 399 | (const struct settings_list **)data; |
410 | int db = (calc_db(*threshold * MAX_PEAK / 100) - 9000) / 100; | 400 | const struct settings_list *s = settings[selected_item / 2]; |
411 | *threshold = db; | 401 | if ((selected_item % 2) == 0) /* header */ |
412 | } | 402 | return P2STR(ID2P(s->lang_id)); |
413 | *threshold += change; | 403 | else |
414 | if (*threshold > -1) { | 404 | { |
415 | *threshold = INF_DB; | 405 | int temp; |
416 | } else if (*threshold < INF_DB) { | 406 | temp = option_value_as_int(s); |
417 | *threshold = -1; | 407 | if ((selected_item / 2 == START_THRESHOLD || |
418 | } | 408 | selected_item / 2 == STOP_THRESHOLD) && |
419 | } else { | 409 | temp == 0) |
420 | if (*threshold < 0) { | 410 | { |
421 | *threshold = peak_meter_db2sample(*threshold * 100) * 100 / MAX_PEAK; | 411 | return str(LANG_OFF); |
422 | } | ||
423 | *threshold += change; | ||
424 | if (*threshold > 100) { | ||
425 | *threshold = 0; | ||
426 | } else if (*threshold < 0) { | ||
427 | *threshold = 100; | ||
428 | } | 412 | } |
413 | return option_get_valuestring(s, buffer, buffer_len, temp); | ||
429 | } | 414 | } |
430 | } | 415 | } |
431 | 416 | static void trigger_speak_item(const struct settings_list *s, bool title) | |
432 | /** | ||
433 | * Displays a menu for editing the trigger settings. | ||
434 | */ | ||
435 | bool rectrigger(void) | ||
436 | { | 417 | { |
437 | int exit_request = false; | 418 | int temp; |
438 | enum trigger_menu_option selected = TRIGGER_MODE; | 419 | if (!global_settings.talk_menu) |
439 | bool retval = false; | 420 | return; |
440 | int old_x_margin[NB_SCREENS]; | 421 | temp = option_value_as_int(s); |
441 | int old_y_margin[NB_SCREENS]; | 422 | if (title) |
442 | 423 | talk_id(s->lang_id, false); | |
443 | #define TRIGGER_MODE_COUNT 3 | 424 | option_talk_value(s, temp, title?true:false); |
444 | static const unsigned char *trigger_modes[] = { | 425 | } |
445 | ID2P(LANG_OFF), | 426 | int rectrigger(void) |
446 | ID2P(LANG_RECORD_TRIG_NOREARM), | 427 | { |
447 | ID2P(LANG_REPEAT) | 428 | struct viewport vp[NB_SCREENS]; |
448 | }; | 429 | struct gui_synclist lists; |
449 | 430 | int i, action = ACTION_REDRAW; | |
450 | #define PRERECORD_TIMES_COUNT 31 | 431 | bool done = false, changed = true; |
451 | static const struct opt_items prerecord_times[] = { | 432 | const struct settings_list *settings[TRIG_OPTION_COUNT]; |
452 | { STR(LANG_OFF) }, | 433 | |
453 | #define T(x) { (unsigned char *)(#x "s"), TALK_ID(x, UNIT_SEC) } | 434 | int pm_y[NB_SCREENS]; |
454 | T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(9), T(10), | 435 | int trig_xpos[NB_SCREENS]; |
455 | T(11), T(12), T(13), T(14), T(15), T(16), T(17), T(18), T(19), T(20), | 436 | int trig_ypos[NB_SCREENS]; |
456 | T(21), T(22), T(23), T(24), T(25), T(26), T(27), T(28), T(29), T(30), | 437 | int trig_width[NB_SCREENS]; |
457 | #undef T | 438 | |
458 | }; | 439 | int old_start_thres_db = global_settings.rec_start_thres_db; |
459 | 440 | int old_start_thres_linear = global_settings.rec_start_thres_linear; | |
460 | #define TRIGGER_TYPE_COUNT 3 | ||
461 | static const unsigned char *trigger_types[] = { | ||
462 | ID2P(LANG_RECORD_TRIGGER_STOP), | ||
463 | ID2P(LANG_PAUSE), | ||
464 | ID2P(LANG_RECORD_TRIGGER_NEWFILESTP), | ||
465 | }; | ||
466 | |||
467 | static const unsigned char *option_name[] = { | ||
468 | [TRIGGER_MODE] = ID2P(LANG_RECORD_TRIGGER), | ||
469 | [TRIGGER_TYPE] = ID2P(LANG_RECORD_TRIGGER_TYPE), | ||
470 | [PRERECORD_TIME] = ID2P(LANG_RECORD_PRERECORD_TIME), | ||
471 | [START_THRESHOLD] = ID2P(LANG_RECORD_START_THRESHOLD), | ||
472 | [START_DURATION] = ID2P(LANG_MIN_DURATION), | ||
473 | [STOP_THRESHOLD] = ID2P(LANG_RECORD_STOP_THRESHOLD), | ||
474 | [STOP_POSTREC] = ID2P(LANG_MIN_DURATION), | ||
475 | [STOP_GAP] = ID2P(LANG_RECORD_STOP_GAP) | ||
476 | }; | ||
477 | |||
478 | int old_start_thres = global_settings.rec_start_thres; | ||
479 | int old_start_duration = global_settings.rec_start_duration; | 441 | int old_start_duration = global_settings.rec_start_duration; |
480 | int old_prerecord_time = global_settings.rec_prerecord_time; | 442 | int old_prerecord_time = global_settings.rec_prerecord_time; |
481 | int old_stop_thres = global_settings.rec_stop_thres; | 443 | int old_stop_thres_db = global_settings.rec_stop_thres_db; |
444 | int old_stop_thres_linear = global_settings.rec_stop_thres_linear; | ||
482 | int old_stop_postrec = global_settings.rec_stop_postrec; | 445 | int old_stop_postrec = global_settings.rec_stop_postrec; |
483 | int old_stop_gap = global_settings.rec_stop_gap; | 446 | int old_stop_gap = global_settings.rec_stop_gap; |
484 | int old_trigger_mode = global_settings.rec_trigger_mode; | 447 | int old_trigger_mode = global_settings.rec_trigger_mode; |
485 | int old_trigger_type = global_settings.rec_trigger_type; | 448 | int old_trigger_type = global_settings.rec_trigger_type; |
486 | 449 | ||
487 | int offset[NB_SCREENS]; | ||
488 | int option_lines[NB_SCREENS]; | ||
489 | int w, h, i; | ||
490 | int stat_height = gui_statusbar_height(); | ||
491 | int pm_y[NB_SCREENS]; | ||
492 | |||
493 | int trig_xpos[NB_SCREENS]; | ||
494 | int trig_ypos[NB_SCREENS]; | ||
495 | int trig_width[NB_SCREENS]; | ||
496 | |||
497 | bool say_field = true, say_value = true; | ||
498 | |||
499 | FOR_NB_SCREENS(i) | 450 | FOR_NB_SCREENS(i) |
500 | { | 451 | { |
501 | offset[i] = 0; | 452 | screens[i].clear_display(); |
453 | screens[i].update(); | ||
454 | viewport_set_defaults(&vp[i], i); | ||
455 | vp[i].height -= SYSFONT_HEIGHT*2; | ||
502 | trig_xpos[i] = 0; | 456 | trig_xpos[i] = 0; |
503 | trig_ypos[i] = screens[i].height - stat_height - TRIG_HEIGHT; | 457 | trig_ypos[i] = vp[i].y + vp[i].height; |
504 | pm_y[i] = screens[i].height - stat_height; | 458 | pm_y[i] = screens[i].height - SYSFONT_HEIGHT; |
505 | trig_width[i] = screens[i].width; | 459 | trig_width[i] = screens[i].width; |
506 | } | 460 | } |
507 | 461 | /* TODO: what to do if there is < 4 lines on the screen? */ | |
462 | |||
463 | settings[TRIGGER_MODE] = | ||
464 | find_setting(&global_settings.rec_trigger_mode, NULL); | ||
465 | settings[TRIGGER_TYPE] = | ||
466 | find_setting(&global_settings.rec_trigger_type, NULL); | ||
467 | settings[PRERECORD_TIME] = | ||
468 | find_setting(&global_settings.rec_prerecord_time, NULL); | ||
469 | settings[START_DURATION] = | ||
470 | find_setting(&global_settings.rec_start_duration, NULL); | ||
471 | settings[STOP_POSTREC] = | ||
472 | find_setting(&global_settings.rec_stop_postrec, NULL); | ||
473 | settings[STOP_GAP] = | ||
474 | find_setting(&global_settings.rec_stop_gap, NULL); | ||
475 | if (global_settings.peak_meter_dbfs) /* show the dB settings */ | ||
476 | { | ||
477 | settings[START_THRESHOLD] = | ||
478 | find_setting(&global_settings.rec_start_thres_db, NULL); | ||
479 | settings[STOP_THRESHOLD] = | ||
480 | find_setting(&global_settings.rec_stop_thres_db, NULL); | ||
481 | } | ||
482 | else | ||
483 | { | ||
484 | settings[START_THRESHOLD] = | ||
485 | find_setting(&global_settings.rec_start_thres_linear, NULL); | ||
486 | settings[STOP_THRESHOLD] = | ||
487 | find_setting(&global_settings.rec_stop_thres_linear, NULL); | ||
488 | } | ||
489 | gui_synclist_init(&lists, trigger_get_name, settings, false, 2, vp); | ||
490 | gui_synclist_set_nb_items(&lists, TRIG_OPTION_COUNT*2); | ||
491 | gui_synclist_set_icon_callback(&lists, trigger_get_icon); | ||
508 | /* restart trigger with new values */ | 492 | /* restart trigger with new values */ |
509 | settings_apply_trigger(); | 493 | settings_apply_trigger(); |
510 | peak_meter_trigger (global_settings.rec_trigger_mode != TRIG_MODE_OFF); | 494 | peak_meter_trigger (global_settings.rec_trigger_mode != TRIG_MODE_OFF); |
495 | |||
496 | trigger_speak_item(settings[0], true); | ||
511 | 497 | ||
512 | FOR_NB_SCREENS(i) | 498 | while (!done) |
513 | { | 499 | { |
514 | screens[i].clear_display(); | 500 | if (changed) |
515 | |||
516 | old_x_margin[i] = screens[i].getxmargin(); | ||
517 | old_y_margin[i] = screens[i].getymargin(); | ||
518 | if(global_settings.statusbar) | ||
519 | screens[i].setmargins(0, STATUSBAR_HEIGHT); | ||
520 | else | ||
521 | screens[i].setmargins(0, 0); | ||
522 | |||
523 | screens[i].getstringsize("M", &w, &h); | ||
524 | |||
525 | // 16 pixels are reserved for peak meter and trigger status | ||
526 | option_lines[i] = MIN(((screens[i].height) - | ||
527 | stat_height - 16)/h, | ||
528 | TRIG_OPTION_COUNT); | ||
529 | } | ||
530 | |||
531 | while (!exit_request) { | ||
532 | int button, k; | ||
533 | const char *str; | ||
534 | char option_value[TRIG_OPTION_COUNT][16]; | ||
535 | |||
536 | snprintf( | ||
537 | option_value[TRIGGER_MODE], | ||
538 | sizeof option_value[TRIGGER_MODE], | ||
539 | "%s", | ||
540 | P2STR(trigger_modes[global_settings.rec_trigger_mode])); | ||
541 | |||
542 | snprintf( | ||
543 | option_value[TRIGGER_TYPE], | ||
544 | sizeof option_value[TRIGGER_TYPE], | ||
545 | "%s", | ||
546 | P2STR(trigger_types[global_settings.rec_trigger_type])); | ||
547 | |||
548 | snprintf ( | ||
549 | option_value[PRERECORD_TIME], | ||
550 | sizeof option_value[PRERECORD_TIME], | ||
551 | "%s", | ||
552 | P2STR(prerecord_times[global_settings.rec_prerecord_time].string)); | ||
553 | |||
554 | /* due to value range shift (peak_meter_define_trigger) -1 is 0db */ | ||
555 | if (global_settings.rec_start_thres == -1) { | ||
556 | str = str(LANG_OFF); | ||
557 | } else { | ||
558 | str = create_thres_str(global_settings.rec_start_thres, NULL); | ||
559 | } | ||
560 | snprintf( | ||
561 | option_value[START_THRESHOLD], | ||
562 | sizeof option_value[START_THRESHOLD], | ||
563 | "%s", | ||
564 | str); | ||
565 | |||
566 | snprintf( | ||
567 | option_value[START_DURATION], | ||
568 | sizeof option_value[START_DURATION], | ||
569 | "%s", | ||
570 | trig_durations[global_settings.rec_start_duration].string); | ||
571 | |||
572 | if (global_settings.rec_stop_thres <= INF_DB) { | ||
573 | str = str(LANG_OFF); | ||
574 | } else { | ||
575 | str = create_thres_str(global_settings.rec_stop_thres, NULL); | ||
576 | } | ||
577 | snprintf( | ||
578 | option_value[STOP_THRESHOLD], | ||
579 | sizeof option_value[STOP_THRESHOLD], | ||
580 | "%s", | ||
581 | str); | ||
582 | |||
583 | snprintf( | ||
584 | option_value[STOP_POSTREC], | ||
585 | sizeof option_value[STOP_POSTREC], | ||
586 | "%s", | ||
587 | trig_durations[global_settings.rec_stop_postrec].string); | ||
588 | |||
589 | snprintf( | ||
590 | option_value[STOP_GAP], | ||
591 | sizeof option_value[STOP_GAP], | ||
592 | "%s", | ||
593 | trig_durations[global_settings.rec_stop_gap].string); | ||
594 | |||
595 | FOR_NB_SCREENS(i) | ||
596 | { | 501 | { |
597 | screens[i].set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | 502 | gui_synclist_draw(&lists); |
598 | screens[i].fillrect(0, stat_height, screens[i].width, | 503 | gui_syncstatusbar_draw(&statusbars, true); |
599 | screens[i].height - stat_height); | 504 | peak_meter_trigger(global_settings.rec_trigger_mode!=TRIG_OFF); |
600 | screens[i].set_drawmode(DRMODE_SOLID); | 505 | settings_apply_trigger(); |
506 | changed = false; | ||
601 | } | 507 | } |
602 | 508 | ||
603 | gui_syncstatusbar_draw(&statusbars, true); | ||
604 | |||
605 | /* reselect FONT_SYSFONT as status_draw has changed the font */ | ||
606 | /*lcd_setfont(FONT_SYSFIXED);*/ | ||
607 | |||
608 | FOR_NB_SCREENS(i) | ||
609 | { | ||
610 | for (k = 0; k < option_lines[i]; k++) { | ||
611 | int x, y; | ||
612 | |||
613 | str = P2STR(option_name[k + offset[i]]); | ||
614 | screens[i].putsxy((option_lines[i] < TRIG_OPTION_COUNT) ? 5 : 0, | ||
615 | stat_height + k * h, str); | ||
616 | |||
617 | str = option_value[k + offset[i]]; | ||
618 | screens[i].getstringsize(str, &w, &h); | ||
619 | y = stat_height + k * h; | ||
620 | x = screens[i].width - w; | ||
621 | screens[i].putsxy(x, y, str); | ||
622 | if ((int)selected == (k + offset[i])) { | ||
623 | screens[i].set_drawmode(DRMODE_COMPLEMENT); | ||
624 | screens[i].fillrect(x, y, w, h); | ||
625 | screens[i].set_drawmode(DRMODE_SOLID); | ||
626 | } | ||
627 | } | ||
628 | if (option_lines[i] < TRIG_OPTION_COUNT) | ||
629 | gui_scrollbar_draw(&screens[i], 0, stat_height, | ||
630 | 4, screens[i].height - 16 - stat_height, | ||
631 | TRIG_OPTION_COUNT, offset[i], offset[i] + option_lines[i], | ||
632 | VERTICAL); | ||
633 | } | ||
634 | |||
635 | bool enqueue = false; | ||
636 | if(say_field) { | ||
637 | talk_id(P2ID(option_name[selected]), enqueue); | ||
638 | enqueue = true; | ||
639 | } | ||
640 | if(say_value) { | ||
641 | long id; | ||
642 | switch(selected) { | ||
643 | case TRIGGER_MODE: | ||
644 | id = P2ID(trigger_modes[global_settings.rec_trigger_mode]); | ||
645 | break; | ||
646 | case TRIGGER_TYPE: | ||
647 | id = P2ID(trigger_types[global_settings.rec_trigger_type]); | ||
648 | break; | ||
649 | case PRERECORD_TIME: | ||
650 | id = prerecord_times[global_settings.rec_prerecord_time] | ||
651 | .voice_id; | ||
652 | break; | ||
653 | case START_THRESHOLD: | ||
654 | if (global_settings.rec_start_thres == -1) | ||
655 | id = LANG_OFF; | ||
656 | else create_thres_str(global_settings.rec_start_thres, &id); | ||
657 | break; | ||
658 | case START_DURATION: | ||
659 | id = trig_durations[global_settings.rec_start_duration] | ||
660 | .voice_id; | ||
661 | break; | ||
662 | case STOP_THRESHOLD: | ||
663 | if (global_settings.rec_stop_thres <= INF_DB) | ||
664 | id = LANG_OFF; | ||
665 | else create_thres_str(global_settings.rec_stop_thres, &id); | ||
666 | break; | ||
667 | case STOP_POSTREC: | ||
668 | id = trig_durations[global_settings.rec_stop_postrec].voice_id; | ||
669 | break; | ||
670 | case STOP_GAP: | ||
671 | id = trig_durations[global_settings.rec_stop_gap].voice_id; | ||
672 | break; | ||
673 | case TRIG_OPTION_COUNT: | ||
674 | // avoid compiler warnings | ||
675 | break; | ||
676 | }; | ||
677 | talk_id(id, enqueue); | ||
678 | } | ||
679 | say_field = say_value = false; | ||
680 | |||
681 | peak_meter_draw_trig(trig_xpos, trig_ypos, trig_width, NB_SCREENS); | 509 | peak_meter_draw_trig(trig_xpos, trig_ypos, trig_width, NB_SCREENS); |
682 | button = peak_meter_draw_get_btn(0, pm_y, 8, NB_SCREENS); | 510 | action = peak_meter_draw_get_btn(CONTEXT_SETTINGS_RECTRIGGER, 0, pm_y, |
683 | 511 | SYSFONT_HEIGHT, NB_SCREENS); | |
684 | FOR_NB_SCREENS(i) | 512 | FOR_NB_SCREENS(i) |
685 | screens[i].update(); | 513 | screens[i].update(); |
686 | 514 | i = gui_synclist_get_sel_pos(&lists); | |
687 | switch (button) { | 515 | switch (action) |
516 | { | ||
688 | case ACTION_STD_CANCEL: | 517 | case ACTION_STD_CANCEL: |
689 | gui_syncsplash(50, str(LANG_CANCEL)); | 518 | gui_syncsplash(HZ/2, str(LANG_CANCEL)); |
690 | global_settings.rec_start_thres = old_start_thres; | 519 | global_settings.rec_start_thres_db = old_start_thres_db; |
520 | global_settings.rec_start_thres_linear = old_start_thres_linear; | ||
691 | global_settings.rec_start_duration = old_start_duration; | 521 | global_settings.rec_start_duration = old_start_duration; |
692 | global_settings.rec_prerecord_time = old_prerecord_time; | 522 | global_settings.rec_prerecord_time = old_prerecord_time; |
693 | global_settings.rec_stop_thres = old_stop_thres; | 523 | global_settings.rec_stop_thres_db = old_stop_thres_db; |
524 | global_settings.rec_stop_thres_linear = old_stop_thres_linear; | ||
694 | global_settings.rec_stop_postrec = old_stop_postrec; | 525 | global_settings.rec_stop_postrec = old_stop_postrec; |
695 | global_settings.rec_stop_gap = old_stop_gap; | 526 | global_settings.rec_stop_gap = old_stop_gap; |
696 | global_settings.rec_trigger_mode = old_trigger_mode; | 527 | global_settings.rec_trigger_mode = old_trigger_mode; |
697 | global_settings.rec_trigger_type = old_trigger_type; | 528 | global_settings.rec_trigger_type = old_trigger_type; |
698 | exit_request = true; | ||
699 | break; | ||
700 | |||
701 | case ACTION_REC_PAUSE: | ||
702 | exit_request = true; | ||
703 | break; | ||
704 | |||
705 | case ACTION_STD_PREV: | ||
706 | selected += TRIG_OPTION_COUNT - 1; | ||
707 | selected %= TRIG_OPTION_COUNT; | ||
708 | FOR_NB_SCREENS(i) | ||
709 | { | ||
710 | offset[i] = MIN(offset[i], (int)selected); | ||
711 | offset[i] = MAX(offset[i], (int)selected - option_lines[i] + 1); | ||
712 | } | ||
713 | say_field = say_value = true; | ||
714 | break; | ||
715 | |||
716 | case ACTION_STD_NEXT: | ||
717 | selected ++; | ||
718 | selected %= TRIG_OPTION_COUNT; | ||
719 | FOR_NB_SCREENS(i) | ||
720 | { | ||
721 | offset[i] = MIN(offset[i], (int)selected); | ||
722 | offset[i] = MAX(offset[i], (int)selected - option_lines[i] + 1); | ||
723 | } | ||
724 | say_field = say_value = true; | ||
725 | break; | ||
726 | |||
727 | case ACTION_SETTINGS_INC: | ||
728 | switch (selected) { | ||
729 | case TRIGGER_MODE: | ||
730 | global_settings.rec_trigger_mode ++; | ||
731 | global_settings.rec_trigger_mode %= TRIGGER_MODE_COUNT; | ||
732 | break; | ||
733 | |||
734 | case TRIGGER_TYPE: | ||
735 | global_settings.rec_trigger_type ++; | ||
736 | global_settings.rec_trigger_type %= TRIGGER_TYPE_COUNT; | ||
737 | break; | ||
738 | |||
739 | case PRERECORD_TIME: | ||
740 | global_settings.rec_prerecord_time ++; | ||
741 | global_settings.rec_prerecord_time %= PRERECORD_TIMES_COUNT; | ||
742 | break; | ||
743 | |||
744 | case START_THRESHOLD: | ||
745 | change_threshold(&global_settings.rec_start_thres, 1); | ||
746 | break; | ||
747 | |||
748 | case START_DURATION: | ||
749 | global_settings.rec_start_duration ++; | ||
750 | global_settings.rec_start_duration %= TRIG_DURATION_COUNT; | ||
751 | break; | ||
752 | |||
753 | case STOP_THRESHOLD: | ||
754 | change_threshold(&global_settings.rec_stop_thres, 1); | ||
755 | break; | ||
756 | |||
757 | case STOP_POSTREC: | ||
758 | global_settings.rec_stop_postrec ++; | ||
759 | global_settings.rec_stop_postrec %= TRIG_DURATION_COUNT; | ||
760 | break; | ||
761 | |||
762 | case STOP_GAP: | ||
763 | global_settings.rec_stop_gap ++; | ||
764 | global_settings.rec_stop_gap %= TRIG_DURATION_COUNT; | ||
765 | break; | ||
766 | |||
767 | case TRIG_OPTION_COUNT: | ||
768 | // avoid compiler warnings | ||
769 | break; | ||
770 | } | ||
771 | peak_meter_trigger(global_settings.rec_trigger_mode!=TRIG_OFF); | 529 | peak_meter_trigger(global_settings.rec_trigger_mode!=TRIG_OFF); |
772 | settings_apply_trigger(); | 530 | settings_apply_trigger(); |
773 | say_value = true; | 531 | done = true; |
532 | break; | ||
533 | case ACTION_STD_OK: | ||
534 | done = true; | ||
774 | break; | 535 | break; |
775 | |||
776 | case ACTION_SETTINGS_DEC: | 536 | case ACTION_SETTINGS_DEC: |
777 | switch (selected) { | 537 | case ACTION_SETTINGS_DECREPEAT: |
778 | case TRIGGER_MODE: | 538 | option_select_next_val(settings[i/2], true, false); |
779 | global_settings.rec_trigger_mode+=TRIGGER_MODE_COUNT-1; | 539 | trigger_speak_item(settings[i/2], false); |
780 | global_settings.rec_trigger_mode %= TRIGGER_MODE_COUNT; | 540 | changed = true; |
781 | break; | ||
782 | |||
783 | case TRIGGER_TYPE: | ||
784 | global_settings.rec_trigger_type+=TRIGGER_TYPE_COUNT-1; | ||
785 | global_settings.rec_trigger_type %= TRIGGER_TYPE_COUNT; | ||
786 | break; | ||
787 | |||
788 | case PRERECORD_TIME: | ||
789 | global_settings.rec_prerecord_time += PRERECORD_TIMES_COUNT - 1; | ||
790 | global_settings.rec_prerecord_time %= PRERECORD_TIMES_COUNT; | ||
791 | break; | ||
792 | |||
793 | case START_THRESHOLD: | ||
794 | change_threshold(&global_settings.rec_start_thres, -1); | ||
795 | break; | ||
796 | |||
797 | case START_DURATION: | ||
798 | global_settings.rec_start_duration += TRIG_DURATION_COUNT-1; | ||
799 | global_settings.rec_start_duration %= TRIG_DURATION_COUNT; | ||
800 | break; | ||
801 | |||
802 | case STOP_THRESHOLD: | ||
803 | change_threshold(&global_settings.rec_stop_thres, -1); | ||
804 | break; | ||
805 | |||
806 | case STOP_POSTREC: | ||
807 | global_settings.rec_stop_postrec += | ||
808 | TRIG_DURATION_COUNT - 1; | ||
809 | global_settings.rec_stop_postrec %= | ||
810 | TRIG_DURATION_COUNT; | ||
811 | break; | ||
812 | |||
813 | case STOP_GAP: | ||
814 | global_settings.rec_stop_gap += | ||
815 | TRIG_DURATION_COUNT - 1; | ||
816 | global_settings.rec_stop_gap %= TRIG_DURATION_COUNT; | ||
817 | break; | ||
818 | |||
819 | case TRIG_OPTION_COUNT: | ||
820 | // avoid compiler warnings | ||
821 | break; | ||
822 | } | ||
823 | peak_meter_trigger(global_settings.rec_trigger_mode!=TRIG_OFF); | ||
824 | settings_apply_trigger(); | ||
825 | say_value = true; | ||
826 | break; | 541 | break; |
827 | 542 | case ACTION_SETTINGS_INC: | |
828 | case ACTION_REC_F2: | 543 | case ACTION_SETTINGS_INCREPEAT: |
829 | peak_meter_trigger(true); | 544 | option_select_next_val(settings[i/2], false, false); |
545 | trigger_speak_item(settings[i/2], false); | ||
546 | changed = true; | ||
830 | break; | 547 | break; |
831 | 548 | case ACTION_STD_PREV: | |
832 | case SYS_USB_CONNECTED: | 549 | case ACTION_STD_PREVREPEAT: |
833 | if(default_event_handler(button) == SYS_USB_CONNECTED) { | 550 | i -= 2; |
834 | retval = true; | 551 | if (i<0) |
835 | exit_request = true; | 552 | i = (TRIG_OPTION_COUNT*2) - 2; |
836 | } | 553 | gui_synclist_select_item(&lists, i); |
554 | i = gui_synclist_get_sel_pos(&lists); | ||
555 | trigger_speak_item(settings[i/2], true); | ||
556 | changed = true; | ||
557 | break; | ||
558 | case ACTION_STD_NEXT: | ||
559 | case ACTION_STD_NEXTREPEAT: | ||
560 | gui_synclist_select_item(&lists, (i+2) % (TRIG_OPTION_COUNT*2)); | ||
561 | i = gui_synclist_get_sel_pos(&lists); | ||
562 | trigger_speak_item(settings[i/2], true); | ||
563 | changed = true; | ||
837 | break; | 564 | break; |
838 | } | 565 | } |
839 | } | 566 | } |
840 | |||
841 | peak_meter_trigger(false); | 567 | peak_meter_trigger(false); |
842 | FOR_NB_SCREENS(i) | 568 | settings_save(); |
843 | { | 569 | return 0; |
844 | screens[i].setfont(FONT_UI); | ||
845 | screens[i].setmargins(old_x_margin[i], old_y_margin[i]); | ||
846 | } | ||
847 | return retval; | ||
848 | } | 570 | } |
849 | |||
850 | MENUITEM_FUNCTION(rectrigger_item, 0, ID2P(LANG_RECORD_TRIGGER), | 571 | MENUITEM_FUNCTION(rectrigger_item, 0, ID2P(LANG_RECORD_TRIGGER), |
851 | (int(*)(void))rectrigger, NULL, NULL, Icon_Menu_setting); | 572 | rectrigger, NULL, NULL, Icon_Menu_setting); |
852 | |||
853 | |||
854 | |||
855 | 573 | ||
856 | 574 | ||
857 | 575 | ||