Browse Source

Add more controls dialog stuff

master
cancel 6 years ago
parent
commit
df3a5b7ecf
  1. 5
      term_util.c
  2. 1
      term_util.h
  3. 57
      tui_main.c

5
term_util.c

@ -91,6 +91,11 @@ void qnav_draw_title(Qnav_block* qb, char const* title) {
WINDOW* qmsg_window(Qmsg* qm) { return qm->nav_block.content_window; }
void qmsg_set_title(Qmsg* qm, char const* title) {
Qnav_block* qb = &qm->nav_block;
qnav_draw_title(qb, title);
}
Qmsg* qmsg_push(int height, int width) {
Qmsg* qm = malloc(sizeof(Qmsg));
qnav_stack_push(Qnav_type_qmsg, height, width, &qm->nav_block);

1
term_util.h

@ -95,6 +95,7 @@ void qnav_stack_pop();
Qmsg* qmsg_push(int height, int width);
WINDOW* qmsg_window(Qmsg* qm);
void qmsg_set_title(Qmsg* qm, char const* title);
bool qmsg_drive(Qmsg* qm, int key);
Qmsg* qmsg_of(Qnav_block* qb);

57
tui_main.c

@ -1455,7 +1455,7 @@ void push_main_menu() {
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, "Controls", Main_menu_controls);
qmenu_add_choice(qm, "Controls...", Main_menu_controls);
qmenu_add_spacer(qm);
qmenu_add_choice(qm, "Quit", Main_menu_quit);
qmenu_push_to_nav(qm);
@ -1464,11 +1464,58 @@ void push_main_menu() {
}
void push_controls_msg() {
Qmsg* qm = qmsg_push(30, 30);
struct Ctrl_item {
char const* left;
char const* right;
};
static struct Ctrl_item items[] = {
{"Ctrl+Q", "Quit"},
{"Arrow keys", "Move Cursor"},
{"Ctrl+D or F1", "Open Main Menu"},
{NULL, NULL},
{"0-9, A-Z, a-z,", "Insert Character"},
{"!, :, #, and *", NULL},
{NULL, NULL},
{"Spacebar", "Play/Pause"},
{"Ctrl+Z or Ctrl+U", "Undo"},
{"Ctrl+X", "Cut"},
{"Ctrl+C", "Copy"},
{"Ctrl+V", "Paste"},
{"Ctrl+S", "Save"},
{"Ctrl+F", "Frame Step Forward"},
};
int w_left = 0;
int w_right = 0;
for (Usz i = 0; i < ORCA_ARRAY_COUNTOF(items); ++i) {
// use wcswidth instead of strlen if you need wide char support. but note
// that won't be useful for UTF-8 or unicode chars in higher plane (emoji,
// complex zwj, etc.)
if (items[i].left) {
int wl = (int)strlen(items[i].left);
if (wl > w_left)
w_left = wl;
}
if (items[i].right) {
int wr = (int)strlen(items[i].right);
if (wr > w_right)
w_right = wr;
}
}
int mid_pad = 2;
int total_width = 1 + w_left + mid_pad + w_right;
Qmsg* qm = qmsg_push(ORCA_ARRAY_COUNTOF(items), total_width);
WINDOW* w = qmsg_window(qm);
wmove(w, 0, 0);
wprintw(w, "ctrl+Q\tquit\n");
wprintw(w, "arrow keys\tmove cursor\n");
qmsg_set_title(qm, "Controls");
for (int i = 0; i < (int)ORCA_ARRAY_COUNTOF(items); ++i) {
if (items[i].left) {
wmove(w, i, 1);
wprintw(w, items[i].left);
}
if (items[i].right) {
wmove(w, i, w_left + 1 + mid_pad);
wprintw(w, items[i].right);
}
}
}
void try_save_with_msg(Ged* ged) {

Loading…
Cancel
Save