From: NeilBrown Date: Tue, 8 Feb 2011 07:10:56 +0000 (+1100) Subject: cal: add frequency and simplify creation. X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=60dade2610e690d39b8d2a5c20c4aaab5eed2245;p=freerunner.git cal: add frequency and simplify creation. Use same sequence for 'new' as 'change'. And allow freq of weekly or fortnightly to be chosen Signed-off-by: NeilBrown --- diff --git a/alarm/cal.c b/alarm/cal.c index dccdce7..75e8de2 100644 --- a/alarm/cal.c +++ b/alarm/cal.c @@ -28,10 +28,12 @@ GtkWidget *window, *clockw, *cal, *reasonw, *timerw; GtkWidget *browse_buttons, *event_buttons, *move_buttons, *move_event; GtkWidget *timer_display, *time_display; GtkWidget *today_btn, *undelete_btn; +GtkWidget *once_btn, *weekly_btn, *fort_btn, *freq_buttons; GtkWidget *timers_list; GtkTextBuffer *reason_buffer; time_t dlist[42], chosen_date; int prev_mday, hour, minute; +int freq; struct event *evlist, *active_event; struct event *deleted_event; @@ -229,16 +231,20 @@ void move_confirm(void) gtk_container_add(GTK_CONTAINER(window), clockw); } +void update_freq(void); void events_move(void) { if (!active_event) return; moving = 1; + freq = active_event->recur; set_cal(active_event->when); gtk_widget_hide(event_buttons); gtk_widget_show(move_buttons); + update_freq(); + gtk_widget_show(freq_buttons); gtk_widget_hide(alarm_selector->drawing); gtk_widget_show(move_event); @@ -248,13 +254,23 @@ void events_move(void) void events_new(void) { - gtk_text_buffer_set_text(reason_buffer, "New Event", -1); - move_confirm(); + moving = 2; + freq = 0; + gtk_widget_hide(event_buttons); + gtk_widget_hide(browse_buttons); + gtk_widget_show(move_buttons); + update_freq(); + gtk_widget_show(freq_buttons); + + gtk_widget_hide(alarm_selector->drawing); + gtk_widget_show(move_event); + gtk_text_buffer_set_text(reason_buffer, "", -1); } void move_abort(void) { gtk_widget_hide(move_buttons); + gtk_widget_hide(freq_buttons); if (active_event) { gtk_widget_hide(browse_buttons); gtk_widget_show(event_buttons); @@ -291,10 +307,45 @@ void cal_restore(void) gtk_container_add(GTK_CONTAINER(window), cal); } +void reason_confirm(void); void clock_confirm(void) { gtk_container_remove(GTK_CONTAINER(window), clockw); gtk_container_add(GTK_CONTAINER(window), reasonw); + reason_confirm(); +} + +void update_freq(void) +{ + if (freq == 0) + gtk_label_set_markup(GTK_LABEL(GTK_BIN(once_btn)->child), "Once"); + else + gtk_label_set_markup(GTK_LABEL(GTK_BIN(once_btn)->child), "Once"); + + if (freq == 7*24*3600) + gtk_label_set_markup(GTK_LABEL(GTK_BIN(weekly_btn)->child), "Weekly"); + else + gtk_label_set_markup(GTK_LABEL(GTK_BIN(weekly_btn)->child), "Weekly"); + + if (freq == 14*24*3600) + gtk_label_set_markup(GTK_LABEL(GTK_BIN(fort_btn)->child), "Fortnightly"); + else + gtk_label_set_markup(GTK_LABEL(GTK_BIN(fort_btn)->child), "Fortnightly"); +} +void set_once(void) +{ + freq = 0; + update_freq(); +} +void set_weekly(void) +{ + freq = 7 * 24 * 3600; + update_freq(); +} +void set_fort(void) +{ + freq = 14 * 24 * 3600; + update_freq(); } /********************************************************************/ @@ -516,7 +567,7 @@ struct list_entry *alarms_item(void *list, int n) tm = localtime(&chosen_date); today = *tm; for (i=0; ev ; i++, ev = ev->next) { - char buf[50], o, c; + char buf[50], o, c, r; struct tm *tm = localtime(&ev->when); if (tm->tm_mday == today.tm_mday && tm->tm_mon == today.tm_mon && @@ -535,9 +586,16 @@ struct list_entry *alarms_item(void *list, int n) o = '('; c = ')'; } + if (ev->recur == 0) + r = ' '; + else if (ev->recur == 3600*24*7) + r = '+'; /* weekly */ + else if (ev->recur == 3600*24*14) + r = '*'; /* fortnightly */ + else + r = '#'; /* other period */ asprintf(&alarm_entries[i].text, "%c%c %s %s%c", - o, - ev->recur ? '*' : ' ', + o, r, buf, ev->mesg, c); alarm_entries[i].bg = "white"; alarm_entries[i].fg = "blue"; @@ -726,15 +784,26 @@ GtkWidget *create_cal_window(void) move_buttons = blist; + blist = NULL; + once_btn = add_button(&blist, "Once", desc, set_once); + weekly_btn = add_button(&blist, "Weekly", desc, set_weekly); + fort_btn = add_button(&blist, "Fortnightly", desc, set_fort); + gtk_widget_hide(blist); + gtk_box_pack_end(GTK_BOX(v), blist, FALSE, FALSE, 0); + freq_buttons = blist; + return v; } void set_cal(time_t then) { - struct tm now, first, *tm; + struct tm now, first, today, *tm; int d, x; + time_t today_s; char buf[400]; + time(&today_s); + localtime_r(&today_s, &today); localtime_r(&then, &now); then -= now.tm_sec; @@ -767,12 +836,18 @@ void set_cal(time_t then) } for (d=0; d<42; d++) { - char *bg = "", *fg = "black"; + char *bg = "", *fg = "black", *today_fg = "blue"; - if (tm->tm_mon != now.tm_mon) - fg = "grey"; - else if (tm->tm_mday == now.tm_mday) + if (tm->tm_mon != now.tm_mon) { + fg = "grey"; today_fg = "pink"; + } else if (tm->tm_mday == now.tm_mday) bg = "background=\"green\""; + + if (tm->tm_year == today.tm_year && + tm->tm_mon == today.tm_mon && + tm->tm_mday == today.tm_mday) + fg = today_fg; + sprintf(buf, " %02d ", bg, fg, tm->tm_mday); if (abs(dlist[d] - then) > 48*3600 || @@ -944,13 +1019,13 @@ void reason_confirm(void) if (!active_event) { ev = malloc(sizeof(*ev)); - ev->recur = 0; ev->next = evlist; evlist = ev; } else { ev = active_event; free(ev->mesg); } + ev->recur = freq; ev->when = ev->first = chosen_date + hour*3600 + minute*60; gtk_text_buffer_get_bounds(reason_buffer, &start, &finish); ev->mesg = gtk_text_buffer_get_text(reason_buffer,