2 #include "headers/parser.h"
3 #include "headers/render.h"
4 #include "headers/menu.h"
5 #include "headers/utils.h"
8 char* boardfile_name = "test_board.md";
10 void normal_handleinput(BoardMenu* boardmenu, int ch);
11 void popup_handleinput(BoardMenu* boardmenu, int ch);
13 void normal_renderstep(BoardMenu* boardmenu);
14 void popup_renderstep(BoardMenu* boardmenu);
15 void save_to_file(char* filepath, BoardMenu* boardmenu);
18 main(int argc, char** argv)
20 printf("%c]0;%s - %s%c", '\033', "taskasaur", boardfile_name, '\007'); // need to reset after program exits
22 /* read from todo file */
24 board = begin_parse(boardfile_name);
25 /* log_todo(board); */
31 boardmenu = create_board_menu(board);
33 /* need to render before user presses anything */
34 normal_renderstep(boardmenu);
37 while ((ch = getch()) != BINDING_QUIT) {
39 if (boardmenu->popup_open == 0) {
40 normal_handleinput(boardmenu, ch);
41 normal_renderstep(boardmenu);
43 popup_handleinput(boardmenu, ch);
44 popup_renderstep(boardmenu);
49 /* save on exit - this causes weird stuff to happen, maybe it's not given enough time to write before program exits? */
50 /* save_to_file(boardfile_name, boardmenu); */
57 normal_handleinput(BoardMenu* boardmenu, int ch)
61 active_menu = boardmenu->menu_list[boardmenu->selected];
65 case BINDING_SCROLL_UP:
66 menu_driver(active_menu, MENU_UP);
68 case BINDING_SCROLL_DOWN:
69 menu_driver(active_menu, MENU_DOWN);
71 case BINDING_SCROLL_LEFT:
72 if (boardmenu->selected-1 < 0) break;
73 set_selected_menu(boardmenu, boardmenu->selected-1);
75 case BINDING_SCROLL_RIGHT:
76 if (boardmenu->selected+1 > boardmenu->menu_count-1) break;
77 set_selected_menu(boardmenu, boardmenu->selected+1);
79 case BINDING_JUMP_TOP:
80 menu_driver(active_menu, MENU_TOP);
82 case BINDING_JUMP_BOTTOM:
83 menu_driver(active_menu, MENU_BOTTOM);
85 case BINDING_MOVE_ITEM_UP:
86 menu_driver(active_menu, MENU_MOVE_UP);
88 case BINDING_MOVE_ITEM_DOWN:
89 menu_driver(active_menu, MENU_MOVE_DOWN);
91 case BINDING_MOVE_ITEM_LEFT:
92 if (boardmenu->selected-1 < 0) break;
93 if (get_menu_length(boardmenu->menu_list[boardmenu->selected]) == 0) break;
98 from_menu = boardmenu->menu_list[boardmenu->selected];
99 to_menu = boardmenu->menu_list[boardmenu->selected-1];
105 get_selected_item(from_menu)
108 get_selected_item(from_menu),
109 get_menu_length(to_menu)
114 get_selected_item(from_menu)
116 set_selected_menu(boardmenu, boardmenu->selected-1);
120 case BINDING_MOVE_ITEM_RIGHT:
121 if (boardmenu->selected >= boardmenu->menu_count-1) break;
122 if (get_menu_length(boardmenu->menu_list[boardmenu->selected]) == 0) break;
123 // this is legit cpy paste please fix this
128 from_menu = boardmenu->menu_list[boardmenu->selected];
129 to_menu = boardmenu->menu_list[boardmenu->selected+1];
135 get_selected_item(from_menu)
138 get_selected_item(from_menu),
139 get_menu_length(to_menu)
144 get_selected_item(from_menu)
146 set_selected_menu(boardmenu, boardmenu->selected+1);
150 case BINDING_DELETE_ITEM:
151 menu_driver(active_menu, MENU_DELETE);
153 case BINDING_APPEND_ITEM:
154 menu_driver(active_menu, MENU_APPEND);
156 case BINDING_INSERT_ABOVE:
157 menu_driver(active_menu, MENU_INSERT_ABOVE);
159 case BINDING_INSERT_BELOW:
160 menu_driver(active_menu, MENU_INSERT_BELOW);
162 /* case BINDING_MOVE_MENU_LEFT: */
163 /* if (boardmenu->selected-1 < 0) break; */
165 /* swap_menu(boardmenu, boardmenu->selected, boardmenu->selected-1); */
166 /* boardmenu->selected -= 1; */
167 /* set_selected_menu(boardmenu, boardmenu->selected); */
170 /* case BINDING_MOVE_MENU_RIGHT: */
171 /* if (boardmenu->selected >= boardmenu->menu_count-1) break; */
172 /* swap_menu(boardmenu, boardmenu->selected, boardmenu->selected+1); */
173 /* boardmenu->selected += 1; */
174 /* set_selected_menu(boardmenu, boardmenu->selected); */
177 case BINDING_EDIT_ITEM:
178 menu_driver(active_menu, MENU_EDIT);
183 TodoItem* sel_itemdata;
185 sel_menu = boardmenu->menu_list[boardmenu->selected];
186 sel_itemdata = (TodoItem*)get_menuitem_userdata(
187 get_menu_item(sel_menu, get_selected_item(sel_menu))
190 /* set mode to popup */
191 boardmenu->popup_menu = make_popup_menu(sel_itemdata);
192 boardmenu->popup_open = 1;
197 save_to_file(boardfile_name, boardmenu);
203 /* getmaxyx(stdscr, y, x); */
204 /* sprintf(out, "%d,%d", y, x); */
206 /* mvprintw(20, 20, out); */
207 /* resize_term(y, x); */
213 popup_handleinput(BoardMenu* boardmenu, int ch)
217 popup_menu = boardmenu->popup_menu;
221 case BINDING_SCROLL_UP:
222 menu_driver(popup_menu, MENU_UP);
224 case BINDING_SCROLL_DOWN:
225 menu_driver(popup_menu, MENU_DOWN);
231 normal_renderstep(BoardMenu* boardmenu)
233 for (int i = 0; i < boardmenu->menu_count; i++) {
235 Menu* curmenu = boardmenu->menu_list[i];
237 /* update the descriptions - maybe not do this here */
238 for (int j = 0; j < get_menu_length(curmenu); j++) {
239 update_menuitem_descrip(get_menu_item(curmenu, j));
242 render_menu(curmenu);
247 popup_renderstep(BoardMenu* boardmenu)
249 if (boardmenu->popup_menu == NULL) return;
251 render_popup_menu(boardmenu->popup_menu);
256 save_to_file(char* filepath, BoardMenu* boardmenu)
259 writeboard = boardmenu_to_board(boardmenu);
261 begin_write(filepath, writeboard);
262 free_board(writeboard);