2 #include "headers/parser.h"
3 #include "headers/render.h"
4 #include "headers/menu.h"
5 #include "headers/utils.h"
8 void render_step(BoardMenu* boardmenu);
9 void save_to_file(char* filepath, BoardMenu* boardmenu);
12 main(int argc, char** argv)
14 char* boardfile_name = "test_board.md";
15 printf("%c]0;%s - %s%c", '\033', "taskasaur", boardfile_name, '\007'); // need to reset after program exits
17 /* read from todo file */
19 board = begin_parse(boardfile_name);
20 /* log_todo(board); */
26 boardmenu = create_board_menu(board);
28 /* need to render before user presses anything */
29 render_step(boardmenu);
32 while ((ch = getch()) != BINDING_QUIT) {
35 active_menu = boardmenu->menu_list[boardmenu->selected];
39 case BINDING_SCROLL_UP:
40 menu_driver(active_menu, MENU_UP);
42 case BINDING_SCROLL_DOWN:
43 menu_driver(active_menu, MENU_DOWN);
45 case BINDING_SCROLL_LEFT:
46 if (boardmenu->selected-1 < 0) break;
47 set_selected_menu(boardmenu, boardmenu->selected-1);
49 case BINDING_SCROLL_RIGHT:
50 if (boardmenu->selected+1 > boardmenu->menu_count-1) break;
51 set_selected_menu(boardmenu, boardmenu->selected+1);
53 case BINDING_JUMP_TOP:
54 menu_driver(active_menu, MENU_TOP);
56 case BINDING_JUMP_BOTTOM:
57 menu_driver(active_menu, MENU_BOTTOM);
59 case BINDING_MOVE_ITEM_UP:
60 menu_driver(active_menu, MENU_MOVE_UP);
62 case BINDING_MOVE_ITEM_DOWN:
63 menu_driver(active_menu, MENU_MOVE_DOWN);
65 case BINDING_MOVE_ITEM_LEFT:
66 if (boardmenu->selected-1 < 0) break;
71 from_menu = boardmenu->menu_list[boardmenu->selected];
72 to_menu = boardmenu->menu_list[boardmenu->selected-1];
78 get_selected_item(from_menu)
81 get_selected_item(from_menu),
82 get_menu_length(to_menu)
87 get_selected_item(from_menu)
89 set_selected_menu(boardmenu, boardmenu->selected-1);
93 case BINDING_MOVE_ITEM_RIGHT:
94 if (boardmenu->selected >= boardmenu->menu_count-1) break;
95 // this is legit cpy paste please fix this
100 from_menu = boardmenu->menu_list[boardmenu->selected];
101 to_menu = boardmenu->menu_list[boardmenu->selected+1];
107 get_selected_item(from_menu)
110 get_selected_item(from_menu),
111 get_menu_length(to_menu)
116 get_selected_item(from_menu)
118 set_selected_menu(boardmenu, boardmenu->selected+1);
122 case BINDING_DELETE_ITEM:
123 menu_driver(active_menu, MENU_DELETE);
125 case BINDING_APPEND_ITEM:
126 menu_driver(active_menu, MENU_APPEND);
128 case BINDING_INSERT_ABOVE:
129 menu_driver(active_menu, MENU_INSERT_ABOVE);
131 case BINDING_INSERT_BELOW:
132 menu_driver(active_menu, MENU_INSERT_BELOW);
134 /* case BINDING_MOVE_MENU_LEFT: */
135 /* if (boardmenu->selected-1 < 0) break; */
137 /* swap_menu(boardmenu, boardmenu->selected, boardmenu->selected-1); */
138 /* boardmenu->selected -= 1; */
139 /* set_selected_menu(boardmenu, boardmenu->selected); */
142 /* case BINDING_MOVE_MENU_RIGHT: */
143 /* if (boardmenu->selected >= boardmenu->menu_count-1) break; */
144 /* swap_menu(boardmenu, boardmenu->selected, boardmenu->selected+1); */
145 /* boardmenu->selected += 1; */
146 /* set_selected_menu(boardmenu, boardmenu->selected); */
149 case BINDING_EDIT_ITEM:
150 menu_driver(active_menu, MENU_EDIT);
155 save_to_file(boardfile_name, boardmenu);
161 /* getmaxyx(stdscr, y, x); */
162 /* sprintf(out, "%d,%d", y, x); */
164 /* mvprintw(20, 20, out); */
165 /* resize_term(y, x); */
169 render_step(boardmenu);
173 /* save on exit - this causes weird stuff to happen, maybe it's not given enough time to write before program exits? */
174 /* save_to_file(boardfile_name, boardmenu); */
181 render_step(BoardMenu* boardmenu)
183 for (int i = 0; i < boardmenu->menu_count; i++) {
185 Menu* curmenu = boardmenu->menu_list[i];
187 /* update the descriptions - maybe not do this here */
188 for (int j = 0; j < get_menu_length(curmenu); j++) {
189 update_menuitem_descrip(get_menu_item(curmenu, j));
192 render_menu(curmenu);
197 save_to_file(char* filepath, BoardMenu* boardmenu)
200 writeboard = boardmenu_to_board(boardmenu);
202 begin_write(filepath, writeboard);
203 free_board(writeboard);