[Xfce4-commits] r23137 - in xarchiver/branches/xarchiver-psybsd: . libxarchiver src tests

Stephan Arts stephan at xfce.org
Wed Sep 13 10:32:08 UTC 2006


Author: stephan
Date: 2006-09-13 10:32:07 +0000 (Wed, 13 Sep 2006)
New Revision: 23137

Modified:
   xarchiver/branches/xarchiver-psybsd/TODO
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.h
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h
   xarchiver/branches/xarchiver-psybsd/src/main_window.c
   xarchiver/branches/xarchiver-psybsd/src/main_window.h
   xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.c
   xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.c
   xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.h
   xarchiver/branches/xarchiver-psybsd/tests/gnu_tar_main.c
Log:
Added refresh and view.
Changed UI-code (uses less mem)



Modified: xarchiver/branches/xarchiver-psybsd/TODO
===================================================================
--- xarchiver/branches/xarchiver-psybsd/TODO	2006-09-13 10:14:21 UTC (rev 23136)
+++ xarchiver/branches/xarchiver-psybsd/TODO	2006-09-13 10:32:07 UTC (rev 23137)
@@ -9,7 +9,10 @@
 ---------------------------------------------------------------
 
 +-+-+-+
+  Speedup GUI
 
++-+-+-+
+
 	Implement View support (for all support-objects)
 		Use Path-entries for path-components. (Should reduce mem-usage on large archives tremendously)
 +-+-+-+

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c	2006-09-13 10:14:21 UTC (rev 23136)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c	2006-09-13 10:32:07 UTC (rev 23137)
@@ -320,9 +320,10 @@
 	return 0;
 }
 
-gint
+GSList *
 lxa_archive_support_gnu_tar_view(LXAArchive *archive, gchar *path)
 {
+	
 }
 
 gint
@@ -340,7 +341,9 @@
 	}
 	else
 	{
-		gchar *command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " tfv " , archive->path, NULL);
+		//empty archive-tree
+		/* use tvf once implementation of path recognition is stable */
+		gchar *command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " tf " , archive->path, NULL);
 		lxa_execute(command, archive, NULL, NULL, lxa_archive_support_gnu_tar_refresh_parse_output, NULL);
 		g_free(command);
 	}
@@ -377,9 +380,14 @@
 	FILE *out_file = NULL;
 	LXAArchive *archive = data;
 	gchar *line	= NULL;
+	gchar **line_items = NULL;
 	guint read = 0;
 	GError *error = NULL;
 	gchar *command = NULL;
+	GSList *tmp_list = NULL;
+	GSList *parent_list = NULL;
+	gint i = 0, n = 0;
+	LXAEntry *entry;
 
 	if(cond & (G_IO_PRI | G_IO_IN))
 	{
@@ -388,8 +396,8 @@
 			status = g_io_channel_read_line(ioc, &line, NULL,NULL,NULL);
 			if (line == NULL)
  				break;
-			g_print(".");
-			g_free(line);
+			entry = lxa_archive_add_file(archive, line);
+			/* TODO: Add data */
 		}
 	}
 	if(cond & (G_IO_ERR | G_IO_HUP | G_IO_NVAL) )

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h	2006-09-13 10:14:21 UTC (rev 23136)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h	2006-09-13 10:32:07 UTC (rev 23137)
@@ -66,7 +66,7 @@
 gint                 lxa_archive_support_gnu_tar_extract(LXAArchive *, gchar *, GSList *);
 gint                 lxa_archive_support_gnu_tar_remove(LXAArchive *, GSList *);
 gint                 lxa_archive_support_gnu_tar_refresh(LXAArchive *);
-gint                 lxa_archive_support_gnu_tar_view(LXAArchive *, gchar *);
+GSList              *lxa_archive_support_gnu_tar_view(LXAArchive *, gchar *);
 G_END_DECLS
 
 #endif /* __LIBXARCHIVER_ARCHIVE_SUPPORT_GNU_TAR_H__ */

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c	2006-09-13 10:14:21 UTC (rev 23136)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c	2006-09-13 10:32:07 UTC (rev 23137)
@@ -232,7 +232,7 @@
 	return -1;
 }
 
-gint
+GSList *
 lxa_archive_support_view(LXAArchiveSupport *support, LXAArchive *archive, gchar *path)
 {
 	if(support->view)
@@ -243,7 +243,7 @@
 	}
 	else
 		g_critical("VIEW NOT IMPLEMENTED BY SUPPORT OBJECT '%s'", support->id);
-	return -1;
+	return NULL;
 }
 
 GSList *

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.h	2006-09-13 10:14:21 UTC (rev 23136)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.h	2006-09-13 10:32:07 UTC (rev 23137)
@@ -61,7 +61,7 @@
 	gint        (*extract)(LXAArchive *archive, gchar *dest_path, GSList *files);
 	gint        (*remove)(LXAArchive *archive, GSList *files);
 	gint        (*refresh)(LXAArchive *archive);
-	gint        (*view)(LXAArchive *archive, gchar *path);
+	GSList     *(*view)(LXAArchive *archive, gchar *path);
 };
 
 typedef struct _LXAArchiveSupportClass LXAArchiveSupportClass;
@@ -87,7 +87,7 @@
 gint                 lxa_archive_support_extract(LXAArchiveSupport *, LXAArchive *, gchar *, GSList *);
 gint                 lxa_archive_support_remove(LXAArchiveSupport *, LXAArchive *, GSList *);
 gint                 lxa_archive_support_refresh(LXAArchiveSupport *, LXAArchive *);
-gint                 lxa_archive_support_view(LXAArchiveSupport *, LXAArchive *, gchar *);
+GSList              *lxa_archive_support_view(LXAArchiveSupport *, LXAArchive *, gchar *);
 
 GSList *             lxa_archive_support_list_properties(LXAArchiveSupport *, gchar *);
 

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c	2006-09-13 10:14:21 UTC (rev 23136)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c	2006-09-13 10:32:07 UTC (rev 23137)
@@ -18,6 +18,7 @@
 
 #define EXO_API_SUBJECT_TO_CHANGE
 
+#include <string.h>
 #include <glib.h>
 #include <glib/gstdio.h>
 #include <glib-object.h> 
@@ -137,3 +138,65 @@
 		g_signal_emit(G_OBJECT(archive), lxa_archive_signals[0], 0, archive);
 	}
 }
+
+gint
+lxa_archive_lookup_dir(gpointer entry, gconstpointer filename)
+{
+	return strcmp(((LXAEntry *)entry)->filename, filename);
+}
+
+/* 
+ * LXAEntry *
+ * lxa_archive_add_file(LXAArchive *archive, gchar *path);
+ *
+ * Add a file to the archive-tree or return
+ */
+LXAEntry *
+lxa_archive_add_file(LXAArchive *archive, gchar *path)
+{
+	gint i = 0;
+	GSList *tmp_list;
+	GSList *tmp_list_children;
+	gchar **path_items;
+	LXAEntry *tmp_entry;
+	path_items = g_strsplit_set(path, "/\n", -1);
+	tmp_list = g_slist_find_custom(archive->root_entries, path_items[0], (GCompareFunc)lxa_archive_lookup_dir);
+	if(!tmp_list)
+	{
+		tmp_entry = g_new0(LXAEntry, 1);
+		tmp_entry->filename = g_strdup(path_items[0]);
+		archive->root_entries = g_slist_prepend(archive->root_entries, tmp_entry);
+		tmp_list = archive->root_entries;
+	}
+	for(i = 1; path_items[i]?strlen(path_items[i]):0;i++)
+	{
+		tmp_list_children = g_slist_find_custom(((LXAEntry *)tmp_list->data)->children, path_items[i], (GCompareFunc)lxa_archive_lookup_dir);
+		if(!tmp_list_children)
+		{
+			tmp_entry = g_new0(LXAEntry, 1);
+			tmp_entry->filename = g_strdup(path_items[i]);
+			((LXAEntry *)tmp_list->data)->children = g_slist_prepend(((LXAEntry *)tmp_list->data)->children, tmp_entry);
+			tmp_list_children = ((LXAEntry *)tmp_list->data)->children;
+		}
+		tmp_list = tmp_list_children;
+	}
+	g_strfreev(path_items);
+	return tmp_entry;
+}
+
+GSList *
+lxa_archive_get_children(LXAArchive *archive, gchar *path)
+{
+	gint i;
+	GSList *tmp_list = archive->root_entries;
+	gchar **path_items = g_strsplit_set(path, "/\n", -1);
+	for(i = 0; path_items[i]?strlen(path_items[i]):0; i++)
+	{
+		tmp_list = g_slist_find_custom(tmp_list, path_items[i], (GCompareFunc)lxa_archive_lookup_dir);
+		if(!tmp_list)
+			break;
+		tmp_list = ((LXAEntry *)tmp_list->data)->children;
+	}
+	g_strfreev(path_items);
+	return tmp_list;
+}

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h	2006-09-13 10:14:21 UTC (rev 23136)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h	2006-09-13 10:32:07 UTC (rev 23137)
@@ -32,7 +32,12 @@
 	LXA_ARCHIVESTATUS_USERBREAK
 } LXAArchiveStatus;
 
+typedef struct {
+	gchar *filename;
+	GSList *children;
+} LXAEntry;
 
+
 #define LXA_ARCHIVE(obj)         ( \
 		G_TYPE_CHECK_INSTANCE_CAST ((obj),    \
 			lxa_archive_get_type(),      \
@@ -64,6 +69,7 @@
 	LXAArchiveStatus    old_status;
 	GPid                child_pid;
 	gpointer            support;
+	GSList             *root_entries;
 	gchar              *tmp_file;
 	gchar              *files;
 	gboolean            has_passwd;
@@ -81,7 +87,11 @@
 
 gchar             *lxa_archive_discover_mime(LXAArchive *archive);
 void               lxa_archive_set_status(LXAArchive *archive, LXAArchiveStatus status);
+gint               lxa_archive_lookup_dir(gpointer entry, gconstpointer filename);
+LXAEntry          *lxa_archive_add_file(LXAArchive *archive, gchar *path);
+GSList            *lxa_archive_get_children(LXAArchive *archive, gchar *path);
 
+
 G_END_DECLS
 
 #endif /* __LIBXARCHIVER_ARCHIVE_H__ */

Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.c	2006-09-13 10:14:21 UTC (rev 23136)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.c	2006-09-13 10:32:07 UTC (rev 23137)
@@ -20,9 +20,6 @@
 #include <glib.h>
 #include <gtk/gtk.h>
 #include <libxarchiver/libxarchiver.h>
-#include "main_window_menu_bar.h"
-#include "main_window_tool_bar.h"
-#include "main_window_status_bar.h"
 #include "main_window.h"
 #include "new_dialog.h"
 
@@ -68,22 +65,124 @@
 static void
 xa_main_window_init(XAMainWindow *window)
 {
+	GtkWidget     *main_vbox;
+	GtkWidget     *menubar, *toolbar, *statusbar;
+	GtkWidget     *menu_separator;
+	GtkToolItem   *tool_separator;
+	GtkWidget     *tmp_image;
+	GtkAccelGroup *accel_group = gtk_accel_group_new();
+
 	gtk_window_set_default_icon_from_file(DATADIR "/pixmaps/xarchiver.png", NULL);
-	window->main_vbox = gtk_vbox_new(FALSE, 0);
-	window->menubar = xa_main_window_menu_bar_new();
-	window->toolbar = xa_main_window_tool_bar_new();
-	window->statusbar = xa_main_window_status_bar_new();
+	main_vbox = gtk_vbox_new(FALSE, 0);
 
-	gtk_box_pack_start(GTK_BOX(window->main_vbox), window->menubar, 0, FALSE, FALSE);
-	gtk_box_pack_start(GTK_BOX(window->main_vbox), window->toolbar, 0, FALSE, FALSE);
-	gtk_box_pack_end(GTK_BOX(window->main_vbox), window->statusbar, 0, FALSE, FALSE);
+	menubar = gtk_menu_bar_new();
+	toolbar = gtk_toolbar_new();
 
-	gtk_widget_show(window->main_vbox);
-	gtk_widget_show_all(window->menubar);
-	gtk_widget_show_all(window->toolbar);
-	gtk_widget_show_all(window->statusbar);
+	window->menubar.menu_item_archive = gtk_menu_item_new_with_mnemonic(_("_Archive"));
+	window->menubar.menu_item_action = gtk_menu_item_new_with_mnemonic(_("A_ction"));
+	window->menubar.menu_item_help = gtk_menu_item_new_with_mnemonic(_("_Help"));
 
-	gtk_container_add(GTK_CONTAINER(window), window->main_vbox);
+	gtk_container_add(GTK_CONTAINER(menubar), window->menubar.menu_item_archive);
+	gtk_container_add(GTK_CONTAINER(menubar), window->menubar.menu_item_action);
+	gtk_container_add(GTK_CONTAINER(menubar), window->menubar.menu_item_help);
+
+	window->menubar.menu_archive = gtk_menu_new();
+	window->menubar.menu_action = gtk_menu_new();
+	window->menubar.menu_help = gtk_menu_new();
+
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(window->menubar.menu_item_archive), window->menubar.menu_archive);
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(window->menubar.menu_item_action), window->menubar.menu_action);
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(window->menubar.menu_item_help), window->menubar.menu_help);
+
+/* Archive menu */
+	window->menubar.menu_item_new = gtk_image_menu_item_new_from_stock("gtk-new", accel_group);
+	gtk_container_add(GTK_CONTAINER(window->menubar.menu_archive), window->menubar.menu_item_new);
+
+	window->menubar.menu_item_open = gtk_image_menu_item_new_from_stock("gtk-open", accel_group);
+	gtk_container_add(GTK_CONTAINER(window->menubar.menu_archive), window->menubar.menu_item_open);
+
+	menu_separator = gtk_separator_menu_item_new();
+	gtk_container_add(GTK_CONTAINER(window->menubar.menu_archive), menu_separator);
+
+	window->menubar.menu_item_properties = gtk_image_menu_item_new_from_stock("gtk-properties", accel_group);
+	gtk_container_add(GTK_CONTAINER(window->menubar.menu_archive), window->menubar.menu_item_properties);
+
+	menu_separator = gtk_separator_menu_item_new();
+	gtk_container_add(GTK_CONTAINER(window->menubar.menu_archive), menu_separator);
+
+	window->menubar.menu_item_quit = gtk_image_menu_item_new_from_stock("gtk-quit", accel_group);
+	gtk_container_add(GTK_CONTAINER(window->menubar.menu_archive), window->menubar.menu_item_quit);
+
+	g_signal_connect(G_OBJECT(window->menubar.menu_item_new), "activate", G_CALLBACK(cb_xa_main_new_archive), window);
+	g_signal_connect(G_OBJECT(window->menubar.menu_item_open), "activate", G_CALLBACK(cb_xa_main_open_archive), window);
+	/* g_signal_connect(G_OBJECT(window->menubar.menu_item_properties), "activate", NULL, NULL);*/
+	g_signal_connect(G_OBJECT(window->menubar.menu_item_quit), "activate", G_CALLBACK(gtk_main_quit), window);
+
+/* Action menu */
+	tmp_image = xa_main_window_find_image("add_button.png", GTK_ICON_SIZE_MENU);
+	window->menubar.menu_item_add = gtk_image_menu_item_new_with_mnemonic(_("Add"));
+	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (window->menubar.menu_item_add), tmp_image);
+	gtk_container_add(GTK_CONTAINER(window->menubar.menu_action), window->menubar.menu_item_add);
+
+	tmp_image = xa_main_window_find_image("extract_button.png", GTK_ICON_SIZE_MENU);
+	window->menubar.menu_item_extract = gtk_image_menu_item_new_with_mnemonic(_("Extract"));
+	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (window->menubar.menu_item_extract), tmp_image);
+	gtk_container_add(GTK_CONTAINER(window->menubar.menu_action), window->menubar.menu_item_extract);
+
+	window->menubar.menu_item_remove = gtk_image_menu_item_new_from_stock("gtk-delete", accel_group);
+	gtk_container_add(GTK_CONTAINER(window->menubar.menu_action), window->menubar.menu_item_remove);
+
+	menu_separator = gtk_separator_menu_item_new();
+	gtk_container_add(GTK_CONTAINER(window->menubar.menu_action), menu_separator);
+
+	window->menubar.menu_item_settings = gtk_image_menu_item_new_from_stock("gtk-preferences", accel_group);
+	gtk_container_add(GTK_CONTAINER(window->menubar.menu_action), window->menubar.menu_item_settings);
+
+/* Help menu */
+	window->menubar.menu_item_about = gtk_image_menu_item_new_from_stock("gtk-about", accel_group);
+	gtk_container_add(GTK_CONTAINER(window->menubar.menu_help), window->menubar.menu_item_about);
+
+/* Archive pane */
+	window->toolbar.tool_item_new = gtk_tool_button_new_from_stock("gtk-new");
+	window->toolbar.tool_item_open = gtk_tool_button_new_from_stock("gtk-open");
+	tool_separator = gtk_separator_tool_item_new ();
+
+	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(window->toolbar.tool_item_new));
+	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(window->toolbar.tool_item_open));
+	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(tool_separator));
+
+	g_signal_connect(G_OBJECT(window->toolbar.tool_item_new), "clicked", G_CALLBACK(cb_xa_main_new_archive), window);
+	g_signal_connect(G_OBJECT(window->toolbar.tool_item_open), "clicked", G_CALLBACK(cb_xa_main_open_archive), window);
+
+/* Action pane */
+	tmp_image = xa_main_window_find_image("add.png", GTK_ICON_SIZE_LARGE_TOOLBAR);
+	window->toolbar.tool_item_add = gtk_tool_button_new(tmp_image, _("Add"));
+	gtk_widget_set_sensitive(GTK_WIDGET(window->toolbar.tool_item_add), FALSE);
+
+	tmp_image = xa_main_window_find_image("extract.png", GTK_ICON_SIZE_LARGE_TOOLBAR);
+	window->toolbar.tool_item_extract = gtk_tool_button_new(tmp_image, _("Extract"));
+	gtk_widget_set_sensitive(GTK_WIDGET(window->toolbar.tool_item_extract), FALSE);
+
+	window->toolbar.tool_item_remove = gtk_tool_button_new_from_stock("gtk-delete");
+	gtk_widget_set_sensitive(GTK_WIDGET(window->toolbar.tool_item_remove), FALSE);
+
+	tool_separator = gtk_separator_tool_item_new ();
+
+	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(window->toolbar.tool_item_add));
+	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(window->toolbar.tool_item_extract));
+	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(window->toolbar.tool_item_remove));
+	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(tool_separator));
+
+	gtk_box_pack_start(GTK_BOX(main_vbox), menubar, 0, FALSE, FALSE);
+	gtk_box_pack_start(GTK_BOX(main_vbox), toolbar, 0, FALSE, FALSE);
+	//gtk_box_pack_end(GTK_BOX(main_vbox), statusbar, 0, FALSE, FALSE);
+
+	gtk_widget_show(main_vbox);
+	gtk_widget_show_all(menubar);
+	gtk_widget_show_all(toolbar);
+	//gtk_widget_show_all(statusbar);
+
+	gtk_container_add(GTK_CONTAINER(window), main_vbox);
 }
 
 GtkWidget *
@@ -166,9 +265,11 @@
 	GtkWidget *dialog = NULL;
 	gchar *open_archive_path = NULL;
 	gint result = 0;
+	LXAArchiveSupport *lpSupport;
+	XAMainWindow *parent_window = XA_MAIN_WINDOW(userdata);
 	
 	dialog = gtk_file_chooser_dialog_new(_("Open archive"), 
-	                                     GTK_WINDOW(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)),
+	                                     GTK_WINDOW(parent_window),
 																			 GTK_FILE_CHOOSER_ACTION_OPEN,
 																			 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 																			 GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL);
@@ -189,8 +290,43 @@
 		if(!lxa_open_archive(open_archive_path, &lp_xa_archive))
 		{
 			g_debug("Archive opened");
+			gtk_widget_set_sensitive(GTK_WIDGET(parent_window->toolbar.tool_item_add), TRUE);
+			gtk_widget_set_sensitive(GTK_WIDGET(parent_window->toolbar.tool_item_remove), TRUE);
+			gtk_widget_set_sensitive(GTK_WIDGET(parent_window->toolbar.tool_item_extract), TRUE);
+			g_signal_connect(G_OBJECT(lp_xa_archive), "lxa_status_changed", G_CALLBACK(xa_main_window_archive_status_changed), parent_window);
+			lpSupport = lxa_get_support_for_mime(lp_xa_archive->mime);
+			lxa_archive_support_refresh(lpSupport, lp_xa_archive);
 		}
+
 		gtk_widget_destroy (GTK_WIDGET (dialog) );
 	}
 
 }
+
+/*
+ *
+ *
+ */
+void
+xa_main_window_archive_status_changed(LXAArchive *archive, gpointer data)
+{
+	XAMainWindow *main_window = data;
+	if(archive->old_status == LXA_ARCHIVESTATUS_REFRESH)
+	{
+		LXAArchiveSupport *lpSupport = lxa_get_support_for_mime(archive->mime);
+		GSList *items = lxa_archive_support_view(lpSupport, archive, "/");
+		xa_main_window_set_contents(main_window, items, "/");
+	}
+}
+
+void
+cb_xa_main_extract_archive(GtkWidget *widget, gpointer userdata)
+{
+
+}
+
+void 
+xa_main_window_set_contents(XAMainWindow *main_window, GSList *items, gchar *path)
+{
+
+}

Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.h	2006-09-13 10:14:21 UTC (rev 23136)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.h	2006-09-13 10:32:07 UTC (rev 23137)
@@ -20,34 +20,72 @@
 #define __XARCHIVER_MAIN_WINDOW_H__
 G_BEGIN_DECLS
 
+typedef enum {
+	XA_MAIN_WINDOW_STATUS_NONE,
+	XA_MAIN_WINDOW_STATUS_IDLE,
+	XA_MAIN_WINDOW_STATUS_BUSY
+}XAMainWindowStatus;
+
+#define XA_TYPE_MAIN_WINDOW xa_main_window_get_type()
+
 #define XA_MAIN_WINDOW(obj)         ( \
 		G_TYPE_CHECK_INSTANCE_CAST ((obj),    \
-			xa_main_window_get_type(),      \
+			XA_TYPE_MAIN_WINDOW,      \
 			XAMainWindow))
 
 #define XA_IS_MAIN_WINDOW(obj)      ( \
 		G_TYPE_CHECK_INSTANCE_TYPE ((obj),    \
-			xa_main_window_get_type()))
+			XA_TYPE_MAIN_WINDOW))
 
 #define XA_MAIN_WINDOW_CLASS(class) ( \
 		G_TYPE_CHECK_CLASS_CAST ((class),     \
-			xa_main_window_get_type(),      \
+			XA_TYPE_MAIN_WINDOW,      \
 			XAMainWindowClass))
 
 #define XA_IS_MAIN_WINDOW_CLASS(class) ( \
 		G_TYPE_CHECK_CLASS_TYPE ((class),        \
-			xa_main_window_get_type()))
+			XA_TYPE_MAIN_WINDOW))
 
 typedef struct _XAMainWindow XAMainWindow;
 
 struct _XAMainWindow
 {
 	GtkWindow parent;
-	GtkWidget *main_vbox;
-	GtkWidget *menubar;
-	GtkWidget *toolbar;
-	GtkWidget *statusbar;
-	LXAArchive *archive;
+	struct {
+		GtkWidget *menu_item_archive;
+		GtkWidget *menu_archive;
+		/* contents of 'archive' menu */
+		GtkWidget *menu_item_new;
+		GtkWidget *menu_item_open;
+		GtkWidget *menu_item_properties;
+		GtkWidget *menu_item_quit;
+
+		GtkWidget *menu_item_action;
+		GtkWidget *menu_action;
+
+		/* contents of 'action' menu */
+		GtkWidget *menu_item_add;
+		GtkWidget *menu_item_extract;
+		GtkWidget *menu_item_remove;
+		GtkWidget *menu_item_settings;
+
+		GtkWidget *menu_item_help;
+		GtkWidget *menu_help;
+
+		/* contents of 'help' menu */
+		GtkWidget *menu_item_about;
+
+	} menubar;
+	struct {
+		/* contents of 'archive' pane */
+		GtkToolItem *tool_item_new;
+		GtkToolItem *tool_item_open;
+
+		/* contents of 'action' pane */
+		GtkToolItem *tool_item_add;
+		GtkToolItem *tool_item_extract;
+		GtkToolItem *tool_item_remove;
+	} toolbar;
 };
 
 typedef struct _XAMainWindowClass XAMainWindowClass;
@@ -62,6 +100,10 @@
 
 void cb_xa_main_new_archive(GtkWidget *widget, gpointer userdata);
 void cb_xa_main_open_archive(GtkWidget *widget, gpointer userdata);
+void cb_xa_main_extract_archive(GtkWidget *widget, gpointer userdata);
 
+void xa_main_window_archive_status_changed(LXAArchive *archive, gpointer data);
+void xa_main_window_set_contents(XAMainWindow *, GSList *, gchar *);
+
 G_END_DECLS
 #endif /* __XARCHIVER_MAIN_WINDOW_H__ */

Modified: xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.c	2006-09-13 10:14:21 UTC (rev 23136)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.c	2006-09-13 10:32:07 UTC (rev 23137)
@@ -132,6 +132,8 @@
 	menubar->menu_item_settings = gtk_image_menu_item_new_from_stock("gtk-preferences", accel_group);
 	gtk_container_add(GTK_CONTAINER(menubar->menu_action), menubar->menu_item_settings);
 
+	g_signal_connect(G_OBJECT(menubar->menu_item_extract), "activate", G_CALLBACK(cb_xa_main_extract_archive), NULL);
+
 /* Help menu */
 	menubar->menu_item_about = gtk_image_menu_item_new_from_stock("gtk-about", accel_group);
 	gtk_container_add(GTK_CONTAINER(menubar->menu_help), menubar->menu_item_about);

Modified: xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.c	2006-09-13 10:14:21 UTC (rev 23136)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.c	2006-09-13 10:32:07 UTC (rev 23137)
@@ -60,53 +60,79 @@
 }
 
 static void
-xa_main_window_tool_bar_class_init(XAMainWindowToolBarClass *toolbar_class)
+xa_main_window_tool_bar_class_init(XAMainWindowToolBarClass *tool_bar_class)
 {
 }
 
 static void
-xa_main_window_tool_bar_init(XAMainWindowToolBar *toolbar)
+xa_main_window_tool_bar_init(XAMainWindowToolBar *tool_bar)
 {
 	GtkToolItem *separator;
 	GtkWidget *tmp_image;
 	
 	/* contents of 'archive' pane */
-	toolbar->tool_item_new = gtk_tool_button_new_from_stock("gtk-new");
-	toolbar->tool_item_open = gtk_tool_button_new_from_stock("gtk-open");
+	tool_bar->tool_item_new = gtk_tool_button_new_from_stock("gtk-new");
+	tool_bar->tool_item_open = gtk_tool_button_new_from_stock("gtk-open");
 	separator = gtk_separator_tool_item_new ();
 
-	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(toolbar->tool_item_new));
-	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(toolbar->tool_item_open));
+	gtk_container_add(GTK_CONTAINER(tool_bar), GTK_WIDGET(tool_bar->tool_item_new));
+	gtk_container_add(GTK_CONTAINER(tool_bar), GTK_WIDGET(tool_bar->tool_item_open));
 
-	g_signal_connect(G_OBJECT(toolbar->tool_item_new), "clicked", G_CALLBACK(cb_xa_main_new_archive), NULL);
-	g_signal_connect(G_OBJECT(toolbar->tool_item_open), "clicked", G_CALLBACK(cb_xa_main_open_archive), NULL);
+	g_signal_connect(G_OBJECT(tool_bar->tool_item_new), "clicked", G_CALLBACK(cb_xa_main_new_archive), NULL);
+	g_signal_connect(G_OBJECT(tool_bar->tool_item_open), "clicked", G_CALLBACK(cb_xa_main_open_archive), NULL);
 
-	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(separator));
+	gtk_container_add(GTK_CONTAINER(tool_bar), GTK_WIDGET(separator));
 
 	/* contents of 'action' pane */
 	tmp_image = xa_main_window_find_image("add.png", GTK_ICON_SIZE_LARGE_TOOLBAR);
-	toolbar->tool_item_add = gtk_tool_button_new(tmp_image, _("Add"));
+	tool_bar->tool_item_add = gtk_tool_button_new(tmp_image, _("Add"));
+	gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->tool_item_add), FALSE);
 
 	tmp_image = xa_main_window_find_image("extract.png", GTK_ICON_SIZE_LARGE_TOOLBAR);
-	toolbar->tool_item_extract = gtk_tool_button_new(tmp_image, _("Extract"));
+	tool_bar->tool_item_extract = gtk_tool_button_new(tmp_image, _("Extract"));
+	gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->tool_item_extract), FALSE);
 
-	toolbar->tool_item_remove = gtk_tool_button_new_from_stock("gtk-delete");
+	tool_bar->tool_item_remove = gtk_tool_button_new_from_stock("gtk-delete");
+	gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->tool_item_remove), FALSE);
 
+	g_signal_connect(G_OBJECT(tool_bar->tool_item_extract), "clicked", G_CALLBACK(cb_xa_main_extract_archive), NULL);
+
 	separator = gtk_separator_tool_item_new ();
 
-	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(toolbar->tool_item_add));
-	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(toolbar->tool_item_extract));
-	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(toolbar->tool_item_remove));
-	gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(separator));
+	gtk_container_add(GTK_CONTAINER(tool_bar), GTK_WIDGET(tool_bar->tool_item_add));
+	gtk_container_add(GTK_CONTAINER(tool_bar), GTK_WIDGET(tool_bar->tool_item_extract));
+	gtk_container_add(GTK_CONTAINER(tool_bar), GTK_WIDGET(tool_bar->tool_item_remove));
+	gtk_container_add(GTK_CONTAINER(tool_bar), GTK_WIDGET(separator));
 }
 
 GtkWidget *
 xa_main_window_tool_bar_new()
 {
-	XAMainWindowToolBar *toolbar;
+	XAMainWindowToolBar *tool_bar;
 
-	toolbar = g_object_new(xa_main_window_tool_bar_get_type(), NULL);
+	tool_bar = g_object_new(xa_main_window_tool_bar_get_type(), NULL);
 
 
-	return GTK_WIDGET(toolbar);
+	return GTK_WIDGET(tool_bar);
 }
+
+gboolean
+xa_main_window_tool_bar_set_status(XAMainWindowToolBar *toolbar, XAMainWindowStatus status)
+{
+	switch(status)
+	{
+		case(XA_MAIN_WINDOW_STATUS_NONE):
+			gtk_widget_set_sensitive(GTK_WIDGET(toolbar->tool_item_add), FALSE);
+			gtk_widget_set_sensitive(GTK_WIDGET(toolbar->tool_item_extract), FALSE);
+			gtk_widget_set_sensitive(GTK_WIDGET(toolbar->tool_item_remove), FALSE);
+			break;
+		case(XA_MAIN_WINDOW_STATUS_IDLE):
+			gtk_widget_set_sensitive(GTK_WIDGET(toolbar->tool_item_add), TRUE);
+			gtk_widget_set_sensitive(GTK_WIDGET(toolbar->tool_item_extract), TRUE);
+			gtk_widget_set_sensitive(GTK_WIDGET(toolbar->tool_item_remove), TRUE);
+			break;
+		case(XA_MAIN_WINDOW_STATUS_BUSY):
+			break;
+	}
+
+}

Modified: xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.h	2006-09-13 10:14:21 UTC (rev 23136)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.h	2006-09-13 10:32:07 UTC (rev 23137)
@@ -20,23 +20,24 @@
 #define __XARCHIVER_MAIN_WINDOW_TOOLBAR_H__
 G_BEGIN_DECLS
 
+
 #define XA_MAIN_WINDOW_TOOLBAR(obj)         ( \
 		G_TYPE_CHECK_INSTANCE_CAST ((obj),    \
-			xa_main_window_toolbar_get_type(),      \
+			xa_main_window_tool_bar_get_type(),      \
 			XAMainWindowToolBar))
 
 #define XA_IS_MAIN_WINDOW_TOOLBAR(obj)      ( \
 		G_TYPE_CHECK_INSTANCE_TYPE ((obj),    \
-			xa_main_window_toolbar_get_type()))
+			xa_main_window_tool_bar_get_type()))
 
 #define XA_MAIN_WINDOW_TOOLBAR_CLASS(class) ( \
 		G_TYPE_CHECK_CLASS_CAST ((class),     \
-			xa_main_window_toolbar_get_type(),      \
+			xa_main_window_tool_bar_get_type(),      \
 			XAMainWindowToolBarClass))
 
 #define XA_IS_MAIN_WINDOW_TOOLBAR_CLASS(class) ( \
 		G_TYPE_CHECK_CLASS_TYPE ((class),        \
-			xa_main_window_toolbar_get_type()))
+			xa_main_window_tool_bar_get_type()))
 
 typedef struct _XAMainWindowToolBar XAMainWindowToolBar;
 
@@ -63,5 +64,7 @@
 
 GtkWidget *xa_main_window_tool_bar_new();
 
+gboolean xa_main_window_tool_bar_set_status(XAMainWindowToolBar *, XAMainWindowStatus);
+
 G_END_DECLS
 #endif /* __XARCHIVER_MAIN_WINDOW_TOOLBAR_H__ */

Modified: xarchiver/branches/xarchiver-psybsd/tests/gnu_tar_main.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/tests/gnu_tar_main.c	2006-09-13 10:14:21 UTC (rev 23136)
+++ xarchiver/branches/xarchiver-psybsd/tests/gnu_tar_main.c	2006-09-13 10:32:07 UTC (rev 23137)
@@ -23,107 +23,7 @@
 guint max_test = 0;
 guint test = 0;
 
-void
-test_archive_status_changed(LXAArchive *archive, gpointer data)
+int main()
 {
-	switch(archive->status)
-	{
-		case(LXA_ARCHIVESTATUS_IDLE):
-			switch(archive->oldstatus)
-			{
-				case(LXA_ARCHIVESTATUS_ADD):
-					break;
-				case(LXA_ARCHIVESTATUS_REMOVE):
-					break;
-				case(LXA_ARCHIVESTATUS_EXTRACT):
-					break;
-				case(LXA_ARCHIVESTATUS_IDLE):
-				case(LXA_ARCHIVESTATUS_ERROR):
-				case(LXA_ARCHIVESTATUS_USERBREAK):
-				case(LXA_ARCHIVESTATUS_VIEW):
-					break;
-			}
-			test++;
-			break;
-		case(LXA_ARCHIVESTATUS_ERROR):
-			switch(archive->oldstatus)
-			{
-				case(LXA_ARCHIVESTATUS_ADD):
-					break;
-				case(LXA_ARCHIVESTATUS_REMOVE):
-					break;
-				case(LXA_ARCHIVESTATUS_EXTRACT):
-					break;
-				case(LXA_ARCHIVESTATUS_IDLE):
-				case(LXA_ARCHIVESTATUS_ERROR):
-				case(LXA_ARCHIVESTATUS_USERBREAK):
-				case(LXA_ARCHIVESTATUS_VIEW):
-					break;
-			}
-			test++;
-			break;
-		case(LXA_ARCHIVESTATUS_USERBREAK):
-			g_print("User canceled\n");
-			test++;
-			break;
-		case(LXA_ARCHIVESTATUS_ADD):
-		case(LXA_ARCHIVESTATUS_REMOVE):
-		case(LXA_ARCHIVESTATUS_EXTRACT):
-		case(LXA_ARCHIVESTATUS_VIEW):
-			break;
-	}
-	if(test == max_test)
-	{
-		lxa_destroy();
-		g_main_loop_quit(loop);
-	}
-}
 
-int
-main(int argc, char **argv)
-{
-	g_type_init();
-	lxa_init();
-
-	GSList *files = NULL;
-	files = g_slist_prepend(files, "./composite-archives/content/gpl.txt");
-
-	gint ret = 0;
-
-	LXAArchive *archive_tar  = NULL; 
-	LXAArchive *archive_tgz  = NULL; 
-	LXAArchive *archive_tbz2 = NULL; 
-
-	lxa_new_archive("./composite-archives/archive.tar", LXA_ARCHIVETYPE_TAR, LXA_COMPRESSIONTYPE_NONE, TRUE, &archive_tar);
-	lxa_new_archive("./composite-archives/archive.tar.gz", LXA_ARCHIVETYPE_TAR, LXA_COMPRESSIONTYPE_GZIP, TRUE, &archive_tgz);
-	lxa_new_archive("./composite-archives/archive.tar.bz2", LXA_ARCHIVETYPE_TAR, LXA_COMPRESSIONTYPE_BZIP2, TRUE, &archive_tbz2);
-
-	g_print("Creating tar archive:     %s\n", archive_tar ? archive_tar->path : "FAILED");
-	g_print("Creating tar.gz archive:  %s\n", archive_tgz ? archive_tgz->path : "FAILED");
-	g_print("Creating tar.bz2 archive: %s\n", archive_tbz2? archive_tbz2->path : "FAILED");
-
-	if(archive_tar)
-	{
-		max_test++;
-		g_signal_connect(G_OBJECT(archive_tar), "lxa_status_changed", G_CALLBACK(test_archive_status_changed), NULL);
-		ret = lxa_archive_add(archive_tar, files);
-	}
-	if(archive_tgz)
-	{
-		max_test++;
-		g_signal_connect(G_OBJECT(archive_tgz), "lxa_status_changed", G_CALLBACK(test_archive_status_changed), NULL);
-		ret = lxa_archive_add(archive_tgz, files);
-	}
-	if(archive_tbz2)
-	{
-		max_test++;
-		g_signal_connect(G_OBJECT(archive_tbz2), "lxa_status_changed", G_CALLBACK(test_archive_status_changed), NULL);
-		ret = lxa_archive_add(archive_tbz2, files);
-	}
-
-	if((!archive_tar) && (!archive_tgz) && (!archive_tbz2))
-		return -1;
-	loop = g_main_loop_new(NULL, TRUE);
-	g_main_loop_run(loop);
-	return 0;
 }



More information about the Xfce4-commits mailing list