diff options
-rw-r--r-- | calendar/ChangeLog | 23 | ||||
-rw-r--r-- | calendar/gui/e-day-view.c | 88 | ||||
-rw-r--r-- | calendar/gui/e-week-view-event-item.c | 2 | ||||
-rw-r--r-- | calendar/gui/e-week-view.c | 41 | ||||
-rw-r--r-- | calendar/gui/e-week-view.h | 4 | ||||
-rw-r--r-- | calendar/gui/gnome-cal.c | 19 |
6 files changed, 143 insertions, 34 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index ad958f220c..001d5dd8bb 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,26 @@ +2002-09-06 JP Rosevear <jpr@ximian.com> + + * gui/gnome-cal.c (gnome_calendar_edit_object): kill warning + + * gui/e-week-view.h: new proto + + * gui/e-week-view.c (e_week_view_set_selected_time_range_visible): + select a range of time in the currently visible area, if out side + the visible area, select as much as possible + (e_week_view_on_text_item_event): call above + + * gui/e-week-view-event-item.c + (e_week_view_event_item_button_press): call above + + * gui/e-day-view.c + (e_day_view_set_selected_time_range_in_top_visible): select a + range of time in the currently visible area, if out side the + visible area, select as much as possible + (e_day_view_set_selected_time_range_visible): the same for the + main canvas + (e_day_view_on_long_event_button_press): call above + (e_day_view_on_event_button_press): ditto + 2002-09-05 JP Rosevear <jpr@ximian.com> * gui/itip-utils.c (itip_send_comp): don't try to send via the diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c index 9965707db4..31b71e473c 100644 --- a/calendar/gui/e-day-view.c +++ b/calendar/gui/e-day-view.c @@ -2220,7 +2220,7 @@ e_day_view_set_selected_time_range (EDayView *day_view, } else { lower = e_day_view_find_work_week_start (day_view, start_time); } - + /* See if we need to change the days shown. */ if (lower != day_view->lower) { e_day_view_recalc_day_starts (day_view, lower); @@ -2272,32 +2272,15 @@ e_day_view_set_selected_time_range (EDayView *day_view, } static void -e_day_view_set_selected_time_range_in_top (EDayView *day_view, - time_t start_time, - time_t end_time) +e_day_view_set_selected_time_range_in_top_visible (EDayView *day_view, + time_t start_time, + time_t end_time) { - time_t lower; gint start_row, start_col, end_row, end_col; gboolean need_redraw = FALSE, start_in_grid, end_in_grid; g_return_if_fail (E_IS_DAY_VIEW (day_view)); - /* Calculate the first day that should be shown, based on start_time - and the days_shown setting. If we are showing 1 day it is just the - 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); - } else { - lower = e_day_view_find_work_week_start (day_view, start_time); - } - - /* See if we need to change the days shown. */ - if (lower != day_view->lower) { - e_day_view_recalc_day_starts (day_view, lower); - update_query (day_view); - } - /* Set the selection. */ start_in_grid = e_day_view_convert_time_to_grid_position (day_view, start_time, @@ -2308,6 +2291,11 @@ e_day_view_set_selected_time_range_in_top (EDayView *day_view, &end_col, &end_row); + if (!start_in_grid) + start_col = 0; + if (!end_in_grid) + end_col = day_view->days_shown - 1; + if (start_row != day_view->selection_start_row || start_col != day_view->selection_start_day) { need_redraw = TRUE; @@ -2330,6 +2318,60 @@ e_day_view_set_selected_time_range_in_top (EDayView *day_view, } } +static void +e_day_view_set_selected_time_range_visible (EDayView *day_view, + time_t start_time, + time_t end_time) +{ + gint start_row, start_col, end_row, end_col; + gboolean need_redraw = FALSE, start_in_grid, end_in_grid; + + g_return_if_fail (E_IS_DAY_VIEW (day_view)); + + /* Set the selection. */ + start_in_grid = e_day_view_convert_time_to_grid_position (day_view, + start_time, + &start_col, + &start_row); + end_in_grid = e_day_view_convert_time_to_grid_position (day_view, + end_time - 60, + &end_col, + &end_row); + + /* If either of the times isn't in the grid, or the selection covers + an entire day, we set the selection to 1 row from the start of the + working day, in the day corresponding to the start time. */ + if (!start_in_grid || !end_in_grid + || (start_row == 0 && end_row == day_view->rows - 1)) { + end_col = start_col; + + start_row = e_day_view_convert_time_to_row (day_view, day_view->work_day_start_hour, day_view->work_day_start_minute); + start_row = CLAMP (start_row, 0, day_view->rows - 1); + end_row = start_row; + } + + if (start_row != day_view->selection_start_row + || start_col != day_view->selection_start_day) { + need_redraw = TRUE; + day_view->selection_in_top_canvas = FALSE; + day_view->selection_start_row = start_row; + day_view->selection_start_day = start_col; + } + + if (end_row != day_view->selection_end_row + || end_col != day_view->selection_end_day) { + need_redraw = TRUE; + day_view->selection_in_top_canvas = FALSE; + day_view->selection_end_row = end_row; + day_view->selection_end_day = end_col; + } + + if (need_redraw) { + gtk_widget_queue_draw (day_view->top_canvas); + gtk_widget_queue_draw (day_view->main_canvas); + } +} + /* Finds the start of the working week which includes the given time. */ static time_t @@ -3269,7 +3311,7 @@ e_day_view_on_long_event_button_press (EDayView *day_view, if (!destroyed) { gtk_signal_disconnect (GTK_OBJECT (e->comp), id); - e_day_view_set_selected_time_range_in_top (day_view, e->start, e->end); + e_day_view_set_selected_time_range_in_top_visible (day_view, e->start, e->end); e_day_view_on_event_right_click (day_view, event, E_DAY_VIEW_LONG_EVENT, @@ -3321,7 +3363,7 @@ e_day_view_on_event_button_press (EDayView *day_view, if (!destroyed) { gtk_signal_disconnect (GTK_OBJECT (e->comp), id); - e_day_view_set_selected_time_range (day_view, e->start, e->end); + e_day_view_set_selected_time_range_visible (day_view, e->start, e->end); e_day_view_on_event_right_click (day_view, event, day, event_num); diff --git a/calendar/gui/e-week-view-event-item.c b/calendar/gui/e-week-view-event-item.c index eb102a9b97..4006afb3f7 100644 --- a/calendar/gui/e-week-view-event-item.c +++ b/calendar/gui/e-week-view-event-item.c @@ -798,7 +798,7 @@ e_week_view_event_item_button_press (EWeekViewEventItem *wveitem, if (!GTK_WIDGET_HAS_FOCUS (week_view)) gtk_widget_grab_focus (GTK_WIDGET (week_view)); - e_week_view_set_selected_time_range (week_view, event->start, event->end); + e_week_view_set_selected_time_range_visible (week_view, event->start, event->end); e_week_view_show_popup_menu (week_view, (GdkEventButton*) bevent, diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c index dee9b03540..500701306e 100644 --- a/calendar/gui/e-week-view.c +++ b/calendar/gui/e-week-view.c @@ -1430,6 +1430,43 @@ e_week_view_set_selected_time_range (EWeekView *week_view, gtk_widget_queue_draw (week_view->main_canvas); } +void +e_week_view_set_selected_time_range_visible (EWeekView *week_view, + time_t start_time, + time_t end_time) +{ + GDate date, end_date; + gint num_days; + + g_return_if_fail (E_IS_WEEK_VIEW (week_view)); + + time_to_gdate_with_zone (&date, start_time, week_view->zone); + + /* Set the selection to the given days. */ + week_view->selection_start_day = g_date_julian (&date) + - g_date_julian (&week_view->first_day_shown); + if (end_time == start_time + || end_time <= time_add_day_with_zone (start_time, 1, + week_view->zone)) + week_view->selection_end_day = week_view->selection_start_day; + else { + time_to_gdate_with_zone (&end_date, end_time - 60, week_view->zone); + week_view->selection_end_day = g_date_julian (&end_date) + - g_date_julian (&week_view->first_day_shown); + } + + /* Make sure the selection is valid. */ + num_days = week_view->multi_week_view ? week_view->weeks_shown * 7 : 7; + num_days--; + week_view->selection_start_day = CLAMP (week_view->selection_start_day, + 0, num_days); + week_view->selection_end_day = CLAMP (week_view->selection_end_day, + week_view->selection_start_day, + num_days); + + gtk_widget_queue_draw (week_view->main_canvas); +} + /* Returns the selected time range. */ void @@ -3055,8 +3092,8 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item, if (!destroyed) { gtk_signal_disconnect (GTK_OBJECT (e->comp), id); - - e_week_view_set_selected_time_range (week_view, e->start, e->end); + + e_week_view_set_selected_time_range_visible (week_view, e->start, e->end); e_week_view_show_popup_menu (week_view, (GdkEventButton*) gdkevent, diff --git a/calendar/gui/e-week-view.h b/calendar/gui/e-week-view.h index 689874cc25..696c8e6ac2 100644 --- a/calendar/gui/e-week-view.h +++ b/calendar/gui/e-week-view.h @@ -413,6 +413,10 @@ void e_week_view_set_selected_time_range (EWeekView *week_view, time_t start_time, time_t end_time); +void e_week_view_set_selected_time_range_visible (EWeekView *week_view, + time_t start_time, + time_t end_time); + /* Gets the visible time range. Returns FALSE if no time range has been set. */ gboolean e_week_view_get_visible_time_range (EWeekView *week_view, time_t *start_time, diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c index bbc85bf983..cdcb323e4a 100644 --- a/calendar/gui/gnome-cal.c +++ b/calendar/gui/gnome-cal.c @@ -2182,7 +2182,7 @@ gnome_calendar_edit_object (GnomeCalendar *gcal, CalComponent *comp, gboolean meeting) { GnomeCalendarPrivate *priv; - EventEditor *ee; + CompEditor *ce; const char *uid; g_return_if_fail (gcal != NULL); @@ -2193,23 +2193,26 @@ gnome_calendar_edit_object (GnomeCalendar *gcal, CalComponent *comp, cal_component_get_uid (comp, &uid); - ee = EVENT_EDITOR (e_comp_editor_registry_find (comp_editor_registry, uid)); - if (!ee) { + ce = e_comp_editor_registry_find (comp_editor_registry, uid); + if (!ce) { + EventEditor *ee; + ee = event_editor_new (); if (!ee) { g_message ("gnome_calendar_edit_object(): Could not create the event editor"); return; } - - comp_editor_set_cal_client (COMP_EDITOR (ee), priv->client); - comp_editor_edit_comp (COMP_EDITOR (ee), comp); + ce = COMP_EDITOR (ee); + + comp_editor_set_cal_client (ce, priv->client); + comp_editor_edit_comp (ce, comp); if (meeting) event_editor_show_meeting (ee); - e_comp_editor_registry_add (comp_editor_registry, COMP_EDITOR (ee), FALSE); + e_comp_editor_registry_add (comp_editor_registry, ce, FALSE); } - comp_editor_focus (COMP_EDITOR (ee)); + comp_editor_focus (ce); } /** |