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);
17 void exit_step(BoardMenu* boardmenu);
20 main(int argc, char** argv)
22 printf("%c]0;%s - %s%c", '\033', "taskasaur", boardfile_name, '\007'); // need to reset after program exits
24 /* read from todo file */
26 board = begin_parse(boardfile_name);
27 /* log_todo(board); */
33 boardmenu = create_board_menu(board);
35 /* need to render before user presses anything */
36 normal_renderstep(boardmenu);
43 if (boardmenu->popup_open == 0) {
44 normal_handleinput(boardmenu, ch);
45 normal_renderstep(boardmenu);
47 popup_handleinput(boardmenu, ch);
48 popup_renderstep(boardmenu);
53 /* save on exit - this causes weird stuff to happen, maybe it's not given enough time to write before program exits? */
54 /* save_to_file(boardfile_name, boardmenu); */
60 normal_handleinput(BoardMenu* boardmenu, int ch)
64 active_menu = boardmenu->menu_list[boardmenu->selected];
68 case BINDING_SCROLL_UP:
69 menu_driver(active_menu, MENU_UP);
71 case BINDING_SCROLL_DOWN:
72 menu_driver(active_menu, MENU_DOWN);
74 case BINDING_SCROLL_LEFT:
75 if (boardmenu->selected-1 < 0) break;
76 set_selected_menu(boardmenu, boardmenu->selected-1);
78 case BINDING_SCROLL_RIGHT:
79 if (boardmenu->selected+1 > boardmenu->menu_count-1) break;
80 set_selected_menu(boardmenu, boardmenu->selected+1);
82 case BINDING_JUMP_TOP:
83 menu_driver(active_menu, MENU_TOP);
85 case BINDING_JUMP_BOTTOM:
86 menu_driver(active_menu, MENU_BOTTOM);
88 case BINDING_MOVE_ITEM_UP:
89 menu_driver(active_menu, MENU_MOVE_UP);
91 case BINDING_MOVE_ITEM_DOWN:
92 menu_driver(active_menu, MENU_MOVE_DOWN);
94 case BINDING_MOVE_ITEM_LEFT:
95 if (boardmenu->selected-1 < 0) break;
96 if (get_menu_length(boardmenu->menu_list[boardmenu->selected]) == 0) break;
101 from_menu = boardmenu->menu_list[boardmenu->selected];
102 to_menu = boardmenu->menu_list[boardmenu->selected-1];
108 get_selected_item(from_menu)
111 get_selected_item(from_menu),
112 get_menu_length(to_menu)
117 get_selected_item(from_menu)
119 set_selected_menu(boardmenu, boardmenu->selected-1);
123 case BINDING_MOVE_ITEM_RIGHT:
124 if (boardmenu->selected >= boardmenu->menu_count-1) break;
125 if (get_menu_length(boardmenu->menu_list[boardmenu->selected]) == 0) break;
126 // this is legit cpy paste please fix this
131 from_menu = boardmenu->menu_list[boardmenu->selected];
132 to_menu = boardmenu->menu_list[boardmenu->selected+1];
138 get_selected_item(from_menu)
141 get_selected_item(from_menu),
142 get_menu_length(to_menu)
147 get_selected_item(from_menu)
149 set_selected_menu(boardmenu, boardmenu->selected+1);
153 case BINDING_DELETE_ITEM:
154 menu_driver(active_menu, MENU_DELETE);
156 case BINDING_APPEND_ITEM:
157 menu_driver(active_menu, MENU_APPEND);
159 case BINDING_INSERT_ABOVE:
160 menu_driver(active_menu, MENU_INSERT_ABOVE);
162 case BINDING_INSERT_BELOW:
163 menu_driver(active_menu, MENU_INSERT_BELOW);
165 /* case BINDING_MOVE_MENU_LEFT: */
166 /* if (boardmenu->selected-1 < 0) break; */
168 /* swap_menu(boardmenu, boardmenu->selected, boardmenu->selected-1); */
169 /* boardmenu->selected -= 1; */
170 /* set_selected_menu(boardmenu, boardmenu->selected); */
173 /* case BINDING_MOVE_MENU_RIGHT: */
174 /* if (boardmenu->selected >= boardmenu->menu_count-1) break; */
175 /* swap_menu(boardmenu, boardmenu->selected, boardmenu->selected+1); */
176 /* boardmenu->selected += 1; */
177 /* set_selected_menu(boardmenu, boardmenu->selected); */
180 case BINDING_EDIT_ITEM:
181 menu_driver(active_menu, MENU_EDIT);
186 TodoItem* sel_itemdata;
188 sel_menu = boardmenu->menu_list[boardmenu->selected];
189 sel_itemdata = (TodoItem*)get_menuitem_userdata(
190 get_menu_item(sel_menu, get_selected_item(sel_menu))
193 /* set mode to popup */
194 boardmenu->popup_menu = make_popup_menu(sel_itemdata);
195 boardmenu->popup_open = 1;
200 save_to_file(boardfile_name, boardmenu);
203 exit_step(boardmenu);
209 /* getmaxyx(stdscr, y, x); */
210 /* sprintf(out, "%d,%d", y, x); */
212 /* mvprintw(20, 20, out); */
213 /* resize_term(y, x); */
219 popup_handleinput(BoardMenu* boardmenu, int ch)
223 popup_menu = boardmenu->popup_menu;
227 case BINDING_SCROLL_UP:
228 menu_driver(popup_menu, MENU_UP);
230 case BINDING_SCROLL_DOWN:
231 menu_driver(popup_menu, MENU_DOWN);
234 boardmenu->popup_open = 0;
240 normal_renderstep(BoardMenu* boardmenu)
242 for (int i = 0; i < boardmenu->menu_count; i++) {
244 Menu* curmenu = boardmenu->menu_list[i];
246 /* update the descriptions - maybe not do this here */
247 for (int j = 0; j < get_menu_length(curmenu); j++) {
248 update_menuitem_descrip(get_menu_item(curmenu, j));
251 render_menu(curmenu);
256 popup_renderstep(BoardMenu* boardmenu)
258 if (boardmenu->popup_menu == NULL) return;
260 render_popup_menu(boardmenu->popup_menu);
265 save_to_file(char* filepath, BoardMenu* boardmenu)
268 writeboard = boardmenu_to_board(boardmenu);
270 begin_write(filepath, writeboard);
271 free_board(writeboard);
275 exit_step(BoardMenu* boardmenu)