Author: stephan
Date: 2006-07-28 12:59:33 +0000 (Fri, 28 Jul 2006)
New Revision: 22548

Modified:
   xarchiver/branches/xarchiver-psybsd/TODO
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h
   xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.h
   xarchiver/branches/xarchiver-psybsd/po/nl.po
   xarchiver/branches/xarchiver-psybsd/po/xarchiver.pot
   xarchiver/branches/xarchiver-psybsd/src/main.c
   xarchiver/branches/xarchiver-psybsd/src/new_dialog.c
   xarchiver/branches/xarchiver-psybsd/src/new_dialog.h
   xarchiver/branches/xarchiver-psybsd/xarchiver.desktop.in
Log:
Fixed new_archive_dialog. (It now does stuff)



Modified: xarchiver/branches/xarchiver-psybsd/TODO
===================================================================
--- xarchiver/branches/xarchiver-psybsd/TODO    2006-07-28 12:23:49 UTC (rev 
22547)
+++ xarchiver/branches/xarchiver-psybsd/TODO    2006-07-28 12:59:33 UTC (rev 
22548)
@@ -9,6 +9,9 @@
                tar.gz
                tar.bz2
 
+       Implement lxa_archivetype_supported() function
+       Implement lxa_compressiontype_supported() function
+
        Implement 'NewArchiveDialog'
 
        Implement 'ExtractArchiveDialog'
@@ -28,7 +31,6 @@
          Remove
          Extract
          View
-  
 
   See if we can avoid using /tmp when possible.
   Write view support for gnu-tar support object.

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c  2006-07-28 
12:23:49 UTC (rev 22547)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c  2006-07-28 
12:59:33 UTC (rev 22548)
@@ -143,6 +143,13 @@
                                g_debug("COMPRESSION TYPE NOT FOUND");
                        compression = archive->compression;
        }
+       else
+       {
+               archive->compression = compression;
+               archive->type = type;
+               lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_IDLE);
+               return archive;
+       }
        if(archive->compression == LXA_COMPRESSIONTYPE_NONE)
        {
                if(type == LXA_ARCHIVETYPE_UNKNOWN)
@@ -152,7 +159,7 @@
                                g_debug("ARCHIVE TYPE FOUND");
                        else
                                g_debug("ARCHIVE TYPE NOT FOUND");
-                       archive->type = type;
+                       type = archive->type;
                }
        }
        return archive;

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h  2006-07-28 
12:23:49 UTC (rev 22547)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h  2006-07-28 
12:59:33 UTC (rev 22548)
@@ -33,7 +33,9 @@
 } LXAArchiveType;
 
 typedef enum
-{ LXA_COMPRESSIONTYPE_NONE, LXA_COMPRESSIONTYPE_UNKNOWN,
+{ 
+       LXA_COMPRESSIONTYPE_NONE, 
+       LXA_COMPRESSIONTYPE_UNKNOWN,
        LXA_COMPRESSIONTYPE_BZIP2,
        LXA_COMPRESSIONTYPE_GZIP
 } LXACompressionType;

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c     
2006-07-28 12:23:49 UTC (rev 22547)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c     
2006-07-28 12:59:33 UTC (rev 22548)
@@ -41,8 +41,7 @@
 
        lxa_tmp_dir = g_get_tmp_dir();
 #ifdef DEBUG
-       g_debug("lxa_tmp_dir: %s\n", lxa_tmp_dir);
-       g_debug("lxa_cmp_list_length: %d\n", 
g_slist_length(lxa_compression_support_list));
+       g_debug("lxa_tmp_dir: %s\n", lxa_tmp_dir); 
g_debug("lxa_cmp_list_length: %d\n", 
g_slist_length(lxa_compression_support_list));
 #endif
 }
 
@@ -59,7 +58,7 @@
  *
  */
 gint
-lxa_new_archive(gchar *path, LXAArchiveType type, LXACompressionType 
compression, gboolean overwrite, LXAArchive **lp_archive)
+lxa_new_archive(gchar *path, LXAArchiveType type, LXACompressionType 
compression, gboolean overwrite, LXAArchive **lp_archive, GCallback 
initialized_func)
 {
        if(overwrite)
                g_unlink(path);
@@ -70,7 +69,7 @@
                return 1;
        }
 
-       LXAArchive *archive = lxa_archive_new(path, type, compression, NULL);
+       LXAArchive *archive = lxa_archive_new(path, type, compression, 
initialized_func);
        (*lp_archive) = archive;
        return 0;
 }
@@ -99,3 +98,19 @@
 {
        g_unlink(archive->tmp_file);
 }
+
+gboolean
+lxa_archivetype_supported (LXAArchiveType type)
+{
+       if(g_slist_find_custom(lxa_archive_support_list, &type, 
lookup_archive_support))
+               return TRUE;
+       return FALSE;
+}
+
+gboolean
+lxa_compressiontype_supported (LXACompressionType type)
+{
+       if(g_slist_find_custom(lxa_compression_support_list, &type, 
lookup_compression_support))
+               return TRUE;
+       return FALSE;
+}

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.h     
2006-07-28 12:23:49 UTC (rev 22547)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.h     
2006-07-28 12:59:33 UTC (rev 22548)
@@ -49,7 +49,8 @@
                  LXAArchiveType,
                  LXACompressionType,
                  gboolean overwrite,
-                 LXAArchive **lp_archive );
+                 LXAArchive **lp_archive,
+                                                                GCallback 
initialized_func);
 
 /*
  * gint 

Modified: xarchiver/branches/xarchiver-psybsd/po/nl.po
===================================================================
--- xarchiver/branches/xarchiver-psybsd/po/nl.po        2006-07-28 12:23:49 UTC 
(rev 22547)
+++ xarchiver/branches/xarchiver-psybsd/po/nl.po        2006-07-28 12:59:33 UTC 
(rev 22548)
@@ -3,11 +3,12 @@
 # This file is distributed under the same license as the xarchiver package.
 # Stephan Arts <[EMAIL PROTECTED]>, 2006.
 #
+#: ../src/main.c:50 ../src/main.c:54 ../src/main.c:58 ../src/main.c:62
 msgid ""
 msgstr ""
 "Project-Id-Version: xarchiver 0.3.9psybsd\n"
 "Report-Msgid-Bugs-To: [EMAIL PROTECTED]"
-"POT-Creation-Date: 2006-07-22 19:29+0200\n"
+"POT-Creation-Date: 2006-07-28 14:58+0200\n"
 "PO-Revision-Date: 2006-07-20 16:36+0200\n"
 "Last-Translator: Stephan Arts <[EMAIL PROTECTED]>\n"
 "Language-Team: Dutch <[EMAIL PROTECTED]>\n"
@@ -16,70 +17,74 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: ../src/main.c:53
-msgid "Extract the archive to the specified folder and quits."
-msgstr "Pak archief uit naar map en sluit af"
-
-#: ../src/main.c:54
+#: ../src/main.c:51
 msgid "[destination path]"
 msgstr "[bestemmings map]"
 
-#: ../src/main.c:57
-msgid "Extract the archive by asking the destination folder and quits."
-msgstr ""
-
-#: ../src/main.c:61
-msgid "Add files to the specified archive and quits."
-msgstr ""
-
-#: ../src/main.c:62
+#: ../src/main.c:59
 msgid "[archive path] [file1] [file2] ... [fileN]"
 msgstr "[archief map] [bestand1] [bestand2] ... [bestandN]"
 
-#: ../src/main.c:71
-msgid "Ask for the archive to be created, add files to it and quits."
-msgstr ""
-
-#: ../src/main.c:72
+#: ../src/main.c:63
 msgid "[file1] [file2] ... [fileN]"
 msgstr "[bestand1] [bestand2] ... [bestandN]"
 
-#: ../src/main.c:114
+#: ../src/main.c:105
 #, c-format
 msgid "Could not add file(s) to archive '%s'"
 msgstr "Kan bestand(en) niet toevoegen aan archief '%s'"
 
-#: ../src/main.c:117 ../src/main.c:203
+#: ../src/main.c:108 ../src/main.c:197
 #, c-format
 msgid "Could not extract archive '%s'"
 msgstr "Kan archief '%s' niet uitpakken"
 
-#: ../src/main.c:120
+#: ../src/main.c:111
 #, c-format
 msgid "Could not remove file(s) from archive '%s'"
 msgstr "Kon bestand(en) niet verwijderen uit archief '%s'"
 
-#: ../src/main.c:143
+#: ../src/main.c:134
 #, c-format
 msgid "File '%s' does not exist: ABORTING"
 msgstr "Bestand '%s' bestaat niet"
 
-#: ../src/main.c:174
+#: ../src/main.c:168
 msgid "[archive name]"
 msgstr "[archief naam]"
 
-#: ../src/main.c:215
+#: ../src/main.c:209
 msgid "You should provide at least one file to add\n"
 msgstr "U moet ten minste een bestand toevoegen\n"
 
-#: ../src/new_dialog.c:68
+#: ../src/main.c:302
+msgid "Archive type unknown\n"
+msgstr "Onbekend archieftype\n"
+
+#: ../src/new_dialog.c:76
 msgid "Archive type:"
 msgstr "Archieftype:"
 
-#: ../src/new_dialog.c:70
+#: ../src/new_dialog.c:88
 msgid "Automatic"
 msgstr "Automatisch"
 
-#: ../src/new_dialog.c:86
+#: ../src/new_dialog.c:98 ../src/new_dialog.c:163
+msgid "Tar (uncompressed) '.tar'"
+msgstr "Tar (ongecomprimeerd) '.tar'"
+
+#: ../src/new_dialog.c:108 ../src/new_dialog.c:169
+msgid "Gzip compressed Tar '.tar.gz'"
+msgstr "Gzip gecomprimeerde Tar '.tar.gz'"
+
+#: ../src/new_dialog.c:118 ../src/new_dialog.c:176
+msgid "Bzip2 compressed Tar '.tar.bz2'"
+msgstr "Bzip2 gecomprimeerde Tar '.tar.bz2'"
+
+#: ../src/new_dialog.c:129 ../src/new_dialog.c:185
+msgid "Zip archive '.zip'"
+msgstr "Zip archief '.zip'"
+
+#: ../src/new_dialog.c:157
 msgid "Create new archive"
 msgstr "Maak nieuw archief"

Modified: xarchiver/branches/xarchiver-psybsd/po/xarchiver.pot
===================================================================
--- xarchiver/branches/xarchiver-psybsd/po/xarchiver.pot        2006-07-28 
12:23:49 UTC (rev 22547)
+++ xarchiver/branches/xarchiver-psybsd/po/xarchiver.pot        2006-07-28 
12:59:33 UTC (rev 22548)
@@ -3,12 +3,13 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <[EMAIL PROTECTED]>, YEAR.
 #
+#: ../src/main.c:50 ../src/main.c:54 ../src/main.c:58 ../src/main.c:62
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: [EMAIL PROTECTED]"
-"POT-Creation-Date: 2006-07-22 19:29+0200\n"
+"POT-Creation-Date: 2006-07-28 14:58+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <[EMAIL PROTECTED]>\n"
 "Language-Team: LANGUAGE <[EMAIL PROTECTED]>\n"
@@ -16,70 +17,74 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../src/main.c:53
-msgid "Extract the archive to the specified folder and quits."
-msgstr ""
-
-#: ../src/main.c:54
+#: ../src/main.c:51
 msgid "[destination path]"
 msgstr ""
 
-#: ../src/main.c:57
-msgid "Extract the archive by asking the destination folder and quits."
-msgstr ""
-
-#: ../src/main.c:61
-msgid "Add files to the specified archive and quits."
-msgstr ""
-
-#: ../src/main.c:62
+#: ../src/main.c:59
 msgid "[archive path] [file1] [file2] ... [fileN]"
 msgstr ""
 
-#: ../src/main.c:71
-msgid "Ask for the archive to be created, add files to it and quits."
-msgstr ""
-
-#: ../src/main.c:72
+#: ../src/main.c:63
 msgid "[file1] [file2] ... [fileN]"
 msgstr ""
 
-#: ../src/main.c:114
+#: ../src/main.c:105
 #, c-format
 msgid "Could not add file(s) to archive '%s'"
 msgstr ""
 
-#: ../src/main.c:117 ../src/main.c:203
+#: ../src/main.c:108 ../src/main.c:197
 #, c-format
 msgid "Could not extract archive '%s'"
 msgstr ""
 
-#: ../src/main.c:120
+#: ../src/main.c:111
 #, c-format
 msgid "Could not remove file(s) from archive '%s'"
 msgstr ""
 
-#: ../src/main.c:143
+#: ../src/main.c:134
 #, c-format
 msgid "File '%s' does not exist: ABORTING"
 msgstr ""
 
-#: ../src/main.c:174
+#: ../src/main.c:168
 msgid "[archive name]"
 msgstr ""
 
-#: ../src/main.c:215
+#: ../src/main.c:209
 msgid "You should provide at least one file to add\n"
 msgstr ""
 
-#: ../src/new_dialog.c:68
+#: ../src/main.c:302
+msgid "Archive type unknown\n"
+msgstr ""
+
+#: ../src/new_dialog.c:76
 msgid "Archive type:"
 msgstr ""
 
-#: ../src/new_dialog.c:70
+#: ../src/new_dialog.c:88
 msgid "Automatic"
 msgstr ""
 
-#: ../src/new_dialog.c:86
+#: ../src/new_dialog.c:98 ../src/new_dialog.c:163
+msgid "Tar (uncompressed) '.tar'"
+msgstr ""
+
+#: ../src/new_dialog.c:108 ../src/new_dialog.c:169
+msgid "Gzip compressed Tar '.tar.gz'"
+msgstr ""
+
+#: ../src/new_dialog.c:118 ../src/new_dialog.c:176
+msgid "Bzip2 compressed Tar '.tar.bz2'"
+msgstr ""
+
+#: ../src/new_dialog.c:129 ../src/new_dialog.c:185
+msgid "Zip archive '.zip'"
+msgstr ""
+
+#: ../src/new_dialog.c:157
 msgid "Create new archive"
 msgstr ""

Modified: xarchiver/branches/xarchiver-psybsd/src/main.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main.c      2006-07-28 12:23:49 UTC 
(rev 22547)
+++ xarchiver/branches/xarchiver-psybsd/src/main.c      2006-07-28 12:59:33 UTC 
(rev 22548)
@@ -44,31 +44,22 @@
 
 gint opened_archives = 0;
 
-/*
- * Using roughly the same interface as File-roller.
- */
 static GOptionEntry entries[] =
 {
        {       "extract-to", 'x', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, 
&extract_archive_path,
-               N_("Extract the archive to the specified folder and quits."),
+               N_(""),
                N_("[destination path]")
        },
        {       "extract", 'e', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, 
&extract_archive,
-               N_("Extract the archive by asking the destination folder and 
quits."),
+               N_(""),
                NULL
        },
        {       "add-to", 'd', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, 
&add_archive_path,
-               N_("Add files to the specified archive and quits."),
+               N_(""),
                N_("[archive path] [file1] [file2] ... [fileN]")
        },
-       /*
-       {       "add", 'a', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, 
&add_archive,
-               N_("Add files to the specified archive by asking their 
filenames and quits."),
-               NULL
-       },
-       */
        {       "new", 'n', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, 
&new_archive,
-               N_("Ask for the archive to be created, add files to it and 
quits."),
+               N_(""),
                N_("[file1] [file2] ... [fileN]")
        },
        { NULL }
@@ -163,6 +154,9 @@
        gint result = 0;
        gint i = 0;
        GSList *files = NULL;
+       LXAArchiveType new_archivetype;
+       LXACompressionType new_compressiontype;
+       gchar *temp_path;
        
   #ifdef ENABLE_NLS
   bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
@@ -227,21 +221,94 @@
                }
                else /* No file-name provided, a new archive has to be created: 
*/
                {
-                       /* TODO: Show new archive dialog */
                        dialog = xa_new_archive_dialog_new();
                        result = gtk_dialog_run (GTK_DIALOG (dialog) );
-                       gtk_widget_destroy (GTK_WIDGET (dialog) );
-                       if(result == GTK_RESPONSE_CANCEL)
+                       if(result == GTK_RESPONSE_CANCEL || result == 
GTK_RESPONSE_DELETE_EVENT)
+                       {
+                               gtk_widget_destroy (GTK_WIDGET (dialog) );
                                return 2;
+                       }
                        if(result == GTK_RESPONSE_OK)
                        {
                                /* do crazy stuff */
-                               return 0;
+                               new_archivetype = 
xa_new_archive_dialog_get_archive_type(XA_NEW_ARCHIVE_DIALOG(dialog));
+                               new_compressiontype = 
xa_new_archive_dialog_get_compression_type(XA_NEW_ARCHIVE_DIALOG(dialog));
+                               add_archive_path = 
gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+                               if(new_archivetype == LXA_ARCHIVETYPE_UNKNOWN)
+                               {
+                                       /* auto-detect*/
+                                       if(g_str_has_suffix(add_archive_path, 
".tgz") || g_str_has_suffix(add_archive_path, ".tar.gz"))
+                                       {
+                                               new_archivetype = 
LXA_ARCHIVETYPE_TAR;
+                                               new_compressiontype = 
LXA_COMPRESSIONTYPE_GZIP;
+                                       }
+                                       if(g_str_has_suffix(add_archive_path, 
".tbz") || g_str_has_suffix(add_archive_path, ".tar.bz") || 
g_str_has_suffix(add_archive_path, ".tar.bz2"))
+                                       {
+                                               new_archivetype = 
LXA_ARCHIVETYPE_TAR;
+                                               new_compressiontype = 
LXA_COMPRESSIONTYPE_BZIP2;
+                                       }
+                                       if(g_str_has_suffix(add_archive_path, 
".tar"))
+                                       {
+                                               new_archivetype = 
LXA_ARCHIVETYPE_TAR;
+                                               new_compressiontype = 
LXA_COMPRESSIONTYPE_NONE;
+                                       }
+                               }
+                               if(new_archivetype != LXA_ARCHIVETYPE_UNKNOWN)
+                               {
+                                       if(new_archivetype == 
LXA_ARCHIVETYPE_TAR)
+                                       {
+                                               if(new_compressiontype == 
LXA_COMPRESSIONTYPE_GZIP)
+                                               {
+                                                       
if(!g_str_has_suffix(add_archive_path, ".tgz") && 
!g_str_has_suffix(add_archive_path, ".tar.gz"))
+                                                       {
+                                                               temp_path = 
g_strconcat(add_archive_path, ".tar.gz",  NULL);
+                                                               
g_free(add_archive_path);
+                                                               
add_archive_path = temp_path;
+                                                       }
+                                                       g_debug("TAR.GZ\n");
+                                               }
+                                               if(new_compressiontype == 
LXA_COMPRESSIONTYPE_BZIP2)
+                                               {
+                                                       
if(!g_str_has_suffix(add_archive_path, ".tbz") && 
!g_str_has_suffix(add_archive_path, ".tar.bz") && 
!g_str_has_suffix(add_archive_path, ".tar.bz2"))
+                                                       {
+                                                               temp_path = 
g_strconcat(add_archive_path, ".tar.bz2",  NULL);
+                                                               
g_free(add_archive_path);
+                                                               
add_archive_path = temp_path;
+                                                       }
+                                                       g_debug("TAR.BZ2\n");
+                                               }
+                                               if(new_compressiontype == 
LXA_COMPRESSIONTYPE_NONE)
+                                               {
+                                                       
if(!g_str_has_suffix(add_archive_path, ".tar"))
+                                                       {
+                                                               temp_path = 
g_strconcat(add_archive_path, ".tar",  NULL);
+                                                               
g_free(add_archive_path);
+                                                               
add_archive_path = temp_path;
+                                                       }
+                                                       g_debug("TAR\n");
+                                               }
+                                       }
+                                       if(!lxa_new_archive(add_archive_path, 
new_archivetype, new_compressiontype, TRUE, &xa_archive, 
G_CALLBACK(archive_initialized)))
+                                       {
+                                               
g_signal_connect(G_OBJECT(xa_archive), "lxa_status_changed", 
G_CALLBACK(archive_status_changed), NULL);
+                                               
g_signal_connect(G_OBJECT(xa_archive), "lxa_init_complete", 
G_CALLBACK(archive_initialized), NULL);
+                                               
g_signal_connect(G_OBJECT(xa_archive), "lxa_operation_failure",  
G_CALLBACK(archive_operation_failed), NULL);
+                                               opened_archives++;
+                                       }
+                               }
+                               else
+                               {
+                                       gtk_widget_destroy (GTK_WIDGET (dialog) 
);
+                                       dialog = gtk_message_dialog_new 
(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Archive type 
unknown\n"));
+                                       gtk_dialog_set_default_response 
(GTK_DIALOG (dialog), GTK_RESPONSE_YES);
+                                       gtk_dialog_run (GTK_DIALOG (dialog) );
+                               }
                        }
+                       gtk_widget_destroy (GTK_WIDGET (dialog) );
                }
        }
 
-       if(!add_archive && !extract_archive && !extract_archive_path && 
!add_archive_path)
+       if(!new_archive && !extract_archive && !extract_archive_path && 
!add_archive_path)
                return 0;
 
        gtk_main();

Modified: xarchiver/branches/xarchiver-psybsd/src/new_dialog.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/new_dialog.c        2006-07-28 
12:23:49 UTC (rev 22547)
+++ xarchiver/branches/xarchiver-psybsd/src/new_dialog.c        2006-07-28 
12:59:33 UTC (rev 22548)
@@ -18,7 +18,9 @@
 
 #include <config.h>
 #include <gettext.h>
+#include <glib.h>
 #include <gtk/gtk.h>
+#include <libxarchiver/libxarchiver.h>
 #include "new_dialog.h"
 
 static void
@@ -64,10 +66,74 @@
 static void
 xa_new_archive_dialog_init(XANewArchiveDialog *dialog)
 {
+       GtkTreeIter iter;
+       GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
+       GValue *str_value = g_new0(GValue, 1);
+       GValue *at_value = g_new0(GValue, 1);
+       GValue *ct_value = g_new0(GValue, 1);
+
        GtkWidget *hbox = gtk_hbox_new(FALSE, 10);
        gtk_box_pack_start (GTK_BOX (hbox),gtk_label_new (_("Archive 
type:")),FALSE, FALSE, 0);
-       dialog->filetype_selector = gtk_combo_box_new_text();
-       gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->filetype_selector), 
_("Automatic"));
+       dialog->filetype_model = gtk_list_store_new(3, G_TYPE_STRING, 
G_TYPE_UINT, G_TYPE_UINT);
+       dialog->filetype_selector = 
gtk_combo_box_new_with_model(GTK_TREE_MODEL(dialog->filetype_model));
+       gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dialog->filetype_selector), 
renderer, FALSE);
+       
gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(dialog->filetype_selector), 
renderer, "text", 0);
+
+       str_value = g_value_init(str_value, G_TYPE_STRING);
+       at_value = g_value_init(at_value, G_TYPE_UINT);
+       ct_value = g_value_init(ct_value, G_TYPE_UINT);
+
+       gtk_list_store_append(dialog->filetype_model, &iter);
+
+       g_value_set_string(str_value, _("Automatic"));
+       gtk_list_store_set_value(dialog->filetype_model, &iter, 0, str_value);
+       g_value_set_uint(at_value, LXA_ARCHIVETYPE_UNKNOWN);
+       g_value_set_uint(ct_value, LXA_COMPRESSIONTYPE_UNKNOWN);
+       gtk_list_store_set_value(dialog->filetype_model, &iter, 1, at_value);
+       gtk_list_store_set_value(dialog->filetype_model, &iter, 2, ct_value);
+
+       if(lxa_archivetype_supported(LXA_ARCHIVETYPE_TAR))
+       {
+               gtk_list_store_append(dialog->filetype_model, &iter);
+               g_value_set_string(str_value, _("Tar (uncompressed) '.tar'"));
+               gtk_list_store_set_value(dialog->filetype_model, &iter, 0, 
str_value);
+
+               g_value_set_uint(at_value, LXA_ARCHIVETYPE_TAR);
+               g_value_set_uint(ct_value, LXA_COMPRESSIONTYPE_NONE);
+               gtk_list_store_set_value(dialog->filetype_model, &iter, 1, 
at_value);
+               gtk_list_store_set_value(dialog->filetype_model, &iter, 2, 
ct_value);
+               if(lxa_compressiontype_supported(LXA_COMPRESSIONTYPE_GZIP))
+               {
+                       gtk_list_store_append(dialog->filetype_model, &iter);
+                       g_value_set_string(str_value, _("Gzip compressed Tar 
'.tar.gz'"));
+                       gtk_list_store_set_value(dialog->filetype_model, &iter, 
0, str_value);
+                       g_value_set_uint(at_value, LXA_ARCHIVETYPE_TAR);
+                       g_value_set_uint(ct_value, LXA_COMPRESSIONTYPE_GZIP);
+                       gtk_list_store_set_value(dialog->filetype_model, &iter, 
1, at_value);
+                       gtk_list_store_set_value(dialog->filetype_model, &iter, 
2, ct_value);
+               }
+               if(lxa_compressiontype_supported(LXA_COMPRESSIONTYPE_BZIP2))
+               {
+                       gtk_list_store_append(dialog->filetype_model, &iter);
+                       g_value_set_string(str_value, _("Bzip2 compressed Tar 
'.tar.bz2'"));
+                       gtk_list_store_set_value(dialog->filetype_model, &iter, 
0, str_value);
+                       g_value_set_uint(at_value, LXA_ARCHIVETYPE_TAR);
+                       g_value_set_uint(ct_value, LXA_COMPRESSIONTYPE_BZIP2);
+                       gtk_list_store_set_value(dialog->filetype_model, &iter, 
1, at_value);
+                       gtk_list_store_set_value(dialog->filetype_model, &iter, 
2, ct_value);
+               }
+       }
+       if(lxa_archivetype_supported(LXA_ARCHIVETYPE_ZIP))
+       {
+               gtk_list_store_append(dialog->filetype_model, &iter);
+               g_value_set_string(str_value, _("Zip archive '.zip'"));
+               gtk_list_store_set_value(dialog->filetype_model, &iter, 0, 
str_value);
+               g_value_set_uint(at_value, LXA_ARCHIVETYPE_ZIP);
+               g_value_set_uint(ct_value, LXA_COMPRESSIONTYPE_NONE);
+               gtk_list_store_set_value(dialog->filetype_model, &iter, 1, 
at_value);
+               gtk_list_store_set_value(dialog->filetype_model, &iter, 2, 
ct_value);
+       }
+
        gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->filetype_selector), 0);
        gtk_box_pack_start (GTK_BOX (hbox), dialog->filetype_selector,TRUE , 
TRUE, 0);
        
@@ -77,12 +143,73 @@
                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                        GTK_STOCK_NEW, GTK_RESPONSE_OK,
                        NULL);
+       g_free(str_value);
+       g_free(at_value);
+       g_free(ct_value);
 }
 
 GtkWidget *
 xa_new_archive_dialog_new()
 {
        GtkWidget *dialog;
-       dialog = g_object_new(xa_new_archive_dialog_get_type(), "title", 
_("Create new archive"), "action", GTK_FILE_CHOOSER_ACTION_SAVE, NULL);
+       GtkFileFilter *filter = NULL;
+
+       dialog = g_object_new(xa_new_archive_dialog_get_type(), "title", 
_("Create new archive"), "action", GTK_FILE_CHOOSER_ACTION_SAVE, 
"do-overwrite-confirmation", TRUE, NULL);
+
+       if(lxa_archivetype_supported(LXA_ARCHIVETYPE_TAR))
+       {
+               filter = gtk_file_filter_new();
+               gtk_file_filter_add_mime_type(filter, "application/x-tar");
+               gtk_file_filter_set_name(filter, _("Tar (uncompressed) 
'.tar'"));
+               gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
+               if(lxa_compressiontype_supported(LXA_COMPRESSIONTYPE_GZIP))
+               {
+                       filter = gtk_file_filter_new();
+                       gtk_file_filter_add_mime_type(filter, 
"application/x-compressed-tar");
+                       gtk_file_filter_set_name(filter, _("Gzip compressed Tar 
'.tar.gz'"));
+                       gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), 
filter);
+               }
+               if(lxa_compressiontype_supported(LXA_COMPRESSIONTYPE_BZIP2))
+               {
+                       filter = gtk_file_filter_new();
+                       gtk_file_filter_add_mime_type(filter, 
"application/x-bzip-compressed-tar");
+                       gtk_file_filter_set_name(filter, _("Bzip2 compressed 
Tar '.tar.bz2'"));
+                       gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), 
filter);
+               }
+       }
+       if(lxa_archivetype_supported(LXA_ARCHIVETYPE_ZIP))
+       {
+               filter = gtk_file_filter_new();
+               gtk_file_filter_add_mime_type(filter, "application/x-zip");
+               gtk_file_filter_add_mime_type(filter, "application/zip");
+               gtk_file_filter_set_name(filter, _("Zip archive '.zip'"));
+               gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
+       }
+               
        return dialog;
 }
+
+LXAArchiveType
+xa_new_archive_dialog_get_archive_type (XANewArchiveDialog *dialog)
+{
+       GtkTreeIter iter;
+       GValue *at_value = g_new0(GValue, 1);
+       LXAArchiveType type;
+       gtk_combo_box_get_active_iter(GTK_COMBO_BOX(dialog->filetype_selector), 
&iter);
+       gtk_tree_model_get_value(GTK_TREE_MODEL(dialog->filetype_model), &iter, 
1, at_value);
+       type = g_value_get_uint(at_value);
+       g_free(at_value);
+       return type; }
+
+LXACompressionType
+xa_new_archive_dialog_get_compression_type (XANewArchiveDialog *dialog)
+{
+       GtkTreeIter iter;
+       GValue *ct_value = g_new0(GValue, 1); 
+       LXACompressionType type;
+       gtk_combo_box_get_active_iter(GTK_COMBO_BOX(dialog->filetype_selector), 
&iter);
+       gtk_tree_model_get_value(GTK_TREE_MODEL(dialog->filetype_model), &iter, 
2, ct_value);
+       type = g_value_get_uint(ct_value);
+       g_free(ct_value);
+       return type;
+}

Modified: xarchiver/branches/xarchiver-psybsd/src/new_dialog.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/new_dialog.h        2006-07-28 
12:23:49 UTC (rev 22547)
+++ xarchiver/branches/xarchiver-psybsd/src/new_dialog.h        2006-07-28 
12:59:33 UTC (rev 22548)
@@ -42,18 +42,24 @@
 
 struct _XANewArchiveDialog
 {
-       GtkFileChooserDialog parent;
+       GtkFileSelection parent;
        GtkWidget *filetype_selector;
+       GtkListStore *filetype_model;
+       GSList *archivetype_list;
+       GSList *compressiontype_list;
 };
 
 typedef struct _XANewArchiveDialogClass XANewArchiveDialogClass;
 
 struct _XANewArchiveDialogClass
 {
-       GtkFileChooserDialogClass parent;
+       GtkFileSelectionClass parent;
 };
 
 GtkWidget *xa_new_archive_dialog_new();
 
+LXAArchiveType     xa_new_archive_dialog_get_archive_type (XANewArchiveDialog 
*);
+LXACompressionType xa_new_archive_dialog_get_compression_type 
(XANewArchiveDialog *);
+
 G_END_DECLS
 #endif /* __XARCHIVER_NEW_ARCHIVE_DIALOG_H__ */

Modified: xarchiver/branches/xarchiver-psybsd/xarchiver.desktop.in
===================================================================
--- xarchiver/branches/xarchiver-psybsd/xarchiver.desktop.in    2006-07-28 
12:23:49 UTC (rev 22547)
+++ xarchiver/branches/xarchiver-psybsd/xarchiver.desktop.in    2006-07-28 
12:59:33 UTC (rev 22548)
@@ -11,4 +11,4 @@
 X-MultipleArgs=false
 Categories=GTK;Application;Utility;
 StartupNotify=true
-MimeType=application/x-gzip;application/x-bzip;application/x-bzip-compressed-tar;application/x-tar;application/x-compressed-tar;
+MimeType=application/x-gzip;application/x-bzip;application/x-bzip-compressed-tar;application/x-tar;application/x-compressed-tar;application/x-zip;application/zip;

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to