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;
}
/* 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;
}
/* 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
+ );
+ box(popup_win, 0, 0);
+
+ 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);
+
+ box(popup_win, 0, 0);
+
+ 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 */