]> Pileus Git - lackey/blobdiff - view/month.c
Make month view interactive
[lackey] / view / month.c
index fb2be064a2612e38a39ffd8a555840aec161f86b..f93bc74a183f257dfdb242caf021259c5035a17d 100644 (file)
@@ -15,6 +15,8 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#define _XOPEN_SOURCE_EXTENDED
+
 #include <string.h>
 #include <ncurses.h>
 
@@ -41,6 +43,9 @@ void month_draw(void)
        const float hstep = (float)COLS/7.0;
        const float vstep = (float)(LINES-4)/weeks;
 
+       /* Clear */
+       werase(win);
+
        /* Print Header */
        mvwprintw(win, 0, midpt, "%s %d", name, YEAR);
        for (int d = 0; d < 7; d++) {
@@ -70,10 +75,42 @@ void month_draw(void)
                        mvwaddch(win, ROUND(2+w*vstep), ROUND(d*hstep-1), chr);
                }
        }
+
+       /* Draw today */
+       int col = day_of_week(YEAR, MONTH, DAY);
+       int row = (start+DAY) / 7;
+       int l = ROUND((col+0)*hstep-1);
+       int r = ROUND((col+1)*hstep-1);
+       int t = ROUND((row+0)*vstep+2);
+       int b = ROUND((row+1)*vstep+2);
+       mvwvline_set(win, t, l, WACS_T_VLINE, b-t);
+       mvwvline_set(win, t, r, WACS_T_VLINE, b-t);
+       mvwhline_set(win, t, l, WACS_T_HLINE, r-l);
+       mvwhline_set(win, b, l, WACS_T_HLINE, r-l);
+       mvwadd_wch(win, t, l, WACS_T_ULCORNER);
+       mvwadd_wch(win, t, r, WACS_T_URCORNER);
+       mvwadd_wch(win, b, l, WACS_T_LLCORNER);
+       mvwadd_wch(win, b, r, WACS_T_LRCORNER);
 }
 
 /* Month run */
 int month_run(int key, mmask_t btn, int row, int col)
 {
+       int days = 0, months = 0;
+       switch (key)
+       {
+               case 'h': days   = -1; break;
+               case 'j': days   =  7; break;
+               case 'k': days   = -7; break;
+               case 'l': days   =  1; break;
+               case 'i': months = -1; break;
+               case 'o': months =  1; break;
+       }
+       if (days || months) {
+               add_days(&YEAR, &MONTH, &DAY, days);
+               add_months(&YEAR, &MONTH, months);
+               month_draw();
+               wrefresh(win);
+       }
        return 0;
 }