Browse Source

Add options for fancy or plain grid dots and rulers

master
cancel 5 years ago
parent
commit
f2c8483780
  1. 149
      tui_main.c

149
tui_main.c

@ -1879,6 +1879,8 @@ enum {
Confirm_new_file_menu_id,
Cosmetics_menu_id,
Set_soft_margins_form_id,
Set_fancy_grid_dots_menu_id,
Set_fancy_grid_rulers_menu_id,
#ifdef FEAT_PORTMIDI
Portmidi_output_device_menu_id,
#endif
@ -1971,6 +1973,8 @@ void push_autofit_menu(void) {
enum {
Cosmetics_soft_margins_id = 1,
Cosmetics_grid_dots_id,
Cosmetics_grid_rulers_id,
};
enum {
Soft_margins_text_line_id = 1,
@ -1979,6 +1983,8 @@ void push_cosmetics_menu(void) {
Qmenu *qm = qmenu_create(Cosmetics_menu_id);
qmenu_set_title(qm, "Appearance");
qmenu_add_choice(qm, Cosmetics_soft_margins_id, "Margins...");
qmenu_add_choice(qm, Cosmetics_grid_dots_id, "Grid dots...");
qmenu_add_choice(qm, Cosmetics_grid_rulers_id, "Grid rulers...");
qmenu_push_to_nav(qm);
}
void push_soft_margins_form(int init_y, int init_x) {
@ -1990,6 +1996,40 @@ void push_soft_margins_form(int init_y, int init_x) {
qform_add_text_line(qf, Soft_margins_text_line_id, inistr);
qform_push_to_nav(qf);
}
void push_plainorfancy_menu(int menu_id, char const *title,
bool initial_fancy) {
Qmenu *qm = qmenu_create(menu_id);
qmenu_set_title(qm, title);
qmenu_add_printf(qm, 1, "(%c) Fancy", initial_fancy ? '*' : ' ');
qmenu_add_printf(qm, 2, "(%c) Plain", !initial_fancy ? '*' : ' ');
if (!initial_fancy)
qmenu_set_current_item(qm, 2);
qmenu_push_to_nav(qm);
}
bool plainorfancy_menu_was_picked(int picked_id, bool *p_is_fancy,
U32 *prefs_touched, U32 pref_touch_flag) {
bool val = *p_is_fancy;
bool newval = val;
switch (picked_id) {
case 1: // fancy
newval = true;
break;
case 2: // plain
newval = false;
break;
default: // wat
break;
}
bool changed = newval != val;
if (changed) {
*p_is_fancy = newval;
*prefs_touched |= pref_touch_flag;
}
qnav_stack_pop();
// ^- doesn't actually matter when we do this, with our current code
return changed;
}
void push_about_msg(void) {
// clang-format off
@ -2240,7 +2280,7 @@ void push_portmidi_output_device_menu(Midi_mode const *midi_mode) {
if (!info || !info->output)
continue;
bool is_cur_dev_id = has_cur_dev_id && cur_dev_id == i;
qmenu_add_printf(qm, i, "[%c] #%d - %s", is_cur_dev_id ? '*' : ' ', i,
qmenu_add_printf(qm, i, "(%c) #%d - %s", is_cur_dev_id ? '*' : ' ', i,
info->name);
++output_devices;
}
@ -2359,6 +2399,7 @@ void try_send_to_gui_clipboard(Ged const *a, bool *io_use_gui_clipboard) {
typedef struct {
oso *portmidi_output_device;
int softmargin_y, softmargin_x;
bool fancy_grid_dots : 1, fancy_grid_rulers : 1;
U32 touched;
} Prefs;
@ -2369,11 +2410,18 @@ typedef enum {
Prefs_load_ok = 0,
} Prefs_load_error;
char const *const confopts[] = {"portmidi_output_device", "margins"};
char const *const confopts[] = {
"portmidi_output_device",
"margins",
"grid_dot_type",
"grid_ruler_type",
};
enum { Confoptslen = ORCA_ARRAY_COUNTOF(confopts) };
enum {
Confopt_portmidi_output_device = 0,
Confopt_margins,
Confopt_grid_dot_type,
Confopt_grid_ruler_type,
};
enum {
@ -2381,6 +2429,21 @@ enum {
Preftouch_griddotstype = 1 << 1,
Preftouch_gridrulerstype = 1 << 2,
};
char const *const prefval_plain = "plain";
char const *const prefval_fancy = "fancy";
ORCA_FORCE_NO_INLINE
bool plainorfancy(char const *val, bool *out) {
if (strcmp(val, prefval_plain) == 0) {
*out = false;
return true;
}
if (strcmp(val, prefval_fancy) == 0) {
*out = true;
return true;
}
return false;
}
ORCA_FORCE_NO_INLINE
Prefs_load_error prefs_load_from_conf_file(Prefs *p) {
@ -2399,6 +2462,20 @@ Prefs_load_error prefs_load_from_conf_file(Prefs *p) {
p->touched |= Preftouch_softmargins;
}
} break;
case Confopt_grid_dot_type: {
bool fancy;
if (plainorfancy(ez.value, &fancy)) {
p->fancy_grid_dots = fancy;
p->touched |= Preftouch_griddotstype;
}
} break;
case Confopt_grid_ruler_type: {
bool fancy;
if (plainorfancy(ez.value, &fancy)) {
p->fancy_grid_rulers = fancy;
p->touched |= Preftouch_gridrulerstype;
}
} break;
}
}
return Prefs_load_ok;
@ -2406,7 +2483,8 @@ Prefs_load_error prefs_load_from_conf_file(Prefs *p) {
void save_prefs_with_error_message(U32 prefs_touched,
Midi_mode const *midi_mode, int softmargin_y,
int softmargin_x) {
int softmargin_x, bool fancy_grid_dots,
bool fancy_grid_rulers) {
Ezconf_opt optsbuff[Confoptslen];
Ezconf_w ez;
ezconf_w_start(&ez, optsbuff, ORCA_ARRAY_COUNTOF(optsbuff));
@ -2431,9 +2509,14 @@ void save_prefs_with_error_message(U32 prefs_touched,
} break;
#endif
}
if (prefs_touched & Preftouch_softmargins) {
if (prefs_touched & Preftouch_softmargins)
ezconf_w_addopt(&ez, confopts[Confopt_margins], Confopt_margins);
}
if (prefs_touched & Preftouch_griddotstype)
ezconf_w_addopt(&ez, confopts[Confopt_grid_dot_type],
Confopt_grid_dot_type);
if (prefs_touched & Preftouch_gridrulerstype)
ezconf_w_addopt(&ez, confopts[Confopt_grid_ruler_type],
Confopt_grid_ruler_type);
while (ezconf_w_step(&ez)) {
switch (ez.optid) {
#ifdef FEAT_PORTMIDI
@ -2444,6 +2527,12 @@ void save_prefs_with_error_message(U32 prefs_touched,
case Confopt_margins:
fprintf(ez.file, "%dx%d", softmargin_x, softmargin_y);
break;
case Confopt_grid_dot_type:
fputs(fancy_grid_dots ? prefval_fancy : prefval_plain, ez.file);
break;
case Confopt_grid_ruler_type:
fputs(fancy_grid_rulers ? prefval_fancy : prefval_plain, ez.file);
break;
}
}
osofree(midi_output_device_name);
@ -2515,6 +2604,7 @@ int main(int argc, char **argv) {
bool use_gui_cboard = true;
bool strict_timing = false;
bool should_autosize_grid = true;
bool fancy_grid_dots = true, fancy_grid_rulers = true;
Midi_mode midi_mode;
midi_mode_init_null(&midi_mode);
@ -2740,11 +2830,17 @@ int main(int argc, char **argv) {
prefs_init(&prefs);
Prefs_load_error prefserr = prefs_load_from_conf_file(&prefs);
if (prefserr == Prefs_load_ok) {
prefs_touched |= prefs.touched;
if (prefs.touched & Preftouch_softmargins) {
prefs_touched |= Preftouch_softmargins;
softmargin_y = prefs.softmargin_y;
softmargin_x = prefs.softmargin_x;
}
if (prefs.touched & Preftouch_griddotstype) {
fancy_grid_dots = prefs.fancy_grid_dots;
}
if (prefs.touched & Preftouch_gridrulerstype) {
fancy_grid_rulers = prefs.fancy_grid_rulers;
}
#ifdef FEAT_PORTMIDI
if (midi_mode.any.type == Midi_mode_type_null &&
osolen(prefs.portmidi_output_device)) {
@ -2779,7 +2875,6 @@ int main(int argc, char **argv) {
bracketed_paste_x = 0, bracketed_paste_max_y = 0,
bracketed_paste_max_x = 0;
bool is_in_bracketed_paste = false;
bool fancy_grid_dots = true, fancy_grid_rulers = true;
// Send initial BPM
send_num_message(ged_state.oosc_dev, "/orca/bpm", (I32)ged_state.bpm);
@ -3136,9 +3231,39 @@ int main(int argc, char **argv) {
case Cosmetics_soft_margins_id: {
push_soft_margins_form(softmargin_y, softmargin_x);
break;
case Cosmetics_grid_dots_id:
push_plainorfancy_menu(Set_fancy_grid_dots_menu_id, "Grid Dots",
fancy_grid_dots);
break;
case Cosmetics_grid_rulers_id:
push_plainorfancy_menu(Set_fancy_grid_rulers_menu_id,
"Grid Rulers", fancy_grid_rulers);
break;
}
}
} break;
case Set_fancy_grid_dots_menu_id: {
if (plainorfancy_menu_was_picked(act.picked.id, &fancy_grid_dots,
&prefs_touched,
Preftouch_griddotstype)) {
ged_state.is_draw_dirty = true;
// TODO highly redundant, factor out
save_prefs_with_error_message(
prefs_touched, &midi_mode, softmargin_y, softmargin_x,
fancy_grid_dots, fancy_grid_rulers);
}
} break;
case Set_fancy_grid_rulers_menu_id: {
if (plainorfancy_menu_was_picked(
act.picked.id, &fancy_grid_rulers, &prefs_touched,
Preftouch_gridrulerstype)) {
ged_state.is_draw_dirty = true;
// TODO highly redundant, factor out
save_prefs_with_error_message(
prefs_touched, &midi_mode, softmargin_y, softmargin_x,
fancy_grid_dots, fancy_grid_rulers);
}
} break;
#ifdef FEAT_PORTMIDI
case Portmidi_output_device_menu_id: {
ged_stop_all_sustained_notes(&ged_state);
@ -3150,8 +3275,9 @@ int main(int argc, char **argv) {
"Error setting PortMidi output device:\n%s",
Pm_GetErrorText(pme));
} else {
save_prefs_with_error_message(prefs_touched, &midi_mode,
softmargin_y, softmargin_x);
save_prefs_with_error_message(
prefs_touched, &midi_mode, softmargin_y, softmargin_x,
fancy_grid_dots, fancy_grid_rulers);
}
} break;
#endif
@ -3269,8 +3395,9 @@ int main(int argc, char **argv) {
qnav_stack_pop();
// Might push message, so gotta pop old guy first
if (do_save)
save_prefs_with_error_message(prefs_touched, &midi_mode,
softmargin_y, softmargin_x);
save_prefs_with_error_message(
prefs_touched, &midi_mode, softmargin_y, softmargin_x,
fancy_grid_dots, fancy_grid_rulers);
}
osofree(tmpstr);
} break;

Loading…
Cancel
Save