refactor + man
[taskasaur.git] / taskasaur.c
1
2 #include "headers/parser.h"
3 #include "headers/render.h"
4 #include "headers/menu.h"
5 #include "headers/utils.h"
6 #include "config.h"
7
8 int
9 main(int argc, char** argv)
10 {
11     char* boardfile_name = "test_board.md"; 
12     printf("%c]0;%s - %s%c", '\033', "taskasaur", boardfile_name, '\007'); // need to reset after program exits
13
14     /* read from todo file */
15     Board* board;
16     board = begin_parse(boardfile_name);
17     /* log_todo(board); */
18
19     /* init curses */
20     init_tscurses();
21
22     BoardMenu* boardmenu;
23     boardmenu = create_board_menu(board);
24
25     // this is temp
26     for (int i = 0; i < boardmenu->menu_count; i++) {
27         render_menu(boardmenu->menu_list[i]);
28     }
29
30     char ch;
31     while ((ch = getch()) != BINDING_QUIT) {
32
33         Menu* active_menu;
34         active_menu = boardmenu->menu_list[boardmenu->selected];
35
36         switch (ch) {
37
38             case BINDING_SCROLL_UP:
39                 menu_driver(active_menu, MENU_UP);
40                 break;
41             case BINDING_SCROLL_DOWN:
42                 menu_driver(active_menu, MENU_DOWN);
43                 break;
44             case BINDING_SCROLL_LEFT:
45                 if (boardmenu->selected-1 < 0) break;
46                 set_selected_menu(boardmenu, boardmenu->selected-1);
47                 break;
48             case BINDING_SCROLL_RIGHT:
49                 if (boardmenu->selected+1 > boardmenu->menu_count-1) break;
50                 set_selected_menu(boardmenu, boardmenu->selected+1);
51                 break;
52             case BINDING_JUMP_TOP:
53                 menu_driver(active_menu, MENU_TOP);
54                 break;
55             case BINDING_JUMP_BOTTOM:
56                 menu_driver(active_menu, MENU_BOTTOM);
57                 break;
58             case BINDING_MOVE_ITEM_UP:
59                 menu_driver(active_menu, MENU_MOVE_UP);
60                 break;
61             case BINDING_MOVE_ITEM_DOWN:
62                 menu_driver(active_menu, MENU_MOVE_DOWN);
63                 break;
64             case BINDING_MOVE_ITEM_LEFT:
65                 if (boardmenu->selected-1 < 0) break;
66                 {
67                     Menu* from_menu;
68                     Menu* to_menu;
69
70                     from_menu = boardmenu->menu_list[boardmenu->selected],
71                     to_menu = boardmenu->menu_list[boardmenu->selected-1],
72
73                     insert_item(
74                         to_menu,
75                         get_menu_item(
76                             from_menu,
77                             get_selected_item(from_menu)
78                         ),
79                         min(
80                             get_selected_item(from_menu),
81                             get_menu_length(to_menu)
82                         )
83                     );
84                     delete_item(
85                         from_menu,
86                         get_selected_item(from_menu) 
87                     );
88                     set_selected_menu(boardmenu, boardmenu->selected-1);
89                 }
90
91                 break;
92             case BINDING_MOVE_ITEM_RIGHT:
93                 if (boardmenu->selected >= boardmenu->menu_count-1) break;
94                 // this is legit cpy paste please fix this
95                 {
96                     Menu* from_menu;
97                     Menu* to_menu;
98
99                     from_menu = boardmenu->menu_list[boardmenu->selected],
100                     to_menu = boardmenu->menu_list[boardmenu->selected+1],
101
102                     insert_item(
103                         to_menu,
104                         get_menu_item(
105                             from_menu,
106                             get_selected_item(from_menu)
107                         ),
108                         min(
109                             get_selected_item(from_menu),
110                             get_menu_length(to_menu)
111                         )
112                     );
113                     delete_item(
114                         from_menu,
115                         get_selected_item(from_menu) 
116                     );
117                     set_selected_menu(boardmenu, boardmenu->selected+1);
118                 }
119
120                 break;
121             case BINDING_DELETE_ITEM:
122                 menu_driver(active_menu, MENU_DELETE);
123                 break;
124             case BINDING_APPEND_ITEM:
125                 menu_driver(active_menu, MENU_APPEND);
126                 break;
127             case BINDING_INSERT_ABOVE:
128                 menu_driver(active_menu, MENU_INSERT_ABOVE);
129                 break;
130             case BINDING_INSERT_BELOW:
131                 menu_driver(active_menu, MENU_INSERT_BELOW);
132                 break;
133             /* case BINDING_MOVE_MENU_LEFT: */
134             /*     if (boardmenu->selected-1 < 0) break; */
135
136             /*     swap_menu(boardmenu, boardmenu->selected, boardmenu->selected-1); */
137                 /* boardmenu->selected -= 1; */
138                 /* set_selected_menu(boardmenu, boardmenu->selected); */
139
140                 /* break; */
141             /* case BINDING_MOVE_MENU_RIGHT: */
142                 /* if (boardmenu->selected >= boardmenu->menu_count-1) break; */
143                 /* swap_menu(boardmenu, boardmenu->selected, boardmenu->selected+1); */
144                 /* boardmenu->selected += 1; */
145                 /* set_selected_menu(boardmenu, boardmenu->selected); */
146
147                 /* break; */
148             case BINDING_EDIT_ITEM:
149                 menu_driver(active_menu, MENU_EDIT);
150                 break;
151             case BINDING_SELECT:
152                 
153                 break;
154             case BINDING_WRITE:
155                 {
156                     Board* writeboard;
157                     writeboard = boardmenu_to_board(boardmenu);
158
159                     begin_write(boardfile_name, writeboard);
160                     free_board(writeboard);
161                 }
162
163                 break;
164         }
165
166         for (int i = 0; i < boardmenu->menu_count; i++) {
167             render_menu(boardmenu->menu_list[i]);
168         }
169
170     }
171
172     exit_tscurses();
173     return 0;    
174 }
175