X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=render.c;h=0c0270e17b192a20aceb9949715b1e61bda60bb0;hb=f06db8e7f1fd2769ad824d76ce5c047189da2a48;hp=ee77fe665edbb0c72369093b6576143d366fe4ad;hpb=abf215afaba441f488105fb9d30d95264c2e5850;p=taskasaur.git diff --git a/render.c b/render.c index ee77fe6..0c0270e 100644 --- a/render.c +++ b/render.c @@ -3,6 +3,11 @@ #include #include "config.h" +#define POPUP_MENU_PAD_TOP 4 +#define POPUP_MENU_PAD_BOTTOM 2 +#define POPUP_MENU_PAD_LEFT 2 +#define POPUP_MENU_PAD_RIGHT 1 + int init_tscolors(void); int create_todowin(void); @@ -45,6 +50,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 +90,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->popupmenu = NULL; + new_boardmenu->popup_open = 0; return new_boardmenu; } @@ -195,6 +203,13 @@ boardmenu_to_board(BoardMenu* boardmenu) return newboard; } +int +render_board(Board* board) +{ + + return 0; +} + int set_selected_menu(BoardMenu* boardmenu, int index) { @@ -291,10 +306,82 @@ update_menuitem_descrip(MenuItem* menuitem) } /* popup */ -WINDOW* -create_popup_win() +PopupMenu* +make_popupmenu(TodoItem* itemdata) +{ + PopupMenu* new_popupmenu; + MenuItem** subtask_menuitems; + Menu* popupmenu_menu; + WINDOW* popupmenu_win; + WINDOW* popupmenu_menu_win; + + new_popupmenu = malloc(sizeof(PopupMenu)); + + subtask_menuitems = subtasklist_to_menuitem(itemdata->subtask_list, itemdata->subtask_count); + popupmenu_menu = create_menu(strdup(""), subtask_menuitems); + + /* popup win */ + int maxheight, maxwidth; + getmaxyx(stdscr, maxheight, maxwidth); + popupmenu_win = newwin( + maxheight-2*POPUP_BORDER, + maxwidth-2*2*POPUP_BORDER, + POPUP_BORDER, + POPUP_BORDER*2 + ); + + int popup_maxheight, popup_maxwidth; + getmaxyx(popupmenu_win, popup_maxheight, popup_maxwidth); + popupmenu_menu_win = derwin( + popupmenu_win, + popup_maxheight-POPUP_MENU_PAD_TOP-POPUP_MENU_PAD_BOTTOM, + popup_maxwidth-POPUP_MENU_PAD_LEFT-POPUP_MENU_PAD_RIGHT, + POPUP_MENU_PAD_TOP, + POPUP_MENU_PAD_LEFT + ); + + set_menu_win(popupmenu_menu, popupmenu_menu_win); + set_menu_focus(popupmenu_menu, 1); + box(popupmenu_win, 0, 0); + + /* move this stuff to render phase later? */ + mvwprintw(popupmenu_win, 1, 2, itemdata->item_name); + mvwprintw(popupmenu_win, 2, 2, (strlen(itemdata->description) > 0) ? itemdata->description : "no description"); + + /* don't forget to free popupmenu after */ + new_popupmenu->win = popupmenu_win; + new_popupmenu->menu = popupmenu_menu; + + return new_popupmenu; +} + +int +render_popupmenu(PopupMenu* popupmenu) { - return NULL; + render_menu(popupmenu->menu); + wrefresh(popupmenu->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 */