10 void (*init)(WINDOW*);
12 int (*run)(int,mmask_t,int,int);
19 { "Day", day_init, day_draw, day_run, {KEY_F(1), '1', 'd', } },
20 { "Week", week_init, week_draw, week_run, {KEY_F(2), '2', 'w', } },
21 { "Month", month_init, month_draw, month_run, {KEY_F(3), '3', 'm', } },
22 { "Year", year_init, year_draw, year_run, {KEY_F(4), '4', 'y', } },
23 { "|", NULL, NULL, NULL, { } },
24 { "Todo", todo_init, todo_draw, todo_run, {KEY_F(5), '5', 't', } },
25 { "Notes", notes_init, notes_draw, notes_run, {KEY_F(6), '6', 'n', } },
26 { "|", NULL, NULL, NULL, { } },
27 { "Settings", settings_init, settings_draw, settings_run, {KEY_F(7), '7', 's', } },
28 { "Help", help_init, help_draw, help_run, {KEY_F(8), '8', 'h', '?'} },
34 void draw_header(void)
37 attron(COLOR_PAIR(COLOR_TITLE));
38 for (int i = 0; i < N_ELEMENTS(views); i++) {
41 printw("%s ", views[i].name);
45 attroff(COLOR_PAIR(COLOR_TITLE));
46 mvhline(1, 0, ACS_HLINE, COLS);
51 void screen_init(void)
53 for (int i = 0; i < N_ELEMENTS(views); i++) {
55 views[i].win = newwin(LINES-2, COLS, 2, 0);
56 views[i].init(views[i].win);
62 void screen_resize(void)
64 for (int i = 0; i < N_ELEMENTS(views); i++)
66 wresize(views[i].win, LINES-2, COLS);
70 void screen_draw(void)
73 werase(views[active].win);
75 wrefresh(views[active].win);
79 int screen_set(int num)
89 int screen_run(int key, mmask_t btn, int row, int col)
91 /* Check for mouse events */
92 if (key == KEY_MOUSE && row == 0) {
94 for (int i = 0; i < N_ELEMENTS(views); i++) {
95 int end = start + strlen(views[i].name) - 1;
96 if (start <= col && col <= end)
102 /* Check for view change */
103 for (int i = 0; i < N_ELEMENTS(views); i++) {
106 for (int j = 0; j < N_ELEMENTS(views[i].keys); j++)
107 if (views[i].keys[j] == key)
108 return screen_set(i);
113 int shift = key == KEY_RIGHT ? +1 :
114 key == KEY_LEFT ? -1 : 0;
117 num += N_ELEMENTS(views);
118 num %= N_ELEMENTS(views);
120 return screen_set(num);
123 /* Pass key to active view */
124 return views[active].run(key, btn, row, col);