2010-03-21 [pawel] 3.7.5cvs35
[claws.git] / src / addrgather.c
index 2c65cdeb9e51964de97dfebf062b57455da6b5b8..44c5ed2a67e0da4d0fb83ed36f9734039e883ac4 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 2002-2008 Match Grun and the Claws Mail team
+ * Copyright (C) 2002-2009 Match Grun and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkwidget.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtkvbox.h>
-#include <gtk/gtktable.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtkhbbox.h>
-#include <gtk/gtkbutton.h>
-#include <gtk/gtkfilesel.h>
-#include <gtk/gtksignal.h>
+#include <gtk/gtk.h>
 
 #include "main.h"
 #include "inc.h"
@@ -52,6 +42,7 @@
 #include "manage_window.h"
 #include "folder.h"
 #include "utils.h"
+#include "prefs_common.h"
 
 #include "addrharvest.h"
 #include "addrindex.h"
@@ -137,10 +128,19 @@ static gboolean addrgather_dlg_key_pressed(
        return FALSE;
 }
 
+static void addrgather_size_allocate(
+       GtkWidget *widget, GtkAllocation *allocation )
+{
+       cm_return_if_fail( allocation != NULL );
+       
+       prefs_common.addrgather_width   = allocation->width;
+       prefs_common.addrgather_height  = allocation->height;
+}
+
 #define FMT_BUFSIZE 32
 
 static gboolean addrgather_dlg_harvest() {
-       GtkCList *clist;
+       GtkCMCList *clist;
        gchar *text[ FIELDS_N_COLS ];
        AddressHarvester *harvester;
        AddressBookFile *abf;
@@ -203,8 +203,8 @@ static gboolean addrgather_dlg_harvest() {
        _harv_addressBook_ = abf;
 
        /* Update summary count */
-       clist = GTK_CLIST(addrgather_dlg.clistCount);
-       gtk_clist_clear( clist );
+       clist = GTK_CMCLIST(addrgather_dlg.clistCount);
+       gtk_cmclist_clear( clist );
        for( i = 0; i < NUM_FIELDS; i++ ) {
                cnt = addrharvest_get_count( harvester, _harv_headerNames_[i] );
                if( cnt < 1 ) {
@@ -215,7 +215,7 @@ static gboolean addrgather_dlg_harvest() {
                }
                text[ FIELD_COL_HEADER ] = _harv_headerNames_[i];
                text[ FIELD_COL_COUNT  ] = str;
-               gtk_clist_append( clist, text );
+               gtk_cmclist_append( clist, text );
        }
 
        addrharvest_free( harvester );
@@ -325,7 +325,7 @@ static void addrgather_page_fields(gint pageNum, gchar *pageLbl)
                        _("Maximum amount of entries per folder within the newly created address book"));
 
        hboxs = gtk_hbox_new(FALSE, 8);
-       adjFolder = gtk_adjustment_new(DFL_FOLDER_SIZE, MIN_FOLDER_SIZE, G_MAXINT, 1, 10, 100);
+       adjFolder = gtk_adjustment_new(DFL_FOLDER_SIZE, MIN_FOLDER_SIZE, G_MAXINT, 1, 10, 0);
        spinbtnFolder = gtk_spin_button_new(GTK_ADJUSTMENT(adjFolder), 1, 0);
        gtk_box_pack_start(GTK_BOX(hboxs), spinbtnFolder, FALSE, FALSE, 0);
        gtk_widget_set_size_request(spinbtnFolder, 100, -1);
@@ -348,7 +348,8 @@ static void addrgather_page_fields(gint pageNum, gchar *pageLbl)
        gtk_container_set_border_width(GTK_CONTAINER(vboxf), 8);
 
        for (i = 0; i < NUM_FIELDS; i++) {
-               PACK_CHECK_BUTTON(vboxf, checkHeader[i], _harv_headerNames_[i]);
+               PACK_CHECK_BUTTON(vboxf, checkHeader[i],
+                       prefs_common_translated_header_name(_harv_headerNames_[i]));
                addrgather_dlg.checkHeader[i] = checkHeader[i];
        }
 
@@ -398,16 +399,16 @@ static void addrgather_page_finish( gint pageNum, gchar *pageLbl ) {
                                       GTK_POLICY_AUTOMATIC,
                                       GTK_POLICY_AUTOMATIC);
 
-       clistCount = gtk_clist_new_with_titles( FIELDS_N_COLS, titles );
+       clistCount = gtk_cmclist_new_with_titles( FIELDS_N_COLS, titles );
        gtk_container_add( GTK_CONTAINER(clistSWin), clistCount );
-       gtk_clist_set_selection_mode( GTK_CLIST(clistCount), GTK_SELECTION_BROWSE );
-       gtk_clist_set_column_width(
-                       GTK_CLIST(clistCount), FIELD_COL_HEADER, FIELDS_COL_WIDTH_HEADER );
-       gtk_clist_set_column_width(
-                       GTK_CLIST(clistCount), FIELD_COL_COUNT, FIELDS_COL_WIDTH_COUNT );
+       gtk_cmclist_set_selection_mode( GTK_CMCLIST(clistCount), GTK_SELECTION_BROWSE );
+       gtk_cmclist_set_column_width(
+                       GTK_CMCLIST(clistCount), FIELD_COL_HEADER, FIELDS_COL_WIDTH_HEADER );
+       gtk_cmclist_set_column_width(
+                       GTK_CMCLIST(clistCount), FIELD_COL_COUNT, FIELDS_COL_WIDTH_COUNT );
 
        for( i = 0; i < FIELDS_N_COLS; i++ )
-               GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clistCount)->column[i].button, GTK_CAN_FOCUS);
+               GTK_WIDGET_UNSET_FLAGS(GTK_CMCLIST(clistCount)->column[i].button, GTK_CAN_FOCUS);
 
        addrgather_dlg.clistCount = clistCount;
 }
@@ -427,18 +428,19 @@ static void addrgather_dlg_create(void)
        GtkWidget *vbox;
        GtkWidget *hbbox;
        GtkWidget *hsbox;
-
+       static GdkGeometry geometry;
+       
        window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "addrgather");
-       gtk_widget_set_size_request(window, 380, -1);
        gtk_container_set_border_width(GTK_CONTAINER(window), 4);
        gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
        gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
-       gtk_window_set_modal(GTK_WINDOW(window), TRUE);
        
        g_signal_connect(G_OBJECT(window), "delete_event",
                         G_CALLBACK(addrgather_dlg_delete_event), NULL);
        g_signal_connect(G_OBJECT(window), "key_press_event",
                         G_CALLBACK(addrgather_dlg_key_pressed), NULL);
+       g_signal_connect(G_OBJECT(window), "size_allocate",
+                        G_CALLBACK(addrgather_size_allocate), NULL);
 
        vbox = gtk_vbox_new(FALSE, 6);
        gtk_container_add(GTK_CONTAINER(window), vbox);
@@ -468,7 +470,15 @@ static void addrgather_dlg_create(void)
        g_signal_connect(G_OBJECT(btnCancel), "clicked",
                         G_CALLBACK(addrgather_dlg_cancel), NULL);
 
-       gtk_widget_show_all(vbox);
+       if (!geometry.min_width) {
+               geometry.min_width = 450;
+               geometry.min_height = -1;
+       }
+
+       gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL, &geometry,
+                                     GDK_HINT_MIN_SIZE);
+       gtk_window_set_default_size(GTK_WINDOW(window), prefs_common.addrgather_width,
+                                   prefs_common.addrgather_height);
 
        addrgather_dlg.window     = window;
        addrgather_dlg.notebook   = notebook;
@@ -495,7 +505,6 @@ static void addrgather_dlg_create(void)
 AddressBookFile *addrgather_dlg_execute(FolderItem *folderItem, AddressIndex *addrIndex,
                                        gboolean sourceInd, GList *msgList)
 {
-       gboolean errFlag;
        gint i;
 
        _harv_addressIndex_ = addrIndex;
@@ -508,36 +517,30 @@ AddressBookFile *addrgather_dlg_execute(FolderItem *folderItem, AddressIndex *ad
        
        addrgather_dlg.done = FALSE;
 
-       errFlag = TRUE;
-       if (folderItem && folderItem->path) {
-               gtk_notebook_set_current_page(GTK_NOTEBOOK(addrgather_dlg.notebook), PAGE_FIELDS);
-               addrgather_dlg.folderPath = folder_item_get_path(folderItem);
+       gtk_notebook_set_current_page(GTK_NOTEBOOK(addrgather_dlg.notebook), PAGE_FIELDS);
+       addrgather_dlg.folderPath = folder_item_get_path(folderItem);
 
-               /* Setup some default values */
-               gtk_label_set_text(GTK_LABEL(addrgather_dlg.labelFolder), folderItem->path);
-               gtk_entry_set_text(GTK_ENTRY(addrgather_dlg.entryBook), folderItem->path);
+       /* Setup some default values */
+       gtk_label_set_text(GTK_LABEL(addrgather_dlg.labelFolder), folderItem->path);
+       gtk_entry_set_text(GTK_ENTRY(addrgather_dlg.entryBook), folderItem->path);
 
-               for (i = 0; i < NUM_FIELDS; i++) {
+       for (i = 0; i < NUM_FIELDS; i++) {
+               gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(addrgather_dlg.checkHeader[i]),
+                                            FALSE);
+               if (g_utf8_collate(_harv_headerNames_[i], HEADER_FROM) == 0)
                        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(addrgather_dlg.checkHeader[i]),
-                                                    FALSE);
-                       if (g_utf8_collate(_harv_headerNames_[i], HEADER_FROM) == 0)
-                               gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(addrgather_dlg.checkHeader[i]),
-                                                            TRUE);
-               }
-
-               gtk_widget_set_sensitive(addrgather_dlg.btnOk, TRUE);
-               gtk_widget_grab_default(addrgather_dlg.btnOk);
-               errFlag = FALSE;
+                                                   TRUE);
        }
 
+       gtk_widget_set_sensitive(addrgather_dlg.btnOk, TRUE);
+       gtk_widget_set_sensitive(addrgather_dlg.btnCancel, TRUE);
+       gtk_widget_grab_default(addrgather_dlg.btnOk);
+
        /* Apply window title */
        if (sourceInd) {
                gtk_window_set_title(GTK_WINDOW(addrgather_dlg.window),
                                     _("Collect email addresses from selected messages"));
                gtk_widget_set_sensitive(addrgather_dlg.checkRecurse, FALSE);
-               if (msgList == NULL) {
-                       errFlag = TRUE;
-               }
        } else {
                gtk_window_set_title(GTK_WINDOW(addrgather_dlg.window),
                                     _("Collect email addresses from folder"));
@@ -547,16 +550,15 @@ AddressBookFile *addrgather_dlg_execute(FolderItem *folderItem, AddressIndex *ad
 
        addrgather_dlg_status_show("");
        gtk_widget_show(addrgather_dlg.window);
-
+       gtk_window_set_modal(GTK_WINDOW(addrgather_dlg.window), TRUE);
        gtk_widget_grab_focus(addrgather_dlg.entryBook);
        manage_window_set_transient(GTK_WINDOW(addrgather_dlg.window));
        gtk_main();
 
-       if (!errFlag) {
-               g_free(addrgather_dlg.folderPath);
-               addrgather_dlg.folderPath = NULL;
-       }
+       g_free(addrgather_dlg.folderPath);
+       addrgather_dlg.folderPath = NULL;
        gtk_widget_hide(addrgather_dlg.window);
+       gtk_window_set_modal(GTK_WINDOW(addrgather_dlg.window), FALSE);
        _harv_addressIndex_ = NULL;
 
        if (addrgather_dlg.cancelled == TRUE)