diff --git a/tui_main.c b/tui_main.c index a90fbf7..3903495 100644 --- a/tui_main.c +++ b/tui_main.c @@ -1846,6 +1846,7 @@ enum { Set_tempo_form_id, Set_grid_dims_form_id, Autofit_menu_id, + Confirm_new_file_menu_id, }; enum { Open_name_text_line_id = 1, @@ -1863,6 +1864,10 @@ enum { Autofit_nicely_id = 1, Autofit_tightly_id, }; +enum { + Confirm_new_file_reject_id = 1, + Confirm_new_file_accep_id, +}; enum { Main_menu_quit = 1, Main_menu_controls, @@ -1904,6 +1909,14 @@ void pop_qnav_if_main_menu(void) { qnav_stack_pop(); } +void push_confirm_new_file_menu(void) { + Qmenu* qm = qmenu_create(Confirm_new_file_menu_id); + qmenu_set_title(qm, "Are you sure?"); + qmenu_add_choice(qm, "Cancel", Confirm_new_file_reject_id); + qmenu_add_choice(qm, "Create New File", Confirm_new_file_accep_id); + qmenu_push_to_nav(qm); +} + void push_autofit_menu(void) { Qmenu* qm = qmenu_create(Autofit_menu_id); qmenu_set_title(qm, "Auto-fit Grid"); @@ -2798,32 +2811,9 @@ int main(int argc, char** argv) { case Main_menu_about: push_about_msg(); break; - case Main_menu_new: { - Usz new_field_h, new_field_w; - if (ged_suggest_nice_grid_size(ged_state.win_h, ged_state.win_w, - ged_state.softmargin_y, - ged_state.softmargin_x, - (int)ged_state.ruler_spacing_y, - (int)ged_state.ruler_spacing_x, - &new_field_h, &new_field_w)) { - undo_history_push(&ged_state.undo_hist, &ged_state.field, - ged_state.tick_num); - field_resize_raw(&ged_state.field, new_field_h, new_field_w); - memset(ged_state.field.buffer, '.', - new_field_h * new_field_w * sizeof(Glyph)); - ged_cursor_confine(&ged_state.ged_cursor, new_field_h, - new_field_w); - mbuf_reusable_ensure_size(&ged_state.mbuf_r, new_field_h, - new_field_w); - ged_update_internal_geometry(&ged_state); - ged_make_cursor_visible(&ged_state); - ged_state.needs_remarking = true; - ged_state.is_draw_dirty = true; - heapstr_set_cstr(&file_name, ""); - ged_state.filename = "unnamed"; // slightly redundant - pop_qnav_if_main_menu(); - } - } break; + case Main_menu_new: + push_confirm_new_file_menu(); + break; case Main_menu_open: push_open_form(file_name.str); break; @@ -2876,6 +2866,39 @@ int main(int argc, char** argv) { } qnav_stack_pop(); pop_qnav_if_main_menu(); + } else if (qmenu_id(qm) == Confirm_new_file_menu_id) { + switch (act.picked.id) { + case Confirm_new_file_reject_id: + qnav_stack_pop(); + break; + case Confirm_new_file_accep_id: { + Usz new_field_h, new_field_w; + if (ged_suggest_nice_grid_size(ged_state.win_h, ged_state.win_w, + ged_state.softmargin_y, + ged_state.softmargin_x, + (int)ged_state.ruler_spacing_y, + (int)ged_state.ruler_spacing_x, + &new_field_h, &new_field_w)) { + undo_history_push(&ged_state.undo_hist, &ged_state.field, + ged_state.tick_num); + field_resize_raw(&ged_state.field, new_field_h, new_field_w); + memset(ged_state.field.buffer, '.', + new_field_h * new_field_w * sizeof(Glyph)); + ged_cursor_confine(&ged_state.ged_cursor, new_field_h, + new_field_w); + mbuf_reusable_ensure_size(&ged_state.mbuf_r, new_field_h, + new_field_w); + ged_update_internal_geometry(&ged_state); + ged_make_cursor_visible(&ged_state); + ged_state.needs_remarking = true; + ged_state.is_draw_dirty = true; + heapstr_set_cstr(&file_name, ""); + ged_state.filename = "unnamed"; // slightly redundant + qnav_stack_pop(); + pop_qnav_if_main_menu(); + } + } break; + } } } break; }