aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/component/addressbook-config.c
diff options
context:
space:
mode:
authorChris Toshok <toshok@helixcode.com>2000-12-30 13:25:57 +0800
committerChris Toshok <toshok@src.gnome.org>2000-12-30 13:25:57 +0800
commitc4dfc8669bf21acf8c06cc7f79d0864c8e3d4fab (patch)
treec8ac453d3b440e00f0de9481441b5c9ad60491aa /addressbook/gui/component/addressbook-config.c
parent5e2b0aaf12ece4d701550cfda441eaaa38b89113 (diff)
downloadgsoc2013-evolution-c4dfc8669bf21acf8c06cc7f79d0864c8e3d4fab.tar
gsoc2013-evolution-c4dfc8669bf21acf8c06cc7f79d0864c8e3d4fab.tar.gz
gsoc2013-evolution-c4dfc8669bf21acf8c06cc7f79d0864c8e3d4fab.tar.bz2
gsoc2013-evolution-c4dfc8669bf21acf8c06cc7f79d0864c8e3d4fab.tar.lz
gsoc2013-evolution-c4dfc8669bf21acf8c06cc7f79d0864c8e3d4fab.tar.xz
gsoc2013-evolution-c4dfc8669bf21acf8c06cc7f79d0864c8e3d4fab.tar.zst
gsoc2013-evolution-c4dfc8669bf21acf8c06cc7f79d0864c8e3d4fab.zip
new function, calling our new config ui code. (control_activate): no
2000-12-29 Chris Toshok <toshok@helixcode.com> * gui/component/addressbook.c (config_cb): new function, calling our new config ui code. (control_activate): no longer load evolution-addressbook-ldap.xml, as it's not there. * gui/component/addressbook-component.c (owner_set_cb): setup_ldap_storage => addressbook_storage_setup. * gui/component/Makefile.am (evolution_addressbook_SOURCES): remove e-ldap-storage.[ch] and add addressbook-storage.[ch]. (glade_DATA): remove ldap-server-dialog.glade and add addressbook-config.glade. (EXTRA_DIST): same. * gui/component/addressbook-config.[ch]: add another dialog to give a list of our sources and offer the Add/Delete/Edit interface. This plugs into the previous dialog work (the source editor.) * gui/component/addressbook-storage.[ch]: new files, containing the remains of e-ldap-storage.[ch] and adding the new AddressbookSource type and it's subordinates. Also, the xml format has changed slightly and the file name is no longer ~/evolution/ldap-servers.xml - it's ~/evolution/addressbook-sources.xml. * gui/component/addressbook-config.glade: new file, new config interface. * gui/component/ldap-server-dialog.glade: removed. * gui/component/e-ldap-storage.[ch]: removed. svn path=/trunk/; revision=7198
Diffstat (limited to 'addressbook/gui/component/addressbook-config.c')
-rw-r--r--addressbook/gui/component/addressbook-config.c418
1 files changed, 351 insertions, 67 deletions
diff --git a/addressbook/gui/component/addressbook-config.c b/addressbook/gui/component/addressbook-config.c
index 5cf672912f..57e21340c7 100644
--- a/addressbook/gui/component/addressbook-config.c
+++ b/addressbook/gui/component/addressbook-config.c
@@ -4,27 +4,11 @@
#include <gnome.h>
#include <gtkhtml/gtkhtml.h>
+#include <glade/glade.h>
#include <gal/widgets/e-unicode.h>
#include "e-util/e-html-utils.h"
-
-typedef enum {
- ADDRESSBOOK_SOURCE_FILE,
-#if HAVE_LDAP
- ADDRESSBOOK_SOURCE_LDAP,
-#endif
- ADDRESSBOOK_SOURCE_LAST
-} AddressbookSourceType;
-
-#if HAVE_LDAP
-typedef enum {
- LDAP_AUTH_NONE,
- LDAP_AUTH_SIMPLE,
-#if LDAP_SASL
- LDAP_AUTH_SASL,
-#endif
- LDAP_AUTH_LAST
-} LDAPAuthType;
-#endif
+#include "addressbook-config.h"
+#include "addressbook-storage.h"
typedef struct _AddressbookSourceDialog AddressbookSourceDialog;
typedef struct _AddressbookSourcePageItem AddressbookSourcePageItem;
@@ -38,7 +22,12 @@ struct _AddressbookSourceDialog {
GtkWidget *source_option;
GtkWidget *notebook;
- AddressbookSourcePageItem *source;
+ GList *source_pages;
+ AddressbookSourcePageItem *source_page;
+
+ gint id; /* button we closed the dialog with */
+
+ AddressbookSource *source; /* our result if the Ok button was clicked */
};
struct _AddressbookSourcePageItem {
@@ -59,17 +48,18 @@ struct _AddressbookSourcePageItem {
GtkWidget *host;
GtkWidget *port;
GtkWidget *rootdn;
+ GtkWidget *scope_optionmenu;
GtkWidget *auth_optionmenu;
GtkWidget *auth_notebook;
+ GList *auths;
LDAPAuthPageItem *auth;
};
-#if HAVE_LDAP
struct _LDAPAuthPageItem {
gint pnum;
- LDAPAuthType auth_type;
+ AddressbookLDAPAuthType auth_type;
AddressbookSourceDialog *dialog;
AddressbookSourcePageItem *page;
@@ -81,7 +71,6 @@ struct _LDAPAuthPageItem {
GtkWidget *binddn;
GtkWidget *remember_passwd;
};
-#endif
static void
html_size_req (GtkWidget *widget, GtkRequisition *requisition)
@@ -146,10 +135,8 @@ static const char *
addressbook_config_source_label (AddressbookSourceType type)
{
switch (type) {
-#if HAVE_LDAP
case ADDRESSBOOK_SOURCE_LDAP:
return _("LDAP Server");
-#endif
case ADDRESSBOOK_SOURCE_FILE:
return _("File");
default:
@@ -158,34 +145,46 @@ addressbook_config_source_label (AddressbookSourceType type)
}
}
-#if HAVE_LDAP
static const char *
-addressbook_config_auth_label (AddressbookSourceType type)
+addressbook_config_auth_label (AddressbookLDAPAuthType type)
{
switch (type) {
- case LDAP_AUTH_NONE:
+ case ADDRESSBOOK_LDAP_AUTH_NONE:
return _("None (anonymous mode)");
- case LDAP_AUTH_SIMPLE:
+ case ADDRESSBOOK_LDAP_AUTH_SIMPLE:
return _("Password");
-#if LDAP_SASL
- case LDAP_AUTH_SASL:
+ case ADDRESSBOOK_LDAP_AUTH_SASL:
return _("SASL");
-#endif
default:
g_assert(0);
return _("Unknown auth type");
}
}
-#endif
+
+static const char *
+addressbook_config_scope_label (AddressbookLDAPScopeType scope)
+{
+ switch (scope) {
+ case ADDRESSBOOK_LDAP_SCOPE_BASE:
+ return _("Base");
+ case ADDRESSBOOK_LDAP_SCOPE_ONELEVEL:
+ return _("One");
+ case ADDRESSBOOK_LDAP_SCOPE_SUBTREE:
+ return _("Subtree");
+ default:
+ g_assert (0);
+ return _("Unknown scope type");
+ }
+}
static void
addressbook_source_edit_changed (GtkWidget *item, AddressbookSourceDialog *dialog)
{
char *data;
gboolean complete = TRUE;
- AddressbookSourcePageItem *source = dialog->source;
+ AddressbookSourcePageItem *source_page = dialog->source_page;
- if (source == NULL)
+ if (source_page == NULL)
complete = FALSE;
if (complete) {
@@ -196,25 +195,24 @@ addressbook_source_edit_changed (GtkWidget *item, AddressbookSourceDialog *dialo
}
if (complete) {
- if (source->source_type == ADDRESSBOOK_SOURCE_FILE) {
+ if (source_page->source_type == ADDRESSBOOK_SOURCE_FILE) {
if (complete) {
- data = e_utf8_gtk_editable_get_chars (GTK_EDITABLE (source->path), 0, -1);
+ data = e_utf8_gtk_editable_get_chars (GTK_EDITABLE (source_page->path), 0, -1);
if (!data || !*data)
complete = FALSE;
g_free (data);
}
}
-#if HAVE_LDAP
else {
if (complete) {
- data = e_utf8_gtk_editable_get_chars (GTK_EDITABLE (source->host), 0, -1);
+ data = e_utf8_gtk_editable_get_chars (GTK_EDITABLE (source_page->host), 0, -1);
if (!data || !*data)
complete = FALSE;
g_free (data);
}
if (complete) {
- data = e_utf8_gtk_editable_get_chars (GTK_EDITABLE (source->port), 0, -1);
+ data = e_utf8_gtk_editable_get_chars (GTK_EDITABLE (source_page->port), 0, -1);
if (!data || !*data)
complete = FALSE;
/* XXX more validation on port here */
@@ -222,26 +220,23 @@ addressbook_source_edit_changed (GtkWidget *item, AddressbookSourceDialog *dialo
}
if (complete) {
- LDAPAuthPageItem *auth_page = source->auth;
+ LDAPAuthPageItem *auth_page = source_page->auth;
- if (auth_page->auth_type == LDAP_AUTH_SIMPLE) {
+ if (auth_page->auth_type == ADDRESSBOOK_LDAP_AUTH_SIMPLE) {
data = e_utf8_gtk_editable_get_chars (GTK_EDITABLE (auth_page->binddn), 0, -1);
if (!data || !*data)
complete = FALSE;
g_free (data);
}
-#ifdef LDAP_SASL
- else if (auth_page->auth_type == LDAP_AUTH_SASL) {
+ else if (auth_page->auth_type == ADDRESSBOOK_LDAP_AUTH_SASL) {
}
-#endif
- data = e_utf8_gtk_editable_get_chars (GTK_EDITABLE (source->port), 0, -1);
+ data = e_utf8_gtk_editable_get_chars (GTK_EDITABLE (source_page->port), 0, -1);
if (!data || !*data)
complete = FALSE;
/* XXX more validation on port here */
g_free (data);
}
}
-#endif
}
gnome_dialog_set_sensitive (GNOME_DIALOG (dialog->dialog), 0, complete);
@@ -253,7 +248,7 @@ source_type_menuitem_activate (GtkWidget *item, gpointer data)
AddressbookSourcePageItem *sitem = data;
gtk_notebook_set_page (GTK_NOTEBOOK(sitem->dialog->notebook), sitem->pnum);
- sitem->dialog->source = sitem;
+ sitem->dialog->source_page = sitem;
addressbook_source_edit_changed (item, sitem->dialog);
}
@@ -279,8 +274,6 @@ table_add_elem (AddressbookSourceDialog *dialog, GtkWidget *table,
return entry;
}
-#if HAVE_LDAP
-
static void
ldap_auth_type_menuitem_activate (GtkWidget *item, gpointer data)
{
@@ -296,7 +289,7 @@ ldap_auth_type_menuitem_activate (GtkWidget *item, gpointer data)
static LDAPAuthPageItem *
addressbook_ldap_auth_item_new (AddressbookSourceDialog *dialog,
AddressbookSourcePageItem *page,
- LDAPAuthType type)
+ AddressbookLDAPAuthType type)
{
LDAPAuthPageItem *item = g_new0 (LDAPAuthPageItem, 1);
GtkWidget *table = NULL;
@@ -309,9 +302,9 @@ addressbook_ldap_auth_item_new (AddressbookSourceDialog *dialog,
item->vbox = gtk_vbox_new (FALSE, 0);
switch (type) {
- case LDAP_AUTH_NONE:
+ case ADDRESSBOOK_LDAP_AUTH_NONE:
break;
- case LDAP_AUTH_SIMPLE:
+ case ADDRESSBOOK_LDAP_AUTH_SIMPLE:
table = gtk_table_new (2, 2, FALSE);
item->binddn = table_add_elem (dialog, table, row++, _("Bind DN:"));
@@ -323,10 +316,8 @@ addressbook_ldap_auth_item_new (AddressbookSourceDialog *dialog,
gtk_box_pack_start (GTK_BOX (item->vbox), table,
TRUE, TRUE, 0);
break;
-#if LDAP_SASL
- case LDAP_AUTH_SASL:
+ case ADDRESSBOOK_LDAP_AUTH_SASL:
break;
-#endif
default:
g_assert (0);
return item;
@@ -342,7 +333,6 @@ addressbook_ldap_auth_item_new (AddressbookSourceDialog *dialog,
return item;
}
-#endif
static AddressbookSourcePageItem *
addressbook_source_item_new (AddressbookSourceDialog *dialog, AddressbookSourceType type)
@@ -358,7 +348,6 @@ addressbook_source_item_new (AddressbookSourceDialog *dialog, AddressbookSourceT
item->vbox = gtk_vbox_new (FALSE, 0);
switch (type) {
-#if HAVE_LDAP
case ADDRESSBOOK_SOURCE_LDAP: {
GtkWidget *label;
GtkWidget *menu;
@@ -374,6 +363,37 @@ addressbook_source_item_new (AddressbookSourceDialog *dialog, AddressbookSourceT
item->rootdn = table_add_elem (dialog, table, row++, _("Root DN:"));
+ item->scope_optionmenu = gtk_option_menu_new ();
+ menu = gtk_menu_new ();
+
+ for (i = 0; i < ADDRESSBOOK_LDAP_SCOPE_LAST; i ++) {
+ GtkWidget *scope_item = gtk_menu_item_new_with_label (addressbook_config_scope_label (i));
+
+ gtk_signal_connect (GTK_OBJECT (scope_item), "activate",
+ GTK_SIGNAL_FUNC (addressbook_source_edit_changed),
+ dialog);
+
+ gtk_menu_append (GTK_MENU (menu), scope_item);
+ gtk_widget_show (scope_item);
+ }
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (item->scope_optionmenu), menu);
+ // ldap_auth_type_menuitem_activate (first_item->item, first_item);
+ gtk_option_menu_set_history (GTK_OPTION_MENU(item->scope_optionmenu), 0);
+
+ label = gtk_label_new (_("Search Scope:"));
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1,
+ row, row + 1, GTK_FILL, 0, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
+
+ gtk_table_attach (GTK_TABLE (table),
+ item->scope_optionmenu,
+ 1, 2, row, row + 1,
+ GTK_EXPAND | GTK_FILL, 0,
+ 0, 0);
+
+ row++;
+
gtk_box_pack_start (GTK_BOX (item->vbox), table,
TRUE, FALSE, 0);
@@ -383,11 +403,18 @@ addressbook_source_item_new (AddressbookSourceDialog *dialog, AddressbookSourceT
item->auth_notebook = gtk_notebook_new();
gtk_notebook_set_show_tabs (GTK_NOTEBOOK (item->auth_notebook), FALSE);
- for (i = 0; i < LDAP_AUTH_LAST; i++) {
+ for (i = 0; i < ADDRESSBOOK_LDAP_AUTH_LAST; i++) {
LDAPAuthPageItem *auth_item;
+#ifndef LDAP_SASL
+ /* skip the sasl stuff if we're not configured for it. */
+ if (i == ADDRESSBOOK_LDAP_AUTH_SASL)
+ continue;
+#endif
auth_item = addressbook_ldap_auth_item_new (dialog, item, i);
+ item->auths = g_list_append (item->auths, auth_item);
+
if (!first_item)
first_item = auth_item;
@@ -423,7 +450,6 @@ addressbook_source_item_new (AddressbookSourceDialog *dialog, AddressbookSourceT
TRUE, TRUE, 0);
break;
}
-#endif
case ADDRESSBOOK_SOURCE_FILE: {
table = gtk_table_new (2, 2, FALSE);
item->path = table_add_elem (dialog, table, row++, _("Path:"));
@@ -451,12 +477,83 @@ addressbook_source_item_new (AddressbookSourceDialog *dialog, AddressbookSourceT
}
static void
-addressbook_source_ok_clicked (GtkWidget *widget, AddressbookSourceDialog *sdialog)
+addressbook_source_dialog_set_source (AddressbookSourceDialog *dialog, AddressbookSource *source)
+{
+ AddressbookSourcePageItem *source_page;
+
+ e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->name), source->name);
+ e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->description), source->description);
+
+ /* choose the correct server page */
+ source_page = g_list_nth_data (dialog->source_pages, source->type);
+ source_type_menuitem_activate (source_page->item, source_page);
+ gtk_option_menu_set_history (GTK_OPTION_MENU(dialog->source_option), source->type);
+
+ if (source->type == ADDRESSBOOK_SOURCE_LDAP) {
+ LDAPAuthPageItem *auth_page;
+
+ e_utf8_gtk_entry_set_text (GTK_ENTRY (source_page->host), source->ldap.host);
+ e_utf8_gtk_entry_set_text (GTK_ENTRY (source_page->port), source->ldap.port);
+ e_utf8_gtk_entry_set_text (GTK_ENTRY (source_page->rootdn), source->ldap.rootdn);
+
+ gtk_option_menu_set_history (GTK_OPTION_MENU(source_page->scope_optionmenu), source->ldap.scope);
+
+ auth_page = g_list_nth_data (source_page->auths, source->ldap.auth);
+ ldap_auth_type_menuitem_activate (auth_page->item, auth_page);
+ gtk_option_menu_set_history (GTK_OPTION_MENU(source_page->auth_optionmenu), auth_page->auth_type);
+ }
+ else {
+ e_utf8_gtk_entry_set_text (GTK_ENTRY (source_page->path), source->file.path);
+ }
+}
+
+static AddressbookSource *
+addressbook_source_dialog_get_source (AddressbookSourceDialog *dialog)
+{
+ AddressbookSource *source = g_new0 (AddressbookSource, 1);
+ AddressbookSourcePageItem *source_page;
+
+ source_page = dialog->source_page;
+
+ source->name = e_utf8_gtk_entry_get_text (GTK_ENTRY (dialog->name));
+ source->description = e_utf8_gtk_entry_get_text (GTK_ENTRY (dialog->description));
+ source->type = source_page->source_type;
+
+ if (source->type == ADDRESSBOOK_SOURCE_FILE) {
+ source->file.path = e_utf8_gtk_entry_get_text (GTK_ENTRY (source_page->path));
+ }
+ else {
+ LDAPAuthPageItem *auth_page;
+
+ source->ldap.host = e_utf8_gtk_entry_get_text (GTK_ENTRY (source_page->host));
+ source->ldap.port = e_utf8_gtk_entry_get_text (GTK_ENTRY (source_page->port));
+ source->ldap.rootdn = e_utf8_gtk_entry_get_text (GTK_ENTRY (source_page->rootdn));
+
+ auth_page = source_page->auth;
+
+ source->ldap.auth = auth_page->auth_type;
+ if (source->ldap.auth == ADDRESSBOOK_LDAP_AUTH_SIMPLE) {
+ source->ldap.binddn = e_utf8_gtk_entry_get_text (GTK_ENTRY (auth_page->binddn));
+ source->ldap.remember_passwd = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (auth_page->remember_passwd));
+ }
+
+ ldap_auth_type_menuitem_activate (auth_page->item, auth_page);
+ gtk_option_menu_set_history (GTK_OPTION_MENU(source_page->auth_optionmenu), auth_page->auth_type);
+ }
+
+ addressbook_storage_init_source_uri (source);
+
+ return source;
+}
+
+static void
+addressbook_source_dialog_ok_clicked (GtkWidget *widget, AddressbookSourceDialog *dialog)
{
+ dialog->source = addressbook_source_dialog_get_source (dialog);
}
static AddressbookSourceDialog*
-addressbook_source_dialog (GtkWidget *parent)
+addressbook_source_dialog (AddressbookSource *source, GtkWidget *parent)
{
GtkWidget *html;
GtkWidget *table;
@@ -468,7 +565,10 @@ addressbook_source_dialog (GtkWidget *parent)
int i;
int row = 0;
- dialog->dialog = gnome_dialog_new (_("Add Addressbook"), NULL);
+ if (source)
+ dialog->dialog = gnome_dialog_new (_("Edit Addressbook"), NULL);
+ else
+ dialog->dialog = gnome_dialog_new (_("Add Addressbook"), NULL);
gtk_window_set_modal (GTK_WINDOW (dialog->dialog), TRUE);
gtk_window_set_policy (GTK_WINDOW (dialog->dialog),
@@ -507,6 +607,8 @@ addressbook_source_dialog (GtkWidget *parent)
item = addressbook_source_item_new (dialog, i);
+ dialog->source_pages = g_list_append (dialog->source_pages, item);
+
item->item = gtk_menu_item_new_with_label (addressbook_config_source_label (i));
if (!first_item)
@@ -560,19 +662,201 @@ addressbook_source_dialog (GtkWidget *parent)
gnome_dialog_set_default (GNOME_DIALOG (dialog->dialog), 0);
+ /* fill in source info if there is some */
+ if (source)
+ addressbook_source_dialog_set_source (dialog, source);
+
gnome_dialog_set_sensitive (GNOME_DIALOG (dialog->dialog), 0, FALSE);
gnome_dialog_button_connect( GNOME_DIALOG (dialog->dialog), 0,
- GTK_SIGNAL_FUNC (addressbook_source_ok_clicked),
+ GTK_SIGNAL_FUNC (addressbook_source_dialog_ok_clicked),
dialog);
return dialog;
}
+static AddressbookSourceDialog *
+addressbook_config_source (AddressbookSource *source, GtkWidget *parent)
+{
+ AddressbookSourceDialog* dialog = addressbook_source_dialog (source, parent);
+
+ dialog->id = gnome_dialog_run_and_close (GNOME_DIALOG (dialog->dialog));
+
+ return dialog;
+}
+
+
+
+typedef struct {
+ GladeXML *gui;
+ GNOME_Evolution_Shell shell;
+ GtkWidget *dialog;
+ GtkWidget *clistSources;
+ GtkWidget *addSource;
+ GtkWidget *editSource;
+ GtkWidget *deleteSource;
+ gint source_row;
+} AddressbookDialog;
+
+static void
+update_sensitivity (AddressbookDialog *dialog)
+{
+ gboolean sensitive = dialog->source_row != -1;
+
+ gtk_widget_set_sensitive (dialog->editSource, sensitive);
+ gtk_widget_set_sensitive (dialog->deleteSource, sensitive);
+}
+
+static void
+add_source_clicked (GtkWidget *widget, AddressbookDialog *dialog)
+{
+ AddressbookSourceDialog *sdialog;
+
+ sdialog = addressbook_config_source (NULL, dialog->dialog);
+ if (sdialog->id == 0) {
+ /* Ok was clicked */
+ AddressbookSource *source = sdialog->source;
+ gint row;
+ gchar *text[2];
+
+ text[0] = source->name;
+ text[1] = source->uri;
+
+ row = e_utf8_gtk_clist_append (GTK_CLIST(dialog->clistSources), text);
+ gtk_clist_set_row_data_full (GTK_CLIST(dialog->clistSources), row, source, (GtkDestroyNotify) addressbook_source_free);
+ gnome_property_box_changed (GNOME_PROPERTY_BOX (dialog->dialog));
+ update_sensitivity (dialog);
+ }
+}
+
+static void
+edit_source_clicked (GtkWidget *widget, AddressbookDialog *dialog)
+{
+ AddressbookSource *source;
+ AddressbookSourceDialog *sdialog;
+
+ source = gtk_clist_get_row_data (GTK_CLIST (dialog->clistSources), dialog->source_row);
+
+ sdialog = addressbook_config_source (source, dialog->dialog);
+ if (sdialog->id == 0) {
+ /* Ok was clicked */
+ source = sdialog->source;
+ e_utf8_gtk_clist_set_text (GTK_CLIST (dialog->clistSources), dialog->source_row, 0, source->uri);
+ gtk_clist_set_row_data (GTK_CLIST (dialog->clistSources), dialog->source_row, source);
+ gnome_property_box_changed (GNOME_PROPERTY_BOX (dialog->dialog));
+ update_sensitivity (dialog);
+ }
+}
+
+static void
+delete_source_clicked (GtkWidget *widget, AddressbookDialog *dialog)
+{
+ gtk_clist_remove (GTK_CLIST (dialog->clistSources), dialog->source_row);
+ dialog->source_row = -1;
+ gnome_property_box_changed (GNOME_PROPERTY_BOX(dialog->dialog));
+ update_sensitivity (dialog);
+}
+
+static void
+sources_select_row (GtkWidget *widget, gint row, gint column,
+ GdkEventButton *event, AddressbookDialog *dialog)
+{
+ dialog->source_row = row;
+
+ update_sensitivity (dialog);
+}
+
+static void
+addressbook_dialog_apply (GnomePropertyBox *property_box, gint page_num, AddressbookDialog *dialog)
+{
+ int i;
+
+ if (page_num != -1)
+ return;
+
+ addressbook_storage_clear_sources();
+
+ for (i = 0; i < GTK_CLIST(dialog->clistSources)->rows; i ++) {
+ AddressbookSource *source = (AddressbookSource*)gtk_clist_get_row_data (GTK_CLIST (dialog->clistSources), i);
+ addressbook_storage_add_source (addressbook_source_copy (source));
+ }
+}
+
+static void
+addressbook_dialog_close (GnomePropertyBox *property_box, AddressbookDialog *dialog)
+{
+ gtk_object_unref (GTK_OBJECT (dialog->gui));
+ /* more stuff dude */
+ g_free (dialog);
+}
+
void
-addressbook_config_source ()
+addressbook_config (GNOME_Evolution_Shell shell)
{
- AddressbookSourceDialog* dialog = addressbook_source_dialog (NULL);
+ AddressbookDialog *dialog;
+ GladeXML *gui;
+ GtkWidget *clist;
+ GList *l;
+
+ dialog = g_new0 (AddressbookDialog, 1);
+
+ dialog->source_row = -1;
+
+ gui = glade_xml_new (EVOLUTION_GLADEDIR "/addressbook-config.glade", NULL);
+ dialog->gui = gui;
+ dialog->shell = shell;
+
+ dialog->dialog = glade_xml_get_widget (gui, "dialog");
+
+ clist = glade_xml_get_widget (gui, "clistSources");
+ dialog->clistSources = clist;
+
+ gtk_clist_column_titles_passive (GTK_CLIST (clist));
+ gtk_clist_set_column_width (GTK_CLIST (clist), 0, 80);
+
+ dialog->addSource = glade_xml_get_widget (gui, "addSource");
+ gtk_signal_connect (GTK_OBJECT(dialog->addSource), "clicked",
+ GTK_SIGNAL_FUNC (add_source_clicked),
+ dialog);
+
+ dialog->editSource = glade_xml_get_widget (gui, "editSource");
+ gtk_signal_connect (GTK_OBJECT(dialog->editSource), "clicked",
+ GTK_SIGNAL_FUNC (edit_source_clicked),
+ dialog);
+
+ dialog->deleteSource = glade_xml_get_widget (gui, "deleteSource");
+ gtk_signal_connect (GTK_OBJECT(dialog->deleteSource), "clicked",
+ GTK_SIGNAL_FUNC (delete_source_clicked),
+ dialog);
+
+ update_sensitivity (dialog);
+
+ l = addressbook_storage_get_sources ();
+ for (; l != NULL; l = l->next) {
+ AddressbookSource *source;
+ gint row;
+ gchar *text[2];
+
+ source = addressbook_source_copy ((AddressbookSource*)l->data);
+
+ text[0] = source->name;
+ text[1] = source->uri;
+
+ row = e_utf8_gtk_clist_append (GTK_CLIST(clist), text);
+ gtk_clist_set_row_data_full (GTK_CLIST(clist), row, source, (GtkDestroyNotify) addressbook_source_free);
+ }
+
+ gtk_signal_connect (GTK_OBJECT (clist), "select_row",
+ GTK_SIGNAL_FUNC (sources_select_row),
+ dialog);
+
+ gtk_signal_connect (GTK_OBJECT (dialog->dialog), "apply",
+ addressbook_dialog_apply, dialog);
+
+ gtk_signal_connect (GTK_OBJECT (dialog->dialog), "destroy",
+ addressbook_dialog_close, dialog);
+
+ gtk_window_set_default_size (GTK_WINDOW (dialog->dialog), 300, 350);
- gnome_dialog_run_and_close (GNOME_DIALOG (dialog->dialog));
+ gtk_widget_show (dialog->dialog);
}