popup win rendering
[taskasaur.git] / taskasaur.c
index 582d496..62adc7d 100644 (file)
@@ -8,11 +8,14 @@
 char* boardfile_name = "test_board.md"; 
 
 void normal_handleinput(BoardMenu* boardmenu, int ch);
+void popup_handleinput(BoardMenu* boardmenu, int ch);
 
 void normal_renderstep(BoardMenu* boardmenu);
 void popup_renderstep(BoardMenu* boardmenu);
 void save_to_file(char* filepath, BoardMenu* boardmenu);
 
+void exit_step(BoardMenu* boardmenu);
+
 int
 main(int argc, char** argv)
 {
@@ -33,12 +36,15 @@ main(int argc, char** argv)
     normal_renderstep(boardmenu);
 
     int ch;
-    while ((ch = getch()) != BINDING_QUIT) {
+    while (1) {
+        
+        ch = getch();
 
         if (boardmenu->popup_open == 0) {
             normal_handleinput(boardmenu, ch);
             normal_renderstep(boardmenu);
         } else {
+            popup_handleinput(boardmenu, ch);
             popup_renderstep(boardmenu);
         }
 
@@ -47,7 +53,6 @@ main(int argc, char** argv)
     /* save on exit - this causes weird stuff to happen, maybe it's not given enough time to write before program exits? */
     /* save_to_file(boardfile_name, boardmenu); */
 
-    exit_tscurses();
     return 0;    
 }
 
@@ -186,7 +191,7 @@ normal_handleinput(BoardMenu* boardmenu, int ch)
                 );
 
                 /* set mode to popup */
-                boardmenu->popup_menu = make_popup_menu(sel_itemdata);
+                boardmenu->popupmenu = make_popupmenu(sel_itemdata);
                 boardmenu->popup_open = 1;
             } 
 
@@ -194,6 +199,9 @@ normal_handleinput(BoardMenu* boardmenu, int ch)
         case BINDING_WRITE:
             save_to_file(boardfile_name, boardmenu);
             break;
+        case BINDING_QUIT:
+            exit_step(boardmenu);
+            break;
         case KEY_RESIZE:
             /* ; */
             /* int y, x; */
@@ -207,6 +215,27 @@ normal_handleinput(BoardMenu* boardmenu, int ch)
     }
 }
 
+void
+popup_handleinput(BoardMenu* boardmenu, int ch)
+{
+    Menu* popupmenu_menu;
+
+    popupmenu_menu = boardmenu->popupmenu->menu;
+
+    switch (ch) {
+
+        case BINDING_SCROLL_UP:
+            menu_driver(popupmenu_menu, MENU_UP);
+            break;
+        case BINDING_SCROLL_DOWN:
+            menu_driver(popupmenu_menu, MENU_DOWN);
+            break;
+        case BINDING_QUIT:
+            boardmenu->popup_open = 0;
+            break;
+    }    
+}
+
 void
 normal_renderstep(BoardMenu* boardmenu)
 {
@@ -226,8 +255,9 @@ normal_renderstep(BoardMenu* boardmenu)
 void
 popup_renderstep(BoardMenu* boardmenu)
 {
-    if (boardmenu->popup_menu == NULL) return;
+    if (boardmenu->popupmenu == NULL) return;
 
+    render_popupmenu(boardmenu->popupmenu); 
 }
 
 void
@@ -239,3 +269,10 @@ save_to_file(char* filepath, BoardMenu* boardmenu)
     begin_write(filepath, writeboard);
     free_board(writeboard);
 }
+
+void
+exit_step(BoardMenu* boardmenu)
+{
+    exit_tscurses();
+    exit(0);
+}