]> Pileus Git - lackey/blobdiff - view/month.c
Add month view
[lackey] / view / month.c
index 3849492e9205388159d3eeeeeb686eb1a281983a..4e8b237a9942f356be668d3feeecab7e35a1ee59 100644 (file)
 
 #include "util.h"
 #include "date.h"
+#include "event.h"
+#include "screen.h"
 
 /* Static data */
 static WINDOW *win;
 
+/* Local functions */
+static void print_event(event_t *event, int y, int x, int w)
+{
+       int color = event->cat == NULL           ? 0           :
+                   !strcmp(event->cat, "class") ? COLOR_CLASS :
+                   !strcmp(event->cat, "ec")    ? COLOR_EC    :
+                   !strcmp(event->cat, "work")  ? COLOR_WORK  : COLOR_OTHER ;
+
+       if (color) wattron(win, COLOR_PAIR(color));
+       mvwaddch(win, y, x+0, ACS_BLOCK);
+       if (color) wattroff(win, COLOR_PAIR(color));
+
+       mvwprintw(win, y, x+1, "%-*.*s", w-1, w-1, event->name);
+}
+
 /* Month init */
 void month_init(WINDOW *_win)
 {
@@ -68,6 +85,23 @@ void month_draw(void)
                if (d == DAY) wattroff(win, A_BOLD);
        }
 
+       /* Print events */
+       event_t *event = EVENTS;
+       for (int d = 0; d < days; d++) {
+               int y = ROUND(4+(((start + d) / 7)  )*vstep);
+               int e = ROUND(4+(((start + d) / 7)+1)*vstep)-2;
+               int x = ROUND(1+(((start + d) % 7)  )*hstep)+3;
+               int w = ROUND(1+(((start + d) % 7)+1)*hstep)-x-1;
+               while (event && before(&event->start, YEAR, MONTH, d, 24, 0)) {
+                       if (!before(&event->start, YEAR, MONTH, d, 0, 0)){
+                               if (y == e) mvwhline(win, y, x-3, ACS_DARROW, 2);
+                               if (y <= e) print_event(event, y, x, w);
+                               y++;
+                       }
+                       event = event->next;
+               }
+       }
+
        /* Print lines */
        for (int w = 1; w < weeks; w++)
                mvwhline(win, ROUND(3+w*vstep), 1, ACS_HLINE, COLS-2);