Browse Source

Add active/inactive indicator for qnav blocks

master
cancel 6 years ago
parent
commit
df162ea4a0
  1. 29
      term_util.c
  2. 5
      term_util.h
  3. 8
      tui_main.c

29
term_util.c

@ -58,11 +58,13 @@ void qnav_stack_push(Qnav_type_tag tag, int height, int width,
} }
qnav_stack.blocks[qnav_stack.count] = out; qnav_stack.blocks[qnav_stack.count] = out;
++qnav_stack.count; ++qnav_stack.count;
out->title = NULL;
out->outer_window = newwin(height + 2, width + 3, 0, left); out->outer_window = newwin(height + 2, width + 3, 0, left);
out->content_window = derwin(out->outer_window, height, width, 1, 1); out->content_window = derwin(out->outer_window, height, width, 1, 1);
out->tag = tag; out->tag = tag;
qnav_stack.stack_changed = true; qnav_stack.stack_changed = true;
} }
Qnav_block* qnav_top_block() { Qnav_block* qnav_top_block() {
if (qnav_stack.count == 0) if (qnav_stack.count == 0)
return NULL; return NULL;
@ -83,23 +85,40 @@ void qnav_stack_pop() {
qnav_stack.blocks[qnav_stack.count] = NULL; qnav_stack.blocks[qnav_stack.count] = NULL;
qnav_stack.stack_changed = true; qnav_stack.stack_changed = true;
} }
void qnav_draw_box(Qnav_block* qb) { box(qb->outer_window, 0, 0); } void qnav_draw_box_attr(Qnav_block* qb, unsigned int attr) {
void qnav_draw_title(Qnav_block* qb, char const* title) { wborder(qb->outer_window, ACS_VLINE | attr, ACS_VLINE | attr,
ACS_HLINE | attr, ACS_HLINE | attr, ACS_ULCORNER | attr,
ACS_URCORNER | attr, ACS_LLCORNER | attr, ACS_LRCORNER | attr);
}
void qnav_draw_box(Qnav_block* qb) { qnav_draw_box_attr(qb, A_DIM); }
void qnav_draw_title(Qnav_block* qb, char const* title, int attr) {
wmove(qb->outer_window, 0, 2); wmove(qb->outer_window, 0, 2);
attr_t attrs = A_NORMAL;
short pair = 0;
wattr_get(qb->outer_window, &attrs, &pair, NULL);
wattrset(qb->outer_window, attr);
wprintw(qb->outer_window, title); wprintw(qb->outer_window, title);
wattr_set(qb->outer_window, attrs, pair, NULL);
}
void qnav_set_title(Qnav_block* qb, char const* title) { qb->title = title; }
void qnav_print_frame(Qnav_block* qb, bool active) {
qnav_draw_box_attr(qb, active ? A_BOLD : A_DIM);
if (qb->title) {
qnav_draw_title(qb, qb->title, active ? A_BOLD : A_DIM);
}
} }
WINDOW* qmsg_window(Qmsg* qm) { return qm->nav_block.content_window; } WINDOW* qmsg_window(Qmsg* qm) { return qm->nav_block.content_window; }
void qmsg_set_title(Qmsg* qm, char const* title) { void qmsg_set_title(Qmsg* qm, char const* title) {
Qnav_block* qb = &qm->nav_block; qnav_set_title(&qm->nav_block, title);
qnav_draw_title(qb, 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(Qnav_type_qmsg, height, width, &qm->nav_block); qnav_stack_push(Qnav_type_qmsg, height, width, &qm->nav_block);
qnav_draw_box(&qm->nav_block);
return qm; return qm;
} }

5
term_util.h

@ -48,6 +48,7 @@ typedef struct {
Qnav_type_tag tag; Qnav_type_tag tag;
WINDOW* outer_window; WINDOW* outer_window;
WINDOW* content_window; WINDOW* content_window;
char const* title;
} Qnav_block; } Qnav_block;
typedef struct { typedef struct {
@ -88,10 +89,10 @@ typedef union {
void qnav_init(); void qnav_init();
void qnav_deinit(); void qnav_deinit();
void qnav_draw_box(Qnav_block* qb); void qnav_set_title(Qnav_block* qb, char const* title);
void qnav_draw_title(Qnav_block* qb, char const* title);
Qnav_block* qnav_top_block(); Qnav_block* qnav_top_block();
void qnav_stack_pop(); void qnav_stack_pop();
void qnav_print_frame(Qnav_block* qb, bool active);
Qmsg* qmsg_push(int height, int width); Qmsg* qmsg_push(int height, int width);
WINDOW* qmsg_window(Qmsg* qm); WINDOW* qmsg_window(Qmsg* qm);

8
tui_main.c

@ -1459,8 +1459,7 @@ void push_main_menu() {
qmenu_add_spacer(qm); qmenu_add_spacer(qm);
qmenu_add_choice(qm, "Quit", Main_menu_quit); qmenu_add_choice(qm, "Quit", Main_menu_quit);
qmenu_push_to_nav(qm); qmenu_push_to_nav(qm);
qnav_draw_box(&qm->nav_block); qnav_set_title(&qm->nav_block, "ORCA");
qnav_draw_title(&qm->nav_block, "ORCA");
} }
void push_controls_msg() { void push_controls_msg() {
@ -1731,7 +1730,6 @@ int main(int argc, char** argv) {
if (qnav_stack.stack_changed) { if (qnav_stack.stack_changed) {
werase(stdscr); werase(stdscr);
drew_any = true; drew_any = true;
qnav_stack.stack_changed = false;
} }
if (ged_is_draw_dirty(&ged_state) || drew_any) { if (ged_is_draw_dirty(&ged_state) || drew_any) {
werase(cont_window); werase(cont_window);
@ -1741,10 +1739,14 @@ int main(int argc, char** argv) {
} }
for (Usz i = 0; i < qnav_stack.count; ++i) { for (Usz i = 0; i < qnav_stack.count; ++i) {
Qnav_block* qb = qnav_stack.blocks[i]; Qnav_block* qb = qnav_stack.blocks[i];
if (qnav_stack.stack_changed) {
qnav_print_frame(qb, i == qnav_stack.count - 1);
}
touchwin(qb->outer_window); touchwin(qb->outer_window);
wnoutrefresh(qb->outer_window); wnoutrefresh(qb->outer_window);
drew_any = true; drew_any = true;
} }
qnav_stack.stack_changed = false;
if (drew_any) if (drew_any)
doupdate(); doupdate();
diff = stm_laptime(&last_time); diff = stm_laptime(&last_time);

Loading…
Cancel
Save