2007-07-10 [colin] 2.10.0cvs13
[claws.git] / src / editaddress.c
index 9518f226c10f656c8321b83633702b9a5f24324a..a7015237b8d7786bd3d0126c14669082bcf90cfd 100644 (file)
 #include "gtkutils.h"
 #include "codeconv.h"
 #include "editaddress.h"
-
+#include "editaddress_other_attributes_ldap.h"
 #include "prefs_common.h"
 
-static struct _PersonEdit_dlg {
-       GtkWidget *container;
-       GtkWidget *notebook;
-       GtkWidget *ok_btn;
-       GtkWidget *cancel_btn;
-       GtkWidget *statusbar;   /* used when prefs_common.addressbook_use_editaddress_dialog is TRUE */
-       GtkWidget *title;       /* used when prefs_common.addressbook_use_editaddress_dialog is FALSE */
-       gint status_cid;
-
-       /* User data tab */
-       GtkWidget *entry_name;
-       GtkWidget *entry_first;
-       GtkWidget *entry_last;
-       GtkWidget *entry_nick;
-
-       /* EMail data tab */
-       GtkWidget *entry_email;
-       GtkWidget *entry_alias;
-       GtkWidget *entry_remarks;
-       GtkWidget *clist_email;
-       GtkWidget *email_up;
-       GtkWidget *email_down;
-       GtkWidget *email_del;
-       GtkWidget *email_mod;
-       GtkWidget *email_add;
-
-       /* Attribute data tab */
-       GtkWidget *entry_atname;
-       GtkWidget *entry_atvalue;
-       GtkWidget *clist_attrib;
-       GtkWidget *attrib_add;
-       GtkWidget *attrib_del;
-       GtkWidget *attrib_mod;
-
-       gint rowIndEMail;
-       gint rowIndAttrib;
-       gboolean editNew;
-       gboolean read_only;
-} personeditdlg;
-
 /* transient data */
+static struct _PersonEdit_dlg personeditdlg;
 static AddressBookFile *current_abf = NULL;
 static ItemPerson *current_person = NULL;
 static ItemFolder *current_parent_folder = NULL;
@@ -225,8 +186,10 @@ static void edit_person_email_clear( gpointer data ) {
 }
 
 static void edit_person_attrib_clear( gpointer data ) {
-       gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_atname), "" );
-       gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_atvalue), "" );
+       if (!personeditdlg.ldap) {
+               gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_atname), "" );
+               gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_atvalue), "" );
+       }
 }
 
 static void edit_person_switch_page( GtkNotebook *notebook, GtkNotebookPage *page,
@@ -471,7 +434,7 @@ static void edit_person_load_attrib( ItemPerson *person ) {
 
 static void edit_person_attrib_list_selected( GtkCList *clist, gint row, gint column, GdkEvent *event, gpointer data ) {
        UserAttribute *attrib = gtk_clist_get_row_data( clist, row );
-       if( attrib && !personeditdlg.read_only) {
+       if( attrib && !personeditdlg.read_only && !personeditdlg.ldap ) {
                gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_atname), attrib->name );
                gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_atvalue), attrib->value );
                gtk_widget_set_sensitive(personeditdlg.attrib_del, TRUE);
@@ -500,7 +463,7 @@ static void edit_person_attrib_delete( gpointer data ) {
                personeditdlg.rowIndAttrib = -1 + row;
        } 
        
-       if (!personeditdlg.read_only)
+       if (!personeditdlg.read_only && !personeditdlg.ldap)
                gtk_widget_set_sensitive(personeditdlg.attrib_del, gtk_clist_get_row_data(clist, 0) != NULL);
        
        edit_person_status_show( NULL );
@@ -986,7 +949,7 @@ static void edit_person_entry_att_changed (GtkWidget *entry, gpointer data)
 {
        gboolean non_empty = gtk_clist_get_row_data(GTK_CLIST(personeditdlg.clist_attrib), 0) != NULL;
 
-       if (personeditdlg.read_only)
+       if (personeditdlg.read_only || personeditdlg.ldap)
                return;
 
        if (gtk_entry_get_text(GTK_ENTRY(personeditdlg.entry_atname)) == NULL
@@ -1162,7 +1125,12 @@ static void addressbook_edit_person_create( GtkWidget *parent, gboolean *cancell
                addressbook_edit_person_widgetset_create( parent, cancelled );
        addressbook_edit_person_page_basic( PAGE_BASIC, _( "_User Data" ) );
        addressbook_edit_person_page_email( PAGE_EMAIL, _( "_Email Addresses" ) );
-       addressbook_edit_person_page_attrib( PAGE_ATTRIBUTES, _( "O_ther Attributes" ) );
+#ifdef USE_LDAP
+       if (personeditdlg.ldap)
+               addressbook_edit_person_page_attrib_ldap(&personeditdlg, PAGE_ATTRIBUTES, _("O_ther Attributes"));
+       else
+#endif
+               addressbook_edit_person_page_attrib( PAGE_ATTRIBUTES, _( "O_ther Attributes" ) );
        gtk_widget_show_all( personeditdlg.container );
 }
 
@@ -1201,10 +1169,10 @@ static void update_sensitivity(void)
        gtk_widget_set_sensitive(personeditdlg.entry_name,    !personeditdlg.read_only);
        gtk_widget_set_sensitive(personeditdlg.entry_first,   !personeditdlg.read_only);
        gtk_widget_set_sensitive(personeditdlg.entry_last,    !personeditdlg.read_only);
-       gtk_widget_set_sensitive(personeditdlg.entry_nick,    !personeditdlg.read_only);
+       gtk_widget_set_sensitive(personeditdlg.entry_nick,    !personeditdlg.read_only && !personeditdlg.ldap);
        gtk_widget_set_sensitive(personeditdlg.entry_email,   !personeditdlg.read_only);
-       gtk_widget_set_sensitive(personeditdlg.entry_alias,   !personeditdlg.read_only);
-       gtk_widget_set_sensitive(personeditdlg.entry_remarks, !personeditdlg.read_only);
+       gtk_widget_set_sensitive(personeditdlg.entry_alias,   !personeditdlg.read_only && !personeditdlg.ldap);
+       gtk_widget_set_sensitive(personeditdlg.entry_remarks, !personeditdlg.read_only && !personeditdlg.ldap);
        gtk_widget_set_sensitive(personeditdlg.email_up,      !personeditdlg.read_only);
        gtk_widget_set_sensitive(personeditdlg.email_down,    !personeditdlg.read_only);
        gtk_widget_set_sensitive(personeditdlg.email_del,     !personeditdlg.read_only);
@@ -1343,6 +1311,7 @@ ItemPerson *addressbook_edit_person( AddressBookFile *abf, ItemFolder *parent_fo
        current_person = person;
        current_parent_folder = parent_folder;
        edit_person_close_post_update_cb = post_update_cb;
+       personeditdlg.ldap = (abf->type == ADBOOKTYPE_LDAP)? TRUE : FALSE;
 
        if( !personeditdlg.container )
                addressbook_edit_person_create(parent_container, &cancelled);
@@ -1386,6 +1355,7 @@ ItemPerson *addressbook_edit_person( AddressBookFile *abf, ItemFolder *parent_fo
                        gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_nick), person->nickName );
                edit_person_load_email( person );
                edit_person_load_attrib( person );
+               gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_atvalue), "");
        }
        else {
                personeditdlg.editNew = TRUE;