From a0afdf4f53224a55425a8826c0563faa510fa6c5 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Sun, 1 Jul 2001 04:59:24 +0000 Subject: Fixes bug #1406. 2001-06-30 Federico Mena Quintero Fixes bug #1406. * gui/calendar-config.c (config_read): Handle the options for the task list colors. (calendar_config_write): Ditto. (calendar_config_get_tasks_due_today_color): New function. (calendar_config_set_tasks_due_today_color): New function. (calendar_config_get_tasks_overdue_color): New function. (calendar_config_set_tasks_overdue_color): New function. (calendar_config_configure_e_calendar_table): Use e_table_model_changed() for the colors. * gui/dialogs/cal-prefs-dialog.glade: Updated the options for the task list and alarms. * gui/dialogs/cal-prefs-dialog.c (cal_prefs_dialog_show_config): Update the task list settings. (cal_prefs_dialog_update_config): Ditto. * gui/calendar-model.c (get_color): Deal with tasks for today as well as overdue tasks. Make it cleaner, even though we have to duplicate a chunk of is_overdue(). * gui/calendar-commands.c (preferences_cmd): Renamed from properties_cmd(). svn path=/trunk/; revision=10648 --- calendar/ChangeLog | 28 ++ calendar/gui/calendar-commands.c | 4 +- calendar/gui/calendar-config.c | 98 +++++- calendar/gui/calendar-config.h | 8 + calendar/gui/calendar-model.c | 87 ++++-- calendar/gui/dialogs/cal-prefs-dialog.c | 72 +++++ calendar/gui/dialogs/cal-prefs-dialog.glade | 465 +++------------------------- 7 files changed, 318 insertions(+), 444 deletions(-) diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 2e7f1a4551..11d2e6420c 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,31 @@ +2001-06-30 Federico Mena Quintero + + Fixes bug #1406. + + * gui/calendar-config.c (config_read): Handle the options for the + task list colors. + (calendar_config_write): Ditto. + (calendar_config_get_tasks_due_today_color): New function. + (calendar_config_set_tasks_due_today_color): New function. + (calendar_config_get_tasks_overdue_color): New function. + (calendar_config_set_tasks_overdue_color): New function. + (calendar_config_configure_e_calendar_table): Use + e_table_model_changed() for the colors. + + * gui/dialogs/cal-prefs-dialog.glade: Updated the options for the + task list and alarms. + + * gui/dialogs/cal-prefs-dialog.c (cal_prefs_dialog_show_config): + Update the task list settings. + (cal_prefs_dialog_update_config): Ditto. + + * gui/calendar-model.c (get_color): Deal with tasks for today as + well as overdue tasks. Make it cleaner, even though we have to + duplicate a chunk of is_overdue(). + + * gui/calendar-commands.c (preferences_cmd): Renamed from + properties_cmd(). + 2001-07-01 Rodrigo Moya * gui/e-day-view-main-item.c diff --git a/calendar/gui/calendar-commands.c b/calendar/gui/calendar-commands.c index a16b280a13..44036d727b 100644 --- a/calendar/gui/calendar-commands.c +++ b/calendar/gui/calendar-commands.c @@ -357,7 +357,7 @@ save_as_calendar_cmd (BonoboUIComponent *uic, gpointer data, const char *path) } static void -properties_cmd (BonoboUIComponent *uic, gpointer data, const char *path) +preferences_cmd (BonoboUIComponent *uic, gpointer data, const char *path) { if (!preferences_dialog) preferences_dialog = cal_prefs_dialog_new (); @@ -409,7 +409,7 @@ static BonoboUIVerb verbs [] = { BONOBO_UI_VERB ("CalendarPrintPreview", file_print_preview_cb), BONOBO_UI_VERB ("EditNewAppointment", new_appointment_cb), BONOBO_UI_VERB ("EditNewEvent", new_event_cb), - BONOBO_UI_VERB ("CalendarPreferences", properties_cmd), + BONOBO_UI_VERB ("CalendarPreferences", preferences_cmd), BONOBO_UI_VERB ("CutEvent", cut_event_cmd), BONOBO_UI_VERB ("CopyEvent", copy_event_cmd), diff --git a/calendar/gui/calendar-config.c b/calendar/gui/calendar-config.c index 135f6a42e6..f4678ab098 100644 --- a/calendar/gui/calendar-config.c +++ b/calendar/gui/calendar-config.c @@ -57,6 +57,8 @@ typedef struct gfloat month_vpane_pos; gboolean compress_weekend; gboolean show_event_end; + char *tasks_due_today_color; + char *tasks_overdue_color; } CalendarConfig; @@ -76,7 +78,7 @@ calendar_config_init (void) { if (config) return; - + config = g_new0 (CalendarConfig, 1); config_read (); @@ -118,7 +120,6 @@ config_read (void) gnome_config_pop_prefix (); - /* 'DateNavigator' settings. */ prefix = g_strdup_printf ("=%s/config/Calendar=/DateNavigator/", evolution_dir); @@ -129,7 +130,18 @@ config_read (void) gnome_config_pop_prefix (); + /* Task list settings */ + + prefix = g_strdup_printf ("=%s/config/Tasks=/Colors/", evolution_dir); + gnome_config_push_prefix (prefix); + g_free (prefix); + config->tasks_due_today_color = gnome_config_get_string ("TasksDueToday=blue"); + config->tasks_overdue_color = gnome_config_get_string ("TasksOverdue=red"); + + gnome_config_pop_prefix (); + + /* Done */ gnome_config_sync (); } @@ -138,7 +150,7 @@ void calendar_config_write (void) { gchar *prefix; - + /* 'Display' settings. */ prefix = g_strdup_printf ("=%s/config/Calendar=/Display/", evolution_dir); @@ -159,7 +171,6 @@ calendar_config_write (void) gnome_config_pop_prefix (); - /* 'DateNavigator' settings. */ prefix = g_strdup_printf ("=%s/config/Calendar=/DateNavigator/", evolution_dir); @@ -170,7 +181,18 @@ calendar_config_write (void) gnome_config_pop_prefix (); + /* Task list settings */ + + prefix = g_strdup_printf ("=%s/config/Tasks=/Colors/", evolution_dir); + gnome_config_push_prefix (prefix); + g_free (prefix); + + gnome_config_set_string ("TasksDueToday", config->tasks_due_today_color); + gnome_config_set_string ("TasksOverdue", config->tasks_overdue_color); + gnome_config_pop_prefix (); + + /* Done */ gnome_config_sync (); } @@ -179,7 +201,7 @@ void calendar_config_write_on_exit (void) { gchar *prefix; - + /* 'Display' settings. */ prefix = g_strdup_printf ("=%s/config/Calendar=/Display/", evolution_dir); @@ -569,6 +591,11 @@ calendar_config_configure_e_calendar_table (ECalendarTable *cal_table) calendar_model_set_use_24_hour_format (model, use_24_hour); calendar_config_configure_e_cell_date_edit (cal_table->dates_cell); + + /* This is for changing the colors of the text; they will be re-fetched + * by ECellText when the table is redrawn. + */ + e_table_model_changed (E_TABLE_MODEL (model)); } @@ -635,3 +662,64 @@ on_timezone_dialog_delete_event (GnomeDialog *dialog, } +/** + * calendar_config_get_tasks_due_today_color: + * + * Queries the color to be used to display tasks that are due today. + * + * Return value: An X color specification. + **/ +const char * +calendar_config_get_tasks_due_today_color (void) +{ + g_assert (config->tasks_due_today_color != NULL); + return config->tasks_due_today_color; +} + +/** + * calendar_config_set_tasks_due_today_color: + * @color: X color specification + * + * Sets the color to be used to display tasks that are due today. + **/ +void +calendar_config_set_tasks_due_today_color (const char *color) +{ + g_return_if_fail (color != NULL); + + g_assert (config->tasks_due_today_color != NULL); + + g_free (config->tasks_due_today_color); + config->tasks_due_today_color = g_strdup (color); +} + +/** + * calendar_config_get_tasks_overdue_color: + * + * Queries the color to be used to display overdue tasks. + * + * Return value: An X color specification. + **/ +const char * +calendar_config_get_tasks_overdue_color (void) +{ + g_assert (config->tasks_overdue_color != NULL); + return config->tasks_overdue_color; +} + +/** + * calendar_config_set_tasks_overdue_color: + * @color: X color specification + * + * Sets the color to be used to display overdue tasks. + **/ +void +calendar_config_set_tasks_overdue_color (const char *color) +{ + g_return_if_fail (color != NULL); + + g_assert (config->tasks_overdue_color != NULL); + + g_free (config->tasks_overdue_color); + config->tasks_overdue_color = g_strdup (color); +} diff --git a/calendar/gui/calendar-config.h b/calendar/gui/calendar-config.h index dc73c3f84e..a1a55a7267 100644 --- a/calendar/gui/calendar-config.h +++ b/calendar/gui/calendar-config.h @@ -134,5 +134,13 @@ void calendar_config_configure_e_cell_date_edit (ECellDateEdit *ecde); /* Shows the timezone dialog if the user hasn't set a default timezone. */ void calendar_config_check_timezone_set (void); +/* Colors for the task list */ + +const char *calendar_config_get_tasks_due_today_color (void); +void calendar_config_set_tasks_due_today_color (const char *color); + +const char *calendar_config_get_tasks_overdue_color (void); +void calendar_config_set_tasks_overdue_color (const char *color); + #endif /* _CALENDAR_CONFIG_H_ */ diff --git a/calendar/gui/calendar-model.c b/calendar/gui/calendar-model.c index 1e64b940c4..bcd4d69843 100644 --- a/calendar/gui/calendar-model.c +++ b/calendar/gui/calendar-model.c @@ -43,8 +43,9 @@ #include #include #include -#include "calendar-model.h" #include "calendar-commands.h" +#include "calendar-config.h" +#include "calendar-model.h" /* Private part of the ECalendarModel structure */ @@ -561,7 +562,7 @@ get_url (CalComponent *comp) /* Returns whether the completion date has been set on a component */ static gboolean -get_is_complete (CalComponent *comp) +is_complete (CalComponent *comp) { struct icaltimetype *t; gboolean retval; @@ -575,14 +576,11 @@ get_is_complete (CalComponent *comp) return retval; } -/* Returns whether a calendar component is overdue. - * - * FIXME: This will only get called when the component is scrolled into the - * ETable. There should be some sort of dynamic update thingy for if a component - * becomes overdue while it is being viewed. +/* Returns whether a component is overdue. Sigh, this is very similar to + * get_color() below. */ static gboolean -get_is_overdue (CalComponent *comp) +is_overdue (CalComponent *comp) { CalComponentDateTime dt; gboolean retval; @@ -598,15 +596,12 @@ get_is_overdue (CalComponent *comp) /* Second, is it already completed? */ - if (get_is_complete (comp)) { + if (is_complete (comp)) { retval = FALSE; goto out; } - /* Third, are we overdue as of right now? We use <= in the - * comparison below so that the table entries change color - * immediately. - */ + /* Third, are we overdue as of right now? */ t = icaltime_as_timet (*dt.value); @@ -623,6 +618,63 @@ get_is_overdue (CalComponent *comp) return retval; } +/* Computes the color to be used to display a component */ +static const char * +get_color (CalComponent *comp) +{ + CalComponentDateTime dt; + const char *retval; + + cal_component_get_due (comp, &dt); + + /* First, do we have a due date? */ + + if (!dt.value) + retval = NULL; + else { + time_t t, t_now; + struct tm tm, tm_now; + + /* Second, is it already completed? */ + + if (is_complete (comp)) { + retval = NULL; + goto out; + } + + /* Third, is it due today? */ + + t = icaltime_as_timet (*dt.value); + tm = *localtime (&t); + + t_now = time (NULL); + tm_now = *localtime (&t_now); + + if (tm.tm_year == tm_now.tm_year + && tm.tm_mon == tm_now.tm_mon + && tm.tm_mday == tm_now.tm_mday) { + retval = calendar_config_get_tasks_due_today_color (); + goto out; + } + + /* Fourth, are we overdue as of right now? We use <= in the + * comparison below so that the table entries change color + * immediately. + */ + + if (t <= t_now) + retval = calendar_config_get_tasks_overdue_color (); + else + retval = NULL; + } + + out: + + cal_component_free_datetime (&dt); + + return retval; +} + static void * get_status (CalComponent *comp) { @@ -732,19 +784,16 @@ calendar_model_value_at (ETableModel *etm, int col, int row) } } case CAL_COMPONENT_FIELD_COMPLETE: - return GINT_TO_POINTER (get_is_complete (comp)); + return GINT_TO_POINTER (is_complete (comp)); case CAL_COMPONENT_FIELD_RECURRING: return GINT_TO_POINTER (cal_component_has_recurrences (comp)); case CAL_COMPONENT_FIELD_OVERDUE: - return GINT_TO_POINTER (get_is_overdue (comp)); + return GINT_TO_POINTER (is_overdue (comp)); case CAL_COMPONENT_FIELD_COLOR: - if (get_is_overdue (comp)) - return "red"; - else - return NULL; + return (void *) get_color (comp); case CAL_COMPONENT_FIELD_STATUS: return get_status (comp); diff --git a/calendar/gui/dialogs/cal-prefs-dialog.c b/calendar/gui/dialogs/cal-prefs-dialog.c index 3451f6e4a5..de3cbf2483 100644 --- a/calendar/gui/dialogs/cal-prefs-dialog.c +++ b/calendar/gui/dialogs/cal-prefs-dialog.c @@ -29,6 +29,7 @@ */ #include +#include #include #include #include @@ -57,6 +58,10 @@ struct _CalPrefsDialogPrivate { GtkWidget *show_end_times; GtkWidget *compress_weekend; GtkWidget *dnav_show_week_no; + + /* Widgets for the task list options */ + GtkWidget *tasks_due_today_color; + GtkWidget *tasks_overdue_color; }; static const int week_start_day_map[] = { @@ -209,6 +214,9 @@ get_widgets (CalPrefsDialog *prefs) priv->compress_weekend = GW ("compress_weekend"); priv->dnav_show_week_no = GW ("dnav_show_week_no"); + priv->tasks_due_today_color = GW ("tasks_due_today_color"); + priv->tasks_overdue_color = GW ("tasks_overdue_color"); + #undef GW return (priv->dialog @@ -343,6 +351,37 @@ cal_prefs_dialog_use_24_hour_toggled (GtkWidget *button, use_24_hour); } +/* Sets the color in a color picker from an X color spec */ +static void +set_color_picker (GtkWidget *picker, const char *spec) +{ + GdkColor color; + + g_assert (spec != NULL); + + if (!gdk_color_parse (spec, &color)) { + color.red = color.green = color.blue = 0; + return; + } + + gnome_color_picker_set_i16 (GNOME_COLOR_PICKER (picker), + color.red, + color.green, + color.blue, + 65535); +} + +/* Shows the current task list settings in the dialog */ +static void +show_task_list_config (CalPrefsDialog *prefs) +{ + CalPrefsDialogPrivate *priv; + + priv = prefs->priv; + + set_color_picker (priv->tasks_due_today_color, calendar_config_get_tasks_due_today_color ()); + set_color_picker (priv->tasks_overdue_color, calendar_config_get_tasks_overdue_color ()); +} /* Shows the current config settings in the dialog. */ static void @@ -403,8 +442,38 @@ cal_prefs_dialog_show_config (CalPrefsDialog *prefs) /* Date Navigator - Show Week Numbers. */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->dnav_show_week_no), calendar_config_get_dnav_show_week_no ()); + + /* Task list */ + + show_task_list_config (prefs); +} + +/* Returns a pointer to a static string with an X color spec for the current + * value of a color picker. + */ +static const char * +spec_from_picker (GtkWidget *picker) +{ + static char spec[8]; + guint8 r, g, b; + + gnome_color_picker_get_i8 (GNOME_COLOR_PICKER (picker), &r, &g, &b, NULL); + g_snprintf (spec, sizeof (spec), "#%02x%02x%02x", r, g, b); + + return spec; } +/* Updates the task list config values from the settings in the dialog */ +static void +update_task_list_config (CalPrefsDialog *prefs) +{ + CalPrefsDialogPrivate *priv; + + priv = prefs->priv; + + calendar_config_set_tasks_due_today_color (spec_from_picker (priv->tasks_due_today_color)); + calendar_config_set_tasks_overdue_color (spec_from_picker (priv->tasks_overdue_color)); +} /* Updates the config values based on the settings in the dialog. */ static void @@ -465,6 +534,9 @@ cal_prefs_dialog_update_config (CalPrefsDialog *prefs) /* Date Navigator - Show Week Numbers. */ calendar_config_set_dnav_show_week_no (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->dnav_show_week_no))); + /* Task list */ + update_task_list_config (prefs); + calendar_config_write (); update_all_config_settings (); e_tasks_update_all_config_settings (); diff --git a/calendar/gui/dialogs/cal-prefs-dialog.glade b/calendar/gui/dialogs/cal-prefs-dialog.glade index bf45b072ce..038d091a72 100644 --- a/calendar/gui/dialogs/cal-prefs-dialog.glade +++ b/calendar/gui/dialogs/cal-prefs-dialog.glade @@ -256,7 +256,7 @@ GtkFrame frame9 - + 0 GTK_SHADOW_ETCHED_IN @@ -506,10 +506,6 @@ Sunday - - - Placeholder - @@ -535,7 +531,7 @@ Sunday GtkFrame frame10 - + 0 GTK_SHADOW_ETCHED_IN @@ -667,7 +663,7 @@ Sunday GtkFrame frame11 - + 0 GTK_SHADOW_ETCHED_IN @@ -708,176 +704,41 @@ Sunday False 4 - - GtkHBox - hbox4 - False - 0 - - 0 - True - True - - - - GtkFrame - frame3 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkVBox - vbox4 - 4 - False - 0 - - - GtkCheckButton - checkbutton1 - True - - True - True - - 0 - False - False - - - - - GtkCheckButton - checkbutton2 - True - - True - True - - 0 - False - False - - - - - GtkCheckButton - checkbutton3 - True - - True - True - - 0 - False - False - - - - - - - GtkFrame - frame4 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkVBox - vbox5 - 4 - False - 0 - - - GtkCheckButton - checkbutton4 - True - - False - True - - 0 - False - False - - - - - GtkCheckButton - checkbutton5 - True - - False - True - - 0 - False - False - - - - - GtkCheckButton - checkbutton6 - True - - False - True - - 0 - False - False - - - - - - GtkFrame - frame5 - + frame13 + 0 GTK_SHADOW_ETCHED_IN 0 - True - True + False + False GtkTable - table3 + table6 4 - 3 + 2 2 False 4 4 - GnomeColorPicker - colorpicker1 - True - True - False - Pick a color + GtkLabel + label23 + + GTK_JUSTIFY_CENTER + False + 0 + 0.5 + 0 + 0 - 1 - 2 + 0 + 1 0 1 0 @@ -886,21 +747,24 @@ Sunday False False False - False + True False - GnomeColorPicker - colorpicker2 - True - True - False - Pick a color + GtkLabel + label24 + + GTK_JUSTIFY_CENTER + False + 0 + 0.5 + 0 + 0 - 1 - 2 + 0 + 1 1 2 0 @@ -909,44 +773,21 @@ Sunday False False False - False + True False GnomeColorPicker - colorpicker3 + tasks_due_today_color True True False - Pick a color + Color for tasks due today 1 2 - 2 - 3 - 0 - 0 - False - False - False - False - False - False - - - - - GtkAlignment - alignment1 - 1 - 0.5 - 1 - 1 - - 0 - 1 0 1 0 @@ -956,32 +797,20 @@ Sunday False False True - True + False - - - GtkLabel - label8 - - GTK_JUSTIFY_RIGHT - False - 1 - 0.5 - 0 - 0 - - GtkAlignment - alignment2 - 1 - 0.5 - 1 - 1 + GnomeColorPicker + tasks_overdue_color + True + True + False + Color for overdue tasks - 0 - 1 + 1 + 2 1 2 0 @@ -991,55 +820,8 @@ Sunday False False True - True - - - - GtkLabel - label9 - - GTK_JUSTIFY_RIGHT - True - 1 - 0.5 - 0 - 0 - - - - - GtkAlignment - alignment3 - 1 - 0.5 - 1 - 1 - - 0 - 1 - 2 - 3 - 0 - 0 - False - False - False - False - True - True + False - - - GtkLabel - label10 - - GTK_JUSTIFY_RIGHT - False - 1 - 0.5 - 0 - 0 - @@ -1049,7 +831,7 @@ Sunday GtkLabel Notebook:tab label11 - + GTK_JUSTIFY_CENTER False 0.5 @@ -1144,7 +926,7 @@ Sunday GtkFrame frame7 - + 0 GTK_SHADOW_ETCHED_IN @@ -1163,159 +945,6 @@ Sunday True - - - GtkFrame - frame8 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - False - True - - - - GtkVBox - vbox7 - 4 - False - 4 - - - GtkHBox - hbox6 - False - 0 - - 0 - False - True - - - - GtkCheckButton - checkbutton9 - True - - False - True - - 0 - False - False - - - - - GtkSpinButton - spinbutton2 - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 5 - 0 - 100 - 1 - 10 - 10 - - 0 - False - False - - - - - GtkLabel - label13 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - - GtkHBox - hbox7 - False - 0 - - 0 - True - True - - - - GtkCheckButton - checkbutton10 - True - - False - True - - 0 - False - False - - - - - GtkSpinButton - spinbutton3 - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 600 - 0 - 1000 - 1 - 10 - 10 - - 0 - False - False - - - - - GtkLabel - label14 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - -- cgit v1.2.3