free board
[taskasaur.git] / taskasaur.c
index 8732678..d3b8ba8 100644 (file)
@@ -15,6 +15,7 @@ typedef struct BoardMenu {
 } BoardMenu;
 
 BoardMenu* create_board_menu(Board* board);
+Board* boardmenu_to_board(BoardMenu* boardmenu);
 int set_selected_menu(BoardMenu* boardmenu, int index);
 
 MenuItem** todolist_to_menuitem(TodoItem** item_list, int list_length);
@@ -24,9 +25,12 @@ int swap_menu(BoardMenu* boardmenu, int src_index, int dest_index);
 int
 main(int argc, char** argv)
 {
+    char* boardfile_name = "test_board.md"; 
+    printf("%c]0;%s - %s%c", '\033', "taskasaur", boardfile_name, '\007'); // need to reset after program exits
+
     /* read from todo file */
     Board* board;
-    board = begin_parse("test_board.md");
+    board = begin_parse(boardfile_name);
     /* log_todo(board); */
 
     /* init curses */
@@ -150,16 +154,29 @@ main(int argc, char** argv)
                 /* boardmenu->selected -= 1; */
                 /* set_selected_menu(boardmenu, boardmenu->selected); */
 
-/*                 break; */
-/*             case BINDING_MOVE_MENU_RIGHT: */
-/*                 if (boardmenu->selected >= boardmenu->menu_count-1) break; */
-/*                 swap_menu(boardmenu, boardmenu->selected, boardmenu->selected+1); */
+                /* break; */
+            /* case BINDING_MOVE_MENU_RIGHT: */
+                /* if (boardmenu->selected >= boardmenu->menu_count-1) break; */
+                /* swap_menu(boardmenu, boardmenu->selected, boardmenu->selected+1); */
                 /* boardmenu->selected += 1; */
                 /* set_selected_menu(boardmenu, boardmenu->selected); */
 
-                break;
+                /* break; */
             case BINDING_EDIT_ITEM:
                 menu_driver(active_menu, MENU_EDIT);
+                break;
+            case BINDING_SELECT:
+                
+                break;
+            case BINDING_WRITE:
+                {
+                    Board* writeboard;
+                    writeboard = boardmenu_to_board(boardmenu);
+
+                    begin_write(boardfile_name, writeboard);
+                    free_board(writeboard);
+                }
+
                 break;
         }
 
@@ -167,7 +184,6 @@ main(int argc, char** argv)
             render_menu(boardmenu->menu_list[i]);
         }
 
-
     }
 
     exit_tscurses();
@@ -188,6 +204,50 @@ create_board_menu(Board* board)
     return new_boardmenu;
 }
 
+Board*
+boardmenu_to_board(BoardMenu* boardmenu)
+{ // STRINGS are sharing the same address as the one in MENU
+  // and MENUITEM, this may break something if u free this board
+  // consider copying the string
+
+    Board* newboard = malloc(sizeof(Board));
+    TodoList** new_todolist_list = malloc(sizeof(TodoList*));
+
+    for (int i = 0; i < boardmenu->menu_count; i++) {
+        Menu* curmenu = boardmenu->menu_list[i];
+
+        TodoList* new_todolist = malloc(sizeof(TodoList));
+        TodoItem** new_item_list = malloc(sizeof(TodoItem*));
+        new_todolist->list_name = strdup(get_menu_name(curmenu));
+        new_todolist->item_count = get_menu_length(curmenu);
+
+        for (int j = 0; j < get_menu_length(curmenu); j++) {
+            MenuItem* curmenuitem = get_menu_item(curmenu, j);
+
+            TodoItem* new_todoitem = malloc(sizeof(TodoItem));
+
+            new_todoitem->item_name = strdup(get_menuitem_title(curmenuitem));
+            new_todoitem->description = strdup(get_menuitem_descrip(curmenuitem));
+            new_todoitem->due = strdup(""); //TEMP! 
+            new_todoitem->subtask_list = malloc(0); //TEMP!
+            new_todoitem->subtask_count = 0; //TEMP!
+
+            new_item_list[j] = new_todoitem;
+        }
+
+        new_todolist->item_list = new_item_list;
+        new_todolist_list[i] = new_todolist;
+
+    }
+
+    newboard->board_name = strdup("");
+    newboard->todolist_list = new_todolist_list;
+    newboard->todolist_count = boardmenu->menu_count;
+
+    return newboard;
+    
+}
+
 int
 set_selected_menu(BoardMenu* boardmenu, int index)
 {
@@ -269,6 +329,7 @@ swap_menu(BoardMenu* boardmenu, int src_index, int dest_index)
     mvwin(get_menu_win(boardmenu->menu_list[dest_index]),
         1, 1+MENU_WIDTH*src_index
     );
+    refresh();
     wrefresh(get_menu_win(boardmenu->menu_list[src_index]));
     wrefresh(get_menu_win(boardmenu->menu_list[dest_index]));
     /* wclear(get_menu_win(boardmenu->menu_list[src_index])); */
@@ -278,7 +339,7 @@ swap_menu(BoardMenu* boardmenu, int src_index, int dest_index)
     clear();
 
     /* swap in array */
-    ar_swap_item(boardmenu->menu_list, src_index, dest_index);
+    ar_swap_item((void*)boardmenu->menu_list, src_index, dest_index);
 
     return 0;
 }