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);
12 void generic_handleinput(Menu* menu, int ch);
14 void 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 renderstep(boardmenu);
43 if (boardmenu->popup_open == 0) {
44 normal_handleinput(boardmenu, ch);
46 popup_handleinput(boardmenu, ch);
49 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_LEFT:
69 if (boardmenu->selected-1 < 0) break;
70 set_selected_menu(boardmenu, boardmenu->selected-1);
72 case BINDING_SCROLL_RIGHT:
73 if (boardmenu->selected+1 > boardmenu->menu_count-1) break;
74 set_selected_menu(boardmenu, boardmenu->selected+1);
76 case BINDING_MOVE_ITEM_LEFT:
77 if (boardmenu->selected-1 < 0) break;
78 if (get_menu_length(boardmenu->menu_list[boardmenu->selected]) == 0) break;
83 from_menu = boardmenu->menu_list[boardmenu->selected];
84 to_menu = boardmenu->menu_list[boardmenu->selected-1];
88 get_selected_menuitem(from_menu),
90 get_selected_item(from_menu),
91 get_menu_length(to_menu)
96 get_selected_item(from_menu)
98 set_selected_menu(boardmenu, boardmenu->selected-1);
102 case BINDING_MOVE_ITEM_RIGHT:
103 if (boardmenu->selected >= boardmenu->menu_count-1) break;
104 if (get_menu_length(boardmenu->menu_list[boardmenu->selected]) == 0) break;
105 // this is legit cpy paste please fix this
110 from_menu = boardmenu->menu_list[boardmenu->selected];
111 to_menu = boardmenu->menu_list[boardmenu->selected+1];
115 get_selected_menuitem(from_menu),
117 get_selected_item(from_menu),
118 get_menu_length(to_menu)
123 get_selected_item(from_menu)
125 set_selected_menu(boardmenu, boardmenu->selected+1);
129 /* case BINDING_MOVE_MENU_LEFT: */
130 /* if (boardmenu->selected-1 < 0) break; */
132 /* swap_menu(boardmenu, boardmenu->selected, boardmenu->selected-1); */
133 /* boardmenu->selected -= 1; */
134 /* set_selected_menu(boardmenu, boardmenu->selected); */
137 /* case BINDING_MOVE_MENU_RIGHT: */
138 /* if (boardmenu->selected >= boardmenu->menu_count-1) break; */
139 /* swap_menu(boardmenu, boardmenu->selected, boardmenu->selected+1); */
140 /* boardmenu->selected += 1; */
141 /* set_selected_menu(boardmenu, boardmenu->selected); */
147 TodoItem* sel_itemdata;
149 sel_menu = boardmenu->menu_list[boardmenu->selected];
150 sel_itemdata = (TodoItem*)get_menuitem_userdata(
151 get_menu_item(sel_menu, get_selected_item(sel_menu))
154 /* set mode to popup */
155 boardmenu->popupmenu = make_popupmenu(sel_itemdata);
156 boardmenu->popup_open = 1;
162 save_to_file(boardfile_name, boardmenu);
165 exit_step(boardmenu);
171 /* getmaxyx(stdscr, y, x); */
172 /* sprintf(out, "%d,%d", y, x); */
174 /* mvprintw(20, 20, out); */
175 /* resize_term(y, x); */
179 generic_handleinput(active_menu, ch);
185 popup_handleinput(BoardMenu* boardmenu, int ch)
187 Menu* popupmenu_menu;
189 popupmenu_menu = boardmenu->popupmenu->menu;
194 boardmenu->popup_open = 0;
198 renderstep(boardmenu);
201 case BINDING_TOGGLE_DONE:
203 SubTask* curitem_data = (SubTask*)get_menuitem_userdata(get_menu_item(popupmenu_menu, get_selected_item(popupmenu_menu)));
204 curitem_data->done = (curitem_data->done == SubTaskState_todo) ? SubTaskState_done : SubTaskState_todo;
205 /* save_popupmenu_state(popupmenu_menu); */
211 generic_handleinput(popupmenu_menu, ch);
216 generic_handleinput(Menu* menu, int ch)
220 case BINDING_SCROLL_UP:
221 menu_driver(menu, MENU_UP);
223 case BINDING_SCROLL_DOWN:
224 menu_driver(menu, MENU_DOWN);
226 case BINDING_JUMP_TOP:
227 menu_driver(menu, MENU_TOP);
229 case BINDING_JUMP_BOTTOM:
230 menu_driver(menu, MENU_BOTTOM);
232 case BINDING_MOVE_ITEM_UP:
233 menu_driver(menu, MENU_MOVE_UP);
235 case BINDING_MOVE_ITEM_DOWN:
236 menu_driver(menu, MENU_MOVE_DOWN);
238 case BINDING_DELETE_ITEM:
239 menu_driver(menu, MENU_DELETE);
241 case BINDING_APPEND_ITEM:
242 menu_driver(menu, MENU_APPEND);
244 case BINDING_INSERT_ABOVE:
245 menu_driver(menu, MENU_INSERT_ABOVE);
247 case BINDING_INSERT_BELOW:
248 menu_driver(menu, MENU_INSERT_BELOW);
250 case BINDING_EDIT_ITEM:
251 menu_driver(menu, MENU_EDIT);
257 renderstep(BoardMenu* boardmenu)
259 /* render main board menu */
260 if (boardmenu->popup_open == 0) {
261 for (int i = 0; i < boardmenu->menu_count; i++) {
263 Menu* curmenu = boardmenu->menu_list[i];
265 render_menu(curmenu);
268 /* render popup if it's open */
271 // something weird happened, maybe raise error
272 /* if (boradmenu->popupmenu == NULL) return; */
274 render_menu(boardmenu->popupmenu->menu);
275 wrefresh(boardmenu->popupmenu->win);
282 save_to_file(char* filepath, BoardMenu* boardmenu)
285 writeboard = boardmenu_to_board(boardmenu);
287 begin_write(filepath, writeboard);
288 free_board(writeboard);
292 exit_step(BoardMenu* boardmenu)