2005-10-18 [colin] 1.9.15cvs72
[claws.git] / src / addressadd.c
index ffe89dfdccd7e27763d926eff6b4ae5e863ad522..f74f6b3a7d2ed2a64538e521c230a331c9227bda 100644 (file)
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 /*
@@ -28,6 +28,7 @@
 #include "defs.h"
 
 #include <glib.h>
+#include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
 #include <gtk/gtkwindow.h>
 #include <gtk/gtksignal.h>
@@ -37,7 +38,6 @@
 #include <gtk/gtkhbbox.h>
 #include <gtk/gtkbutton.h>
 
-#include "intl.h"
 #include "gtkutils.h"
 #include "stock_pixmap.h"
 #include "prefs_common.h"
@@ -54,9 +54,9 @@ typedef struct {
 
 static struct _AddressAdd_dlg {
        GtkWidget *window;
-       GtkWidget *label_name;
+       GtkWidget *entry_name;
        GtkWidget *label_address;
-       GtkWidget *label_remarks;
+       GtkWidget *entry_remarks;
        GtkWidget *tree_folder;
        GtkWidget *ok_btn;
        GtkWidget *cancel_btn;
@@ -104,11 +104,12 @@ static gint addressadd_delete_event( GtkWidget *widget, GdkEventAny *event, gboo
        return TRUE;
 }
 
-static void addressadd_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) {
+static gboolean addressadd_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) {
        if (event && event->keyval == GDK_Escape) {
                addressadd_cancelled = TRUE;
                gtk_main_quit();
        }
+       return FALSE;
 }
 
 static void addressadd_ok( GtkWidget *widget, gboolean *cancelled ) {
@@ -127,8 +128,8 @@ static void addressadd_folder_select( GtkCTree *ctree, gint row, gint column,
        addressadd_dlg.fiSelected = gtk_clist_get_row_data( GTK_CLIST(ctree), row );
 }
 
-static void addressadd_tree_button( GtkCTree *ctree, GdkEventButton *event, gpointer data ) {
-       if( ! event ) return;
+static gboolean addressadd_tree_button( GtkCTree *ctree, GdkEventButton *event, gpointer data ) {
+       if( ! event ) return FALSE;
        if( event->button == 1 ) {
                /* Handle double click */
                if( event->type == GDK_2BUTTON_PRESS ) {
@@ -136,6 +137,8 @@ static void addressadd_tree_button( GtkCTree *ctree, GdkEventButton *event, gpoi
                        gtk_main_quit();
                }
        }
+
+       return FALSE;
 }
 
 static void addressadd_create( void ) {
@@ -143,34 +146,33 @@ static void addressadd_create( void ) {
        GtkWidget *vbox;
        GtkWidget *table;
        GtkWidget *label;
-       GtkWidget *label_name;
+       GtkWidget *entry_name;
        GtkWidget *label_addr;
-       GtkWidget *label_rems;
+       GtkWidget *entry_rems;
        GtkWidget *tree_folder;
        GtkWidget *vlbox;
        GtkWidget *tree_win;
        GtkWidget *hbbox;
-       GtkWidget *hsep;
        GtkWidget *ok_btn;
        GtkWidget *cancel_btn;
        GtkWidget *hsbox;
        GtkWidget *statusbar;
        gint top;
 
-       window = gtk_window_new(GTK_WINDOW_DIALOG);
-       gtk_widget_set_usize( window, 300, 400 );
+       window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+       gtk_widget_set_size_request( window, 300, 400 );
        gtk_container_set_border_width( GTK_CONTAINER(window), 0 );
-       gtk_window_set_title( GTK_WINDOW(window), _("Add Address to Book") );
+       gtk_window_set_title( GTK_WINDOW(window), _("Add to address book") );
        gtk_window_set_position( GTK_WINDOW(window), GTK_WIN_POS_MOUSE );
        gtk_window_set_modal( GTK_WINDOW(window), TRUE );
-       gtk_signal_connect( GTK_OBJECT(window), "delete_event",
-                           GTK_SIGNAL_FUNC(addressadd_delete_event), NULL );
-       gtk_signal_connect( GTK_OBJECT(window), "key_press_event",
-                           GTK_SIGNAL_FUNC(addressadd_key_pressed), NULL );
+       g_signal_connect( G_OBJECT(window), "delete_event",
+                         G_CALLBACK(addressadd_delete_event), NULL );
+       g_signal_connect( G_OBJECT(window), "key_press_event",
+                         G_CALLBACK(addressadd_key_pressed), NULL );
 
        vbox = gtk_vbox_new(FALSE, 8);
        gtk_container_add(GTK_CONTAINER(window), vbox);
-       gtk_container_set_border_width( GTK_CONTAINER(vbox), 0 );
+       gtk_container_set_border_width( GTK_CONTAINER(vbox), 8 );
 
        table = gtk_table_new(3, 2, FALSE);
        gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
@@ -184,9 +186,11 @@ static void addressadd_create( void ) {
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
 
-       label_name = gtk_label_new("");
-       gtk_table_attach(GTK_TABLE(table), label_name, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0);
-       gtk_misc_set_alignment(GTK_MISC(label_name), 0, 0.5);
+       entry_name = gtk_entry_new();
+       /* gtk_entry_set_max_length(); */
+       gtk_entry_set_text (GTK_ENTRY(entry_name),"");
+       
+       gtk_table_attach(GTK_TABLE(table), entry_name, 1, 2, top, (top + 1), GTK_FILL | GTK_EXPAND , 0, 0, 0);
 
        /* Second row */
        top = 1;
@@ -204,9 +208,9 @@ static void addressadd_create( void ) {
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
 
-       label_rems = gtk_label_new("");
-       gtk_table_attach(GTK_TABLE(table), label_rems, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0);
-       gtk_misc_set_alignment(GTK_MISC(label_rems), 0, 0.5);
+       entry_rems = gtk_entry_new();
+       /* gtk_entry_set_max_length(); */
+       gtk_table_attach(GTK_TABLE(table), entry_rems, 1, 2, top, (top + 1), GTK_FILL | GTK_EXPAND, 0, 0, 0);
 
        /* Address book/folder tree */
        vlbox = gtk_vbox_new(FALSE, 8);
@@ -216,7 +220,7 @@ static void addressadd_create( void ) {
        tree_win = gtk_scrolled_window_new( NULL, NULL );
        gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(tree_win),
                                        GTK_POLICY_AUTOMATIC,
-                                       GTK_POLICY_ALWAYS );
+                                       GTK_POLICY_AUTOMATIC );
        gtk_box_pack_start( GTK_BOX(vlbox), tree_win, TRUE, TRUE, 0 );
 
        tree_folder = gtk_ctree_new( 1, 0 );
@@ -236,30 +240,28 @@ static void addressadd_create( void ) {
        gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH);
 
        /* Button panel */
-       gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
-                               &cancel_btn, _("Cancel"), NULL, NULL);
+       gtkut_stock_button_set_create(&hbbox, &ok_btn, GTK_STOCK_OK,
+                                     &cancel_btn, GTK_STOCK_CANCEL,
+                                     NULL, NULL);
        gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
        gtk_container_set_border_width( GTK_CONTAINER(hbbox), 0 );
        gtk_widget_grab_default(ok_btn);
 
-       hsep = gtk_hseparator_new();
-       gtk_box_pack_end(GTK_BOX(vbox), hsep, FALSE, FALSE, 0);
-
-       gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
-                          GTK_SIGNAL_FUNC(addressadd_ok), NULL);
-       gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
-                          GTK_SIGNAL_FUNC(addressadd_cancel), NULL);
-       gtk_signal_connect(GTK_OBJECT(tree_folder), "select_row",
-                          GTK_SIGNAL_FUNC(addressadd_folder_select), NULL);
-       gtk_signal_connect(GTK_OBJECT(tree_folder), "button_press_event",
-                          GTK_SIGNAL_FUNC(addressadd_tree_button), NULL);
+       g_signal_connect(G_OBJECT(ok_btn), "clicked",
+                        G_CALLBACK(addressadd_ok), NULL);
+       g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+                        G_CALLBACK(addressadd_cancel), NULL);
+       g_signal_connect(G_OBJECT(tree_folder), "select_row",
+                        G_CALLBACK(addressadd_folder_select), NULL);
+       g_signal_connect(G_OBJECT(tree_folder), "button_press_event",
+                        G_CALLBACK(addressadd_tree_button), NULL);
 
        gtk_widget_show_all(vbox);
 
        addressadd_dlg.window        = window;
-       addressadd_dlg.label_name    = label_name;
+       addressadd_dlg.entry_name    = entry_name;
        addressadd_dlg.label_address = label_addr;
-       addressadd_dlg.label_remarks = label_rems;
+       addressadd_dlg.entry_remarks = entry_rems;
        addressadd_dlg.tree_folder   = tree_folder;
        addressadd_dlg.ok_btn        = ok_btn;
        addressadd_dlg.cancel_btn    = cancel_btn;
@@ -289,7 +291,7 @@ static void addressadd_load_folder( GtkCTreeNode *parentNode, ItemFolder *parent
                folder = list->data;
                fName = g_strdup( ADDRITEM_NAME(folder) );
                name = &fName;
-               node = gtk_ctree_insert_node( tree, parentNode, NULL, name, FOLDER_SPACING,
+               node = gtk_sctree_insert_node( tree, parentNode, NULL, name, FOLDER_SPACING,
                                folderXpm, folderXpmMask, folderXpm, folderXpmMask,
                                FALSE, TRUE );
                g_free( fName );
@@ -330,7 +332,7 @@ static void addressadd_load_data( AddressIndex *addrIndex ) {
                                /* Add node for address book */
                                abf = ds->rawDataSource;
                                name = &dsName;
-                               node = gtk_ctree_insert_node( tree, NULL, NULL,
+                               node = gtk_sctree_insert_node( tree, NULL, NULL,
                                                name, FOLDER_SPACING, bookXpm,
                                                bookXpmMask, bookXpm, bookXpmMask,
                                                FALSE, TRUE );
@@ -353,7 +355,7 @@ static void addressadd_load_data( AddressIndex *addrIndex ) {
 gboolean addressadd_selection( AddressIndex *addrIndex, const gchar *name, const gchar *address, const gchar *remarks ) {
        gboolean retVal = FALSE;
        ItemPerson *person = NULL;
-
+       FolderInfo *fi = NULL;
        addressadd_cancelled = FALSE;
        if( ! addressadd_dlg.window ) addressadd_create();
        gtk_widget_grab_focus(addressadd_dlg.ok_btn);
@@ -366,23 +368,34 @@ gboolean addressadd_selection( AddressIndex *addrIndex, const gchar *name, const
        gtk_clist_select_row( GTK_CLIST( addressadd_dlg.tree_folder ), 0, 0 );
        gtk_widget_show(addressadd_dlg.window);
 
-       gtk_label_set_text( GTK_LABEL(addressadd_dlg.label_name ), "" );
+       gtk_entry_set_text( GTK_ENTRY(addressadd_dlg.entry_name ), "" );
        gtk_label_set_text( GTK_LABEL(addressadd_dlg.label_address ), "" );
-       gtk_label_set_text( GTK_LABEL(addressadd_dlg.label_remarks ), "" );
+       gtk_entry_set_text( GTK_ENTRY(addressadd_dlg.entry_remarks ), "" );
        if( name )
-               gtk_label_set_text( GTK_LABEL(addressadd_dlg.label_name ), name );
+               gtk_entry_set_text( GTK_ENTRY(addressadd_dlg.entry_name ), name );
        if( address )
                gtk_label_set_text( GTK_LABEL(addressadd_dlg.label_address ), address );
        if( remarks )
-               gtk_label_set_text( GTK_LABEL(addressadd_dlg.label_remarks ), remarks );
+               gtk_entry_set_text( GTK_ENTRY(addressadd_dlg.entry_remarks ), remarks );
 
        gtk_main();
        gtk_widget_hide( addressadd_dlg.window );
 
        if( ! addressadd_cancelled ) {
                if( addressadd_dlg.fiSelected ) {
-                       FolderInfo *fi = addressadd_dlg.fiSelected;
-                       person = addrbook_add_contact( fi->book, fi->folder, name, address, remarks );
+                       gchar *returned_name;
+                       gchar *returned_remarks;
+                       returned_name = gtk_editable_get_chars( GTK_EDITABLE(addressadd_dlg.entry_name), 0, -1 );
+                       returned_remarks = gtk_editable_get_chars( GTK_EDITABLE(addressadd_dlg.entry_remarks), 0, -1 );
+
+                       fi = addressadd_dlg.fiSelected;
+                       
+                       person = addrbook_add_contact( fi->book, fi->folder, 
+                                                       returned_name, 
+                                                       address, 
+                                                       returned_remarks);
+                       g_free(returned_name);
+                       g_free(returned_remarks);
                        if( person ) retVal = TRUE;
                }
        }