X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=render.c;h=3779273f55ad6436ddc76ea5c121ad14bceff1cb;hb=2239977d543e94803e2b0ecb07021152498350c8;hp=4601ce9c99dfa87de7ce60028ba5c3d362f1b98f;hpb=0b8a464220518abd203044984daaed9727a5029d;p=taskasaur.git diff --git a/render.c b/render.c index 4601ce9..3779273 100644 --- a/render.c +++ b/render.c @@ -3,7 +3,7 @@ #include #include "config.h" -#define POPUP_MENU_PAD_TOP 2 +#define POPUP_MENU_PAD_TOP 4 #define POPUP_MENU_PAD_BOTTOM 2 #define POPUP_MENU_PAD_LEFT 2 #define POPUP_MENU_PAD_RIGHT 1 @@ -11,6 +11,14 @@ int init_tscolors(void); int create_todowin(void); +/* menu render callbacks */ +void render_menuitem(Menu* menu, int item_index, int start_y); +int menuitem_height(MenuItem* menuitem); + +void render_popup_menuitem(Menu* menu, int item_index, int start_y); +int popup_menuitem_height(MenuItem* menuitem); + + /* init stuff */ int init_tscurses(void) @@ -120,6 +128,10 @@ make_menus(Board* board, int todolist_length) set_menu_win(new_menu, win); set_menu_focus(new_menu, i == 0); // make first win focused + /* set menu render callbacks */ + set_menu_renderitem(new_menu, *render_menuitem); + set_menu_itemheight(new_menu, *menuitem_height); + /* refresh */ refresh(); wrefresh(win); @@ -130,6 +142,44 @@ make_menus(Board* board, int todolist_length) return menu_list; } +void +render_menuitem(Menu* menu, int item_index, int start_y) +{ + MenuItem* curitem; + WINDOW* menu_win; + int hlcolor; + + curitem = get_menu_item(menu, item_index); + menu_win = get_menu_win(menu); + + /* color selected item */ + hlcolor = COLOR_PAIR((item_index == get_selected_item(menu) && get_menu_focused(menu) == true) ? TS_SELECTED : TS_NONSELECTED); + wattron(menu_win, hlcolor); + mvwprintw(menu_win, start_y, 0, get_menuitem_title(curitem)); + wattroff(menu_win, hlcolor); + + /* display number of items */ + if (strlen(get_menuitem_descrip(curitem)) > 0) { + wattron(menu_win, COLOR_PAIR(TS_ITEMCOUNT)); + mvwprintw(menu_win, start_y+1, 0, get_menuitem_descrip(curitem)); + wattroff(menu_win, COLOR_PAIR(TS_ITEMCOUNT)); + } + +} + +int +menuitem_height(MenuItem* menuitem) +{ + int lines; + + lines = 1; + if (strlen(get_menuitem_descrip(menuitem)) > 0) { + lines += 1; + } + + return lines; +} + MenuItem** todolist_to_menuitem(TodoItem** item_list, int list_length) { @@ -342,8 +392,13 @@ make_popupmenu(TodoItem* itemdata) set_menu_win(popupmenu_menu, popupmenu_menu_win); set_menu_focus(popupmenu_menu, 1); + set_menu_renderitem(popupmenu_menu, render_popup_menuitem); + set_menu_itemheight(popupmenu_menu, popup_menuitem_height); box(popupmenu_win, 0, 0); - box(popupmenu_menu_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; @@ -352,11 +407,42 @@ make_popupmenu(TodoItem* itemdata) return new_popupmenu; } +void +render_popup_menuitem(Menu* menu, int item_index, int start_y) +{ + MenuItem* curitem; + WINDOW* menu_win; + int hlcolor; + + curitem = get_menu_item(menu, item_index); + menu_win = get_menu_win(menu); + + /* color selected item */ + hlcolor = COLOR_PAIR((item_index == get_selected_item(menu) && get_menu_focused(menu) == true) ? TS_SELECTED : TS_NONSELECTED); + wattron(menu_win, hlcolor); + + wmove(menu_win, start_y, 0); + /* print subtask done indicator */ + if (strlen(get_menuitem_title(curitem)) > 0) + wprintw( + menu_win, + (((SubTask*)get_menuitem_userdata(curitem))->done == SubTaskState_done) ? "[X] " : "[ ] " + ); + wprintw(menu_win, get_menuitem_title(curitem)); + + wattroff(menu_win, hlcolor); +} + +int +popup_menuitem_height(MenuItem* menuitem) +{ + return 1; // account for wrap later +} + int render_popupmenu(PopupMenu* popupmenu) { render_menu(popupmenu->menu); - wrefresh(popupmenu->win); return 0;