diff --git a/tui_main.c b/tui_main.c index 71f435d..3deef2d 100644 --- a/tui_main.c +++ b/tui_main.c @@ -1751,18 +1751,24 @@ bool hacky_try_save(Field* field, char const* filename) { enum { Main_menu_id = 1, Save_as_form_id, + Set_tempo_form_id, }; enum { Save_as_name_id = 1, }; +enum { + Tempo_text_line_id = 1, +}; + enum { Main_menu_quit = 1, Main_menu_controls, Main_menu_opers_guide, Main_menu_save, Main_menu_save_as, + Main_menu_set_tempo, Main_menu_about, }; @@ -1772,6 +1778,8 @@ void push_main_menu(void) { qmenu_add_choice(qm, "Save", Main_menu_save); qmenu_add_choice(qm, "Save As...", Main_menu_save_as); qmenu_add_spacer(qm); + qmenu_add_choice(qm, "Set BPM...", Main_menu_set_tempo); + qmenu_add_spacer(qm); qmenu_add_choice(qm, "Controls...", Main_menu_controls); qmenu_add_choice(qm, "Operators...", Main_menu_opers_guide); qmenu_add_choice(qm, "About...", Main_menu_about); @@ -1977,6 +1985,16 @@ void push_save_as_form(char const* initial) { qform_push_to_nav(qf); } +void push_set_tempo_form(Usz initial) { + Qform* qf = qform_create(Set_tempo_form_id); + char buff[64]; + int snres = snprintf(buff, sizeof buff, "%zu", initial); + char const* inistr = snres > 0 && (Usz)snres < sizeof buff ? buff : ""; + qform_set_title(qf, "Set BPM"); + qform_add_text_line(qf, Tempo_text_line_id, inistr); + qform_push_to_nav(qf); +} + // // main // @@ -2477,6 +2495,9 @@ int main(int argc, char** argv) { case Main_menu_save_as: push_save_as_form(file_name.str); break; + case Main_menu_set_tempo: + push_set_tempo_form(ged_state.bpm); + break; } } } break; @@ -2505,6 +2526,19 @@ int main(int argc, char** argv) { } heapstr_deinit(&temp_name); } break; + case Set_tempo_form_id: { + Heapstr tmpstr; + heapstr_init(&tmpstr); + if (qform_get_text_line(qf, Tempo_text_line_id, &tmpstr) && + heapstr_len(&tmpstr) > 0) { + int newbpm = atoi(tmpstr.str); + if (newbpm > 0) { + ged_state.bpm = (Usz)newbpm; + qnav_stack_pop(); + } + } + heapstr_deinit(&tmpstr); + } break; } } break; }