diff options
author | Rodrigo Moya <rodrigo@ximian.com> | 2003-07-25 00:02:54 +0800 |
---|---|---|
committer | Rodrigo Moya <rodrigo@src.gnome.org> | 2003-07-25 00:02:54 +0800 |
commit | ef14a8c5a5049749c22e991da83225e04ab1df02 (patch) | |
tree | a76532e1afce69c22142cb1ff4807f9230d5b0bd /calendar/gui/e-day-view.c | |
parent | 3f060f07b401bad248daab957bbc79a6d21afb6c (diff) | |
download | gsoc2013-evolution-ef14a8c5a5049749c22e991da83225e04ab1df02.tar.gz gsoc2013-evolution-ef14a8c5a5049749c22e991da83225e04ab1df02.tar.zst gsoc2013-evolution-ef14a8c5a5049749c22e991da83225e04ab1df02.zip |
new function. (e_cal_view_get_timezone, e_cal_view_set_timezone): new
2003-07-24 Rodrigo Moya <rodrigo@ximian.com>
* gui/e-cal-view.[ch] (e_cal_view_delete_selected_occurrence):
new function.
(e_cal_view_get_timezone, e_cal_view_set_timezone): new functions.
(e_cal_view_class_init): added new class' signal.
* gui/e-week-view.[ch] (e_week_view_delete_occurrence,
e_week_view_delete_occurrence_internal): removed.
(e_week_view_get_timezone): removed.
(e_week_view_set_timezone): renamed to timezone_changed_cb, as
the callback for timezone changes in the parent ECalView.
(e_week_view_on_button_press): call gnome_calendar_new_appointment
instead of the non-existant e_week_view_new_appointment.
* gui/e-day-view.[ch] (e_day_view_delete_occurrence,
e_day_view_delete_occurrence_internal): removed.
(e_day_view_get_timezone): removed.
(e_day_view_set_timezone): renamed to timezone_changed_cb, as
the callback for timezone changes in the parent ECalView.
* gui/gnome-cal.c (gnome_calendar_delete_selected_occurrence):
made it call e_cal_view_delete_selected_occurrence.
(gnome_calendar_update_config_settings): call the generic
e_cal_view_set_timezone on all view widgets.
* gui/e-day-view-top-item.c:
* gui/e-week-view-main-item.c:
* gui/e-day-view-main-item.c: removed mentions to non-existant
structure fields.
svn path=/trunk/; revision=21948
Diffstat (limited to 'calendar/gui/e-day-view.c')
-rw-r--r-- | calendar/gui/e-day-view.c | 187 |
1 files changed, 60 insertions, 127 deletions
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c index 38642ec8eb..b7979c7bbd 100644 --- a/calendar/gui/e-day-view.c +++ b/calendar/gui/e-day-view.c @@ -476,6 +476,31 @@ e_day_view_class_init (EDayViewClass *class) } static void +timezone_changed_cb (ECalView *cal_view, icaltimezone *old_zone, + icaltimezone *new_zone, gpointer user_data) +{ + struct icaltimetype tt; + time_t lower; + EDayView *day_view = (EDayView *) cal_view; + + g_return_if_fail (E_IS_DAY_VIEW (day_view)); + + /* If our time hasn't been set yet, just return. */ + if (day_view->lower == 0 && day_view->upper == 0) + return; + + /* Recalculate the new start of the first day. We just use exactly + the same time, but with the new timezone. */ + tt = icaltime_from_timet_with_zone (day_view->lower, FALSE, + old_zone); + + lower = icaltime_as_timet_with_zone (tt, new_zone); + + e_day_view_recalc_day_starts (day_view, lower); + e_day_view_update_query (day_view); +} + +static void e_day_view_init (EDayView *day_view) { gint day; @@ -508,8 +533,6 @@ e_day_view_init (EDayView *day_view) day_view->work_week_view = FALSE; day_view->days_shown = 1; - day_view->zone = NULL; - day_view->mins_per_row = 30; day_view->date_format = E_DAY_VIEW_DATE_FULL; day_view->rows_in_top_display = 0; @@ -790,6 +813,10 @@ e_day_view_init (EDayView *day_view) GTK_DEST_DEFAULT_ALL, target_table, n_targets, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_ASK); + + /* connect to ECalView's signals */ + g_signal_connect (G_OBJECT (day_view), "timezone_changed", + G_CALLBACK (timezone_changed_cb), NULL); } @@ -1477,7 +1504,7 @@ query_obj_updated_cb (CalQuery *query, const char *uid, e_day_view_add_event, day_view, cal_client_resolve_tzid_cb, e_cal_view_get_cal_client (E_CAL_VIEW (day_view)), - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); g_object_unref (comp); e_day_view_queue_layout (day_view); @@ -1971,7 +1998,7 @@ e_day_view_set_selected_time_range (EDayView *day_view, start of the day given by start_time, otherwise it is the previous work-week start day. */ if (!day_view->work_week_view) { - lower = time_day_begin_with_zone (start_time, day_view->zone); + lower = time_day_begin_with_zone (start_time, e_cal_view_get_timezone (E_CAL_VIEW (day_view))); } else { lower = e_day_view_find_work_week_start (day_view, start_time); } @@ -2138,7 +2165,7 @@ e_day_view_find_work_week_start (EDayView *day_view, guint offset; struct icaltimetype tt = icaltime_null_time (); - time_to_gdate_with_zone (&date, start_time, day_view->zone); + time_to_gdate_with_zone (&date, start_time, e_cal_view_get_timezone (E_CAL_VIEW (day_view))); /* The start of the work-week is the first working day after the week start day. */ @@ -2169,7 +2196,7 @@ e_day_view_find_work_week_start (EDayView *day_view, tt.month = g_date_month (&date); tt.day = g_date_day (&date); - return icaltime_as_timet_with_zone (tt, day_view->zone); + return icaltime_as_timet_with_zone (tt, e_cal_view_get_timezone (E_CAL_VIEW (day_view))); } @@ -2236,7 +2263,7 @@ e_day_view_recalc_day_starts (EDayView *day_view, day_view->day_starts[0] = start_time; for (day = 1; day <= day_view->days_shown; day++) { - day_view->day_starts[day] = time_add_day_with_zone (day_view->day_starts[day - 1], 1, day_view->zone); + day_view->day_starts[day] = time_add_day_with_zone (day_view->day_starts[day - 1], 1, e_cal_view_get_timezone (E_CAL_VIEW (day_view))); } #if 0 @@ -2519,49 +2546,6 @@ e_day_view_set_show_event_end_times (EDayView *day_view, } } - -/* The current timezone. */ -icaltimezone* -e_day_view_get_timezone (EDayView *day_view) -{ - g_return_val_if_fail (E_IS_DAY_VIEW (day_view), NULL); - - return day_view->zone; -} - - -void -e_day_view_set_timezone (EDayView *day_view, - icaltimezone *zone) -{ - icaltimezone *old_zone; - struct icaltimetype tt; - time_t lower; - - g_return_if_fail (E_IS_DAY_VIEW (day_view)); - - old_zone = day_view->zone; - if (old_zone == zone) - return; - - day_view->zone = zone; - - /* If our time hasn't been set yet, just return. */ - if (day_view->lower == 0 && day_view->upper == 0) - return; - - /* Recalculate the new start of the first day. We just use exactly - the same time, but with the new timezone. */ - tt = icaltime_from_timet_with_zone (day_view->lower, FALSE, - old_zone); - - lower = icaltime_as_timet_with_zone (tt, zone); - - e_day_view_recalc_day_starts (day_view, lower); - e_day_view_update_query (day_view); -} - - /* This is a callback used to update all day event labels. */ static gboolean e_day_view_set_show_times_cb (EDayView *day_view, @@ -3459,57 +3443,6 @@ e_day_view_on_event_right_click (EDayView *day_view, day, event_num); } -static void -e_day_view_delete_occurrence_internal (EDayView *day_view, EDayViewEvent *event) -{ - CalComponent *comp; - - if (cal_component_is_instance (event->comp)) { - const char *uid; - - cal_component_get_uid (event->comp, &uid); - - delete_error_dialog ( - cal_client_remove_object_with_mod (e_cal_view_get_cal_client (E_CAL_VIEW (day_view)), - uid, CALOBJ_MOD_THIS), - CAL_COMPONENT_EVENT); - return; - } - - /* We must duplicate the CalComponent, or we won't know it has changed - when we get the "update_event" callback. */ - comp = cal_component_clone (event->comp); - cal_comp_util_add_exdate (comp, event->start, day_view->zone); - - if (cal_client_update_object (e_cal_view_get_cal_client (E_CAL_VIEW (day_view)), comp) - != CAL_CLIENT_RESULT_SUCCESS) - g_message ("e_day_view_on_delete_occurrence(): Could not update the object!"); - - g_object_unref (comp); -} - -void -e_day_view_delete_occurrence (EDayView *day_view) -{ - EDayViewEvent *event; - - g_return_if_fail (E_IS_DAY_VIEW (day_view)); - - if (day_view->editing_event_day == -1) - return; - - if (day_view->editing_event_day == E_DAY_VIEW_LONG_EVENT) - event = &g_array_index (day_view->long_events, - EDayViewEvent, - day_view->editing_event_num); - else - event = &g_array_index (day_view->events[day_view->editing_event_day], - EDayViewEvent, - day_view->editing_event_num); - - e_day_view_delete_occurrence_internal (day_view, event); -} - void e_day_view_unrecur_appointment (EDayView *day_view) { @@ -3529,7 +3462,7 @@ e_day_view_unrecur_appointment (EDayView *day_view) instance. */ comp = cal_component_clone (event->comp); - cal_comp_util_add_exdate (comp, event->start, day_view->zone); + cal_comp_util_add_exdate (comp, event->start, e_cal_view_get_timezone (E_CAL_VIEW (day_view))); /* For the unrecurred instance we duplicate the original object, create a new uid for it, get rid of the recurrence rules, and set @@ -3542,13 +3475,13 @@ e_day_view_unrecur_appointment (EDayView *day_view) cal_component_set_exrule_list (new_comp, NULL); date.value = &itt; - date.tzid = icaltimezone_get_tzid (day_view->zone); + date.tzid = icaltimezone_get_tzid (e_cal_view_get_timezone (E_CAL_VIEW (day_view))); *date.value = icaltime_from_timet_with_zone (event->start, FALSE, - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); cal_component_set_dtstart (new_comp, &date); *date.value = icaltime_from_timet_with_zone (event->end, FALSE, - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); cal_component_set_dtend (new_comp, &date); @@ -4078,17 +4011,17 @@ e_day_view_finish_long_event_resize (EDayView *day_view) date.value = &itt; /* FIXME: Should probably keep the timezone of the original start and end times. */ - date.tzid = icaltimezone_get_tzid (day_view->zone); + date.tzid = icaltimezone_get_tzid (e_cal_view_get_timezone (E_CAL_VIEW (day_view))); if (day_view->resize_drag_pos == E_CAL_VIEW_POS_LEFT_EDGE) { dt = day_view->day_starts[day_view->resize_start_row]; *date.value = icaltime_from_timet_with_zone (dt, FALSE, - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); cal_component_set_dtstart (comp, &date); } else { dt = day_view->day_starts[day_view->resize_end_row + 1]; *date.value = icaltime_from_timet_with_zone (dt, FALSE, - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); cal_component_set_dtend (comp, &date); } @@ -4152,17 +4085,17 @@ e_day_view_finish_resize (EDayView *day_view) date.value = &itt; /* FIXME: Should probably keep the timezone of the original start and end times. */ - date.tzid = icaltimezone_get_tzid (day_view->zone); + date.tzid = icaltimezone_get_tzid (e_cal_view_get_timezone (E_CAL_VIEW (day_view))); if (day_view->resize_drag_pos == E_CAL_VIEW_POS_TOP_EDGE) { dt = e_day_view_convert_grid_position_to_time (day_view, day, day_view->resize_start_row); *date.value = icaltime_from_timet_with_zone (dt, FALSE, - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); cal_component_set_dtstart (comp, &date); } else { dt = e_day_view_convert_grid_position_to_time (day_view, day, day_view->resize_end_row + 1); *date.value = icaltime_from_timet_with_zone (dt, FALSE, - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); cal_component_set_dtend (comp, &date); } @@ -4307,9 +4240,9 @@ e_day_view_add_event (CalComponent *comp, g_return_val_if_fail (end > day_view->lower, TRUE); start_tt = icaltime_from_timet_with_zone (start, FALSE, - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); end_tt = icaltime_from_timet_with_zone (end, FALSE, - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); event.comp = comp; g_object_ref (comp); @@ -4329,7 +4262,7 @@ e_day_view_add_event (CalComponent *comp, event.different_timezone = FALSE; if (!cal_comp_util_compare_event_timezones (comp, e_cal_view_get_cal_client (E_CAL_VIEW (day_view)), - day_view->zone)) + e_cal_view_get_timezone (E_CAL_VIEW (day_view)))) event.different_timezone = TRUE; /* Find out which array to add the event to. */ @@ -4954,17 +4887,17 @@ e_day_view_do_key_press (GtkWidget *widget, GdkEventKey *event) e_day_view_get_selected_time_range (day_view, &dtstart, &dtend); start_tt = icaltime_from_timet_with_zone (dtstart, FALSE, - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); end_tt = icaltime_from_timet_with_zone (dtend, FALSE, - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); if (day_view->selection_in_top_canvas) { start_dt.tzid = NULL; start_tt.is_date = 1; end_tt.is_date = 1; } else { - start_dt.tzid = icaltimezone_get_tzid (day_view->zone); + start_dt.tzid = icaltimezone_get_tzid (e_cal_view_get_timezone (E_CAL_VIEW (day_view))); } start_dt.value = &start_tt; @@ -5866,12 +5799,12 @@ e_day_view_convert_grid_position_to_time (EDayView *day_view, /* Create an icaltimetype and convert to a time_t. */ tt = icaltime_from_timet_with_zone (day_view->day_starts[col], - FALSE, day_view->zone); + FALSE, e_cal_view_get_timezone (E_CAL_VIEW (day_view))); tt.hour = minutes / 60; tt.minute = minutes % 60; tt.second = 0; - val = icaltime_as_timet_with_zone (tt, day_view->zone); + val = icaltime_as_timet_with_zone (tt, e_cal_view_get_timezone (E_CAL_VIEW (day_view))); return val; } @@ -5901,7 +5834,7 @@ e_day_view_convert_time_to_grid_position (EDayView *day_view, /* To find the row we need to convert the time to an icaltimetype, calculate the offset in minutes from the top of the display and divide it by the mins per row setting. */ - tt = icaltime_from_timet_with_zone (time, FALSE, day_view->zone); + tt = icaltime_from_timet_with_zone (time, FALSE, e_cal_view_get_timezone (E_CAL_VIEW (day_view))); minutes = tt.hour * 60 + tt.minute; minutes -= day_view->first_hour_shown * 60 + day_view->first_minute_shown; @@ -6890,14 +6823,14 @@ e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget, dt = day_view->day_starts[day] + start_offset * 60; itt = icaltime_from_timet_with_zone (dt, FALSE, - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); if (all_day_event) { itt.is_date = TRUE; date.tzid = NULL; } else { /* FIXME: Should probably keep the timezone of the original start and end times. */ - date.tzid = icaltimezone_get_tzid (day_view->zone); + date.tzid = icaltimezone_get_tzid (e_cal_view_get_timezone (E_CAL_VIEW (day_view))); } cal_component_set_dtstart (comp, &date); @@ -6906,14 +6839,14 @@ e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget, else dt = day_view->day_starts[day + num_days - 1] + end_offset * 60; itt = icaltime_from_timet_with_zone (dt, FALSE, - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); if (all_day_event) { itt.is_date = TRUE; date.tzid = NULL; } else { /* FIXME: Should probably keep the timezone of the original start and end times. */ - date.tzid = icaltimezone_get_tzid (day_view->zone); + date.tzid = icaltimezone_get_tzid (e_cal_view_get_timezone (E_CAL_VIEW (day_view))); } cal_component_set_dtend (comp, &date); @@ -7040,15 +6973,15 @@ e_day_view_on_main_canvas_drag_data_received (GtkWidget *widget, comp = cal_component_clone (event->comp); date.value = &itt; - date.tzid = icaltimezone_get_tzid (day_view->zone); + date.tzid = icaltimezone_get_tzid (e_cal_view_get_timezone (E_CAL_VIEW (day_view))); dt = e_day_view_convert_grid_position_to_time (day_view, day, row) + start_offset * 60; *date.value = icaltime_from_timet_with_zone (dt, FALSE, - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); cal_component_set_dtstart (comp, &date); dt = e_day_view_convert_grid_position_to_time (day_view, day, row + num_rows) - end_offset * 60; *date.value = icaltime_from_timet_with_zone (dt, FALSE, - day_view->zone); + e_cal_view_get_timezone (E_CAL_VIEW (day_view))); cal_component_set_dtend (comp, &date); gtk_drag_finish (context, TRUE, TRUE, time); |