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);
12 void normal_renderstep(BoardMenu* boardmenu);
13 void popup_renderstep(BoardMenu* boardmenu);
14 void save_to_file(char* filepath, BoardMenu* boardmenu);
17 main(int argc, char** argv)
19 printf("%c]0;%s - %s%c", '\033', "taskasaur", boardfile_name, '\007'); // need to reset after program exits
21 /* read from todo file */
23 board = begin_parse(boardfile_name);
24 /* log_todo(board); */
30 boardmenu = create_board_menu(board);
32 /* need to render before user presses anything */
33 normal_renderstep(boardmenu);
36 while ((ch = getch()) != BINDING_QUIT) {
38 if (boardmenu->popup_open == 0) {
39 normal_handleinput(boardmenu, ch);
40 normal_renderstep(boardmenu);
42 popup_renderstep(boardmenu);
47 /* save on exit - this causes weird stuff to happen, maybe it's not given enough time to write before program exits? */
48 /* save_to_file(boardfile_name, boardmenu); */
55 normal_handleinput(BoardMenu* boardmenu, int ch)
59 active_menu = boardmenu->menu_list[boardmenu->selected];
63 case BINDING_SCROLL_UP:
64 menu_driver(active_menu, MENU_UP);
66 case BINDING_SCROLL_DOWN:
67 menu_driver(active_menu, MENU_DOWN);
69 case BINDING_SCROLL_LEFT:
70 if (boardmenu->selected-1 < 0) break;
71 set_selected_menu(boardmenu, boardmenu->selected-1);
73 case BINDING_SCROLL_RIGHT:
74 if (boardmenu->selected+1 > boardmenu->menu_count-1) break;
75 set_selected_menu(boardmenu, boardmenu->selected+1);
77 case BINDING_JUMP_TOP:
78 menu_driver(active_menu, MENU_TOP);
80 case BINDING_JUMP_BOTTOM:
81 menu_driver(active_menu, MENU_BOTTOM);
83 case BINDING_MOVE_ITEM_UP:
84 menu_driver(active_menu, MENU_MOVE_UP);
86 case BINDING_MOVE_ITEM_DOWN:
87 menu_driver(active_menu, MENU_MOVE_DOWN);
89 case BINDING_MOVE_ITEM_LEFT:
90 if (boardmenu->selected-1 < 0) break;
91 if (get_menu_length(boardmenu->menu_list[boardmenu->selected]) == 0) break;
96 from_menu = boardmenu->menu_list[boardmenu->selected];
97 to_menu = boardmenu->menu_list[boardmenu->selected-1];
103 get_selected_item(from_menu)
106 get_selected_item(from_menu),
107 get_menu_length(to_menu)
112 get_selected_item(from_menu)
114 set_selected_menu(boardmenu, boardmenu->selected-1);
118 case BINDING_MOVE_ITEM_RIGHT:
119 if (boardmenu->selected >= boardmenu->menu_count-1) break;
120 if (get_menu_length(boardmenu->menu_list[boardmenu->selected]) == 0) break;
121 // this is legit cpy paste please fix this
126 from_menu = boardmenu->menu_list[boardmenu->selected];
127 to_menu = boardmenu->menu_list[boardmenu->selected+1];
133 get_selected_item(from_menu)
136 get_selected_item(from_menu),
137 get_menu_length(to_menu)
142 get_selected_item(from_menu)
144 set_selected_menu(boardmenu, boardmenu->selected+1);
148 case BINDING_DELETE_ITEM:
149 menu_driver(active_menu, MENU_DELETE);
151 case BINDING_APPEND_ITEM:
152 menu_driver(active_menu, MENU_APPEND);
154 case BINDING_INSERT_ABOVE:
155 menu_driver(active_menu, MENU_INSERT_ABOVE);
157 case BINDING_INSERT_BELOW:
158 menu_driver(active_menu, MENU_INSERT_BELOW);
160 /* case BINDING_MOVE_MENU_LEFT: */
161 /* if (boardmenu->selected-1 < 0) break; */
163 /* swap_menu(boardmenu, boardmenu->selected, boardmenu->selected-1); */
164 /* boardmenu->selected -= 1; */
165 /* set_selected_menu(boardmenu, boardmenu->selected); */
168 /* case BINDING_MOVE_MENU_RIGHT: */
169 /* if (boardmenu->selected >= boardmenu->menu_count-1) break; */
170 /* swap_menu(boardmenu, boardmenu->selected, boardmenu->selected+1); */
171 /* boardmenu->selected += 1; */
172 /* set_selected_menu(boardmenu, boardmenu->selected); */
175 case BINDING_EDIT_ITEM:
176 menu_driver(active_menu, MENU_EDIT);
181 TodoItem* sel_itemdata;
183 sel_menu = boardmenu->menu_list[boardmenu->selected];
184 sel_itemdata = (TodoItem*)get_menuitem_userdata(
185 get_menu_item(sel_menu, get_selected_item(sel_menu))
188 /* set mode to popup */
189 boardmenu->popup_menu = make_popup_menu(sel_itemdata);
190 boardmenu->popup_open = 1;
195 save_to_file(boardfile_name, boardmenu);
201 /* getmaxyx(stdscr, y, x); */
202 /* sprintf(out, "%d,%d", y, x); */
204 /* mvprintw(20, 20, out); */
205 /* resize_term(y, x); */
211 normal_renderstep(BoardMenu* boardmenu)
213 for (int i = 0; i < boardmenu->menu_count; i++) {
215 Menu* curmenu = boardmenu->menu_list[i];
217 /* update the descriptions - maybe not do this here */
218 for (int j = 0; j < get_menu_length(curmenu); j++) {
219 update_menuitem_descrip(get_menu_item(curmenu, j));
222 render_menu(curmenu);
227 popup_renderstep(BoardMenu* boardmenu)
229 if (boardmenu->popup_menu == NULL) return;
234 save_to_file(char* filepath, BoardMenu* boardmenu)
237 writeboard = boardmenu_to_board(boardmenu);
239 begin_write(filepath, writeboard);
240 free_board(writeboard);