diff options
Diffstat (limited to 'calendar/gui/dialogs/cal-prefs-dialog.c')
-rw-r--r-- | calendar/gui/dialogs/cal-prefs-dialog.c | 915 |
1 files changed, 0 insertions, 915 deletions
diff --git a/calendar/gui/dialogs/cal-prefs-dialog.c b/calendar/gui/dialogs/cal-prefs-dialog.c deleted file mode 100644 index f404d08927..0000000000 --- a/calendar/gui/dialogs/cal-prefs-dialog.c +++ /dev/null @@ -1,915 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Damon Chaplin <damon@ximian.com> - * Ettore Perazzoli <ettore@ximian.com> - * David Trowbridge <trowbrds cs colorado edu> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "../e-cal-config.h" -#include "../e-timezone-entry.h" -#include "../calendar-config.h" -#include "cal-prefs-dialog.h" -#include <widgets/misc/e-dateedit.h> -#include "e-util/e-util.h" -#include "e-util/e-datetime-format.h" -#include "e-util/e-dialog-widgets.h" -#include "e-util/e-util-private.h" -#include "shell/e-shell-utils.h" -#include <glib/gi18n.h> -#include <string.h> - -static const gint time_division_map[] = { - 60, 30, 15, 10, 5, -1 -}; - -/* The following two are kept separate in case we need to re-order each menu individually */ -static const gint hide_completed_units_map[] = { - E_DURATION_MINUTES, E_DURATION_HOURS, E_DURATION_DAYS, -1 -}; - -/* same is used for Birthdays & Anniversaries calendar */ -static const gint default_reminder_units_map[] = { - E_DURATION_MINUTES, E_DURATION_HOURS, E_DURATION_DAYS, -1 -}; - -static GtkVBoxClass *parent_class = NULL; - -static void -calendar_prefs_dialog_finalize (GObject *obj) -{ - CalendarPrefsDialog *prefs = (CalendarPrefsDialog *) obj; - - g_object_unref (prefs->builder); - - if (prefs->gconf) { - g_object_unref (prefs->gconf); - prefs->gconf = NULL; - } - - ((GObjectClass *)(parent_class))->finalize (obj); -} - -static void -calendar_prefs_dialog_class_init (CalendarPrefsDialogClass *klass) -{ - GObjectClass *object_class; - - object_class = (GObjectClass *) klass; - parent_class = g_type_class_ref (GTK_TYPE_VBOX); - - object_class->finalize = calendar_prefs_dialog_finalize; -} - -static void -calendar_prefs_dialog_init (CalendarPrefsDialog *dialog) -{ -} - -static GtkWidget * -eccp_widget_glade (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidget *old, gpointer data) -{ - CalendarPrefsDialog *prefs = data; - - return e_builder_get_widget (prefs->builder, item->label); -} - -static void -update_day_second_zone_caption (CalendarPrefsDialog *prefs) -{ - gchar *location; - const gchar *caption; - icaltimezone *zone; - - g_return_if_fail (prefs != NULL); - - /* Translators: "None" indicates no second time zone set for a day view */ - caption = C_("cal-second-zone", "None"); - - location = calendar_config_get_day_second_zone (); - if (location && *location) { - zone = icaltimezone_get_builtin_timezone (location); - if (zone && icaltimezone_get_display_name (zone)) { - caption = icaltimezone_get_display_name (zone); - } - } - g_free (location); - - gtk_button_set_label (GTK_BUTTON (prefs->day_second_zone), caption); -} - -static void -on_set_day_second_zone (GtkWidget *item, CalendarPrefsDialog *prefs) -{ - if (!gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (item))) - return; - - calendar_config_set_day_second_zone (g_object_get_data (G_OBJECT (item), "timezone")); - update_day_second_zone_caption (prefs); -} - -static void -on_select_day_second_zone (GtkWidget *item, CalendarPrefsDialog *prefs) -{ - g_return_if_fail (prefs != NULL); - - calendar_config_select_day_second_zone (); - update_day_second_zone_caption (prefs); -} - -static void -day_second_zone_clicked (GtkWidget *widget, CalendarPrefsDialog *prefs) -{ - GtkWidget *menu, *item; - GSList *group = NULL, *recent_zones, *s; - gchar *location; - icaltimezone *zone, *second_zone = NULL; - - menu = gtk_menu_new (); - - location = calendar_config_get_day_second_zone (); - if (location && *location) - second_zone = icaltimezone_get_builtin_timezone (location); - g_free (location); - - group = NULL; - item = gtk_radio_menu_item_new_with_label (group, C_("cal-second-zone", "None")); - group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (item)); - if (!second_zone) - gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); - g_signal_connect (item, "toggled", G_CALLBACK (on_set_day_second_zone), prefs); - - recent_zones = calendar_config_get_day_second_zones (); - for (s = recent_zones; s != NULL; s = s->next) { - zone = icaltimezone_get_builtin_timezone (s->data); - if (!zone) - continue; - - item = gtk_radio_menu_item_new_with_label (group, icaltimezone_get_display_name (zone)); - group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (item)); - /* both comes from builtin, thus no problem to compare pointers */ - if (zone == second_zone) - gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); - g_object_set_data_full (G_OBJECT (item), "timezone", g_strdup (s->data), g_free); - g_signal_connect (item, "toggled", G_CALLBACK (on_set_day_second_zone), prefs); - } - calendar_config_free_day_second_zones (recent_zones); - - item = gtk_separator_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); - - item = gtk_menu_item_new_with_label (_("Select...")); - g_signal_connect (item, "activate", G_CALLBACK (on_select_day_second_zone), prefs); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); - - gtk_widget_show_all (menu); - - gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, - 0, gtk_get_current_event_time ()); -} - -static void -start_of_day_changed (GtkWidget *widget, CalendarPrefsDialog *prefs) -{ - gint start_hour, start_minute, end_hour, end_minute; - EDateEdit *start, *end; - - start = E_DATE_EDIT (prefs->start_of_day); - end = E_DATE_EDIT (prefs->end_of_day); - - e_date_edit_get_time_of_day (start, &start_hour, &start_minute); - e_date_edit_get_time_of_day (end, &end_hour, &end_minute); - - if ((start_hour > end_hour) || (start_hour == end_hour && start_minute > end_minute)) { - if (start_hour < 23) - e_date_edit_set_time_of_day (end, start_hour + 1, start_minute); - else - e_date_edit_set_time_of_day (end, 23, 59); - - return; - } - - calendar_config_set_day_start_hour (start_hour); - calendar_config_set_day_start_minute (start_minute); -} - -static void -end_of_day_changed (GtkWidget *widget, CalendarPrefsDialog *prefs) -{ - gint start_hour, start_minute, end_hour, end_minute; - EDateEdit *start, *end; - - start = E_DATE_EDIT (prefs->start_of_day); - end = E_DATE_EDIT (prefs->end_of_day); - - e_date_edit_get_time_of_day (start, &start_hour, &start_minute); - e_date_edit_get_time_of_day (end, &end_hour, &end_minute); - - if ((end_hour < start_hour) || (end_hour == start_hour && end_minute < start_minute)) { - if (end_hour < 1) - e_date_edit_set_time_of_day (start, 0, 0); - else - e_date_edit_set_time_of_day (start, end_hour - 1, end_minute); - - return; - } - - calendar_config_set_day_end_hour (end_hour); - calendar_config_set_day_end_minute (end_minute); -} - -static void -time_divisions_changed (GtkWidget *widget, CalendarPrefsDialog *prefs) -{ - gint time_divisions; - - time_divisions = e_dialog_combo_box_get (prefs->time_divisions, time_division_map); - calendar_config_set_time_divisions (time_divisions); -} - -static void -month_scroll_by_week_toggled (GtkToggleButton *toggle, CalendarPrefsDialog *prefs) -{ - calendar_config_set_month_scroll_by_week (gtk_toggle_button_get_active (toggle)); -} - -static void -hide_completed_tasks_toggled (GtkToggleButton *toggle, CalendarPrefsDialog *prefs) -{ - gboolean hide; - - hide = gtk_toggle_button_get_active (toggle); - - gtk_widget_set_sensitive (prefs->tasks_hide_completed_interval, hide); - gtk_widget_set_sensitive (prefs->tasks_hide_completed_units, hide); - - calendar_config_set_hide_completed_tasks (hide); -} - -static void -hide_completed_tasks_changed (GtkWidget *widget, CalendarPrefsDialog *prefs) -{ - calendar_config_set_hide_completed_tasks_value ( - gtk_spin_button_get_value_as_int ( - GTK_SPIN_BUTTON (prefs->tasks_hide_completed_interval))); -} - -static void -hide_completed_tasks_units_changed (GtkWidget *widget, CalendarPrefsDialog *prefs) -{ - calendar_config_set_hide_completed_tasks_units ( - e_dialog_combo_box_get (prefs->tasks_hide_completed_units, hide_completed_units_map)); -} - -static void -default_reminder_toggled (GtkToggleButton *toggle, CalendarPrefsDialog *prefs) -{ - calendar_config_set_use_default_reminder (gtk_toggle_button_get_active (toggle)); -} - -static void -default_reminder_interval_changed (GtkWidget *widget, CalendarPrefsDialog *prefs) -{ - const gchar *str; - gdouble value; - - str = gtk_entry_get_text (GTK_ENTRY (widget)); - value = g_ascii_strtod (str, NULL); - - calendar_config_set_default_reminder_interval (value); -} - -static void -default_reminder_units_changed (GtkWidget *widget, CalendarPrefsDialog *prefs) -{ - calendar_config_set_default_reminder_units ( - e_dialog_combo_box_get (prefs->default_reminder_units, default_reminder_units_map)); -} - -static void -ba_reminder_toggled (GtkToggleButton *toggle, CalendarPrefsDialog *prefs) -{ - gboolean enabled = gtk_toggle_button_get_active (toggle); - - calendar_config_set_ba_reminder (&enabled, NULL, NULL); -} - -static void -ba_reminder_interval_changed (GtkWidget *widget, CalendarPrefsDialog *prefs) -{ - const gchar *str; - gint value; - - str = gtk_entry_get_text (GTK_ENTRY (widget)); - value = (gint) g_ascii_strtod (str, NULL); - - calendar_config_set_ba_reminder (NULL, &value, NULL); -} - -static void -ba_reminder_units_changed (GtkWidget *widget, CalendarPrefsDialog *prefs) -{ - EDurationType units = e_dialog_combo_box_get (prefs->ba_reminder_units, default_reminder_units_map); - - calendar_config_set_ba_reminder (NULL, NULL, &units); -} - -static void -notify_with_tray_toggled (GtkToggleButton *toggle, CalendarPrefsDialog *prefs) -{ - GConfClient *gconf; - - g_return_if_fail (toggle != NULL); - - gconf = gconf_client_get_default (); - gconf_client_set_bool (gconf, "/apps/evolution/calendar/notify/notify_with_tray", gtk_toggle_button_get_active (toggle), NULL); - g_object_unref (gconf); -} - -static void -alarms_selection_changed (ESourceSelector *selector, CalendarPrefsDialog *prefs) -{ - ESourceList *source_list = prefs->alarms_list; - GSList *selection; - GSList *l; - GSList *groups; - ESource *source; - const gchar *alarm; - - /* first we clear all the alarm flags from all sources */ - for (groups = e_source_list_peek_groups (source_list); groups; groups = groups->next) { - ESourceGroup *group = E_SOURCE_GROUP (groups->data); - GSList *sources; - for (sources = e_source_group_peek_sources (group); sources; sources = sources->next) { - source = E_SOURCE (sources->data); - - alarm = e_source_get_property (source, "alarm"); - if (alarm && !g_ascii_strcasecmp (alarm, "never")) - continue; - - e_source_set_property (source, "alarm", "false"); - } - } - - /* then we loop over the selector's selection, setting the - property on those sources */ - selection = e_source_selector_get_selection (selector); - for (l = selection; l; l = l->next) { - source = E_SOURCE (l->data); - - alarm = (gchar *)e_source_get_property (source, "alarm"); - if (alarm && !g_ascii_strcasecmp (alarm, "never")) - continue; - - e_source_set_property (E_SOURCE (l->data), "alarm", "true"); - } - e_source_selector_free_selection (selection); - - /* FIXME show an error if this fails? */ - e_source_list_sync (source_list, NULL); -} - -static void -update_system_tz_widgets (EShellSettings *shell_settings, - GParamSpec *pspec, - CalendarPrefsDialog *prefs) -{ - GtkWidget *widget; - icaltimezone *zone; - const gchar *display_name; - gchar *text; - - widget = e_builder_get_widget (prefs->builder, "system-tz-label"); - g_return_if_fail (GTK_IS_LABEL (widget)); - - zone = e_cal_util_get_system_timezone (); - if (zone != NULL) - display_name = gettext (icaltimezone_get_display_name (zone)); - else - display_name = "UTC"; - - text = g_strdup_printf ("(%s)", display_name); - gtk_label_set_text (GTK_LABEL (widget), text); - g_free (text); -} - -static void -setup_changes (CalendarPrefsDialog *prefs) -{ - g_signal_connect (G_OBJECT (prefs->day_second_zone), "clicked", G_CALLBACK (day_second_zone_clicked), prefs); - - g_signal_connect (G_OBJECT (prefs->start_of_day), "changed", G_CALLBACK (start_of_day_changed), prefs); - g_signal_connect (G_OBJECT (prefs->end_of_day), "changed", G_CALLBACK (end_of_day_changed), prefs); - - g_signal_connect (G_OBJECT (prefs->time_divisions), "changed", G_CALLBACK (time_divisions_changed), prefs); - - g_signal_connect (G_OBJECT (prefs->month_scroll_by_week), "toggled", G_CALLBACK (month_scroll_by_week_toggled), prefs); - - g_signal_connect (G_OBJECT (prefs->tasks_hide_completed), "toggled", - G_CALLBACK (hide_completed_tasks_toggled), prefs); - g_signal_connect (G_OBJECT (prefs->tasks_hide_completed_interval), "value-changed", - G_CALLBACK (hide_completed_tasks_changed), prefs); - g_signal_connect (G_OBJECT (prefs->tasks_hide_completed_units), "changed", G_CALLBACK (hide_completed_tasks_units_changed), prefs); - - g_signal_connect (G_OBJECT (prefs->default_reminder), "toggled", G_CALLBACK (default_reminder_toggled), prefs); - g_signal_connect (G_OBJECT (prefs->default_reminder_interval), "changed", - G_CALLBACK (default_reminder_interval_changed), prefs); - g_signal_connect (G_OBJECT (prefs->default_reminder_units), "changed", G_CALLBACK (default_reminder_units_changed), prefs); - - g_signal_connect (G_OBJECT (prefs->ba_reminder), "toggled", G_CALLBACK (ba_reminder_toggled), prefs); - g_signal_connect (G_OBJECT (prefs->ba_reminder_interval), "changed", - G_CALLBACK (ba_reminder_interval_changed), prefs); - g_signal_connect (G_OBJECT (prefs->ba_reminder_units), "changed", G_CALLBACK (ba_reminder_units_changed), prefs); - - g_signal_connect (G_OBJECT (prefs->notify_with_tray), "toggled", G_CALLBACK (notify_with_tray_toggled), prefs); - g_signal_connect (G_OBJECT (prefs->alarm_list_widget), "selection_changed", G_CALLBACK (alarms_selection_changed), prefs); -} - -/* Shows the current task list settings in the dialog */ -static void -show_task_list_config (CalendarPrefsDialog *prefs) -{ - EDurationType units; - gboolean hide_completed_tasks; - - /* Hide Completed Tasks. */ - hide_completed_tasks = calendar_config_get_hide_completed_tasks (); - gtk_toggle_button_set_active ( - GTK_TOGGLE_BUTTON (prefs->tasks_hide_completed), - hide_completed_tasks); - - /* Hide Completed Tasks Units. */ - units = calendar_config_get_hide_completed_tasks_units (); - e_dialog_combo_box_set (prefs->tasks_hide_completed_units, units, hide_completed_units_map); - - /* Hide Completed Tasks Value. */ - gtk_spin_button_set_value ( - GTK_SPIN_BUTTON (prefs->tasks_hide_completed_interval), - calendar_config_get_hide_completed_tasks_value ()); - - gtk_widget_set_sensitive (prefs->tasks_hide_completed_interval, hide_completed_tasks); - gtk_widget_set_sensitive (prefs->tasks_hide_completed_units, hide_completed_tasks); -} - -static void -initialize_selection (ESourceSelector *selector, ESourceList *source_list) -{ - GSList *groups; - - for (groups = e_source_list_peek_groups (source_list); groups; groups = groups->next) { - ESourceGroup *group = E_SOURCE_GROUP (groups->data); - GSList *sources; - for (sources = e_source_group_peek_sources (group); sources; sources = sources->next) { - ESource *source = E_SOURCE (sources->data); - const gchar *completion = e_source_get_property (source, "alarm"); - if (!completion || !g_ascii_strcasecmp (completion, "true")) { - if (!completion) - e_source_set_property (E_SOURCE (source), "alarm", "true"); - e_source_selector_select_source (selector, source); - } - } - } -} - -static void -show_alarms_config (CalendarPrefsDialog *prefs) -{ - GConfClient *gconf; - - if (e_cal_get_sources (&prefs->alarms_list, E_CAL_SOURCE_TYPE_EVENT, NULL)) { - prefs->alarm_list_widget = e_source_selector_new (prefs->alarms_list); - atk_object_set_name (gtk_widget_get_accessible (prefs->alarm_list_widget), _("Selected Calendars for Alarms")); - gtk_container_add (GTK_CONTAINER (prefs->scrolled_window), prefs->alarm_list_widget); - gtk_widget_show (prefs->alarm_list_widget); - initialize_selection (E_SOURCE_SELECTOR (prefs->alarm_list_widget), prefs->alarms_list); - } - - gconf = gconf_client_get_default (); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prefs->notify_with_tray), gconf_client_get_bool (gconf, "/apps/evolution/calendar/notify/notify_with_tray", NULL)); - g_object_unref (gconf); -} - -/* Shows the current config settings in the dialog. */ -static void -show_config (CalendarPrefsDialog *prefs) -{ - gint time_divisions; - gboolean set = FALSE; - EDurationType units; - gint interval; - - /* Day's second zone */ - update_day_second_zone_caption (prefs); - - /* Day's second zone */ - update_day_second_zone_caption (prefs); - - /* Start of Day. */ - e_date_edit_set_time_of_day (E_DATE_EDIT (prefs->start_of_day), calendar_config_get_day_start_hour (), calendar_config_get_day_start_minute ()); - - /* End of Day. */ - e_date_edit_set_time_of_day (E_DATE_EDIT (prefs->end_of_day), calendar_config_get_day_end_hour (), calendar_config_get_day_end_minute ()); - - /* Time Divisions. */ - time_divisions = calendar_config_get_time_divisions (); - e_dialog_combo_box_set (prefs->time_divisions, time_divisions, time_division_map); - - /* Month View - Scroll by a week */ - gtk_toggle_button_set_active ( - GTK_TOGGLE_BUTTON (prefs->month_scroll_by_week), - calendar_config_get_month_scroll_by_week ()); - - /* Task list */ - show_task_list_config (prefs); - - /* Alarms list*/ - show_alarms_config (prefs); - - /* Other page */ - gtk_toggle_button_set_active ( - GTK_TOGGLE_BUTTON (prefs->default_reminder), - calendar_config_get_use_default_reminder ()); - gtk_spin_button_set_value ( - GTK_SPIN_BUTTON (prefs->default_reminder_interval), - calendar_config_get_default_reminder_interval ()); - e_dialog_combo_box_set (prefs->default_reminder_units, calendar_config_get_default_reminder_units (), default_reminder_units_map); - - /* Birthdays & Anniversaries reminder */ - set = calendar_config_get_ba_reminder (&interval, &units); - - gtk_toggle_button_set_active ( - GTK_TOGGLE_BUTTON (prefs->ba_reminder), set); - gtk_spin_button_set_value ( - GTK_SPIN_BUTTON (prefs->ba_reminder_interval), interval); - e_dialog_combo_box_set (prefs->ba_reminder_units, units, default_reminder_units_map); -} - -/* plugin meta-data */ -static ECalConfigItem eccp_items[] = { - { E_CONFIG_BOOK, (gchar *) "", (gchar *) "toplevel-notebook", eccp_widget_glade }, - { E_CONFIG_PAGE, (gchar *) "00.general", (gchar *) "general", eccp_widget_glade }, - { E_CONFIG_SECTION_TABLE, (gchar *) "00.general/00.time", (gchar *) "time", eccp_widget_glade }, - { E_CONFIG_SECTION_TABLE, (gchar *) "00.general/10.workWeek", (gchar *) "workWeek", eccp_widget_glade }, - { E_CONFIG_SECTION, (gchar *) "00.general/20.alerts", (gchar *) "alerts", eccp_widget_glade }, - { E_CONFIG_PAGE, (gchar *) "10.display", (gchar *) "display", eccp_widget_glade }, - { E_CONFIG_SECTION, (gchar *) "10.display/00.general", (gchar *) "displayGeneral", eccp_widget_glade }, - { E_CONFIG_SECTION, (gchar *) "10.display/10.taskList", (gchar *) "taskList", eccp_widget_glade }, - { E_CONFIG_PAGE, (gchar *) "15.alarms", (gchar *) "alarms", eccp_widget_glade }, - { E_CONFIG_PAGE, (gchar *) "20.freeBusy", (gchar *) "freebusy", eccp_widget_glade }, - { E_CONFIG_SECTION, (gchar *) "20.freeBusy/00.defaultServer", (gchar *) "default-freebusy-vbox", eccp_widget_glade }, -}; - -static void -eccp_free (EConfig *ec, GSList *items, gpointer data) -{ - g_slist_free (items); -} - -static void -calendar_prefs_dialog_construct (CalendarPrefsDialog *prefs, - EShell *shell) -{ - ECalConfig *ec; - ECalConfigTargetPrefs *target; - EShellSettings *shell_settings; - gboolean locale_supports_12_hour_format; - gint i; - GtkWidget *toplevel; - GtkWidget *widget; - GtkWidget *table; - GSList *l; - - shell_settings = e_shell_get_shell_settings (shell); - - locale_supports_12_hour_format = - calendar_config_locale_supports_12_hour_format (); - - /* Force 24 hour format for locales which don't support 12 hour format */ - if (!locale_supports_12_hour_format - && !e_shell_settings_get_boolean (shell_settings, "cal-use-24-hour-format")) - e_shell_settings_set_boolean (shell_settings, "cal-use-24-hour-format", TRUE); - - /* Make sure our custom widget classes are registered with - * GType before we load the GtkBuilder definition file. */ - E_TYPE_DATE_EDIT; - E_TYPE_TIMEZONE_ENTRY; - - prefs->builder = gtk_builder_new (); - e_load_ui_builder_definition (prefs->builder, "cal-prefs-dialog.ui"); - - prefs->gconf = gconf_client_get_default (); - - /** @HookPoint-ECalConfig: Calendar Preferences Page - * @Id: org.gnome.evolution.calendar.prefs - * @Type: E_CONFIG_BOOK - * @Class: org.gnome.evolution.calendar.config:1.0 - * @Target: ECalConfigTargetPrefs - * - * The mail calendar preferences page - */ - ec = e_cal_config_new (E_CONFIG_BOOK, "org.gnome.evolution.calendar.prefs"); - l = NULL; - for (i = 0; i < G_N_ELEMENTS (eccp_items); i++) - l = g_slist_prepend (l, &eccp_items[i]); - e_config_add_items ((EConfig *) ec, l, NULL, NULL, eccp_free, prefs); - - widget = e_builder_get_widget (prefs->builder, "use-system-tz-check"); - g_object_bind_property ( - shell_settings, "cal-use-system-timezone", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - g_signal_connect ( - shell_settings, "notify::cal-use-system-timezone", - G_CALLBACK (update_system_tz_widgets), prefs); - g_object_notify (G_OBJECT (shell_settings), "cal-use-system-timezone"); - - widget = e_builder_get_widget (prefs->builder, "timezone"); - g_object_bind_property ( - shell_settings, "cal-timezone", - widget, "timezone", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - g_object_bind_property ( - shell_settings, "cal-use-system-timezone", - widget, "sensitive", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE | - G_BINDING_INVERT_BOOLEAN); - - /* General tab */ - prefs->day_second_zone = e_builder_get_widget (prefs->builder, "day_second_zone"); - - widget = e_builder_get_widget (prefs->builder, "sun_button"); - g_object_bind_property ( - shell_settings, "cal-working-days-sunday", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - widget = e_builder_get_widget (prefs->builder, "mon_button"); - g_object_bind_property ( - shell_settings, "cal-working-days-monday", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - widget = e_builder_get_widget (prefs->builder, "tue_button"); - g_object_bind_property ( - shell_settings, "cal-working-days-tuesday", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - widget = e_builder_get_widget (prefs->builder, "wed_button"); - g_object_bind_property ( - shell_settings, "cal-working-days-wednesday", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - widget = e_builder_get_widget (prefs->builder, "thu_button"); - g_object_bind_property ( - shell_settings, "cal-working-days-thursday", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - widget = e_builder_get_widget (prefs->builder, "fri_button"); - g_object_bind_property ( - shell_settings, "cal-working-days-friday", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - widget = e_builder_get_widget (prefs->builder, "sat_button"); - g_object_bind_property ( - shell_settings, "cal-working-days-saturday", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - widget = e_builder_get_widget (prefs->builder, "week_start_day"); - g_object_bind_property ( - shell_settings, "cal-week-start-day", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - widget = e_builder_get_widget (prefs->builder, "start_of_day"); - prefs->start_of_day = widget; /* XXX delete this */ - if (locale_supports_12_hour_format) - g_object_bind_property ( - shell_settings, "cal-use-24-hour-format", - widget, "use-24-hour-format", - G_BINDING_SYNC_CREATE); - - widget = e_builder_get_widget (prefs->builder, "end_of_day"); - prefs->end_of_day = widget; /* XXX delete this */ - if (locale_supports_12_hour_format) - g_object_bind_property ( - shell_settings, "cal-use-24-hour-format", - widget, "use-24-hour-format", - G_BINDING_SYNC_CREATE); - - widget = e_builder_get_widget (prefs->builder, "use_12_hour"); - gtk_widget_set_sensitive (widget, locale_supports_12_hour_format); - g_object_bind_property ( - shell_settings, "cal-use-24-hour-format", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE | - G_BINDING_INVERT_BOOLEAN); - - widget = e_builder_get_widget (prefs->builder, "use_24_hour"); - gtk_widget_set_sensitive (widget, locale_supports_12_hour_format); - g_object_bind_property ( - shell_settings, "cal-use-24-hour-format", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - widget = e_builder_get_widget (prefs->builder, "confirm_delete"); - g_object_bind_property ( - shell_settings, "cal-confirm-delete", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - prefs->default_reminder = e_builder_get_widget (prefs->builder, "default_reminder"); - prefs->default_reminder_interval = e_builder_get_widget (prefs->builder, "default_reminder_interval"); - prefs->default_reminder_units = e_builder_get_widget (prefs->builder, "default_reminder_units"); - prefs->ba_reminder = e_builder_get_widget (prefs->builder, "ba_reminder"); - prefs->ba_reminder_interval = e_builder_get_widget (prefs->builder, "ba_reminder_interval"); - prefs->ba_reminder_units = e_builder_get_widget (prefs->builder, "ba_reminder_units"); - - /* Display tab */ - prefs->time_divisions = e_builder_get_widget (prefs->builder, "time_divisions"); - - widget = e_builder_get_widget (prefs->builder, "show_end_times"); - g_object_bind_property ( - shell_settings, "cal-show-event-end-times", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - widget = e_builder_get_widget (prefs->builder, "compress_weekend"); - g_object_bind_property ( - shell_settings, "cal-compress-weekend", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - widget = e_builder_get_widget (prefs->builder, "show_week_numbers"); - g_object_bind_property ( - shell_settings, "cal-show-week-numbers", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - widget = e_builder_get_widget (prefs->builder, "recur_events_italic"); - g_object_bind_property ( - shell_settings, "cal-recur-events-italic", - widget, "active", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - prefs->month_scroll_by_week = e_builder_get_widget (prefs->builder, "month_scroll_by_week"); - - widget = e_builder_get_widget (prefs->builder, "tasks_due_today_color"); - g_object_bind_property_full ( - shell_settings, "cal-tasks-color-due-today", - widget, "color", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE, - e_binding_transform_string_to_color, - e_binding_transform_color_to_string, - NULL, (GDestroyNotify) NULL); - - widget = e_builder_get_widget (prefs->builder, "tasks_overdue_color"); - g_object_bind_property_full ( - shell_settings, "cal-tasks-color-overdue", - widget, "color", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE, - e_binding_transform_string_to_color, - e_binding_transform_color_to_string, - (GDestroyNotify) NULL, NULL); - - prefs->tasks_hide_completed = e_builder_get_widget (prefs->builder, "tasks_hide_completed"); - prefs->tasks_hide_completed_interval = e_builder_get_widget (prefs->builder, "tasks_hide_completed_interval"); - prefs->tasks_hide_completed_units = e_builder_get_widget (prefs->builder, "tasks_hide_completed_units"); - - /* Alarms tab */ - prefs->notify_with_tray = e_builder_get_widget (prefs->builder, "notify_with_tray"); - prefs->scrolled_window = e_builder_get_widget (prefs->builder, "calendar-source-scrolled-window"); - - /* Free/Busy tab */ - widget = e_builder_get_widget (prefs->builder, "template_url"); - g_object_bind_property ( - shell_settings, "cal-free-busy-template", - widget, "text", - G_BINDING_BIDIRECTIONAL | - G_BINDING_SYNC_CREATE); - - /* date/time format */ - table = e_builder_get_widget (prefs->builder, "datetime_format_table"); - e_datetime_format_add_setup_widget (table, 0, "calendar", "table", DTFormatKindDateTime, _("Ti_me and date:")); - e_datetime_format_add_setup_widget (table, 1, "calendar", "table", DTFormatKindDate, _("_Date only:")); - - /* Hide senseless preferences when running in Express mode */ - e_shell_hide_widgets_for_express_mode (shell, prefs->builder, - "label_second_zone", - "hbox_second_zone", - "timezone", - "timezone_label", - "hbox_use_system_timezone", - "hbox_time_divisions", - "show_end_times", - "month_scroll_by_week", - NULL); - - /* HACK: GTK+ 2.18 and 2.20 has a GtkTable which includes row/column spacing even for empty rows/columns. - * When Evo runs in Express mode, we hide all the rows in the Time section of the calendar's General - * preferences page. However, due to that behavior in GTK+, we get a lot of extra spacing in that - * section. Since we know that in Express mode we only leave a single row visible, we'll make the - * table's row spacing equal to 0 in that case. - */ - if (e_shell_get_express_mode (shell)) { - widget = e_builder_get_widget (prefs->builder, "time"); - gtk_table_set_row_spacings (GTK_TABLE (widget), 0); - } - - /* Hook up and add the toplevel widget */ - - target = e_cal_config_target_new_prefs (ec, prefs->gconf); - e_config_set_target ((EConfig *)ec, (EConfigTarget *) target); - toplevel = e_config_create_widget ((EConfig *)ec); - gtk_container_add (GTK_CONTAINER (prefs), toplevel); - - show_config (prefs); - /* FIXME: weakref? */ - setup_changes (prefs); -} - -GType -calendar_prefs_dialog_get_type (void) -{ - static GType type = 0; - - if (!type) { - static GTypeInfo type_info = { - sizeof (CalendarPrefsDialogClass), - NULL, NULL, - (GClassInitFunc) calendar_prefs_dialog_class_init, - NULL, NULL, - sizeof (CalendarPrefsDialog), - 0, - (GInstanceInitFunc) calendar_prefs_dialog_init, - }; - - type = g_type_register_static (GTK_TYPE_VBOX, "CalendarPrefsDialog", &type_info, 0); - } - - return type; -} - -GtkWidget * -calendar_prefs_dialog_new (EPreferencesWindow *window) -{ - EShell *shell; - CalendarPrefsDialog *dialog; - - shell = e_preferences_window_get_shell (window); - - g_return_val_if_fail (E_IS_SHELL (shell), NULL); - - dialog = g_object_new (CALENDAR_TYPE_PREFS_DIALOG, NULL); - - /* FIXME Kill this function. */ - calendar_prefs_dialog_construct (dialog, shell); - - return GTK_WIDGET (dialog); -} |