diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2009-08-19 00:59:50 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2009-08-19 00:59:50 +0800 |
commit | 4ffe29bdee5468655dadc306f2761e2ca5469c38 (patch) | |
tree | 28f5abf6ec354844815368c96125d1f5189ec656 /calendar/gui/e-day-view.c | |
parent | 947e43871f38e1eb87f7556cec7992acb231e842 (diff) | |
download | gsoc2013-evolution-4ffe29bdee5468655dadc306f2761e2ca5469c38.tar.gz gsoc2013-evolution-4ffe29bdee5468655dadc306f2761e2ca5469c38.tar.zst gsoc2013-evolution-4ffe29bdee5468655dadc306f2761e2ca5469c38.zip |
Centralize week-start-day tracking in calendar views.
Track the value in ECalModel instead of in GnomeCalendar, EDayView and
EWeekView.
Diffstat (limited to 'calendar/gui/e-day-view.c')
-rw-r--r-- | calendar/gui/e-day-view.c | 99 |
1 files changed, 26 insertions, 73 deletions
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c index ffd980e23a..cda3d1f92c 100644 --- a/calendar/gui/e-day-view.c +++ b/calendar/gui/e-day-view.c @@ -438,7 +438,6 @@ enum { PROP_MARCUS_BAINS_DAY_VIEW_COLOR, PROP_MARCUS_BAINS_TIME_BAR_COLOR, PROP_MINS_PER_ROW, - PROP_WEEK_START_DAY, PROP_WORK_DAY_END_HOUR, PROP_WORK_DAY_END_MINUTE, PROP_WORK_DAY_START_HOUR, @@ -449,6 +448,15 @@ enum { G_DEFINE_TYPE (EDayView, e_day_view, E_TYPE_CALENDAR_VIEW) static void +day_view_notify_week_start_day_cb (EDayView *day_view) +{ + /* XXX Write a EWorkWeekView subclass, like EMonthView. */ + + if (day_view->work_week_view) + e_day_view_recalc_work_week (day_view); +} + +static void day_view_set_property (GObject *object, guint property_id, const GValue *value, @@ -479,12 +487,6 @@ day_view_set_property (GObject *object, g_value_get_int (value)); return; - case PROP_WEEK_START_DAY: - e_day_view_set_week_start_day ( - E_DAY_VIEW (object), - g_value_get_int (value)); - return; - case PROP_WORK_DAY_END_HOUR: e_day_view_set_work_day_end_hour ( E_DAY_VIEW (object), @@ -554,13 +556,6 @@ day_view_get_property (GObject *object, E_DAY_VIEW (object))); return; - case PROP_WEEK_START_DAY: - g_value_set_int ( - value, - e_day_view_get_week_start_day ( - E_DAY_VIEW (object))); - return; - case PROP_WORK_DAY_END_HOUR: g_value_set_int ( value, @@ -632,10 +627,6 @@ day_view_constructed (GObject *object) G_OBJECT (day_view), "mins-per-row"); e_binding_new ( - G_OBJECT (shell_settings), "cal-week-start-day", - G_OBJECT (day_view), "week-start-day"); - - e_binding_new ( G_OBJECT (shell_settings), "cal-work-day-end-hour", G_OBJECT (day_view), "work-day-end-hour"); @@ -654,6 +645,10 @@ day_view_constructed (GObject *object) e_binding_new ( G_OBJECT (shell_settings), "cal-working-days-bitset", G_OBJECT (day_view), "working-days"); + + g_signal_connect_swapped ( + model, "notify::week-start-day", + G_CALLBACK (day_view_notify_week_start_day_cb), day_view); } static void @@ -736,18 +731,6 @@ e_day_view_class_init (EDayViewClass *class) g_object_class_install_property ( object_class, - PROP_WEEK_START_DAY, - g_param_spec_int ( - "week-start-day", - "Week Start Day", - NULL, - 0, /* Monday */ - 6, /* Sunday */ - 0, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - object_class, PROP_WORK_DAY_END_HOUR, g_param_spec_int ( "work-day-end-hour", @@ -1103,7 +1086,6 @@ e_day_view_init (EDayView *day_view) day_view->work_day_end_hour = 17; day_view->work_day_end_minute = 0; day_view->show_event_end_times = TRUE; - day_view->week_start_day = 0; day_view->scroll_to_work_day = TRUE; day_view->marcus_bains_show_line = TRUE; @@ -2459,10 +2441,15 @@ e_day_view_find_work_week_start (EDayView *day_view, time_t start_time) { GDate date; + ECalModel *model; + gint week_start_day; gint weekday, day, i; guint offset; struct icaltimetype tt = icaltime_null_time (); + model = e_calendar_view_get_model (E_CALENDAR_VIEW (day_view)); + week_start_day = e_cal_model_get_week_start_day (model); + time_to_gdate_with_zone (&date, start_time, e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view))); /* The start of the work-week is the first working day after the @@ -2474,7 +2461,7 @@ e_day_view_find_work_week_start (EDayView *day_view, /* Calculate the first working day of the week, 0 (Sun) to 6 (Sat). It will automatically default to the week start day if no days are set as working days. */ - day = (day_view->week_start_day + 1) % 7; + day = (week_start_day + 1) % 7; for (i = 0; i < 7; i++) { if (day_view->working_days & (1 << day)) break; @@ -2784,11 +2771,16 @@ e_day_view_set_working_days (EDayView *day_view, static void e_day_view_recalc_work_week_days_shown (EDayView *day_view) { + ECalModel *model; + gint week_start_day; gint first_day, last_day, i, days_shown; gboolean has_working_days = FALSE; + model = e_calendar_view_get_model (E_CALENDAR_VIEW (day_view)); + week_start_day = e_cal_model_get_week_start_day (model); + /* Find the first working day in the week, 0 (Sun) to 6 (Sat). */ - first_day = (day_view->week_start_day + 1) % 7; + first_day = (week_start_day + 1) % 7; for (i = 0; i < 7; i++) { if (day_view->working_days & (1 << first_day)) { has_working_days = TRUE; @@ -2799,7 +2791,7 @@ e_day_view_recalc_work_week_days_shown (EDayView *day_view) if (has_working_days) { /* Now find the last working day of the week, backwards. */ - last_day = day_view->week_start_day % 7; + last_day = week_start_day % 7; for (i = 0; i < 7; i++) { if (day_view->working_days & (1 << last_day)) break; @@ -3012,34 +3004,6 @@ e_day_view_set_show_times_cb (EDayView *day_view, return TRUE; } -/* The first day of the week, 0 (Monday) to 6 (Sunday). */ -gint -e_day_view_get_week_start_day (EDayView *day_view) -{ - g_return_val_if_fail (E_IS_DAY_VIEW (day_view), 0); - - return day_view->week_start_day; -} - -void -e_day_view_set_week_start_day (EDayView *day_view, - gint week_start_day) -{ - g_return_if_fail (E_IS_DAY_VIEW (day_view)); - g_return_if_fail (week_start_day >= 0); - g_return_if_fail (week_start_day < 7); - - if (day_view->week_start_day == week_start_day) - return; - - day_view->week_start_day = week_start_day; - - if (day_view->work_week_view) - e_day_view_recalc_work_week (day_view); - - g_object_notify (G_OBJECT (day_view), "week-start-day"); -} - static void e_day_view_recalc_work_week (EDayView *day_view) { @@ -3738,22 +3702,11 @@ e_day_view_on_event_double_click (EDayView *day_view, } static void -popup_destroyed_cb (gpointer data, GObject *where_object_was) -{ - EDayView *day_view = data; - - day_view->popup_event_day = -1; - day_view->popup_event_num = -1; -} - -static void e_day_view_show_popup_menu (EDayView *day_view, GdkEventButton *event, gint day, gint event_num) { - GtkMenu *popup; - day_view->popup_event_day = day; day_view->popup_event_num = event_num; |