[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