6 #include "headers/menu.h"
7 #include "headers/render.h"
8 #include "headers/utils.h"
10 typedef struct MenuItem {
15 MenuItem** menu_items;
23 int render_menu(Menu* menu);
26 create_menuitem(char* contents)
28 MenuItem* new_menuitem;
30 new_menuitem = malloc(sizeof(MenuItem));
31 new_menuitem->contents = contents;
37 create_menu(MenuItem** item_list)
41 new_menu = malloc(sizeof(Menu));
42 set_menu_items(new_menu, item_list);
43 new_menu->selected_item = 0;
44 set_menu_win(new_menu, stdscr);
50 set_menu_items(Menu* menu, MenuItem** item_list)
52 menu->menu_items = item_list;
53 menu->menu_length = array_length(MenuItem*, item_list);
59 set_menu_win(Menu* menu, WINDOW* win)
62 getmaxyx(menu->menu_win, menu->max_height, menu->max_width);
68 get_menu_items(Menu* menu)
74 render_menu(Menu* menu)
80 for (int i = 0; i < menu->menu_length; i++) {
86 /* wrap text by inserting newlines */
87 wrapped_text = wrap_text(menu->menu_items[i]->contents, menu->max_width, &wrapped_lines);
89 /* color selected item */
90 text_color = (i == menu->selected_item) ? TS_SELECTED : TS_NONSELECTED;
92 wattron(menu->menu_win, COLOR_PAIR(text_color));
93 mvwprintw(menu->menu_win, cur_line, 0, wrapped_text);
94 wattroff(menu->menu_win, COLOR_PAIR(text_color));
96 cur_line += wrapped_lines;
106 free_menu(Menu* menu)