ref: 9803343f14f87a7f20b24f88add7e384f9d3eb56
dir: /term_util.h/
#pragma once #include <menu.h> #include <ncurses.h> #define CTRL_PLUS(c) ((c)&037) typedef enum { C_natural, C_black, C_red, C_green, C_yellow, C_blue, C_magenta, C_cyan, C_white, } Color_name; enum { Colors_count = C_white + 1, }; enum { Cdef_normal = COLOR_PAIR(1), }; typedef enum { A_normal = A_NORMAL, A_bold = A_BOLD, A_dim = A_DIM, A_standout = A_STANDOUT, A_reverse = A_REVERSE, } Term_attr; ORCA_FORCE_INLINE int fg_bg(Color_name fg, Color_name bg) { return COLOR_PAIR(1 + fg * Colors_count + bg); } void term_util_init_colors(); typedef enum { Qnav_type_message, Qnav_type_qmenu, } Qnav_type_tag; typedef struct { Qnav_type_tag tag; WINDOW* outer_window; WINDOW* content_window; } Qnav_block; typedef struct { Qnav_block* blocks[16]; Usz count; bool stack_changed; } Qnav_stack; typedef struct { Qnav_block nav_block; MENU* ncurses_menu; ITEM* ncurses_items[32]; Usz items_count; } Qmenu; typedef enum { Qmenu_action_type_canceled, Qmenu_action_type_picked, } Qmenu_action_type; typedef struct { Qmenu_action_type type; } Qmenu_action_any; typedef struct { Qmenu_action_type type; int id; } Qmenu_action_picked; typedef union { Qmenu_action_any any; Qmenu_action_picked picked; } Qmenu_action; void qnav_init(); void qnav_deinit(); void qnav_draw_box(Qnav_block* qb); void qnav_draw_title(Qnav_block* qb, char const* title); Qnav_block* qnav_top_block(); void qnav_stack_pop(); Qnav_block* qnav_push_message(int height, int width); bool qnav_drive_message(Qnav_block* qb, int key); void qmenu_start(Qmenu* qm); void qmenu_add_text_item(Qmenu* qm, char const* text, int id); void qmenu_add_spacer(Qmenu* qm); void qmenu_push_to_nav(Qmenu* qm); bool qmenu_drive(Qmenu* qm, int key, Qmenu_action* out_action); Qmenu* qmenu_of(Qnav_block* qb); extern Qnav_stack qnav_stack;