[Goodies-commits] r5650 - xfbib/branches/gobject/src

David Gustafsson tssj at xfce.org
Thu Oct 16 20:01:38 CEST 2008


Author: tssj
Date: 2008-10-16 18:01:38 +0000 (Thu, 16 Oct 2008)
New Revision: 5650

Modified:
   xfbib/branches/gobject/src/main.c
   xfbib/branches/gobject/src/xfbib-file-io.c
   xfbib/branches/gobject/src/xfbib-file-io.h
   xfbib/branches/gobject/src/xfbib-menu-bar.c
   xfbib/branches/gobject/src/xfbib-toolbar.c
Log:
Added Commandline arguments for viewing version of the program, opening 1 file at a time or merging files by passing several input files and one output file with -o argument.


Modified: xfbib/branches/gobject/src/main.c
===================================================================
--- xfbib/branches/gobject/src/main.c	2008-10-16 14:49:05 UTC (rev 5649)
+++ xfbib/branches/gobject/src/main.c	2008-10-16 18:01:38 UTC (rev 5650)
@@ -43,12 +43,42 @@
 	XfbibBibtex *elements;
 	GtkWidget *window;
 	GError *error = NULL;
+	gboolean version = FALSE;
+	gchar **input_files = NULL, *output_file = NULL;
+	gint n, i;
+        GOptionContext *opt_contxt;
+	GOptionEntry options[] = {
+		{ "version", 'V', 0, G_OPTION_ARG_NONE, &version, "Print program version", NULL },
+		{ "output-file", 'o', 0, G_OPTION_ARG_FILENAME, &output_file,
+		"Filename of the output file when merging multiple files", NULL },
+		{ G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &input_files, "Filename" },
+		{ NULL, 0, 0, 0, 0, NULL, NULL },
+	};
+
+
 	gtk_init(&argc, &argv);
-
+	
 	/**/
 //	g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL);
 	/**/
 
+        opt_contxt = g_option_context_new("Context_new");
+        g_option_context_add_main_entries(opt_contxt, options, "main_entries");
+        if (!g_option_context_parse(opt_contxt, &argc, &argv, &error)) {
+		g_printerr("Error parsing: %s\n", error->message);
+		g_error_free(error);
+		g_option_context_free(opt_contxt);
+		return EXIT_FAILURE;
+	}
+
+        g_option_context_free(opt_contxt);
+
+	if(version) {
+		g_print(PACKAGE_STRING "\n");
+		return EXIT_SUCCESS;
+	}
+
+
 	state = xfbib_state_new();
 
 	elements = xfbib_bibtex_new();
@@ -62,6 +92,36 @@
 
 	xfbib_state_set_window(state, window);
 
+	
+	if (input_files != NULL) {
+		n = g_strv_length(input_files);
+		
+		if (n == 1) {
+			if ((output_file = xfbib_file_io_open(NULL)) != NULL) {
+				xfbib_state_set_filename(state, output_file);
+				xfbib_window_set_title(XFBIB_WINDOW(window), output_file);
+			}
+		} else {
+			/* Multiple files */
+			/* TODO: Check that output file is present */
+			if (output_file == NULL) {
+				g_printf("Error merging files, no output file specified\n");
+				return EXIT_FAILURE;
+			}
+			g_print("-->%s\n", output_file);
+			xfbib_state_set_filename(state, output_file);
+			g_print("-->%s\n", output_file);
+			xfbib_window_set_title(XFBIB_WINDOW(window), output_file);
+			g_print("-->%s\n", output_file);
+
+			for (i = 0; i < n; i++) {
+				xfbib_file_io_open(input_files[i]);
+			}
+		}
+		g_strfreev(input_files);
+
+	}
+
 	gtk_widget_show_all(window);
 	gtk_main();
 

Modified: xfbib/branches/gobject/src/xfbib-file-io.c
===================================================================
--- xfbib/branches/gobject/src/xfbib-file-io.c	2008-10-16 14:49:05 UTC (rev 5649)
+++ xfbib/branches/gobject/src/xfbib-file-io.c	2008-10-16 18:01:38 UTC (rev 5650)
@@ -30,61 +30,66 @@
 #include "xfbib-window.h"
 #include "xfbib-list-store.h"
 
-gboolean
-xfbib_file_io_open(void)
+/*
+ * Opens a file and returns NULL if something went wrong otherwise it returns
+ * the filename of the file that was parsed
+ */
+gchar *
+xfbib_file_io_open(gchar *filename)
 {
 	XfbibState *state;
 	XfbibBibtex *elements;
 	GtkTreeModel *list_store;
 	gchar *contents, *name;
 	gsize length;
-	gint i;
+	gint i, ret, n;
 	GError *err = NULL;
 	GtkWidget *dialog, *window;
+	GtkFileFilter *filter;
 
 	state = xfbib_state_new();
+
 	window = xfbib_state_get_window(state);
+	elements = xfbib_state_get_bibtex_elements(state);
+	list_store = gtk_tree_view_get_model(GTK_TREE_VIEW(xfbib_window_get_tree_view(XFBIB_WINDOW(window))));
+	
+	name = filename;
 
+	if (name == NULL) {
+		dialog = gtk_file_chooser_dialog_new("Open BibTeX file",
+				GTK_WINDOW(xfbib_state_get_window(state)),
+				GTK_FILE_CHOOSER_ACTION_OPEN,
+				GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+				GTK_STOCK_OPEN, GTK_RESPONSE_OK,
+				NULL);
 
-	dialog = gtk_file_chooser_dialog_new("Open BibTeX file",
-						GTK_WINDOW(xfbib_state_get_window(state)),
-						GTK_FILE_CHOOSER_ACTION_OPEN,
-						GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-						GTK_STOCK_OPEN, GTK_RESPONSE_OK,
-						NULL);
-
-	if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK)
-	{
-		name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
-
-		if (!g_file_get_contents(name, &contents, &length, &err)) {
-			xfce_err("An error occured when opening the file: %s\n", err->message);
-			g_error_free(err);
+		filter = gtk_file_filter_new();
+		gtk_file_filter_set_name(filter, "BibTeX files");
+		gtk_file_filter_add_pattern(filter, "*.bib");
+		gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
+		if ((ret = gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK)) {
+			xfbib_list_store_clear(XFBIB_LIST_STORE(list_store));
+			name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
 		} else {
-			/*
-			 * User pressed ok and the file has successfully been
-			 * opened. Save the filename and change the title on
-			 * the main window.
-			 */
-			xfbib_state_set_filename(state, name);
-			xfbib_window_set_title(XFBIB_WINDOW(window), name);
+			gtk_widget_destroy(dialog);
+			return FALSE;
+	 	}
+		gtk_widget_destroy(dialog);
+	}
+	
 
-			elements = xfbib_state_get_bibtex_elements(state);
-
-			list_store = gtk_tree_view_get_model(GTK_TREE_VIEW(xfbib_window_get_tree_view(XFBIB_WINDOW(window))));
-
-
-			xfbib_list_store_clear(XFBIB_LIST_STORE(list_store));
-
-			/* Parse the file and update the tree view */
-			if (xfbib_bibtex_parse(elements, contents)) {
-				for (i = 0; i < xfbib_bibtex_get_n_entries(elements); i++)
-					xfbib_list_store_row_inserted(XFBIB_LIST_STORE(list_store), i);
-			}
+	if (!g_file_get_contents(name, &contents, &length, &err)) {
+		xfce_err("An error occured when opening the file: %s\n", err->message);
+		g_error_free(err);
+	} else {
+		n = xfbib_bibtex_get_n_entries(elements);
+		/* Parse the file and update the tree view */
+		if (xfbib_bibtex_parse(elements, contents)) {
+			for (i = n; i < xfbib_bibtex_get_n_entries(elements); i++)
+				xfbib_list_store_row_inserted(XFBIB_LIST_STORE(list_store), i);
 		}
 	}
-	gtk_widget_destroy(dialog);
-
+	
 	return TRUE;
 }
 

Modified: xfbib/branches/gobject/src/xfbib-file-io.h
===================================================================
--- xfbib/branches/gobject/src/xfbib-file-io.h	2008-10-16 14:49:05 UTC (rev 5649)
+++ xfbib/branches/gobject/src/xfbib-file-io.h	2008-10-16 18:01:38 UTC (rev 5650)
@@ -24,7 +24,7 @@
 
 G_BEGIN_DECLS
 
-gboolean xfbib_file_io_open(void);
+gchar *xfbib_file_io_open(gchar *);
 gboolean xfbib_file_io_save(void);
 gboolean xfbib_file_io_save_as(void);
 

Modified: xfbib/branches/gobject/src/xfbib-menu-bar.c
===================================================================
--- xfbib/branches/gobject/src/xfbib-menu-bar.c	2008-10-16 14:49:05 UTC (rev 5649)
+++ xfbib/branches/gobject/src/xfbib-menu-bar.c	2008-10-16 18:01:38 UTC (rev 5650)
@@ -68,10 +68,19 @@
 static void
 cb_file_open_activate (GtkMenuItem *menuitem, gpointer user_data)
 {
+	XfbibState *state;
+	gchar *filename;
 	g_printf("File/Open\n");
-	xfbib_file_io_open();
+
+	state = xfbib_state_new();
+
+	if ((filename = xfbib_file_io_open(NULL)) != NULL) {
+		xfbib_state_set_filename(state, filename);
+		xfbib_window_set_title(XFBIB_WINDOW(xfbib_state_get_window(state)), filename);
+	}
+		
 	/*
-	if (xfbib_file_io_open())
+	if (xfbib_file_io_open_dialog())
 	{
 		//TODO: What happens to the previous FileIo object?
 		//TODO: Should these two lines be located here or in xfbib-file-io.c ?

Modified: xfbib/branches/gobject/src/xfbib-toolbar.c
===================================================================
--- xfbib/branches/gobject/src/xfbib-toolbar.c	2008-10-16 14:49:05 UTC (rev 5649)
+++ xfbib/branches/gobject/src/xfbib-toolbar.c	2008-10-16 18:01:38 UTC (rev 5650)
@@ -25,6 +25,7 @@
 #include "xfbib-toolbar.h"
 #include "xfbib-file-io.h"
 #include "xfbib-window.h"
+#include "xfbib-state.h"
 
 struct _XfbibToolbar
 {
@@ -50,11 +51,21 @@
 static void
 cb_open_clicked (GtkButton *buttonitem, gpointer user_data)
 {
+
+	XfbibState *state;
+	gchar *filename;
 	g_printf("Toolbar_Open\n");
 
-	xfbib_file_io_open();
+	state = xfbib_state_new();
+
+	if ((filename = xfbib_file_io_open(NULL)) != NULL) {
+		xfbib_state_set_filename(state, filename);
+		xfbib_window_set_title(XFBIB_WINDOW(xfbib_state_get_window(state)), filename);
+	}
+
+
 	/*
-	if (xfbib_file_io_open(file_io, window))
+	if (xfbib_file_io_open_dialog(file_io, window))
 	{
 		//TODO: What happens to the previous FileIo object?
 		//TODO: Should these two lines be located here or in xfbib-file-io.c ?




More information about the Goodies-commits mailing list