Browse Source

Cleanup

master
cancel 6 years ago
parent
commit
1f707bfae7
  1. 64
      term_util.c

64
term_util.c

@ -59,10 +59,10 @@ void qnav_deinit() {
while (qnav_stack.count != 0) while (qnav_stack.count != 0)
qnav_stack_pop(); qnav_stack_pop();
} }
void qnav_stack_push(Qblock_type_tag tag, int height, int width, Qblock* out) { void qnav_stack_push(Qblock* qb, int height, int width) {
#ifndef NDEBUG #ifndef NDEBUG
for (Usz i = 0; i < qnav_stack.count; ++i) { for (Usz i = 0; i < qnav_stack.count; ++i) {
assert(qnav_stack.blocks[i] != out); assert(qnav_stack.blocks[i] != qb);
} }
#endif #endif
int left; int left;
@ -72,12 +72,10 @@ void qnav_stack_push(Qblock_type_tag tag, int height, int width, Qblock* out) {
} else { } else {
left = 0; left = 0;
} }
qnav_stack.blocks[qnav_stack.count] = out; qnav_stack.blocks[qnav_stack.count] = qb;
++qnav_stack.count; ++qnav_stack.count;
out->title = NULL; qb->outer_window = newwin(height + 2, width + 3, 0, left);
out->outer_window = newwin(height + 2, width + 3, 0, left); qb->content_window = derwin(qb->outer_window, height, width, 1, 1);
out->content_window = derwin(out->outer_window, height, width, 1, 1);
out->tag = tag;
qnav_stack.stack_changed = true; qnav_stack.stack_changed = true;
} }
@ -86,24 +84,12 @@ Qblock* qnav_top_block() {
return NULL; return NULL;
return qnav_stack.blocks[qnav_stack.count - 1]; return qnav_stack.blocks[qnav_stack.count - 1];
} }
void qnav_free_block(Qblock* qb);
void qnav_stack_pop() { void qblock_init(Qblock* qb, Qblock_type_tag tag) {
assert(qnav_stack.count > 0); qb->tag = tag;
if (qnav_stack.count == 0) qb->outer_window = NULL;
return; qb->content_window = NULL;
Qblock* qb = qnav_stack.blocks[qnav_stack.count - 1]; qb->title = NULL;
WINDOW* content_window = qb->content_window;
WINDOW* outer_window = qb->outer_window;
// erase any stuff underneath where this window is, in case it's outside of
// the grid in an area that isn't actively redraw
werase(outer_window);
wnoutrefresh(outer_window);
qnav_free_block(qb);
delwin(content_window);
delwin(outer_window);
--qnav_stack.count;
qnav_stack.blocks[qnav_stack.count] = NULL;
qnav_stack.stack_changed = true;
} }
void qmenu_free(Qmenu* qm); void qmenu_free(Qmenu* qm);
@ -124,6 +110,25 @@ void qnav_free_block(Qblock* qb) {
} }
} }
void qnav_stack_pop() {
assert(qnav_stack.count > 0);
if (qnav_stack.count == 0)
return;
Qblock* qb = qnav_stack.blocks[qnav_stack.count - 1];
WINDOW* content_window = qb->content_window;
WINDOW* outer_window = qb->outer_window;
// erase any stuff underneath where this window is, in case it's outside of
// the grid in an area that isn't actively redraw
werase(outer_window);
wnoutrefresh(outer_window);
qnav_free_block(qb);
delwin(content_window);
delwin(outer_window);
--qnav_stack.count;
qnav_stack.blocks[qnav_stack.count] = NULL;
qnav_stack.stack_changed = true;
}
void qblock_print_border(Qblock* qb, unsigned int attr) { void qblock_print_border(Qblock* qb, unsigned int attr) {
wborder(qb->outer_window, ACS_VLINE | attr, ACS_VLINE | attr, wborder(qb->outer_window, ACS_VLINE | attr, ACS_VLINE | attr,
ACS_HLINE | attr, ACS_HLINE | attr, ACS_ULCORNER | attr, ACS_HLINE | attr, ACS_HLINE | attr, ACS_ULCORNER | attr,
@ -165,7 +170,8 @@ void qmsg_set_title(Qmsg* qm, char const* title) {
Qmsg* qmsg_push(int height, int width) { Qmsg* qmsg_push(int height, int width) {
Qmsg* qm = malloc(sizeof(Qmsg)); Qmsg* qm = malloc(sizeof(Qmsg));
qnav_stack_push(Qblock_type_qmsg, height, width, &qm->qblock); qblock_init(&qm->qblock, Qblock_type_qmsg);
qnav_stack_push(&qm->qblock, height, width);
return qm; return qm;
} }
@ -185,6 +191,7 @@ Qmsg* qmsg_of(Qblock* qb) { return ORCA_CONTAINER_OF(qb, Qmsg, qblock); }
Qmenu* qmenu_create(int id) { Qmenu* qmenu_create(int id) {
Qmenu* qm = (Qmenu*)malloc(sizeof(Qmenu)); Qmenu* qm = (Qmenu*)malloc(sizeof(Qmenu));
qblock_init(&qm->qblock, Qblock_type_qmenu);
qm->ncurses_menu = NULL; qm->ncurses_menu = NULL;
qm->ncurses_items[0] = NULL; qm->ncurses_items[0] = NULL;
qm->items_count = 0; qm->items_count = 0;
@ -217,7 +224,7 @@ void qmenu_push_to_nav(Qmenu* qm) {
set_menu_grey(qm->ncurses_menu, A_DIM); set_menu_grey(qm->ncurses_menu, A_DIM);
int menu_min_h, menu_min_w; int menu_min_h, menu_min_w;
scale_menu(qm->ncurses_menu, &menu_min_h, &menu_min_w); scale_menu(qm->ncurses_menu, &menu_min_h, &menu_min_w);
qnav_stack_push(Qblock_type_qmenu, menu_min_h, menu_min_w, &qm->qblock); qnav_stack_push(&qm->qblock, menu_min_h, menu_min_w);
set_menu_win(qm->ncurses_menu, qm->qblock.outer_window); set_menu_win(qm->ncurses_menu, qm->qblock.outer_window);
set_menu_sub(qm->ncurses_menu, qm->qblock.content_window); set_menu_sub(qm->ncurses_menu, qm->qblock.content_window);
post_menu(qm->ncurses_menu); post_menu(qm->ncurses_menu);
@ -290,6 +297,7 @@ bool qmenu_top_is_menu(int id) {
Qform* qform_create(int id) { Qform* qform_create(int id) {
Qform* qf = (Qform*)malloc(sizeof(Qform)); Qform* qf = (Qform*)malloc(sizeof(Qform));
qblock_init(&qf->qblock, Qblock_type_qform);
qf->ncurses_form = NULL; qf->ncurses_form = NULL;
qf->ncurses_fields[0] = NULL; qf->ncurses_fields[0] = NULL;
qf->fields_count = 0; qf->fields_count = 0;
@ -315,7 +323,7 @@ void qform_push_to_nav(Qform* qf) {
qf->ncurses_form = new_form(qf->ncurses_fields); qf->ncurses_form = new_form(qf->ncurses_fields);
int form_min_h, form_min_w; int form_min_h, form_min_w;
scale_form(qf->ncurses_form, &form_min_h, &form_min_w); scale_form(qf->ncurses_form, &form_min_h, &form_min_w);
qnav_stack_push(Qblock_type_qform, form_min_h, form_min_w, &qf->qblock); qnav_stack_push(&qf->qblock, form_min_h, form_min_w);
set_form_win(qf->ncurses_form, qf->qblock.outer_window); set_form_win(qf->ncurses_form, qf->qblock.outer_window);
set_form_sub(qf->ncurses_form, qf->qblock.content_window); set_form_sub(qf->ncurses_form, qf->qblock.content_window);
post_form(qf->ncurses_form); post_form(qf->ncurses_form);

Loading…
Cancel
Save