1 /*
2 * Program: Rubrica
3 * file: preferences.c
4 *
5 *
6 * Copyright (C) 2000-2005 Nicola Fragale <nicolafragale@libero.it>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 3 of the License
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 */
21
22 #include <glib/gi18n-lib.h>
23 #include <gtk/gtk.h>
24 #include <glade/glade.h>
25 #include <gconf/gconf-client.h>
26 #include "libral.h"
27
28 #include "app.h"
29 #include "search.h"
30 #include "models.h"
31 #include "preferences.h"
32 #include "themes.h"
33 #include "types.h"
34
35
36 enum {
37 FILES_COLUMN,
38 TYPE_COLUMN,
39 FILES_LAST_COLUMN
40 };
41
42
43 static GConfEnumStringPair toolbar_pairs[] = {
44 {RUB_ICONS, "only icons" },
45 {RUB_TEXT, "only text" },
46 {RUB_BOTH, "both icons and text"},
47 {RUB_GNOME, "gnome default" },
48 {0, NULL}
49 };
50
51 static GConfEnumStringPair search_pairs[] = {
52 {PRINT_COLUMN, "print" },
53 {CARD_COLUMN, "card" },
54 {FIRST_NAME_COLUMN, "first name"},
55 {LAST_NAME_COLUMN, "last name" },
56 {PROFESSION_COLUMN, "profession"},
57 {CITY_COLUMN, "city" },
58 {COUNTRY_COLUMN, "country" },
59 {WEB_CARD_COLUMN, "web" },
60 {EMAIL_CARD_COLUMN, "emails" },
61 {TELEPHONE_COLUMN, "telephone" },
62 {ASSIGNMENT_COLUMN, "assignment"},
63 {COMPANY_COLUMN, "company" },
64 {0, NULL}
65 };
66
67
68 static GConfEnumStringPair browser_pairs[] = {
69 {RUB_EPIPHANY, "epiphany" },
70 {RUB_FIREFOX, "firefox" },
71 {RUB_GALEON, "galeon" },
72 {RUB_KONQUEROR, "konqueror" },
73 {RUB_MOZILLA, "mozilla" },
74 {RUB_SEAMONKEY, "seamonkey" },
75 {RUB_OPERA, "opera" },
76 {RUB_OTHER_BROWSER, "other" },
77 {0, NULL}
78 };
79
80 static GConfEnumStringPair emailer_pairs[] = {
81 {RUB_BALSA, "balsa" },
82 {RUB_EVOLUTION, "evolution" },
83 {RUB_MOZILLA_MAIL, "mozilla" },
84 {RUB_SEAMONKEY_MAIL, "seamonkey" }, // seamonkey -mail
85 {RUB_THUNDERBIRD, "thunderbird"},
86 {RUB_OTHER_EMAILER, "other" },
87 {0, NULL}
88 };
89
90 static GConfEnumStringPair irc_pairs[] = {
91 {RUB_PIDGIN, "pidgin" },
92 {RUB_GAIM, "gaim" },
93 {RUB_GABBER, "gabber" },
94 {RUB_GAJIM, "gajim" },
95 {RUB_GADU, "GNU gadu"},
96 {RUB_GOSSIP, "gossip" },
97 {RUB_OTHER_IRC, "other" },
98 {0, NULL}
99 };
100
101
102
103 static RubricaThemedItem toolbar[] = {
104 {N_("Only icons"), "", NULL},
105 {N_("Only text"), "", NULL},
106 {N_("Both icons and text"), "", NULL},
107 {N_("Icons and text alongside each other"), "", NULL},
108 {N_("Use Gnome settings"), "", NULL},
109 {NULL}
110 };
111
112
113 static RubricaThemedItem browser[] = {
114 {"Epiphany", "epiphany", "epiphany" },
115 {"Firefox", "firefox", "firefox" },
116 {"Galeon", "galeon", "galeon" },
117 {"Konqueror", "konqueror", "konqueror" },
118 {"Mozilla", "mozilla-icon", "mozilla" },
119 {"Seamonkey", "seamonkey-icon", "seamonkey" },
120 {"Opera", "opera", "opera" },
121 {N_("Other"), "application-x-executable", NULL},
122 {NULL}
123 };
124
125 static RubricaThemedItem emailer[] = {
126 {"Balsa", "balsa_icon", "balsa" },
127 {"Evolution", "evolution", "evolution" },
128 {"Mozilla mail", "mozilla_mail", "mozilla" },
129 {"Seamonkey mail", "seamonkey-mail-icon", "seamonkey" },
130 {"Thunderbird", "thunderbird", "thunderbird"},
131 {N_("Other"), "application-x-executable", NULL},
132 {NULL}
133 };
134
135 static RubricaThemedItem ircs[] = {
136 {"Pidgin", "pidgin", "pidgin"},
137 {"Empathy", "empathy", "empathy"},
138 {"Gabber", "gabber", "gabber"},
139 /*
140 {"Gajim", "application-x-executable", ""},
141 {"GNU Gadu", "application-x-executable", ""},
142 {"Gossip", "application-x-executable", ""},
143 */
144 {N_("Other"), "application-x-executable", NULL},
145 {NULL}
146 };
147
148
149 typedef struct _prefer {
150 GtkWidget* dialog;
151
152 GtkWidget* folder_chooser;
153
154 GtkWidget* file_chooser;
155 GtkWidget* load_check;
156 GtkWidget* load_vbox;
157 GtkWidget* load_view;
158 GtkWidget* add;
159 GtkWidget* del;
160
161 GtkWidget* compress;
162 GtkWidget* autosave;
163 GtkWidget* backup;
164
165 GtkWidget* toolbar_combo;
166 GtkWidget* font_button;
167 GtkWidget* exit;
168
169 GtkWidget* web_combo;
170 GtkWidget* email_combo;
171 GtkWidget* irc_combo;
172 GtkWidget* ekiga;
173
174 GtkWidget* web_box;
175 GtkWidget* email_box;
176 GtkWidget* irc_box;
177 GtkWidget* web_entry;
178 GtkWidget* email_entry;
179 GtkWidget* irc_entry;
180 } RubricaPrefer;
181
182
183
184 void on_load_check_cb (GtkWidget* check, gpointer data);
185 void on_load_view_event (GtkTreeView* tree, GdkEvent *event,
186 gpointer data);
187 void on_folder_chooser_cb (GtkFileChooser *chooser, gpointer data);
188 void on_remove_addressbook (GtkWidget* button, gpointer data);
189 void on_add_cb (GtkWidget* button, gpointer data);
190
191 void on_compress_cb (GtkWidget* spin, gpointer data);
192 void on_autosave_cb (GtkWidget* check, gpointer data);
193 void on_backup_cb (GtkWidget* check, gpointer data);
194 void on_exit_cb (GtkWidget* check, gpointer data);
195
196 void on_toolbar_style_cb (GtkWidget* combo, gpointer data);
197 void on_font_set_cb (GtkFontButton *widget, gpointer data);
198 // void on_search_changed_cb (GtkWidget* combo, gpointer data);
199 void on_browser_changed_cb (GtkWidget* combo, gpointer data);
200 void on_emailer_changed_cb (GtkWidget* combo, gpointer data);
201 void on_irc_changed_cb (GtkWidget* combo, gpointer data);
202
203 void on_web_entry_activate_cb (GtkWidget* combo, gpointer data);
204 void on_email_entry_activate_cb (GtkWidget* combo, gpointer data);
205 void on_irc_entry_activate_cb (GtkWidget* combo, gpointer data);
206
207 void on_ekiga_cb (GtkWidget* check, gpointer data);
208
209
210 void rubrica_preferences_change_toolbar (GConfClient *client, guint cnxn_id,
211 GConfEntry *entry, gpointer data);
212 void rubrica_preferences_show_column (GConfClient *client, guint cnxn_id,
213 GConfEntry *entry, gpointer data);
214
215 void rubrica_preferences_font_changed (GConfClient *client, guint cnxn_id,
216 GConfEntry *entry, gpointer data);
217
218 void rubrica_preferences_gui_setup (RubricaPrefer* prefer, gpointer data);
219 void rubrica_preferences_set_status (RubricaPrefer* prefer,
220 const gchar* key);
221
222 void
on_load_check_cb(GtkWidget * check,gpointer data)223 on_load_check_cb(GtkWidget* check, gpointer data)
224 {
225 GConfClient* client;
226 RubricaPrefer* prefer = (RubricaPrefer*) data;
227 gboolean bool;
228
229 client = gconf_client_get_default();
230 bool = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(check));
231
232 gtk_widget_set_sensitive(prefer->load_vbox, bool);
233 gconf_client_set_bool(client, RUBRICA_GCONF_LOAD_FILES, bool, NULL);
234
235 g_object_unref(client);
236 }
237
238
239 void
on_load_view_event(GtkTreeView * tree,GdkEvent * event,gpointer data)240 on_load_view_event(GtkTreeView* tree, GdkEvent *event, gpointer data)
241 {
242 GdkEventButton *ev = (GdkEventButton *) event;
243 GtkTreeModel *model;
244 GtkTreeSelection *selection;
245 GtkTreePath *path = NULL;
246 GtkTreeIter iter;
247
248 model = gtk_tree_view_get_model(GTK_TREE_VIEW(tree));
249 selection = gtk_tree_view_get_selection(tree);
250
251 if (gtk_tree_view_get_path_at_pos(tree, ev->x, ev->y, &path,
252 NULL, NULL, NULL))
253 {
254 gtk_tree_selection_select_path(selection, path);
255 gtk_tree_model_get_iter(model, &iter, path);
256 gtk_tree_path_free(path);
257
258 if ((ev->type == GDK_BUTTON_PRESS) && (ev->button == 3))
259 {
260 GtkMenu* menu;
261 GtkWidget *remove;
262
263 menu = (GtkMenu*) gtk_menu_new();
264
265 remove = gtk_menu_item_new_with_mnemonic(_("_remove the addressbook"));
266 gtk_widget_show (remove);
267 gtk_container_add (GTK_CONTAINER (menu), remove);
268
269 g_signal_connect (G_OBJECT(remove), "activate",
270 G_CALLBACK (on_remove_addressbook), tree);
271
272 gtk_widget_show_all(GTK_WIDGET(menu));
273 gtk_menu_popup (menu, NULL, NULL, NULL, NULL, ev->button, ev->time);
274 }
275 }
276 }
277
278
279
280 void
on_remove_addressbook(GtkWidget * button,gpointer data)281 on_remove_addressbook(GtkWidget* button, gpointer data)
282 {
283 GtkTreeView* tree = (GtkTreeView*) data;
284 GtkTreeModel *model;
285 GtkTreeSelection *selection;
286 GtkTreeIter iter;
287 GConfClient *client;
288
289 model = gtk_tree_view_get_model(GTK_TREE_VIEW(tree));
290 selection = gtk_tree_view_get_selection(tree);
291 client = gconf_client_get_default();
292
293 if (gtk_tree_selection_get_selected(selection, &model, &iter))
294 {
295 gchar* file = NULL;
296 GSList* files = NULL;
297 GSList* l = NULL;
298
299 gtk_tree_model_get(model, &iter, FILES_COLUMN, &file, -1);
300 gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
301
302 files = gconf_client_get_list(client, RUBRICA_GCONF_FILES,
303 GCONF_VALUE_STRING, NULL);
304
305 for(l = files; l; l = l->next)
306 {
307 if (g_ascii_strcasecmp(file, (gchar*) l->data) == 0)
308 {
309 files = g_slist_remove_link(files, l);
310 g_free(file);
311 g_slist_free_1(l);
312 break;
313 }
314 }
315
316 gconf_client_set_list(client, RUBRICA_GCONF_FILES, GCONF_VALUE_STRING,
317 files, NULL);
318 }
319 else
320 {
321 g_warning("\nNo addressbook selected");
322 }
323 }
324
325
326 void
on_folder_chooser_cb(GtkFileChooser * chooser,gpointer data)327 on_folder_chooser_cb (GtkFileChooser *chooser, gpointer data)
328 {
329 gchar* folder = NULL;
330 GConfClient* client;
331
332 client = gconf_client_get_default();
333 folder = gtk_file_chooser_get_current_folder (chooser);
334
335 if (folder)
336 gconf_client_set_string(client, RUBRICA_GCONF_FOLDER, folder, NULL);
337
338 g_object_unref(client);
339 }
340
341
342
343
344 void
on_add_cb(GtkWidget * button,gpointer data)345 on_add_cb (GtkWidget* button, gpointer data)
346 {
347 gchar* file = NULL;
348 GConfClient* client;
349 GtkTreeModel* model;
350 GtkTreeIter iter;
351 RubricaPrefer* prefer = (RubricaPrefer*) data;
352
353 client = gconf_client_get_default();
354
355 file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(prefer->file_chooser));
356 if (file)
357 {
358 GSList* files = NULL;
359
360 files = gconf_client_get_list(client, RUBRICA_GCONF_FILES,
361 GCONF_VALUE_STRING, NULL);
362 files = g_slist_append(files, file);
363
364 model = gtk_tree_view_get_model(GTK_TREE_VIEW(prefer->load_view));
365 gtk_list_store_append(GTK_LIST_STORE(model), &iter);
366 gtk_list_store_set(GTK_LIST_STORE(model), &iter, FILES_COLUMN, file, -1);
367
368 gconf_client_set_list(client, RUBRICA_GCONF_FILES, GCONF_VALUE_STRING,
369 files, NULL);
370 }
371
372 g_object_unref(client);
373 }
374
375 void
on_del_cb(GtkWidget * button,gpointer data)376 on_del_cb(GtkWidget* button, gpointer data)
377 {
378 RubricaPrefer* prefer = (RubricaPrefer*) data;
379
380 on_remove_addressbook(NULL, GTK_TREE_VIEW(prefer->load_view));
381 }
382
383
384 void
on_compress_cb(GtkWidget * spin,gpointer data)385 on_compress_cb (GtkWidget* spin, gpointer data)
386 {
387 GConfClient* client;
388 gint val;
389
390 client = gconf_client_get_default();
391 val = (gint) gtk_spin_button_get_value(GTK_SPIN_BUTTON(spin));
392 gconf_client_set_int(client, RUBRICA_GCONF_RATE, val, NULL);
393
394 g_object_unref(client);
395 }
396
397
398 void
on_autosave_cb(GtkWidget * check,gpointer data)399 on_autosave_cb (GtkWidget* check, gpointer data)
400 {
401 GConfClient* client;
402 gboolean bool;
403
404 client = gconf_client_get_default();
405 bool = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(check));
406 gconf_client_set_bool(client, RUBRICA_GCONF_AUTOSAVE, bool, NULL);
407
408 g_object_unref(client);
409 }
410
411
412 void
on_backup_cb(GtkWidget * check,gpointer data)413 on_backup_cb (GtkWidget* check, gpointer data)
414 {
415 GConfClient* client;
416 gboolean bool;
417
418 client = gconf_client_get_default();
419 bool = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(check));
420 gconf_client_set_bool(client, RUBRICA_GCONF_BACKUP, bool, NULL);
421
422 g_object_unref(client);
423 }
424
425
426 /* notificare
427 void
428 on_tooltips_cb (GtkWidget* check, gpointer data)
429 {
430 GConfClient* client;
431 gboolean bool;
432
433 client = gconf_client_get_default();
434 bool = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(check));
435 gconf_client_set_bool(client, RUBRICA_GCONF_TOOLTIPS, bool, NULL);
436
437 g_object_unref(client);
438 }
439 */
440
441 void
on_exit_cb(GtkWidget * check,gpointer data)442 on_exit_cb (GtkWidget* check, gpointer data)
443 {
444 GConfClient* client;
445 gboolean bool;
446
447 client = gconf_client_get_default();
448 bool = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(check));
449 gconf_client_set_bool(client, RUBRICA_GCONF_CONFIRM_EXIT, bool, NULL);
450
451 g_object_unref(client);
452 }
453
454
on_ekiga_cb(GtkWidget * check,gpointer data)455 void on_ekiga_cb (GtkWidget* check, gpointer data)
456 {
457 GConfClient* client;
458 gboolean bool;
459
460 client = gconf_client_get_default();
461 bool = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(check));
462 gconf_client_set_bool(client, RUBRICA_GCONF_EKIGA, bool, NULL);
463
464 g_object_unref(client);
465 }
466
467
468 void
on_font_set_cb(GtkFontButton * button,gpointer data)469 on_font_set_cb (GtkFontButton *button, gpointer data)
470 {
471 const gchar* font = NULL;
472 GConfClient* client;
473
474 client = gconf_client_get_default();
475 font = gtk_font_button_get_font_name(GTK_FONT_BUTTON(button));
476
477 if (font)
478 gconf_client_set_string(client, RUBRICA_GCONF_FONT, font, NULL);
479
480 g_object_unref(client);
481
482 }
483
484
485 void
on_toolbar_style_cb(GtkWidget * combo,gpointer data)486 on_toolbar_style_cb (GtkWidget* combo, gpointer data)
487 {
488 GConfClient* client;
489 gint active;
490 const gchar* val;
491
492 client = gconf_client_get_default();
493 active = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
494 val = gconf_enum_to_string (toolbar_pairs, active);
495 gconf_client_set_string(client, RUBRICA_GCONF_TOOLBAR, val, NULL);
496
497 g_object_unref(client);
498 }
499
500
501
502 void
on_browser_changed_cb(GtkWidget * combo,gpointer data)503 on_browser_changed_cb (GtkWidget* combo, gpointer data)
504 {
505 RubricaPrefer* prefer = (RubricaPrefer*) data;
506 GConfClient* client;
507 gint active;
508 const gchar* val;
509
510 client = gconf_client_get_default();
511 active = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
512 val = gconf_enum_to_string (browser_pairs, active);
513 gconf_client_set_string(client, RUBRICA_GCONF_BROWSER, val, NULL);
514
515 if (active == RUB_OTHER_BROWSER)
516 gtk_widget_set_sensitive(prefer->web_box, TRUE);
517 else
518 gtk_widget_set_sensitive(prefer->web_box, FALSE);
519
520 g_object_unref(client);
521 }
522
523
524 void
on_emailer_changed_cb(GtkWidget * combo,gpointer data)525 on_emailer_changed_cb (GtkWidget* combo, gpointer data)
526 {
527 RubricaPrefer* prefer = (RubricaPrefer*) data;
528 GConfClient* client;
529 gint active;
530 const gchar* val;
531
532 client = gconf_client_get_default();
533 active = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
534 val = gconf_enum_to_string (emailer_pairs, active);
535 gconf_client_set_string(client, RUBRICA_GCONF_EMAILS, val, NULL);
536
537 if (active == RUB_OTHER_EMAILER)
538 gtk_widget_set_sensitive(prefer->email_box, TRUE);
539 else
540 gtk_widget_set_sensitive(prefer->email_box, FALSE);
541
542 g_object_unref(client);
543 }
544
545
546 void
on_irc_changed_cb(GtkWidget * combo,gpointer data)547 on_irc_changed_cb (GtkWidget* combo, gpointer data)
548 {
549 RubricaPrefer* prefer = (RubricaPrefer*) data;
550 GConfClient* client;
551 gint active;
552 const gchar* val;
553
554 client = gconf_client_get_default();
555 active = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
556 val = gconf_enum_to_string (irc_pairs, active);
557 gconf_client_set_string(client, RUBRICA_GCONF_IRC, val, NULL);
558
559 if (active == RUB_OTHER_IRC)
560 gtk_widget_set_sensitive(prefer->irc_box, TRUE);
561 else
562 gtk_widget_set_sensitive(prefer->irc_box, FALSE);
563
564 g_object_unref(client);
565 }
566
567
568 void
on_web_entry_activate_cb(GtkWidget * combo,gpointer data)569 on_web_entry_activate_cb (GtkWidget* combo, gpointer data)
570 {
571 RubricaPrefer* prefer = (RubricaPrefer*) data;
572 GConfClient* client;
573 const gchar* str;
574
575 client = gconf_client_get_default();
576 str = gtk_entry_get_text(GTK_ENTRY(prefer->web_entry));
577 gconf_client_set_string(client, RUBRICA_GCONF_BROWSER_UD, str, NULL);
578
579 g_object_unref(client);
580 }
581
582 void
on_email_entry_activate_cb(GtkWidget * combo,gpointer data)583 on_email_entry_activate_cb (GtkWidget* combo, gpointer data)
584 {
585 RubricaPrefer* prefer = (RubricaPrefer*) data;
586 GConfClient* client;
587 const gchar* str;
588
589 client = gconf_client_get_default();
590 str = gtk_entry_get_text(GTK_ENTRY(prefer->email_entry));
591 gconf_client_set_string(client, RUBRICA_GCONF_EMAILS_UD, str, NULL);
592
593 g_object_unref(client);
594 }
595
596
597 void
on_irc_entry_activate_cb(GtkWidget * combo,gpointer data)598 on_irc_entry_activate_cb (GtkWidget* combo, gpointer data)
599 {
600 RubricaPrefer* prefer = (RubricaPrefer*) data;
601 GConfClient* client;
602 const gchar* str;
603
604 client = gconf_client_get_default();
605 str = gtk_entry_get_text(GTK_ENTRY(prefer->irc_entry));
606 gconf_client_set_string(client, RUBRICA_GCONF_IRC_UD, str, NULL);
607
608 g_object_unref(client);
609 }
610
611
612
613 void
rubrica_preferences_set_status(RubricaPrefer * prefer,const gchar * key)614 rubrica_preferences_set_status(RubricaPrefer* prefer, const gchar* key)
615 {
616 GConfClient* client;
617 gchar* str;
618 gint value;
619
620 client = gconf_client_get_default();
621
622 if (g_ascii_strcasecmp(key, RUBRICA_GCONF_TOOLBAR) == 0)
623 {
624 str = gconf_client_get_string(client, RUBRICA_GCONF_TOOLBAR, NULL);
625 gconf_string_to_enum(toolbar_pairs, str, &value);
626 gtk_combo_box_set_active(GTK_COMBO_BOX(prefer->toolbar_combo), value);
627 }
628
629 if (g_ascii_strcasecmp(key, RUBRICA_GCONF_BROWSER) == 0)
630 {
631 str = gconf_client_get_string(client, RUBRICA_GCONF_BROWSER, NULL);
632 gconf_string_to_enum(browser_pairs, str, &value);
633 gtk_combo_box_set_active(GTK_COMBO_BOX(prefer->web_combo), value);
634
635 if (value == RUB_OTHER_BROWSER)
636 {
637 str = gconf_client_get_string(client, RUBRICA_GCONF_BROWSER_UD,
638 NULL);
639 gtk_entry_set_text(GTK_ENTRY(prefer->web_entry), str);
640 gtk_widget_set_sensitive(prefer->web_box, TRUE);
641 }
642 else
643 gtk_widget_set_sensitive(prefer->web_box, FALSE);
644 }
645
646 if (g_ascii_strcasecmp(key, RUBRICA_GCONF_EMAILS) == 0)
647 {
648 str = gconf_client_get_string(client, RUBRICA_GCONF_EMAILS, NULL);
649 gconf_string_to_enum(emailer_pairs, str, &value);
650 gtk_combo_box_set_active(GTK_COMBO_BOX(prefer->email_combo), value);
651
652 if (value == RUB_OTHER_EMAILER)
653 {
654 str = gconf_client_get_string(client, RUBRICA_GCONF_EMAILS_UD, NULL);
655 gtk_entry_set_text(GTK_ENTRY(prefer->email_entry), str);
656 gtk_widget_set_sensitive(prefer->email_box, TRUE);
657 }
658 else
659 gtk_widget_set_sensitive(prefer->email_box, FALSE);
660 }
661
662 if (g_ascii_strcasecmp(key, RUBRICA_GCONF_IRC) == 0)
663 {
664 str = gconf_client_get_string(client, RUBRICA_GCONF_IRC, NULL);
665 gconf_string_to_enum(irc_pairs, str, &value);
666 gtk_combo_box_set_active(GTK_COMBO_BOX(prefer->irc_combo), value);
667
668 if (value == RUB_OTHER_IRC)
669 {
670 str = gconf_client_get_string(client, RUBRICA_GCONF_IRC_UD, NULL);
671 gtk_entry_set_text(GTK_ENTRY(prefer->irc_entry), str);
672 gtk_widget_set_sensitive(prefer->irc_box, TRUE);
673 }
674 else
675 gtk_widget_set_sensitive(prefer->irc_box, FALSE);
676 }
677
678 g_object_unref(client);
679 }
680
681
682 void
rubrica_preferences_change_toolbar(GConfClient * client,guint cnxn_id,GConfEntry * entry,gpointer data)683 rubrica_preferences_change_toolbar(GConfClient *client, guint cnxn_id,
684 GConfEntry *entry, gpointer data)
685 {
686 RubricaApp* app = (RubricaApp*) data;
687 gchar* str;
688 gint style;
689
690 str = gconf_client_get_string(client, RUBRICA_GCONF_TOOLBAR, NULL);
691 gconf_string_to_enum(toolbar_pairs, str, &style);
692 rubrica_app_set_toolbar_style(app, style);
693 }
694
695
696 void
rubrica_preferences_show_column(GConfClient * client,guint cnxn_id,GConfEntry * entry,gpointer data)697 rubrica_preferences_show_column(GConfClient *client, guint cnxn_id,
698 GConfEntry *entry, gpointer data)
699 {
700 gboolean bool;
701 GtkTreeViewColumn* column = (GtkTreeViewColumn*) data;
702
703 bool = gconf_value_get_bool (entry->value);
704 gtk_tree_view_column_set_visible(column, bool);
705 }
706
707 void
rubrica_preferences_font_changed(GConfClient * client,guint cnxn_id,GConfEntry * entry,gpointer data)708 rubrica_preferences_font_changed (GConfClient *client, guint cnxn_id,
709 GConfEntry *entry, gpointer data)
710 {
711 RubricaApp* app = (RubricaApp*) data;
712 gchar* str;
713
714 str = gconf_client_get_string(client, RUBRICA_GCONF_FONT, NULL);
715 rubrica_app_set_font(app, str);
716 }
717
718
719
720 void
rubrica_preferences_gui_setup(RubricaPrefer * prefer,gpointer data)721 rubrica_preferences_gui_setup(RubricaPrefer* prefer, gpointer data)
722 {
723 RubricaApp* app = (RubricaApp*) data;
724 GConfClient* client;
725 GtkTreeModel* model;
726 GtkTreeIter iter;
727 GtkTreeSelection* selection;
728 GtkCellRenderer *renderer;
729 GSList* files = NULL;
730 gboolean bool;
731 gint rate;
732 gchar* folder;
733 gchar* font = NULL;
734
735 client = gconf_client_get_default();
736
737 /* Addressbook page */
738 /* addressbooks files list view */
739 model = (GtkTreeModel*) gtk_list_store_new(FILES_LAST_COLUMN,
740 G_TYPE_STRING,
741 G_TYPE_STRING);
742 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model),
743 FILES_COLUMN, GTK_SORT_ASCENDING);
744 gtk_tree_view_set_model(GTK_TREE_VIEW(prefer->load_view), model);
745 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(prefer->load_view));
746 renderer = gtk_cell_renderer_text_new();
747 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(prefer->load_view),
748 -1, _("Addressbook"),
749 renderer, "text",
750 FILES_COLUMN, NULL);
751
752 renderer = gtk_cell_renderer_text_new();
753 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(prefer->load_view),
754 -1, _("Type"),
755 renderer, "text",
756 TYPE_COLUMN, NULL);
757
758 /* default addressbooks's folder */
759 folder = gconf_client_get_string(client, RUBRICA_GCONF_FOLDER, NULL);
760 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(prefer->folder_chooser),
761 folder);
762
763 /* addressbooks to load at startup */
764 bool = gconf_client_get_bool(client, RUBRICA_GCONF_LOAD_FILES, NULL);
765 gtk_widget_set_sensitive(prefer->load_vbox, bool);
766 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefer->load_check), bool);
767
768 /* addressbooks list */
769 files = gconf_client_get_list(client, RUBRICA_GCONF_FILES,
770 GCONF_VALUE_STRING, NULL);
771 for (; files; files = files->next)
772 {
773 gtk_list_store_append(GTK_LIST_STORE(model), &iter);
774 gtk_list_store_set(GTK_LIST_STORE(model), &iter,
775 FILES_COLUMN, (gchar*) files->data,
776 -1);
777 }
778
779 /* combo buttons */
780 rubrica_themes_create_themed_list(GTK_COMBO_BOX(prefer->toolbar_combo),
781 toolbar);
782 rubrica_themes_create_themed_list(GTK_COMBO_BOX(prefer->web_combo), browser);
783 rubrica_themes_create_themed_list(GTK_COMBO_BOX(prefer->email_combo),
784 emailer);
785 rubrica_themes_create_themed_list(GTK_COMBO_BOX(prefer->irc_combo), ircs);
786
787 rubrica_preferences_set_status (prefer, RUBRICA_GCONF_TOOLBAR);
788 rubrica_preferences_set_status (prefer, RUBRICA_GCONF_BROWSER);
789 rubrica_preferences_set_status (prefer, RUBRICA_GCONF_EMAILS);
790 rubrica_preferences_set_status (prefer, RUBRICA_GCONF_IRC);
791 rubrica_preferences_set_status (prefer, RUBRICA_GCONF_SEARCH_ON);
792
793 /* toolbar settings change */
794 gconf_client_notify_add(client, RUBRICA_GCONF_TOOLBAR,
795 rubrica_preferences_change_toolbar,
796 app, NULL, NULL);
797
798 /* font button */
799 font = gconf_client_get_string(client, RUBRICA_GCONF_FONT, NULL);
800 gtk_font_button_set_font_name (GTK_FONT_BUTTON(prefer->font_button), font);
801
802 gconf_client_notify_add(client, RUBRICA_GCONF_FONT,
803 rubrica_preferences_font_changed, app, NULL, NULL);
804
805 /* compression rate*/
806 rate = gconf_client_get_int(client, RUBRICA_GCONF_RATE, NULL);
807 gtk_spin_button_set_value(GTK_SPIN_BUTTON(prefer->compress), rate);
808
809 /* autosave */
810 bool = gconf_client_get_bool (client, RUBRICA_GCONF_AUTOSAVE, NULL);
811 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(prefer->autosave), bool);
812
813 /* bakcup */
814 bool = gconf_client_get_bool (client, RUBRICA_GCONF_BACKUP, NULL);
815 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(prefer->backup), bool);
816
817 /* tooltips
818 bool = gconf_client_get_bool (client, RUBRICA_GCONF_TOOLTIPS, NULL);
819 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(prefer->tooltips), bool);
820 */
821
822 /* confirm exit */
823 bool = gconf_client_get_bool (client, RUBRICA_GCONF_CONFIRM_EXIT, NULL);
824 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(prefer->exit), bool);
825
826 /* ekiga */
827 bool = gconf_client_get_bool (client, RUBRICA_GCONF_EKIGA, NULL);
828 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(prefer->ekiga), bool);
829 }
830
831
832
833
834
835
836 /* ************ Public
837 */
838 gint
rubrica_preferences_get_gnome_default(void)839 rubrica_preferences_get_gnome_default(void)
840 {
841 GConfClient* client;
842 const gchar* val = NULL;
843 gint ret = GTK_TOOLBAR_BOTH;
844
845 client = gconf_client_get_default();
846 val = gconf_client_get_string(client, RUBRICA_GCONF_GNOME_TOOLBAR, NULL);
847
848 if (g_ascii_strcasecmp(val, "icons") == 0)
849 ret = GTK_TOOLBAR_ICONS;
850
851 if (g_ascii_strcasecmp(val, "text") == 0)
852 ret = GTK_TOOLBAR_TEXT;
853
854 if (g_ascii_strcasecmp(val, "both") == 0)
855 ret = GTK_TOOLBAR_BOTH;
856
857 if (g_ascii_strcasecmp(val, "both-horiz") == 0)
858 ret = GTK_TOOLBAR_BOTH_HORIZ;
859
860 return ret;
861 }
862
863
864
865 void
rubrica_preferences_set_search_on(GtkWidget * button,gpointer data)866 rubrica_preferences_set_search_on (GtkWidget* button, gpointer data)
867 {
868 GConfClient* client;
869 const gchar* val;
870 gint column = GPOINTER_TO_INT(data);
871
872 client = gconf_client_get_default();
873 val = gconf_enum_to_string (search_pairs, column);
874
875 gconf_client_set_string(client, RUBRICA_GCONF_SEARCH_ON, val, NULL);
876
877 g_object_unref(client);
878 }
879
880
881 void
on_preferences_search_notify(GConfClient * client,guint cnxn_id,GConfEntry * entry,gpointer data)882 on_preferences_search_notify (GConfClient *client, guint cnxn_id,
883 GConfEntry *entry, gpointer data)
884 {
885 gint column;
886 const gchar* value;
887 GtkTreeView* view = (GtkTreeView*) data;
888 GtkTreeViewColumn* col;
889
890 value = gconf_value_get_string (entry->value);
891 gconf_string_to_enum (search_pairs, value, &column);
892
893 gtk_tree_view_set_search_column (view, column);
894 col = gtk_tree_view_get_column(view, column);
895
896 gtk_tree_view_scroll_to_cell(view, NULL, col, TRUE, .5, .5);
897 }
898
899
900 void
rubrica_preferences_setup_search_on(GtkTreeView * view)901 rubrica_preferences_setup_search_on(GtkTreeView* view)
902 {
903 GConfClient* client;
904 const gchar* val = NULL;
905 gint column;
906
907 client = gconf_client_get_default();
908 val = gconf_client_get_string(client, RUBRICA_GCONF_SEARCH_ON, NULL);
909 if (!val)
910 {
911 val = gconf_enum_to_string (search_pairs, CARD_COLUMN);
912 gconf_client_set_string(client, RUBRICA_GCONF_SEARCH_ON, val, NULL);
913 gtk_tree_view_set_search_column (view, CARD_COLUMN);
914 }
915
916 gconf_string_to_enum (search_pairs, val, &column);
917 gtk_tree_view_set_search_column (view, column);
918
919 gconf_client_notify_add(client, RUBRICA_GCONF_SEARCH_ON,
920 on_preferences_search_notify,
921 view, NULL, NULL);
922
923 g_object_unref(client);
924 }
925
926
927 void
rubrica_preferences_setup_radio_group(GSList * group)928 rubrica_preferences_setup_radio_group (GSList* group)
929 {
930 GConfClient* client;
931 GtkWidget* radio;
932 gchar* value;
933
934 client = gconf_client_get_default();
935 value = gconf_client_get_string(client, RUBRICA_GCONF_SEARCH_ON, NULL);
936
937 for (; group; group = g_slist_next(group))
938 {
939 gchar* name;
940
941 radio = (GtkWidget*) group->data;
942 name = g_object_get_data(G_OBJECT(radio), "name");
943
944 if (g_ascii_strcasecmp(name, value) == 0)
945 {
946 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(radio), TRUE);
947 break;
948 }
949 }
950
951 g_object_unref(client);
952 }
953
954
955
956 void
rubrica_preferences_setup_colum(GtkTreeViewColumn * column,gchar * key)957 rubrica_preferences_setup_colum (GtkTreeViewColumn* column, gchar* key)
958 {
959 GConfClient* client;
960 gboolean bool;
961
962 client = gconf_client_get_default();
963
964 bool = gconf_client_get_bool(client, key, NULL);
965 gtk_tree_view_column_set_visible(column, bool);
966
967 gconf_client_notify_add(client, key, rubrica_preferences_show_column,
968 column, NULL, NULL);
969
970 g_object_unref(client);
971 }
972
973
974
975 void
rubrica_preferences_setup_menu_check(GtkWidget * item,gchar * key)976 rubrica_preferences_setup_menu_check(GtkWidget* item, gchar* key)
977 {
978 GConfClient* client;
979 gboolean bool;
980
981 client = gconf_client_get_default();
982
983 bool = gconf_client_get_bool(client, key, NULL);
984 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(item), bool);
985
986 g_object_unref(client);
987 }
988
989 gint
rubrica_preferences_get_toolbar_style()990 rubrica_preferences_get_toolbar_style()
991 {
992 gchar* str;
993 gint style;
994 GConfClient* client;
995
996 client = gconf_client_get_default();
997 str = gconf_client_get_string(client, RUBRICA_GCONF_TOOLBAR, NULL);
998
999 gconf_string_to_enum(toolbar_pairs, str, &style);
1000
1001 return style;
1002 }
1003
1004
1005 void
rubrica_preferences_run_gui(GtkWidget * button,gpointer data)1006 rubrica_preferences_run_gui(GtkWidget* button, gpointer data)
1007 {
1008 RubricaApp* app = (RubricaApp*) data;
1009 GladeXML* gui;
1010 GConfClient* client;
1011 RubricaPrefer* prefer;
1012 GtkWidget* chooser;
1013 gchar* folder = NULL;
1014
1015 gui = glade_xml_new (RUBRICA_GUI_DIR"/Preferences.glade", NULL, NULL);
1016 if (!gui)
1017 g_error("\nCan't load %s gui", RUBRICA_GUI_DIR"/Preferences.glade");
1018
1019 prefer = g_malloc0(sizeof(RubricaPrefer));
1020
1021 prefer->dialog = glade_xml_get_widget(gui, "preferences");
1022
1023 prefer->folder_chooser = glade_xml_get_widget(gui, "folder_chooser");
1024 prefer->file_chooser = glade_xml_get_widget(gui, "file_chooser");
1025 prefer->load_check = glade_xml_get_widget(gui, "load_check");
1026 prefer->load_vbox = glade_xml_get_widget(gui, "load_vbox");
1027 prefer->load_view = glade_xml_get_widget(gui, "load_view");
1028 prefer->add = glade_xml_get_widget(gui, "add");
1029 prefer->del = glade_xml_get_widget(gui, "del");
1030
1031 prefer->compress = glade_xml_get_widget(gui, "compress");
1032 prefer->autosave = glade_xml_get_widget(gui, "autosave");
1033 prefer->backup = glade_xml_get_widget(gui, "backup");
1034
1035 prefer->toolbar_combo = glade_xml_get_widget(gui, "toolbar_combo");
1036 prefer->font_button = glade_xml_get_widget(gui, "fontbutton");
1037 prefer->exit = glade_xml_get_widget(gui, "exit");
1038
1039 prefer->web_combo = glade_xml_get_widget(gui, "web_combo");
1040 prefer->email_combo = glade_xml_get_widget(gui, "email_combo");
1041 prefer->irc_combo = glade_xml_get_widget(gui, "irc_combo");
1042 prefer->ekiga = glade_xml_get_widget(gui, "ekiga");
1043
1044 prefer->web_box = glade_xml_get_widget(gui, "web_box");
1045 prefer->email_box = glade_xml_get_widget(gui, "email_box");
1046 prefer->irc_box = glade_xml_get_widget(gui, "irc_box");
1047 prefer->web_entry = glade_xml_get_widget(gui, "web_entry");
1048 prefer->email_entry = glade_xml_get_widget(gui, "email_entry");
1049 prefer->irc_entry = glade_xml_get_widget(gui, "irc_entry");
1050
1051 g_object_unref(gui);
1052
1053 g_signal_connect(G_OBJECT (prefer->load_check) , "toggled",
1054 G_CALLBACK(on_load_check_cb), prefer);
1055
1056 g_signal_connect(G_OBJECT (prefer->add), "clicked",
1057 G_CALLBACK(on_add_cb), prefer);
1058 g_signal_connect(G_OBJECT (prefer->del), "clicked",
1059 G_CALLBACK(on_del_cb), prefer);
1060
1061 g_signal_connect(G_OBJECT (prefer->compress), "value-changed",
1062 G_CALLBACK(on_compress_cb), prefer);
1063 g_signal_connect(G_OBJECT (prefer->autosave), "toggled",
1064 G_CALLBACK(on_autosave_cb), prefer);
1065 g_signal_connect(G_OBJECT (prefer->backup), "toggled",
1066 G_CALLBACK(on_backup_cb), prefer);
1067
1068 g_signal_connect(G_OBJECT (prefer->toolbar_combo), "changed",
1069 G_CALLBACK(on_toolbar_style_cb), prefer);
1070 g_signal_connect(G_OBJECT (prefer->font_button), "font-set",
1071 G_CALLBACK(on_font_set_cb), prefer);
1072
1073 g_signal_connect(G_OBJECT (prefer->web_combo), "changed",
1074 G_CALLBACK(on_browser_changed_cb), prefer);
1075 g_signal_connect(G_OBJECT (prefer->email_combo), "changed",
1076 G_CALLBACK(on_emailer_changed_cb), prefer);
1077 g_signal_connect(G_OBJECT (prefer->irc_combo), "changed",
1078 G_CALLBACK(on_irc_changed_cb), prefer);
1079
1080 g_signal_connect(G_OBJECT (prefer->web_entry), "changed",
1081 G_CALLBACK(on_web_entry_activate_cb), prefer);
1082 g_signal_connect(G_OBJECT (prefer->email_entry), "changed",
1083 G_CALLBACK(on_email_entry_activate_cb), prefer);
1084 g_signal_connect(G_OBJECT (prefer->irc_entry), "changed",
1085 G_CALLBACK(on_irc_entry_activate_cb), prefer);
1086
1087 g_signal_connect(G_OBJECT (prefer->exit), "toggled",
1088 G_CALLBACK(on_exit_cb), prefer);
1089
1090 g_signal_connect(G_OBJECT (prefer->ekiga), "toggled",
1091 G_CALLBACK(on_ekiga_cb), prefer);
1092
1093 g_signal_connect(G_OBJECT (prefer->load_view), "button_press_event",
1094 G_CALLBACK(on_load_view_event), prefer);
1095 /*
1096 chooser = gtk_file_chooser_dialog_new("Open",
1097 GTK_WINDOW(app->window),
1098 GTK_FILE_CHOOSER_ACTION_OPEN,
1099 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
1100 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
1101 NULL);
1102 */
1103 rubrica_preferences_gui_setup(prefer, app);
1104
1105 gtk_dialog_run(GTK_DIALOG(prefer->dialog));
1106
1107 client = gconf_client_get_default();
1108 chooser = prefer->folder_chooser;
1109 folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(chooser));
1110
1111 if (folder)
1112 gconf_client_set_string(client, RUBRICA_GCONF_FOLDER, folder, NULL);
1113
1114 g_object_unref(client);
1115
1116 gtk_widget_destroy(prefer->dialog);
1117 }
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145