X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=taskasaur.c;h=8c44d268f94ee11db3dd4525e5ae70ac817537ab;hb=8276ee5a5a1262b062d39c627c8c1abf9568c4fa;hp=582d496e33a0150feb745355930c7cfbe98c001f;hpb=fc9d31162f04dd3ceb2d222e3aa81549095f767b;p=taskasaur.git diff --git a/taskasaur.c b/taskasaur.c index 582d496..8c44d26 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 generic_handleinput(Menu* menu, int ch); -void normal_renderstep(BoardMenu* boardmenu); -void popup_renderstep(BoardMenu* boardmenu); +void renderstep(BoardMenu* boardmenu); void save_to_file(char* filepath, BoardMenu* boardmenu); +void exit_step(BoardMenu* boardmenu); + int main(int argc, char** argv) { @@ -30,24 +33,26 @@ main(int argc, char** argv) boardmenu = create_board_menu(board); /* need to render before user presses anything */ - normal_renderstep(boardmenu); + 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_renderstep(boardmenu); + popup_handleinput(boardmenu, ch); } + renderstep(boardmenu); + } /* 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; } @@ -60,12 +65,6 @@ normal_handleinput(BoardMenu* boardmenu, int ch) switch (ch) { - case BINDING_SCROLL_UP: - menu_driver(active_menu, MENU_UP); - break; - case BINDING_SCROLL_DOWN: - menu_driver(active_menu, MENU_DOWN); - break; case BINDING_SCROLL_LEFT: if (boardmenu->selected-1 < 0) break; set_selected_menu(boardmenu, boardmenu->selected-1); @@ -74,18 +73,6 @@ normal_handleinput(BoardMenu* boardmenu, int ch) if (boardmenu->selected+1 > boardmenu->menu_count-1) break; set_selected_menu(boardmenu, boardmenu->selected+1); break; - case BINDING_JUMP_TOP: - menu_driver(active_menu, MENU_TOP); - break; - case BINDING_JUMP_BOTTOM: - menu_driver(active_menu, MENU_BOTTOM); - break; - case BINDING_MOVE_ITEM_UP: - menu_driver(active_menu, MENU_MOVE_UP); - break; - case BINDING_MOVE_ITEM_DOWN: - menu_driver(active_menu, MENU_MOVE_DOWN); - break; case BINDING_MOVE_ITEM_LEFT: if (boardmenu->selected-1 < 0) break; if (get_menu_length(boardmenu->menu_list[boardmenu->selected]) == 0) break; @@ -98,10 +85,7 @@ normal_handleinput(BoardMenu* boardmenu, int ch) insert_item( to_menu, - get_menu_item( - from_menu, - get_selected_item(from_menu) - ), + get_selected_menuitem(from_menu), min( get_selected_item(from_menu), get_menu_length(to_menu) @@ -128,10 +112,7 @@ normal_handleinput(BoardMenu* boardmenu, int ch) insert_item( to_menu, - get_menu_item( - from_menu, - get_selected_item(from_menu) - ), + get_selected_menuitem(from_menu), min( get_selected_item(from_menu), get_menu_length(to_menu) @@ -144,18 +125,6 @@ normal_handleinput(BoardMenu* boardmenu, int ch) set_selected_menu(boardmenu, boardmenu->selected+1); } - break; - case BINDING_DELETE_ITEM: - menu_driver(active_menu, MENU_DELETE); - break; - case BINDING_APPEND_ITEM: - menu_driver(active_menu, MENU_APPEND); - break; - case BINDING_INSERT_ABOVE: - menu_driver(active_menu, MENU_INSERT_ABOVE); - break; - case BINDING_INSERT_BELOW: - menu_driver(active_menu, MENU_INSERT_BELOW); break; /* case BINDING_MOVE_MENU_LEFT: */ /* if (boardmenu->selected-1 < 0) break; */ @@ -172,9 +141,6 @@ normal_handleinput(BoardMenu* boardmenu, int ch) /* set_selected_menu(boardmenu, boardmenu->selected); */ /* break; */ - case BINDING_EDIT_ITEM: - menu_driver(active_menu, MENU_EDIT); - break; case BINDING_SELECT: { Menu* sel_menu; @@ -186,14 +152,18 @@ 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; + } break; case BINDING_WRITE: save_to_file(boardfile_name, boardmenu); break; + case BINDING_QUIT: + exit_step(boardmenu); + break; case KEY_RESIZE: /* ; */ /* int y, x; */ @@ -204,30 +174,108 @@ normal_handleinput(BoardMenu* boardmenu, int ch) /* mvprintw(20, 20, out); */ /* resize_term(y, x); */ break; + + default: + generic_handleinput(active_menu, ch); + } } void -normal_renderstep(BoardMenu* boardmenu) +popup_handleinput(BoardMenu* boardmenu, int ch) { - for (int i = 0; i < boardmenu->menu_count; i++) { + Menu* popupmenu_menu; - Menu* curmenu = boardmenu->menu_list[i]; + popupmenu_menu = boardmenu->popupmenu->menu; - /* update the descriptions - maybe not do this here */ - for (int j = 0; j < get_menu_length(curmenu); j++) { - update_menuitem_descrip(get_menu_item(curmenu, j)); - } + switch (ch) { - render_menu(curmenu); - } + case BINDING_QUIT: + boardmenu->popup_open = 0; + + /* reset screen */ + clear(); + renderstep(boardmenu); + break; + + case BINDING_TOGGLE_DONE: + { + SubTask* curitem_data = (SubTask*)get_menuitem_userdata(get_menu_item(popupmenu_menu, get_selected_item(popupmenu_menu))); + curitem_data->done = (curitem_data->done == SubTaskState_todo) ? SubTaskState_done : SubTaskState_todo; + /* save_popupmenu_state(popupmenu_menu); */ + } + + break; + + default: + generic_handleinput(popupmenu_menu, ch); + } } void -popup_renderstep(BoardMenu* boardmenu) +generic_handleinput(Menu* menu, int ch) { - if (boardmenu->popup_menu == NULL) return; + switch (ch) { + + case BINDING_SCROLL_UP: + menu_driver(menu, MENU_UP); + break; + case BINDING_SCROLL_DOWN: + menu_driver(menu, MENU_DOWN); + break; + case BINDING_JUMP_TOP: + menu_driver(menu, MENU_TOP); + break; + case BINDING_JUMP_BOTTOM: + menu_driver(menu, MENU_BOTTOM); + break; + case BINDING_MOVE_ITEM_UP: + menu_driver(menu, MENU_MOVE_UP); + break; + case BINDING_MOVE_ITEM_DOWN: + menu_driver(menu, MENU_MOVE_DOWN); + break; + case BINDING_DELETE_ITEM: + menu_driver(menu, MENU_DELETE); + break; + case BINDING_APPEND_ITEM: + menu_driver(menu, MENU_APPEND); + break; + case BINDING_INSERT_ABOVE: + menu_driver(menu, MENU_INSERT_ABOVE); + break; + case BINDING_INSERT_BELOW: + menu_driver(menu, MENU_INSERT_BELOW); + break; + case BINDING_EDIT_ITEM: + menu_driver(menu, MENU_EDIT); + break; + } +} + +void +renderstep(BoardMenu* boardmenu) +{ + /* render main board menu */ + if (boardmenu->popup_open == 0) { + for (int i = 0; i < boardmenu->menu_count; i++) { + + Menu* curmenu = boardmenu->menu_list[i]; + + render_menu(curmenu); + } + + /* render popup if it's open */ + } else { + + // something weird happened, maybe raise error + /* if (boradmenu->popupmenu == NULL) return; */ + render_menu(boardmenu->popupmenu->menu); + wrefresh(boardmenu->popupmenu->win); + + } + refresh(); } void @@ -239,3 +287,10 @@ save_to_file(char* filepath, BoardMenu* boardmenu) begin_write(filepath, writeboard); free_board(writeboard); } + +void +exit_step(BoardMenu* boardmenu) +{ + exit_tscurses(); + exit(0); +}