+ 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
+}
+
+/* save menu state to userdata */
+/* sorta duct tape rn */
+/* find a way to tie TodoItem and MenuItem together better in the future */
+void
+save_popupmenu_state(Menu* popupmenu_menu)
+{
+ /* TodoItem* item_data; */
+
+ /* item_data = get_menu_userdata(popupmenu_menu); */
+ /* item_data->subtask_count = array_length(SubTask*, item_data->subtask_list); */
+
+}
+
+/* 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;