[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