From 937d719a6a5b880df4b75cfe8318d37fd4a4e814 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Fri, 15 Dec 2000 11:39:48 +0000 Subject: Fixes bug #955. 2000-12-14 Federico Mena Quintero Fixes bug #955. * gui/weekday-picker.c (WeekdayPickerPrivate): Added a field for the week_start_day, to be used in the same way as calendar-config.h defines it. Removed the week_starts_on_monday flag. (day_event_cb): Use the week_start_day. (colorize_items): Likewise. (configure_items): Likewise. (weekday_picker_set_week_start_day): New function. (weekday_picker_get_week_start_day): New function. (weekday_picker_set_week_starts_on_monday): Removed function. (weekday_picker_get_week_starts_on_monday): Removed function. * gui/widget-util.[ch]: New files with utilities for creating or configuring widgets. * gui/widget-util.c (date_edit_new): New function to create an EDateEdit configured with the calendar's preferences; moved over from event-editor.c. * gui/event-editor.c (make_recur_weekly_special): Use weekday_picker_set_week_start_day() and the corresponding function from calendar-config.h. (init_widgets): Likewise. (make_date_edit_with_time): Removed function. (make_recur_ending_until_special): Use date_edit_new(). (make_date_edit): Likewise. * gui/dialogs/task-editor.c (task_editor_create_date_edit): Likewise. * gui/event-editor-dialog.glade: Removed references to make_date_edit_with_time(); replace them with make_date_edit(). * gui/Makefile.am (evolution_calendar_SOURCES): Added widget-util.[ch] to the list of sources. svn path=/trunk/; revision=7037 --- calendar/gui/Makefile.am | 4 +- calendar/gui/dialogs/task-editor.c | 6 +- calendar/gui/event-editor-dialog.glade | 4 +- calendar/gui/event-editor.c | 33 ++-------- calendar/gui/event-editor.h | 9 --- calendar/gui/weekday-picker.c | 111 +++++++++++---------------------- calendar/gui/weekday-picker.h | 4 +- calendar/gui/widget-util.c | 57 +++++++++++++++++ calendar/gui/widget-util.h | 31 +++++++++ 9 files changed, 141 insertions(+), 118 deletions(-) create mode 100644 calendar/gui/widget-util.c create mode 100644 calendar/gui/widget-util.h (limited to 'calendar/gui') diff --git a/calendar/gui/Makefile.am b/calendar/gui/Makefile.am index 2268fa2b3c..32cb4df91f 100644 --- a/calendar/gui/Makefile.am +++ b/calendar/gui/Makefile.am @@ -116,7 +116,9 @@ evolution_calendar_SOURCES = \ tag-calendar.c \ tag-calendar.h \ weekday-picker.c \ - weekday-picker.h + weekday-picker.h \ + widget-util.c \ + widget-util.h evolution_calendar_LDADD = \ $(top_builddir)/shell/libeshell.a \ diff --git a/calendar/gui/dialogs/task-editor.c b/calendar/gui/dialogs/task-editor.c index b5e47cfdb7..6cf73a3a72 100644 --- a/calendar/gui/dialogs/task-editor.c +++ b/calendar/gui/dialogs/task-editor.c @@ -38,6 +38,7 @@ #include #include "task-editor.h" #include "../calendar-config.h" +#include "../widget-util.h" typedef struct { @@ -328,10 +329,9 @@ task_editor_create_date_edit (void) { GtkWidget *dedit; - dedit = e_date_edit_new (); - /* FIXME: Set other options. */ - e_date_edit_set_time_popup_range (E_DATE_EDIT (dedit), calendar_config_get_day_start_hour (), calendar_config_get_day_end_hour ()); + dedit = date_edit_new (TRUE, TRUE); e_date_edit_set_allow_no_date_set (E_DATE_EDIT (dedit), TRUE); + return dedit; } diff --git a/calendar/gui/event-editor-dialog.glade b/calendar/gui/event-editor-dialog.glade index b3b580d1ea..dea912be28 100644 --- a/calendar/gui/event-editor-dialog.glade +++ b/calendar/gui/event-editor-dialog.glade @@ -228,7 +228,7 @@ Custom start-time - make_date_edit_with_time + make_date_edit 0 @@ -253,7 +253,7 @@ Custom end-time - make_date_edit_with_time + make_date_edit 0 0 Tue, 16 May 2000 19:11:10 GMT diff --git a/calendar/gui/event-editor.c b/calendar/gui/event-editor.c index 6f30b45797..726f29e67d 100644 --- a/calendar/gui/event-editor.c +++ b/calendar/gui/event-editor.c @@ -37,6 +37,7 @@ #include "calendar-config.h" #include "tag-calendar.h" #include "weekday-picker.h" +#include "widget-util.h" @@ -174,7 +175,6 @@ static GtkObjectClass *parent_class; extern int day_begin, day_end; extern char *user_name; extern int am_pm_flag; -extern int week_starts_on_monday; static void append_exception (EventEditor *ee, time_t t); @@ -416,7 +416,7 @@ make_recur_weekly_special (EventEditor *ee) /* Set the weekdays */ - weekday_picker_set_week_starts_on_monday (wp, week_starts_on_monday); + weekday_picker_set_week_start_day (wp, calendar_config_get_week_start_day ()); weekday_picker_set_days (wp, priv->recurrence_weekday_day_mask); weekday_picker_set_blocked_days (wp, priv->recurrence_weekday_blocked_day_mask); @@ -669,12 +669,10 @@ make_recur_ending_until_special (EventEditor *ee) /* Create the widget */ - priv->recurrence_ending_date_edit = e_date_edit_new (); + priv->recurrence_ending_date_edit = date_edit_new (TRUE, FALSE); de = E_DATE_EDIT (priv->recurrence_ending_date_edit); - e_date_edit_set_show_time (de, FALSE); gtk_container_add (GTK_CONTAINER (priv->recurrence_ending_special), GTK_WIDGET (de)); - gtk_widget_show_all (GTK_WIDGET (de)); /* Set the value */ @@ -2030,7 +2028,7 @@ simple_recur_to_comp_object (EventEditor *ee, CalComponent *comp) r.freq = e_dialog_option_menu_get (priv->recurrence_interval_unit, recur_freq_map); r.interval = e_dialog_spin_get_int (priv->recurrence_interval_value); - r.week_start = week_starts_on_monday ? ICAL_MONDAY_WEEKDAY : ICAL_SUNDAY_WEEKDAY; + r.week_start = ICAL_SUNDAY_WEEKDAY + calendar_config_get_week_start_day (); /* Frequency-specific data */ @@ -3188,31 +3186,10 @@ recurrence_exception_delete_cb (GtkWidget *widget, EventEditor *ee) GtkWidget * make_date_edit (void) { - return date_edit_new (time (NULL), FALSE); + return date_edit_new (TRUE, TRUE); } -GtkWidget * -make_date_edit_with_time (void) -{ - return date_edit_new (time (NULL), TRUE); -} - - -GtkWidget * -date_edit_new (time_t the_time, int show_time) -{ - GtkWidget *dedit; - - dedit = e_date_edit_new (); - /* FIXME: Set other options. */ - e_date_edit_set_show_time (E_DATE_EDIT (dedit), show_time); - e_date_edit_set_time_popup_range (E_DATE_EDIT (dedit), calendar_config_get_day_start_hour (), calendar_config_get_day_end_hour ()); - return dedit; -} - - - GtkWidget * make_spin_button (int val, int low, int high) { diff --git a/calendar/gui/event-editor.h b/calendar/gui/event-editor.h index 0c7e1f34c7..1be61eb860 100644 --- a/calendar/gui/event-editor.h +++ b/calendar/gui/event-editor.h @@ -67,17 +67,8 @@ void event_editor_focus (EventEditor *ee); void event_editor_update_widgets (EventEditor *ee); -#if 0 -/* Convenience function to create and show a new event editor for an - * event that goes from day_begin to day_end of the specified day. - */ -void event_editor_new_whole_day (GnomeCalendar *owner, time_t day); -#endif GtkWidget *make_date_edit (void); -GtkWidget *make_date_edit_with_time (void); -GtkWidget *date_edit_new (time_t the_time, int show_time); - GtkWidget *make_spin_button (int val, int low, int high); diff --git a/calendar/gui/weekday-picker.c b/calendar/gui/weekday-picker.c index 4c0ede2579..7059b14133 100644 --- a/calendar/gui/weekday-picker.c +++ b/calendar/gui/weekday-picker.c @@ -41,6 +41,9 @@ struct _WeekdayPickerPrivate { /* Blocked days; these cannot be modified */ guint8 blocked_day_mask; + /* Day that defines the start of the week; 0 = Sunday, ..., 6 = Saturday */ + int week_start_day; + /* Metrics */ int font_ascent, font_descent; int max_letter_width; @@ -48,9 +51,6 @@ struct _WeekdayPickerPrivate { /* Components */ GnomeCanvasItem *boxes[7]; GnomeCanvasItem *labels[7]; - - /* Whether the week starts on Monday or Sunday */ - guint week_starts_on_monday : 1; }; @@ -164,12 +164,9 @@ day_event_cb (GnomeCanvasItem *item, GdkEvent *event, gpointer data) /* Turn on that day */ - if (priv->week_starts_on_monday) { - if (i == 6) - i = 0; - else - i++; - } + i += priv->week_start_day; + if (i >= 7) + i -= 7; if (priv->blocked_day_mask & (0x1 << i)) return TRUE; @@ -268,65 +265,30 @@ colorize_items (WeekdayPicker *wp) sel_fill = >K_WIDGET (wp)->style->bg[GTK_STATE_SELECTED]; sel_text_fill = >K_WIDGET (wp)->style->fg[GTK_STATE_SELECTED]; - if (priv->week_starts_on_monday) { + for (i = 0; i < 7; i++) { + int day; GdkColor *f, *t; - for (i = 1; i < 7; i++) { - if (priv->day_mask & (0x1 << i)) { - f = sel_fill; - t = sel_text_fill; - } else { - f = fill; - t = text_fill; - } - - gnome_canvas_item_set (priv->boxes[i - 1], - "fill_color_gdk", f, - "outline_color_gdk", outline, - NULL); - - gnome_canvas_item_set (priv->labels[i - 1], - "fill_color_gdk", t, - NULL); - } + day = i + priv->week_start_day; + if (day >= 7) + day -= 7; - if (priv->day_mask & (0x1 << 0)) { + if (priv->day_mask & (0x1 << day)) { f = sel_fill; t = sel_text_fill; } else { f = fill; t = text_fill; } - - gnome_canvas_item_set (priv->boxes[6], + + gnome_canvas_item_set (priv->boxes[i], "fill_color_gdk", f, "outline_color_gdk", outline, NULL); - gnome_canvas_item_set (priv->labels[6], + gnome_canvas_item_set (priv->labels[i], "fill_color_gdk", t, NULL); - } else { - GdkColor *f, *t; - - for (i = 0; i < 7; i++) { - if (priv->day_mask & (0x1 << i)) { - f = sel_fill; - t = sel_text_fill; - } else { - f = fill; - t = text_fill; - } - - gnome_canvas_item_set (priv->boxes[i], - "fill_color_gdk", f, - "outline_color_gdk", outline, - NULL); - - gnome_canvas_item_set (priv->labels[i], - "fill_color_gdk", t, - NULL); - } } } @@ -346,14 +308,15 @@ configure_items (WeekdayPicker *wp) height = GTK_WIDGET (wp)->allocation.height; box_width = (width - 1) / 7; - - if (priv->week_starts_on_monday) - str = _("MTWTFSS"); - else - str = _("SMTWTFS"); + str = _("SMTWTFS"); for (i = 0; i < 7; i++) { char *c; + int day; + + day = i + priv->week_start_day; + if (day >= 7) + day -= 7; gnome_canvas_item_set (priv->boxes[i], "x1", (double) (i * box_width), @@ -363,7 +326,7 @@ configure_items (WeekdayPicker *wp) "width_pixels", 0, NULL); - c = g_strndup (str + i, 1); + c = g_strndup (str + day, 1); gnome_canvas_item_set (priv->labels[i], "text", c, "font_gdk", GTK_WIDGET (wp)->style->font, @@ -564,43 +527,45 @@ weekday_picker_get_blocked_days (WeekdayPicker *wp) } /** - * weekday_picker_set_week_starts_on_monday: + * weekday_picker_set_week_start_day: * @wp: A weekday picker. - * @on_monday: Whether weeks start on Monday. + * @week_start_day: Index of the day that defines the start of the week; 0 is + * Sunday, 1 is Monday, etc. * - * Sets whether a weekday picker should display weeks as starting on monday. - * The default setting is to make Sunday the first day of the week. + * Sets the day that defines the start of the week for a weekday picker. **/ void -weekday_picker_set_week_starts_on_monday (WeekdayPicker *wp, gboolean on_monday) +weekday_picker_set_week_start_day (WeekdayPicker *wp, int week_start_day) { WeekdayPickerPrivate *priv; g_return_if_fail (wp != NULL); g_return_if_fail (IS_WEEKDAY_PICKER (wp)); + g_return_if_fail (week_start_day >= 0 && week_start_day < 7); priv = wp->priv; - priv->week_starts_on_monday = on_monday ? TRUE : FALSE; + priv->week_start_day = week_start_day; configure_items (wp); } /** - * weekday_picker_get_week_starts_on_monday: + * weekday_picker_get_week_start_day: * @wp: A weekday picker. * - * Queries whether a weekday picker is set to show weeks as starting on Monday. + * Queries the day that defines the start of the week in a weekday picker. * - * Return value: TRUE if weeks start on monday, FALSE if on Sunday. + * Return value: Index of the day that defines the start of the week. See + * weekday_picker_set_week_start_day() to see how this is represented. **/ -gboolean -weekday_picker_get_week_starts_on_monday (WeekdayPicker *wp) +int +weekday_picker_get_week_start_day (WeekdayPicker *wp) { WeekdayPickerPrivate *priv; - g_return_val_if_fail (wp != NULL, FALSE); - g_return_val_if_fail (IS_WEEKDAY_PICKER (wp), FALSE); + g_return_val_if_fail (wp != NULL, -1); + g_return_val_if_fail (IS_WEEKDAY_PICKER (wp), -1); priv = wp->priv; - return priv->week_starts_on_monday; + return priv->week_start_day; } diff --git a/calendar/gui/weekday-picker.h b/calendar/gui/weekday-picker.h index cf2367c511..00c51b7a62 100644 --- a/calendar/gui/weekday-picker.h +++ b/calendar/gui/weekday-picker.h @@ -63,8 +63,8 @@ guint8 weekday_picker_get_days (WeekdayPicker *wp); void weekday_picker_set_blocked_days (WeekdayPicker *wp, guint8 blocked_day_mask); guint weekday_picker_get_blocked_days (WeekdayPicker *wp); -void weekday_picker_set_week_starts_on_monday (WeekdayPicker *wp, gboolean on_monday); -gboolean weekday_picker_get_week_starts_on_monday (WeekdayPicker *wp); +void weekday_picker_set_week_start_day (WeekdayPicker *wp, int week_start_day); +int weekday_picker_get_week_start_day (WeekdayPicker *wp); diff --git a/calendar/gui/widget-util.c b/calendar/gui/widget-util.c new file mode 100644 index 0000000000..9d271d29f3 --- /dev/null +++ b/calendar/gui/widget-util.c @@ -0,0 +1,57 @@ +/* Evolution calendar - Widget utilities + * + * Copyright (C) 2000 Helix Code, Inc. + * + * Author: Federico Mena-Quintero + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include "calendar-config.h" +#include "widget-util.h" + + + +/** + * date_edit_new: + * @show_date: Whether to show a date picker in the widget. + * @show_time: Whether to show a time picker in the widget. + * + * Creates a new #EDateEdit widget, configured using the calendar's preferences. + * + * Return value: A newly-created #EDateEdit widget. + **/ +GtkWidget * +date_edit_new (gboolean show_date, gboolean show_time) +{ + EDateEdit *dedit; + + dedit = E_DATE_EDIT (e_date_edit_new ()); + + e_date_edit_set_show_date (dedit, show_date); + e_date_edit_set_show_time (dedit, show_time); + e_date_edit_set_time_popup_range (dedit, + calendar_config_get_day_start_hour (), + calendar_config_get_day_end_hour ()); + e_date_edit_set_week_start_day (dedit, (calendar_config_get_week_start_day () + 6) % 7); + e_date_edit_set_show_week_numbers (dedit, calendar_config_get_dnav_show_week_no ()); + + return GTK_WIDGET (dedit); +} diff --git a/calendar/gui/widget-util.h b/calendar/gui/widget-util.h new file mode 100644 index 0000000000..930e0f9b6e --- /dev/null +++ b/calendar/gui/widget-util.h @@ -0,0 +1,31 @@ +/* Evolution calendar - Widget utilities + * + * Copyright (C) 2000 Helix Code, Inc. + * + * Author: Federico Mena-Quintero + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef WIDGET_UTIL_H +#define WIDGET_UTIL_H + +#include + + +GtkWidget *date_edit_new (gboolean show_date, gboolean show_time); + + +#endif -- cgit v1.2.3