X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=taskasaur.c;h=62adc7d0460fdd449925917e97fcfc96f579ea4c;hb=0b8a464220518abd203044984daaed9727a5029d;hp=582d496e33a0150feb745355930c7cfbe98c001f;hpb=fc9d31162f04dd3ceb2d222e3aa81549095f767b;p=taskasaur.git diff --git a/taskasaur.c b/taskasaur.c index 582d496..62adc7d 100644 --- a/taskasaur.c +++ b/taskasaur.c @@ -8,11 +8,14 @@ char* boardfile_name = "test_board.md"; void normal_handleinput(BoardMenu* boardmenu, int ch); +void popup_handleinput(BoardMenu* boardmenu, int ch); void normal_renderstep(BoardMenu* boardmenu); void popup_renderstep(BoardMenu* boardmenu); void save_to_file(char* filepath, BoardMenu* boardmenu); +void exit_step(BoardMenu* boardmenu); + int main(int argc, char** argv) { @@ -33,12 +36,15 @@ main(int argc, char** argv) normal_renderstep(boardmenu); int ch; - while ((ch = getch()) != BINDING_QUIT) { + while (1) { + + ch = getch(); if (boardmenu->popup_open == 0) { normal_handleinput(boardmenu, ch); normal_renderstep(boardmenu); } else { + popup_handleinput(boardmenu, ch); popup_renderstep(boardmenu); } @@ -47,7 +53,6 @@ main(int argc, char** argv) /* save on exit - this causes weird stuff to happen, maybe it's not given enough time to write before program exits? */ /* save_to_file(boardfile_name, boardmenu); */ - exit_tscurses(); return 0; } @@ -186,7 +191,7 @@ normal_handleinput(BoardMenu* boardmenu, int ch) ); /* set mode to popup */ - boardmenu->popup_menu = make_popup_menu(sel_itemdata); + boardmenu->popupmenu = make_popupmenu(sel_itemdata); boardmenu->popup_open = 1; } @@ -194,6 +199,9 @@ normal_handleinput(BoardMenu* boardmenu, int ch) case BINDING_WRITE: save_to_file(boardfile_name, boardmenu); break; + case BINDING_QUIT: + exit_step(boardmenu); + break; case KEY_RESIZE: /* ; */ /* int y, x; */ @@ -207,6 +215,27 @@ normal_handleinput(BoardMenu* boardmenu, int ch) } } +void +popup_handleinput(BoardMenu* boardmenu, int ch) +{ + Menu* popupmenu_menu; + + popupmenu_menu = boardmenu->popupmenu->menu; + + switch (ch) { + + case BINDING_SCROLL_UP: + menu_driver(popupmenu_menu, MENU_UP); + break; + case BINDING_SCROLL_DOWN: + menu_driver(popupmenu_menu, MENU_DOWN); + break; + case BINDING_QUIT: + boardmenu->popup_open = 0; + break; + } +} + void normal_renderstep(BoardMenu* boardmenu) { @@ -226,8 +255,9 @@ normal_renderstep(BoardMenu* boardmenu) void popup_renderstep(BoardMenu* boardmenu) { - if (boardmenu->popup_menu == NULL) return; + if (boardmenu->popupmenu == NULL) return; + render_popupmenu(boardmenu->popupmenu); } void @@ -239,3 +269,10 @@ save_to_file(char* filepath, BoardMenu* boardmenu) begin_write(filepath, writeboard); free_board(writeboard); } + +void +exit_step(BoardMenu* boardmenu) +{ + exit_tscurses(); + exit(0); +}