Browse Source

Change to use malloc/free for Qmenu

Storing a global guy was annoying
master
cancel 6 years ago
parent
commit
fc8431f755
  1. 12
      term_util.c
  2. 3
      term_util.h
  3. 13
      tui_main.c

12
term_util.c

@ -136,12 +136,20 @@ bool qmsg_drive(Qmsg* qm, int key) {
Qmsg* qmsg_of(Qnav_block* qb) { return ORCA_CONTAINER_OF(qb, Qmsg, nav_block); } Qmsg* qmsg_of(Qnav_block* qb) { return ORCA_CONTAINER_OF(qb, Qmsg, nav_block); }
void qmenu_start(Qmenu* qm) { memset(qm, 0, sizeof(Qmenu)); } Qmenu* qmenu_create(int id) {
Qmenu* qm = (Qmenu*)malloc(sizeof(Qmenu));
qm->ncurses_menu = NULL;
qm->ncurses_items[0] = NULL;
qm->items_count = 0;
qm->id = id;
return qm;
}
void qmenu_add_choice(Qmenu* qm, char const* text, int id) { void qmenu_add_choice(Qmenu* qm, char const* text, int id) {
ITEM* item = new_item(text, NULL); ITEM* item = new_item(text, NULL);
set_item_userptr(item, (void*)(intptr_t)(id)); set_item_userptr(item, (void*)(intptr_t)(id));
qm->ncurses_items[qm->items_count] = item; qm->ncurses_items[qm->items_count] = item;
++qm->items_count; ++qm->items_count;
qm->ncurses_items[qm->items_count] = NULL;
} }
void qmenu_add_spacer(Qmenu* qm) { void qmenu_add_spacer(Qmenu* qm) {
ITEM* item = new_item(" ", NULL); ITEM* item = new_item(" ", NULL);
@ -149,6 +157,7 @@ void qmenu_add_spacer(Qmenu* qm) {
set_item_userptr(item, &qmenu_spacer_user_unique); set_item_userptr(item, &qmenu_spacer_user_unique);
qm->ncurses_items[qm->items_count] = item; qm->ncurses_items[qm->items_count] = item;
++qm->items_count; ++qm->items_count;
qm->ncurses_items[qm->items_count] = NULL;
} }
void qmenu_push_to_nav(Qmenu* qm) { void qmenu_push_to_nav(Qmenu* qm) {
qm->ncurses_menu = new_menu(qm->ncurses_items); qm->ncurses_menu = new_menu(qm->ncurses_items);
@ -168,6 +177,7 @@ void qmenu_free(Qmenu* qm) {
for (Usz i = 0; i < qm->items_count; ++i) { for (Usz i = 0; i < qm->items_count; ++i) {
free_item(qm->ncurses_items[i]); free_item(qm->ncurses_items[i]);
} }
free(qm);
} }
void qnav_free_block(Qnav_block* qb) { void qnav_free_block(Qnav_block* qb) {

3
term_util.h

@ -66,6 +66,7 @@ typedef struct {
MENU* ncurses_menu; MENU* ncurses_menu;
ITEM* ncurses_items[32]; ITEM* ncurses_items[32];
Usz items_count; Usz items_count;
int id;
} Qmenu; } Qmenu;
typedef enum { typedef enum {
@ -100,7 +101,7 @@ void qmsg_set_title(Qmsg* qm, char const* title);
bool qmsg_drive(Qmsg* qm, int key); bool qmsg_drive(Qmsg* qm, int key);
Qmsg* qmsg_of(Qnav_block* qb); Qmsg* qmsg_of(Qnav_block* qb);
void qmenu_start(Qmenu* qm); Qmenu* qmenu_create();
void qmenu_add_choice(Qmenu* qm, char const* text, int id); void qmenu_add_choice(Qmenu* qm, char const* text, int id);
void qmenu_add_spacer(Qmenu* qm); void qmenu_add_spacer(Qmenu* qm);
void qmenu_push_to_nav(Qmenu* qm); void qmenu_push_to_nav(Qmenu* qm);

13
tui_main.c

@ -1438,6 +1438,10 @@ bool hacky_try_save(Field* field, char const* filename) {
// menu stuff // menu stuff
// //
enum {
Main_menu_id = 1,
};
enum { enum {
Main_menu_quit = 1, Main_menu_quit = 1,
Main_menu_controls, Main_menu_controls,
@ -1445,13 +1449,8 @@ enum {
Main_menu_save_as, Main_menu_save_as,
}; };
struct {
Qmenu qmenu;
} g_main_menu;
void push_main_menu() { void push_main_menu() {
Qmenu* qm = &g_main_menu.qmenu; Qmenu* qm = qmenu_create(Main_menu_id);
qmenu_start(qm);
qmenu_add_choice(qm, "Save", Main_menu_save); qmenu_add_choice(qm, "Save", Main_menu_save);
// qmenu_add_choice(qm, "Save As...", Main_menu_save_as); // qmenu_add_choice(qm, "Save As...", Main_menu_save_as);
qmenu_add_spacer(qm); qmenu_add_spacer(qm);
@ -1841,7 +1840,7 @@ int main(int argc, char** argv) {
qnav_stack_pop(); qnav_stack_pop();
} break; } break;
case Qmenu_action_type_picked: { case Qmenu_action_type_picked: {
if (qm == &g_main_menu.qmenu) { if (qm->id == Main_menu_id) {
switch (act.picked.id) { switch (act.picked.id) {
case Main_menu_quit: case Main_menu_quit:
goto quit; goto quit;

Loading…
Cancel
Save