aboutsummaryrefslogtreecommitdiffstats
path: root/my-evolution/e-summary-preferences.c
diff options
context:
space:
mode:
authorIain Holmes <iain@src.gnome.org>2001-06-30 02:34:53 +0800
committerIain Holmes <iain@src.gnome.org>2001-06-30 02:34:53 +0800
commitc470087c9b5663a64c338fadee3594d261ab65f3 (patch)
tree39f601455981886c8c21bfcc2fed03ac56bd7624 /my-evolution/e-summary-preferences.c
parente64a02be08f27b9a403de2bdf147626b8c8f2523 (diff)
downloadgsoc2013-evolution-c470087c9b5663a64c338fadee3594d261ab65f3.tar
gsoc2013-evolution-c470087c9b5663a64c338fadee3594d261ab65f3.tar.gz
gsoc2013-evolution-c470087c9b5663a64c338fadee3594d261ab65f3.tar.bz2
gsoc2013-evolution-c470087c9b5663a64c338fadee3594d261ab65f3.tar.lz
gsoc2013-evolution-c470087c9b5663a64c338fadee3594d261ab65f3.tar.xz
gsoc2013-evolution-c470087c9b5663a64c338fadee3594d261ab65f3.tar.zst
gsoc2013-evolution-c470087c9b5663a64c338fadee3594d261ab65f3.zip
Configure My Evolution
svn path=/trunk/; revision=10604
Diffstat (limited to 'my-evolution/e-summary-preferences.c')
-rw-r--r--my-evolution/e-summary-preferences.c1009
1 files changed, 1009 insertions, 0 deletions
diff --git a/my-evolution/e-summary-preferences.c b/my-evolution/e-summary-preferences.c
new file mode 100644
index 0000000000..939c31ba26
--- /dev/null
+++ b/my-evolution/e-summary-preferences.c
@@ -0,0 +1,1009 @@
+/*
+ * e-summary-preferences.c:
+ *
+ * Copyright (C) 2001 Ximian, Inc
+ *
+ * Authors: Iain Holmes <iain@ximian.com>
+ */
+
+#include "e-summary.h"
+#include "e-summary-preferences.h"
+
+#include <gtk/gtk.h>
+
+#include <libgnome/gnome-defs.h>
+#include <libgnome/gnome-util.h>
+#include <libgnome/gnome-config.h>
+
+#include <libgnomeui/gnome-propertybox.h>
+#include <glade/glade.h>
+static void
+make_initial_mail_list (ESummaryPrefs *prefs)
+{
+ char *evolution_dir;
+ GList *folders;
+
+ evolution_dir = gnome_util_prepend_user_home ("evolution/local");
+
+ folders = g_list_append (NULL, g_strconcat (evolution_dir, "/Inbox", NULL));
+ folders = g_list_append (folders, g_strconcat (evolution_dir, "/Outbox", NULL));
+
+ g_free (evolution_dir);
+ prefs->display_folders = folders;
+}
+
+static void
+make_initial_rdf_list (ESummaryPrefs *prefs)
+{
+ GList *rdfs;
+
+ rdfs = g_list_prepend (NULL, g_strdup ("http://news.gnome.org/gnome-news/rdf"));
+
+ prefs->rdf_urls = rdfs;
+}
+
+static void
+make_initial_weather_list (ESummaryPrefs *prefs)
+{
+ GList *stations;
+
+ stations = g_list_prepend (NULL, g_strdup ("EGAA"));
+ stations = g_list_prepend (stations, g_strdup ("EGAC"));
+ stations = g_list_prepend (stations, g_strdup ("ENBR"));
+
+ prefs->stations = stations;
+}
+
+/* Load the prefs off disk */
+
+static char *
+vector_from_str_list (GList *strlist)
+{
+ char *vector;
+ GString *str;
+
+ g_return_val_if_fail (strlist != NULL, NULL);
+
+ str = g_string_new ("");
+ for (; strlist; strlist = strlist->next) {
+ g_string_append (str, strlist->data);
+
+ /* No space at end */
+ if (strlist->next) {
+ g_string_append (str, " ");
+ }
+ }
+
+ vector = str->str;
+ g_string_free (str, FALSE);
+
+ return vector;
+}
+
+static GList *
+str_list_from_vector (const char *vector)
+{
+ GList *strlist = NULL;
+ char **tokens;
+
+ tokens = g_strsplit (vector, " ", 8196);
+
+ if (tokens == NULL) {
+ return NULL;
+ }
+
+ for (; *tokens; tokens++) {
+ strlist = g_list_prepend (strlist, g_strdup (*tokens));
+ }
+
+ g_strfreev (tokens);
+
+ strlist = g_list_reverse (strlist);
+ return strlist;
+}
+
+gboolean
+e_summary_preferences_restore (ESummaryPrefs *prefs)
+{
+ char *evolution_dir, *key;
+ char *vector;
+
+ g_return_val_if_fail (prefs != NULL, FALSE);
+
+ evolution_dir = gnome_util_prepend_user_home ("evolution/config/my-evolution");
+ if (g_file_exists (evolution_dir) == FALSE) {
+ g_free (evolution_dir);
+ return FALSE;
+ }
+
+ key = g_strdup_printf ("=%s=/Mail/", evolution_dir);
+ gnome_config_push_prefix (key);
+ g_free (key);
+
+ vector = gnome_config_get_string ("display_folders");
+ prefs->display_folders = str_list_from_vector (vector);
+ g_free (vector);
+
+ prefs->show_full_path = gnome_config_get_bool ("show_full_path=FALSE");
+
+ gnome_config_pop_prefix ();
+ key = g_strdup_printf ("=%s=/RDF/", evolution_dir);
+ gnome_config_push_prefix (key);
+ g_free (key);
+
+ vector = gnome_config_get_string ("rdf_urls");
+ prefs->rdf_urls = str_list_from_vector (vector);
+ g_free (vector);
+
+ prefs->rdf_refresh_time = gnome_config_get_int ("rdf_refresh_time=600");
+ prefs->limit = gnome_config_get_int ("limit=10");
+ prefs->wipe_trackers = gnome_config_get_bool ("wipe_trackers=True");
+
+ gnome_config_pop_prefix ();
+ key = g_strdup_printf ("=%s=/Weather/", evolution_dir);
+ gnome_config_push_prefix (key);
+ g_free (key);
+
+ vector = gnome_config_get_string ("stations");
+ prefs->stations = str_list_from_vector (vector);
+ g_free (vector);
+
+ prefs->units = gnome_config_get_int ("units");
+ prefs->weather_refresh_time = gnome_config_get_int ("weather_refresh_time");
+
+ gnome_config_pop_prefix ();
+ key = g_strdup_printf ("=%s=/Schedule", evolution_dir);
+ gnome_config_push_prefix (key);
+ g_free (key);
+
+ prefs->days = gnome_config_get_int ("days");
+ prefs->show_tasks = gnome_config_get_int ("show_tasks");
+
+ gnome_config_pop_prefix ();
+ g_free (evolution_dir);
+ return TRUE;
+}
+
+/* Write prefs to disk */
+void
+e_summary_preferences_save (ESummaryPrefs *prefs)
+{
+ char *evolution_dir, *key;
+ char *vector;
+
+ g_return_if_fail (prefs != NULL);
+
+ evolution_dir = gnome_util_prepend_user_home ("evolution/config/my-evolution");
+ key = g_strdup_printf ("=%s=/Mail/", evolution_dir);
+ gnome_config_push_prefix (key);
+ g_free (key);
+
+ vector = vector_from_str_list (prefs->display_folders);
+ gnome_config_set_string ("display_folders", vector);
+ g_free (vector);
+
+ gnome_config_set_bool ("show_full_path", prefs->show_full_path);
+
+ gnome_config_pop_prefix ();
+ key = g_strdup_printf ("=%s=/RDF/", evolution_dir);
+ gnome_config_push_prefix (key);
+ g_free (key);
+
+ vector = vector_from_str_list (prefs->rdf_urls);
+ gnome_config_set_string ("rdf_urls", vector);
+ g_free (vector);
+
+ gnome_config_set_int ("rdf_refresh_time", prefs->rdf_refresh_time);
+ gnome_config_set_int ("limit", prefs->limit);
+ gnome_config_set_bool ("wipe_trackers", prefs->wipe_trackers);
+
+ gnome_config_pop_prefix ();
+ key = g_strdup_printf ("=%s=/Weather/", evolution_dir);
+ gnome_config_push_prefix (key);
+ g_free (key);
+
+ vector = vector_from_str_list (prefs->stations);
+ gnome_config_set_string ("stations", vector);
+ g_free (vector);
+
+ gnome_config_set_int ("units", prefs->units);
+ gnome_config_set_int ("weather_refresh_time", prefs->weather_refresh_time);
+
+ gnome_config_pop_prefix ();
+ key = g_strdup_printf ("=%s=/Schedule", evolution_dir);
+ gnome_config_push_prefix (key);
+ g_free (key);
+
+ gnome_config_set_int ("days", prefs->days);
+ gnome_config_set_int ("show_tasks", prefs->show_tasks);
+
+ gnome_config_pop_prefix ();
+ g_free (evolution_dir);
+}
+
+static void
+free_str_list (GList *list)
+{
+ for (; list; list = list->next) {
+ g_free (list->data);
+ }
+}
+
+void
+e_summary_preferences_free (ESummaryPrefs *prefs)
+{
+ if (prefs->display_folders) {
+ free_str_list (prefs->display_folders);
+ g_list_free (prefs->display_folders);
+ }
+
+ if (prefs->rdf_urls) {
+ free_str_list (prefs->rdf_urls);
+ g_list_free (prefs->rdf_urls);
+ }
+
+ if (prefs->stations) {
+ free_str_list (prefs->stations);
+ g_list_free (prefs->stations);
+ }
+
+ g_free (prefs);
+}
+
+static GList *
+copy_str_list (GList *list)
+{
+ GList *list_copy = NULL;
+
+ for (; list; list = list->next) {
+ list_copy = g_list_prepend (list_copy, g_strdup (list->data));
+ }
+
+ list_copy = g_list_reverse (list_copy);
+ return list_copy;
+}
+
+ESummaryPrefs *
+e_summary_preferences_copy (ESummaryPrefs *prefs)
+{
+ ESummaryPrefs *prefs_copy;
+
+ prefs_copy = g_new (ESummaryPrefs, 1);
+
+ prefs_copy->display_folders = copy_str_list (prefs->display_folders);
+ prefs_copy->show_full_path = prefs->show_full_path;
+
+ prefs_copy->rdf_urls = copy_str_list (prefs->rdf_urls);
+ prefs_copy->rdf_refresh_time = prefs->rdf_refresh_time;
+ prefs_copy->limit = prefs->limit;
+ prefs_copy->wipe_trackers = prefs->wipe_trackers;
+
+ prefs_copy->stations = copy_str_list (prefs->stations);
+ prefs_copy->units = prefs->units;
+ prefs_copy->weather_refresh_time = prefs->weather_refresh_time;
+
+ prefs_copy->days = prefs->days;
+ prefs_copy->show_tasks = prefs->show_tasks;
+
+ return prefs_copy;
+}
+
+void
+e_summary_preferences_init (ESummary *summary)
+{
+ ESummaryPrefs *prefs;
+
+ g_return_if_fail (summary != NULL);
+ g_return_if_fail (IS_E_SUMMARY (summary));
+
+ summary->preferences = g_new0 (ESummaryPrefs, 1);
+ summary->old_prefs = NULL;
+
+ if (e_summary_preferences_restore (summary->preferences) == TRUE) {
+ return;
+ }
+
+ prefs = summary->preferences;
+ /* Defaults */
+
+ /* Mail */
+ make_initial_mail_list (prefs);
+
+ /* RDF */
+ make_initial_rdf_list (prefs);
+ prefs->rdf_refresh_time = 600;
+ prefs->limit = 10;
+ prefs->wipe_trackers = FALSE;
+
+ /* Weather */
+ make_initial_weather_list (prefs);
+ prefs->units = UNITS_METRIC;
+ prefs->weather_refresh_time = 600;
+
+ prefs->days = E_SUMMARY_CALENDAR_ONE_DAY;
+ prefs->show_tasks = E_SUMMARY_CALENDAR_ALL_TASKS;
+}
+
+struct _MailPage {
+ GtkWidget *all, *shown;
+ GtkWidget *fullpath;
+ GtkWidget *add, *remove;
+};
+
+struct _RDFPage {
+ GtkWidget *all, *shown;
+ GtkWidget *refresh, *limit, *wipe_trackers;
+ GtkWidget *add, *remove;
+ GtkWidget *new_url;
+};
+
+struct _WeatherPage {
+ GtkWidget *all, *shown;
+ GtkWidget *refresh, *imperial, *metric;
+ GtkWidget *add, *remove;
+
+ GtkCTreeNode *selected_node;
+};
+
+struct _CalendarPage {
+ GtkWidget *one, *five, *week, *month;
+ GtkWidget *all, *today;
+};
+
+typedef struct _PropertyData {
+ ESummary *summary;
+ GnomePropertyBox *box;
+ GladeXML *xml;
+
+ struct _MailPage *mail;
+ struct _RDFPage *rdf;
+ struct _WeatherPage *weather;
+ struct _CalendarPage *calendar;
+} PropertyData;
+
+static char *rdfs[] = {
+ "http://news.gnome.org/gnome-news/rdf",
+ "http://advogato.org/rss/articles.xml",
+ "http://www.appwatch.com/appwatch.rdf",
+ "http://barrapunto.com/barrapunto.rdf",
+ "http://barrapunto.com/gnome.rdf",
+ "http://www.bsdtoday.com/backend/bt.rdf",
+ "http://beyond2000.com/b2k.rdf",
+ "http://www.newsisfree.com/export.php3?_f=rss91&_w=f&_i=1443",
+ "http://www.cnn.com/cnn.rss",
+ "http://www.dictionary.com/wordoftheday/wotd.rss",
+ "http://www.dvdreview.com/rss/newschannel.rss",
+ "http://freshmeat.net/backend/fm.rdf",
+ "http://headlines.internet.com/internetnews/prod-news/news.rss",
+ "http://www.kde.org/news/kdenews.rdf",
+ "http://www.kuro5hin.org/backend.rdf",
+ "http://linuxgames.com/bin/mynetscape.pl",
+ "http://linux.com/mrn/jobs/latest_jobs.rss",
+ "http://www.linuxplanet.com/rss",
+ "http://linuxtoday.com/backend/my-netscape.rdf",
+ "http://lwn.net/headlines/rss",
+ "http://www.linux.com/mrn/front_page.rss",
+ "http://morons.org/morons.rss",
+ "http://www.mozilla.org/news.rdf",
+ "http://www.mozillazine.org/contents.rdf",
+ "http://www.fool.com/about/headlines/rss_headlines.asp",
+ "http://www.newsforge.com/newsforge.rss",
+ "http://www.nanotechnews.com/nano/rdf",
+ "http://www.perl.com/pace/news.rss",
+ "http://www.pigdog.org/pigdog.rdf",
+ "http://www.python.org/channews.rdf",
+ "http://www.quotationspage.com/data/mqotd.rss",
+ "http://www.salon.com/feed/RDF/salon_use.rdf",
+ "http://www.scriptingnews.userland.com/xml/scriptingnews2.xml",
+ "http://www.securityfocus.com/topnews-rss.html",
+ "http://www.segfault.org/stories.xml",
+ "http://www.slashdot.org/slashdot.rdf",
+ "http://www.theregister.co.uk/tonys/slashdot.org",
+ "http://www.thinkgeek.com/thinkgeek.rdf",
+ "http://www.tomalak.org/recentTodaysLinks.xml",
+ "http://www.webreference.com/webreference.rdf",
+ "http://www.zope.org/SiteIndex/news.rss",
+ NULL
+};
+
+static void
+fill_rdf_all_clist (GtkCList *clist)
+{
+ int i;
+
+ for (i = 0; rdfs[i]; i++) {
+ char *text[1];
+
+ text[0] = rdfs[i];
+ gtk_clist_append (clist, text);
+ }
+}
+
+static void
+fill_rdf_shown_clist (GtkCList *clist,
+ PropertyData *pd)
+{
+ GList *p;
+
+ for (p = pd->summary->preferences->rdf_urls; p; p = p->next) {
+ char *text[1];
+
+ text[0] = p->data;
+ gtk_clist_append (clist, text);
+ }
+}
+
+static void
+fill_weather_all_ctree (GtkCTree *ctree)
+{
+ e_summary_weather_ctree_fill (ctree);
+}
+
+static void
+fill_weather_shown_clist (GtkCList *clist,
+ PropertyData *pd)
+{
+ GList *p;
+
+ for (p = pd->summary->preferences->stations; p; p = p->next) {
+ char *text[1];
+ char *pretty;
+
+ pretty = (char *) e_summary_weather_code_to_name (p->data);
+
+ text[0] = pretty;
+ gtk_clist_append (clist, text);
+ }
+}
+
+static void
+fill_mail_shown_clist (GtkCList *clist,
+ PropertyData *pd)
+{
+ GList *p;
+
+ for (p = pd->summary->preferences->display_folders; p; p = p->next) {
+ char *text[1];
+
+ text[0] = p->data;
+ gtk_clist_append (clist, text);
+ }
+}
+
+static void
+mail_shown_select_row_cb (GtkCList *clist,
+ int row,
+ int column,
+ GdkEvent *event,
+ PropertyData *pd)
+{
+ gtk_widget_set_sensitive (pd->mail->remove, TRUE);
+}
+
+static void
+mail_shown_unselect_row_cb (GtkCList *clist,
+ int row,
+ int column,
+ GdkEvent *event,
+ PropertyData *pd)
+{
+ if (clist->selection == NULL) {
+ gtk_widget_set_sensitive (pd->mail->remove, FALSE);
+ }
+}
+
+static void
+mail_add_clicked_cb (GtkButton *button,
+ PropertyData *pd)
+{
+
+}
+
+static void
+mail_remove_clicked_cb (GtkButton *button,
+ PropertyData *pd)
+{
+ int row;
+ GList *p;
+
+ row = GPOINTER_TO_INT (GTK_CLIST (pd->mail->shown)->selection->data);
+ p = g_list_nth (pd->summary->preferences->display_folders, row);
+
+ gtk_clist_remove (GTK_CLIST (pd->mail->shown), row);
+ pd->summary->preferences->display_folders = g_list_remove_link (pd->summary->preferences->display_folders, p);
+ g_free (p->data);
+ g_list_free (p);
+
+ gnome_property_box_changed (pd->box);
+}
+
+static void
+mail_show_full_path_toggled_cb (GtkToggleButton *tb,
+ PropertyData *pd)
+{
+ pd->summary->preferences->show_full_path = gtk_toggle_button_get_active (tb);
+}
+
+static void
+rdf_all_select_row_cb (GtkCList *clist,
+ int row,
+ int column,
+ GdkEvent *event,
+ PropertyData *pd)
+{
+ gtk_widget_set_sensitive (pd->rdf->add, TRUE);
+}
+
+static void
+rdf_all_unselect_row_cb (GtkCList *clist,
+ int row,
+ int column,
+ GdkEvent *event,
+ PropertyData *pd)
+{
+ if (GTK_CLIST (pd->rdf->all)->selection == NULL) {
+ gtk_widget_set_sensitive (pd->rdf->add, FALSE);
+ }
+}
+
+static void
+rdf_shown_select_row_cb (GtkCList *clist,
+ int row,
+ int column,
+ GdkEvent *event,
+ PropertyData *pd)
+{
+ gtk_widget_set_sensitive (pd->rdf->remove, TRUE);
+}
+
+static void
+rdf_shown_unselect_row_cb (GtkCList *clist,
+ int row,
+ int column,
+ GdkEvent *event,
+ PropertyData *pd)
+{
+ if (GTK_CLIST (pd->rdf->shown)->selection == NULL) {
+ gtk_widget_set_sensitive (pd->rdf->remove, FALSE);
+ }
+}
+
+static void
+rdf_wipe_trackers_toggled_cb (GtkToggleButton *tb,
+ PropertyData *pd)
+{
+ pd->summary->preferences->wipe_trackers = gtk_toggle_button_get_active (tb);
+
+ gnome_property_box_changed (pd->box);
+}
+
+static void
+rdf_add_clicked_cb (GtkButton *button,
+ PropertyData *pd)
+{
+ GList *p;
+ char *url, *text[1];
+ int row;
+
+ row = GPOINTER_TO_INT (GTK_CLIST (pd->rdf->all)->selection->data);
+ gtk_clist_get_text (GTK_CLIST (pd->rdf->all), row, 0, &url);
+
+ text[0] = url;
+
+ for (p = pd->summary->preferences->rdf_urls; p; p = p->next) {
+ if (strcmp (p->data, url) == 0) {
+ /* Found it already */
+ return;
+ }
+ }
+
+ pd->summary->preferences->rdf_urls = g_list_prepend (pd->summary->preferences->rdf_urls, g_strdup (url));
+ gtk_clist_prepend (GTK_CLIST (pd->rdf->shown), text);
+
+ gnome_property_box_changed (pd->box);
+}
+
+static void
+rdf_remove_clicked_cb (GtkButton *button,
+ PropertyData *pd)
+{
+ GList *p;
+ int row;
+
+ row = GPOINTER_TO_INT (GTK_CLIST (pd->rdf->shown)->selection->data);
+ gtk_clist_remove (GTK_CLIST (pd->rdf->shown), row);
+
+ p = g_list_nth (pd->summary->preferences->rdf_urls, row);
+ pd->summary->preferences->rdf_urls = g_list_remove_link (pd->summary->preferences->rdf_urls, p);
+ g_free (p->data);
+ g_list_free (p);
+
+ gnome_property_box_changed (pd->box);
+}
+
+static void
+rdf_new_url_clicked_cb (GtkButton *button,
+ PropertyData *pd)
+{
+
+}
+
+static void
+rdf_refresh_value_changed_cb (GtkAdjustment *adj,
+ PropertyData *pd)
+{
+ pd->summary->preferences->rdf_refresh_time = (int) adj->value;
+ gnome_property_box_changed (pd->box);
+}
+
+static void
+rdf_limit_value_changed_cb (GtkAdjustment *adj,
+ PropertyData *pd)
+{
+ pd->summary->preferences->limit = (int) adj->value;
+ gnome_property_box_changed (pd->box);
+}
+
+static void
+weather_all_select_row_cb (GtkCTree *ctree,
+ GtkCTreeNode *row,
+ int column,
+ PropertyData *pd)
+{
+ gtk_widget_set_sensitive (pd->weather->add, TRUE);
+ pd->weather->selected_node = row;
+}
+
+static void
+weather_all_unselect_row_cb (GtkCList *clist,
+ GtkCTreeNode *row,
+ int column,
+ PropertyData *pd)
+{
+ if (clist->selection == NULL) {
+ gtk_widget_set_sensitive (pd->weather->add, FALSE);
+ }
+ pd->weather->selected_node = NULL;
+}
+
+static void
+weather_shown_select_row_cb (GtkCList *clist,
+ int row,
+ int column,
+ GdkEvent *event,
+ PropertyData *pd)
+{
+ gtk_widget_set_sensitive (pd->weather->remove, TRUE);
+}
+
+static void
+weather_shown_unselect_row_cb (GtkCList *clist,
+ int row,
+ int column,
+ GdkEvent *event,
+ PropertyData *pd)
+{
+ if (clist->selection == NULL) {
+ gtk_widget_set_sensitive (pd->weather->remove, FALSE);
+ }
+}
+
+static void
+weather_add_clicked_cb (GtkButton *button,
+ PropertyData *pd)
+{
+ ESummaryWeatherLocation *location;
+ GList *p;
+ char *text[1];
+
+ location = gtk_ctree_node_get_row_data (GTK_CTREE (pd->weather->all), pd->weather->selected_node);
+
+ for (p = pd->summary->preferences->stations; p; p = p->next) {
+ if (strcmp (location->code, p->data) == 0) {
+ return; /* Already have it */
+ }
+ }
+
+ pd->summary->preferences->stations = g_list_prepend (pd->summary->preferences->stations, g_strdup (location->code));
+ text[0] = location->name;
+ gtk_clist_prepend (GTK_CLIST (pd->weather->shown), text);
+
+ gnome_property_box_changed (pd->box);
+}
+
+static void
+weather_remove_clicked_cb (GtkButton *button,
+ PropertyData *pd)
+{
+ int row;
+ GList *p;
+
+ row = GPOINTER_TO_INT (GTK_CLIST (pd->weather->shown)->selection->data);
+ p = g_list_nth (pd->summary->preferences->stations, row);
+ gtk_clist_remove (GTK_CLIST (pd->weather->shown), row);
+
+ pd->summary->preferences->stations = g_list_remove_link (pd->summary->preferences->stations, p);
+ g_free (p->data);
+ g_list_free (p);
+
+ gnome_property_box_changed (pd->box);
+}
+
+static void
+weather_refresh_value_changed_cb (GtkAdjustment *adj,
+ PropertyData *pd)
+{
+ pd->summary->preferences->weather_refresh_time = (int) adj->value;
+ gnome_property_box_changed (pd->box);
+}
+
+static void
+weather_metric_toggled_cb (GtkToggleButton *tb,
+ PropertyData *pd)
+{
+ if (gtk_toggle_button_get_active (tb) == FALSE) {
+ return;
+ }
+
+ pd->summary->preferences->units = UNITS_METRIC;
+ gnome_property_box_changed (pd->box);
+}
+
+static void
+weather_imperial_toggled_cb (GtkToggleButton *tb,
+ PropertyData *pd)
+{
+ if (gtk_toggle_button_get_active (tb) == FALSE) {
+ return;
+ }
+
+ pd->summary->preferences->units = UNITS_IMPERIAL;
+ gnome_property_box_changed (pd->box);
+}
+
+static gboolean
+make_property_dialog (PropertyData *pd)
+{
+ struct _MailPage *mail;
+ struct _RDFPage *rdf;
+ struct _WeatherPage *weather;
+ struct _CalendarPage *calendar;
+
+ /* Mail */
+ mail = pd->mail = g_new (struct _MailPage, 1);
+
+ /* I think this should be a fancy bonobo thingy */
+ mail->all = glade_xml_get_widget (pd->xml, "clist2");
+ g_return_val_if_fail (mail->all != NULL, FALSE);
+
+ mail->shown = glade_xml_get_widget (pd->xml, "clist1");
+ g_return_val_if_fail (mail->shown != NULL, FALSE);
+ fill_mail_shown_clist (GTK_CLIST (mail->shown), pd);
+ gtk_signal_connect (GTK_OBJECT (mail->shown), "select-row",
+ GTK_SIGNAL_FUNC (mail_shown_select_row_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (mail->shown), "unselect-row",
+ GTK_SIGNAL_FUNC (mail_shown_unselect_row_cb), pd);
+
+ mail->fullpath = glade_xml_get_widget (pd->xml, "checkbutton1");
+ g_return_val_if_fail (mail->fullpath != NULL, FALSE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mail->fullpath),
+ pd->summary->preferences->show_full_path);
+ gtk_signal_connect (GTK_OBJECT (mail->fullpath), "toggled",
+ GTK_SIGNAL_FUNC (mail_show_full_path_toggled_cb), pd);
+
+ mail->add = glade_xml_get_widget (pd->xml, "button4");
+ g_return_val_if_fail (mail->add != NULL, FALSE);
+ gtk_signal_connect (GTK_OBJECT (mail->add), "clicked",
+ GTK_SIGNAL_FUNC (mail_add_clicked_cb), pd);
+
+ mail->remove = glade_xml_get_widget (pd->xml, "button5");
+ g_return_val_if_fail (mail->remove != NULL, FALSE);
+ gtk_signal_connect (GTK_OBJECT (mail->remove), "clicked",
+ GTK_SIGNAL_FUNC (mail_remove_clicked_cb), pd);
+
+ /* RDF */
+ rdf = pd->rdf = g_new (struct _RDFPage, 1);
+ rdf->all = glade_xml_get_widget (pd->xml, "clist6");
+ g_return_val_if_fail (rdf->all != NULL, FALSE);
+ gtk_signal_connect (GTK_OBJECT (rdf->all), "select-row",
+ GTK_SIGNAL_FUNC (rdf_all_select_row_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (rdf->all), "unselect-row",
+ GTK_SIGNAL_FUNC (rdf_all_unselect_row_cb), pd);
+ fill_rdf_all_clist (GTK_CLIST (rdf->all));
+
+ rdf->shown = glade_xml_get_widget (pd->xml, "clist5");
+ g_return_val_if_fail (rdf->shown != NULL, FALSE);
+ gtk_signal_connect (GTK_OBJECT (rdf->shown), "select-row",
+ GTK_SIGNAL_FUNC (rdf_shown_select_row_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (rdf->shown), "unselect-row",
+ GTK_SIGNAL_FUNC (rdf_shown_unselect_row_cb), pd);
+ fill_rdf_shown_clist (GTK_CLIST (rdf->shown), pd);
+
+ rdf->refresh = glade_xml_get_widget (pd->xml, "spinbutton1");
+ g_return_val_if_fail (rdf->refresh != NULL, FALSE);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (rdf->refresh),
+ (float) pd->summary->preferences->rdf_refresh_time);
+ gtk_signal_connect (GTK_OBJECT (GTK_SPIN_BUTTON (rdf->refresh)->adjustment), "value_changed",
+ GTK_SIGNAL_FUNC (rdf_refresh_value_changed_cb), pd);
+
+ rdf->limit = glade_xml_get_widget (pd->xml, "spinbutton4");
+ g_return_val_if_fail (rdf->limit != NULL, FALSE);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (rdf->limit),
+ (float) pd->summary->preferences->limit);
+ gtk_signal_connect (GTK_OBJECT (GTK_SPIN_BUTTON (rdf->limit)->adjustment), "value_changed",
+ GTK_SIGNAL_FUNC (rdf_limit_value_changed_cb), pd);
+
+ rdf->wipe_trackers = glade_xml_get_widget (pd->xml, "checkbutton2");
+ g_return_val_if_fail (rdf->wipe_trackers != NULL, FALSE);
+ gtk_signal_connect (GTK_OBJECT (rdf->wipe_trackers), "toggled",
+ GTK_SIGNAL_FUNC (rdf_wipe_trackers_toggled_cb), pd);
+ rdf->add = glade_xml_get_widget (pd->xml, "button9");
+ g_return_val_if_fail (rdf->add != NULL, FALSE);
+
+ gtk_widget_set_sensitive (rdf->add, FALSE);
+ gtk_signal_connect (GTK_OBJECT (rdf->add), "clicked",
+ GTK_SIGNAL_FUNC (rdf_add_clicked_cb), pd);
+
+ rdf->remove = glade_xml_get_widget (pd->xml, "button10");
+ g_return_val_if_fail (rdf->remove != NULL, FALSE);
+
+ gtk_widget_set_sensitive (rdf->remove, FALSE);
+ gtk_signal_connect (GTK_OBJECT (rdf->remove), "clicked",
+ GTK_SIGNAL_FUNC (rdf_remove_clicked_cb), pd);
+
+ rdf->new_url = glade_xml_get_widget (pd->xml, "button11");
+ g_return_val_if_fail (rdf->new_url != NULL, FALSE);
+ gtk_signal_connect (GTK_OBJECT (rdf->new_url), "clicked",
+ GTK_SIGNAL_FUNC (rdf_new_url_clicked_cb), pd);
+
+ /* Weather */
+ weather = pd->weather = g_new (struct _WeatherPage, 1);
+ weather->all = glade_xml_get_widget (pd->xml, "ctree1");
+ g_return_val_if_fail (weather->all != NULL, FALSE);
+ fill_weather_all_ctree (GTK_CTREE (weather->all));
+ gtk_signal_connect (GTK_OBJECT (weather->all), "tree-select-row",
+ GTK_SIGNAL_FUNC (weather_all_select_row_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (weather->all), "tree-unselect-row",
+ GTK_SIGNAL_FUNC (weather_all_unselect_row_cb), pd);
+
+ weather->shown = glade_xml_get_widget (pd->xml, "clist3");
+ g_return_val_if_fail (weather->shown != NULL, FALSE);
+ fill_weather_shown_clist (GTK_CLIST (weather->shown), pd);
+ gtk_signal_connect (GTK_OBJECT (weather->shown), "select-row",
+ GTK_SIGNAL_FUNC (weather_shown_select_row_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (weather->shown), "unselect-row",
+ GTK_SIGNAL_FUNC (weather_shown_unselect_row_cb), pd);
+
+ weather->refresh = glade_xml_get_widget (pd->xml, "spinbutton5");
+ g_return_val_if_fail (weather->refresh != NULL, FALSE);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (weather->refresh),
+ (float) pd->summary->preferences->weather_refresh_time);
+ gtk_signal_connect (GTK_OBJECT (GTK_SPIN_BUTTON (weather->refresh)->adjustment),
+ "value-changed",
+ GTK_SIGNAL_FUNC (weather_refresh_value_changed_cb),
+ pd);
+
+ weather->metric = glade_xml_get_widget (pd->xml, "radiobutton7");
+ g_return_val_if_fail (weather->metric != NULL, FALSE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (weather->metric), (pd->summary->preferences->units == UNITS_METRIC));
+ gtk_signal_connect (GTK_OBJECT (weather->metric), "toggled",
+ GTK_SIGNAL_FUNC (weather_metric_toggled_cb), pd);
+
+ weather->imperial = glade_xml_get_widget (pd->xml, "radiobutton8");
+ g_return_val_if_fail (weather->imperial != NULL, FALSE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (weather->imperial), (pd->summary->preferences->units == UNITS_IMPERIAL));
+ gtk_signal_connect (GTK_OBJECT (weather->imperial), "toggled",
+ GTK_SIGNAL_FUNC (weather_imperial_toggled_cb), pd);
+
+ weather->add = glade_xml_get_widget (pd->xml, "button6");
+ g_return_val_if_fail (weather->add != NULL, FALSE);
+ gtk_signal_connect (GTK_OBJECT (weather->add), "clicked",
+ GTK_SIGNAL_FUNC (weather_add_clicked_cb), pd);
+
+ weather->remove = glade_xml_get_widget (pd->xml, "button7");
+ g_return_val_if_fail (weather->remove != NULL, FALSE);
+ gtk_signal_connect (GTK_OBJECT (weather->remove), "clicked",
+ GTK_SIGNAL_FUNC (weather_remove_clicked_cb), pd);
+
+ /* Calendar */
+ calendar = pd->calendar = g_new (struct _CalendarPage, 1);
+ calendar->one = glade_xml_get_widget (pd->xml, "radiobutton3");
+ g_return_val_if_fail (calendar->one != NULL, FALSE);
+ calendar->five = glade_xml_get_widget (pd->xml, "radiobutton4");
+ g_return_val_if_fail (calendar->five != NULL, FALSE);
+ calendar->week = glade_xml_get_widget (pd->xml, "radiobutton5");
+ g_return_val_if_fail (calendar->week != NULL, FALSE);
+ calendar->month = glade_xml_get_widget (pd->xml, "radiobutton6");
+ g_return_val_if_fail (calendar->month != NULL, FALSE);
+ calendar->all = glade_xml_get_widget (pd->xml, "radiobutton1");
+ g_return_val_if_fail (calendar->all != NULL, FALSE);
+ calendar->today = glade_xml_get_widget (pd->xml, "radiobutton2");
+ g_return_val_if_fail (calendar->today != NULL, FALSE);
+
+ return TRUE;
+}
+
+static void
+free_property_dialog (PropertyData *pd)
+{
+ if (pd->rdf) {
+ g_free (pd->rdf);
+ }
+ if (pd->mail) {
+ g_free (pd->mail);
+ }
+ if (pd->weather) {
+ g_free (pd->weather);
+ }
+ if (pd->calendar) {
+ g_free (pd->calendar);
+ }
+
+ if (pd->xml) {
+ gtk_object_unref (GTK_OBJECT (pd->xml));
+ }
+ if (pd->summary) {
+ gtk_object_unref (GTK_OBJECT (pd->summary));
+ }
+
+ g_free (pd);
+}
+
+static void
+property_box_clicked_cb (GnomeDialog *dialog,
+ int page_num,
+ PropertyData *pd)
+{
+ if (page_num == -1) {
+ e_summary_reconfigure (pd->summary);
+ e_summary_preferences_free (pd->summary->old_prefs);
+ pd->summary->old_prefs = NULL;
+ }
+}
+
+static void
+property_box_destroy_cb (GtkObject *object,
+ PropertyData *pd)
+{
+ free_property_dialog (pd);
+}
+
+void
+e_summary_configure (GtkWidget *widget,
+ ESummary *summary)
+{
+ PropertyData *pd;
+
+ if (summary->prefs_window != NULL) {
+ gdk_window_raise (summary->prefs_window->window);
+ gdk_window_show (summary->prefs_window->window);
+ return;
+ }
+
+ pd = g_new0 (PropertyData, 1);
+
+ gtk_object_ref (GTK_OBJECT (summary));
+ pd->summary = summary;
+
+ if (summary->old_prefs != NULL) {
+ e_summary_preferences_free (summary->old_prefs);
+ }
+
+ summary->old_prefs = e_summary_preferences_copy (summary->preferences);
+
+ pd->xml = glade_xml_new (EVOLUTION_GLADEDIR "/my-evolution.glade", NULL);
+ g_assert (pd->xml != NULL); /* Fixme: Nice GUI to explain what happened */
+ pd->box = GNOME_PROPERTY_BOX (glade_xml_get_widget (pd->xml, "dialog1"));
+ if (make_property_dialog (pd) == FALSE) {
+ g_warning ("Missing some part of XML file");
+ free_property_dialog (pd);
+ return;
+ }
+
+ gtk_signal_connect (GTK_OBJECT (pd->box), "apply",
+ GTK_SIGNAL_FUNC (property_box_clicked_cb), pd);
+ gtk_signal_connect (GTK_OBJECT (pd->box), "destroy",
+ GTK_SIGNAL_FUNC (property_box_destroy_cb), pd);
+ gtk_widget_show (GTK_WIDGET (pd->box));
+}
+