X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=render.c;h=2f9261c5b7798f9859ef696340a9c50fd0be3a59;hb=cc7da4297912fa4cacc4b13ebc59223df415a116;hp=6760c9cdb42d0cb3a7c55f1c75c0d79a785fa55d;hpb=951f634549621ffa65e1855ea32d75965fec13ab;p=taskasaur.git diff --git a/render.c b/render.c index 6760c9c..2f9261c 100644 --- a/render.c +++ b/render.c @@ -45,6 +45,7 @@ init_tscolors(void) init_pair(TS_NONSELECTED, non_selected_color, COLOR_BLACK); init_pair(TS_MENU_SELECTED, menu_selected_color, COLOR_BLACK); init_pair(TS_MENU_NONSELECTED, menu_non_selected_color, COLOR_BLACK); + init_pair(TS_ITEMCOUNT, item_count_color, COLOR_BLACK); return 0; } @@ -84,6 +85,8 @@ create_board_menu(Board* board) new_boardmenu->menu_list = make_menus(board, board->todolist_count); new_boardmenu->menu_count = board->todolist_count; new_boardmenu->selected = 0; + new_boardmenu->popup_menu = NULL; + new_boardmenu->popup_open = 0; return new_boardmenu; } @@ -195,6 +198,13 @@ boardmenu_to_board(BoardMenu* boardmenu) return newboard; } +int +render_board(Board* board) +{ + + return 0; +} + int set_selected_menu(BoardMenu* boardmenu, int index) { @@ -211,6 +221,7 @@ set_selected_menu(BoardMenu* boardmenu, int index) /* also try to jump to a similar position if possible */ /* rn theres a bug if old menu is empty */ new_pos = min(get_selected_item(old_menu), get_menu_length(new_menu)-1); + if (new_pos < 0) new_pos = 0; set_selected_item(new_menu, new_pos); boardmenu->selected = index; @@ -290,10 +301,65 @@ update_menuitem_descrip(MenuItem* menuitem) } /* popup */ -WINDOW* -create_popup_win() +Menu* +make_popup_menu(TodoItem* itemdata) { - return NULL; + MenuItem** subtask_menuitems; + Menu* new_popup_menu; + WINDOW* popup_win; + + subtask_menuitems = subtasklist_to_menuitem(itemdata->subtask_list, itemdata->subtask_count); + new_popup_menu = create_menu(strdup(""), subtask_menuitems); + + /* popup win */ + int maxheight, maxwidth; + getmaxyx(stdscr, maxheight, maxwidth); + popup_win = newwin( + maxheight-2*POPUP_BORDER, + maxwidth-2*2*POPUP_BORDER, + POPUP_BORDER, + POPUP_BORDER*2 + ); + + set_menu_win(new_popup_menu, popup_win); + set_menu_focus(new_popup_menu, 1); + + return new_popup_menu; +} + +int +render_popup_menu(Menu* popup_menu) +{ + WINDOW* popup_win; + + popup_win = get_menu_win(popup_menu); + wclear(popup_win); + + render_menu(popup_menu); + + wrefresh(popup_win); + + return 0; +} + +/* this is copy paste of other, prob abstract */ +MenuItem** +subtasklist_to_menuitem(SubTask** subtask_list, int list_length) +{ + MenuItem** items; + + items = malloc((list_length+1)*sizeof(MenuItem*)); + for (int i = 0; i < list_length; i++) { + MenuItem* new_menuitem; + new_menuitem = create_menuitem(subtask_list[i]->subtask_name); + /* using same struct, careful if it gets freed */ + set_menuitem_userdata(new_menuitem, subtask_list[i]); + + items[i] = new_menuitem; + } + + items[list_length] = 0; //null terminate + return items; } /* helpers */