]> Pileus Git - lackey/blobdiff - src/screen.c
Add day and week view
[lackey] / src / screen.c
index 926ed505c0ddb34f7d98db81afd05269d64a85e9..f9bfd4f01a1ab48917fde756c442b55cf9e0b566 100644 (file)
@@ -2,14 +2,16 @@
 #include <ncurses.h>
 #include "main.h"
 #include "screen.h"
+#include "util.h"
 
 /* Types */
 typedef struct {
-       char  *name;
-       void (*init)(void);
-       void (*draw)(void);
-       int  (*run)(int,mmask_t,int,int);
-       int    keys[8];
+       char   *name;
+       void  (*init)(WINDOW*);
+       void  (*draw)(void);
+       int   (*run)(int,mmask_t,int,int);
+       int     keys[8];
+       WINDOW *win;
 } view_t;
 
 /* Data */
@@ -36,24 +38,41 @@ void draw_header(void)
        for (int i = 0; i < N_ELEMENTS(views); i++) {
                if (i == active)
                        attron(A_BOLD);
-               printw(" %s", views[i].name);
+               printw("%s ", views[i].name);
                if (i == active)
                        attroff(A_BOLD);
        }
        attroff(COLOR_PAIR(COLOR_TITLE));
        mvhline(1, 0, ACS_HLINE, COLS);
+       refresh();
 }
 
 /* Screen init */
 void screen_init(void)
 {
+       for (int i = 0; i < N_ELEMENTS(views); i++) {
+               if (views[i].init) {
+                       views[i].win = newwin(LINES-2, COLS, 2, 0);
+                       views[i].init(views[i].win);
+               }
+       }
+}
+
+/* Screen draw */
+void screen_resize(void)
+{
+       for (int i = 0; i < N_ELEMENTS(views); i++)
+               if (views[i].init)
+                       wresize(views[i].win, LINES-2, COLS);
 }
 
 /* Screen draw */
 void screen_draw(void)
 {
        draw_header();
+       werase(views[active].win);
        views[active].draw();
+       wrefresh(views[active].win);
 }
 
 /* Screen set */