From 53b5cb4f63b5725d4a97592abb3ab3316a4bf466 Mon Sep 17 00:00:00 2001 From: cancel Date: Thu, 2 Jan 2020 19:48:13 +0900 Subject: [PATCH] Add 'set grid size' menu item --- tui_main.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/tui_main.c b/tui_main.c index 3deef2d..9a87bee 100644 --- a/tui_main.c +++ b/tui_main.c @@ -540,7 +540,7 @@ void draw_glyphs_grid(WINDOW* win, int draw_y, int draw_x, int draw_h, bool use_rulers = ruler_spacing_y != 0 && ruler_spacing_x != 0; chtype bullet = ACS_BULLET; enum { T = 1 << 0, B = 1 << 1, L = 1 << 2, R = 1 << 3 }; - chtype rs[T | B | L | R]; + chtype rs[(T | B | L | R) + 1]; if (use_rulers) { bool use_fancy_rulers = true; for (Usz i = 0; i < sizeof rs / sizeof(chtype); ++i) { @@ -1752,16 +1752,17 @@ enum { Main_menu_id = 1, Save_as_form_id, Set_tempo_form_id, + Set_grid_dims_form_id, }; - enum { Save_as_name_id = 1, }; - enum { Tempo_text_line_id = 1, }; - +enum { + Dims_text_line_id = 1, +}; enum { Main_menu_quit = 1, Main_menu_controls, @@ -1769,6 +1770,7 @@ enum { Main_menu_save, Main_menu_save_as, Main_menu_set_tempo, + Main_menu_set_grid_dims, Main_menu_about, }; @@ -1779,6 +1781,7 @@ void push_main_menu(void) { 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_choice(qm, "Set Grid Size...", Main_menu_set_grid_dims); qmenu_add_spacer(qm); qmenu_add_choice(qm, "Controls...", Main_menu_controls); qmenu_add_choice(qm, "Operators...", Main_menu_opers_guide); @@ -1989,12 +1992,22 @@ 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 : ""; + char const* inistr = snres > 0 && (Usz)snres < sizeof buff ? buff : "120"; qform_set_title(qf, "Set BPM"); qform_add_text_line(qf, Tempo_text_line_id, inistr); qform_push_to_nav(qf); } +void push_set_grid_dims_form(Usz init_height, Usz init_width) { + Qform* qf = qform_create(Set_grid_dims_form_id); + char buff[128]; + int snres = snprintf(buff, sizeof buff, "%zux%zu", init_width, init_height); + char const* inistr = snres > 0 && (Usz)snres < sizeof buff ? buff : "57x25"; + qform_set_title(qf, "Set Grid Size"); + qform_add_text_line(qf, Dims_text_line_id, inistr); + qform_push_to_nav(qf); +} + // // main // @@ -2498,6 +2511,10 @@ int main(int argc, char** argv) { case Main_menu_set_tempo: push_set_tempo_form(ged_state.bpm); break; + case Main_menu_set_grid_dims: + push_set_grid_dims_form(ged_state.field.height, + ged_state.field.width); + break; } } } break; @@ -2539,6 +2556,31 @@ int main(int argc, char** argv) { } heapstr_deinit(&tmpstr); } break; + case Set_grid_dims_form_id: { + Heapstr tmpstr; + heapstr_init(&tmpstr); + if (qform_get_text_line(qf, Tempo_text_line_id, &tmpstr) && + heapstr_len(&tmpstr) > 0) { + int newheight, newwidth; + if (sscanf(tmpstr.str, "%dx%d", &newwidth, &newheight) == 2 && + newheight > 0 && newwidth > 0 && newheight < ORCA_Y_MAX && + newwidth < ORCA_X_MAX) { + if (ged_state.field.height != (Usz)newheight || + ged_state.field.width != (Usz)newwidth) { + ged_resize_grid( + &ged_state.field, &ged_state.mbuf_r, (Usz)newheight, + (Usz)newwidth, ged_state.tick_num, + &ged_state.scratch_field, &ged_state.undo_hist, + &ged_state.ged_cursor); + ged_state.needs_remarking = true; + ged_state.is_draw_dirty = true; + ged_make_cursor_visible(&ged_state); + } + qnav_stack_pop(); + } + } + heapstr_deinit(&tmpstr); + } break; } } break; }