X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Finkview.cpp;h=95af5b73432b4596d485d4ae6ab720978e05b965;hb=b53b8aff0aa55c2349ea10992daac23a929ae19f;hp=bd1ef6e31cfde05b6011de31633c8e4a4d6374b2;hpb=6b15695578f07a3f72c4c9475c1a261a3021472a;p=inkscape.git diff --git a/src/inkview.cpp b/src/inkview.cpp index bd1ef6e31..95af5b734 100644 --- a/src/inkview.cpp +++ b/src/inkview.cpp @@ -17,12 +17,12 @@ * * Copyright (C) 1999-2002 authors * Copyright (C) 2001-2002 Ximian, Inc. - * + * * Inkscape authors: * Johan Ceuppens - * + * * Copyright (C) 2004 Inkscape authors - * + * * Released under GNU GPL, read the file 'COPYING' for more information */ @@ -31,12 +31,19 @@ # include "config.h" #endif +#ifdef HAVE_GETOPT_H +#include +#endif + #include #include #include +#include #include +// #include + #include #include #include @@ -67,6 +74,9 @@ Inkscape::Application *inkscape; #define bind_textdomain_codeset(p,c) #endif +extern char *optarg; +extern int optind, opterr; + struct SPSlideShow { char **slides; int size; @@ -76,6 +86,7 @@ struct SPSlideShow { GtkWidget *view; GtkWindow *window; bool fullscreen; + int timer; }; static GtkWidget *sp_svgview_control_show (struct SPSlideShow *ss); @@ -161,9 +172,27 @@ main (int argc, const char **argv) if (argc == 1) { usage(); } - - struct SPSlideShow ss; - + + struct SPSlideShow ss; + + int option, + num_parsed_options = 0; + + // the list of arguments is in the net line + while ((option = getopt(argc, (char* const* )argv, "t:")) != -1) + { + switch(option) { + case 't': // for timer + // fprintf(stderr, "set timer arg %s\n", optarg ); + ss.timer = atoi(optarg); + num_parsed_options += 2; // 2 because of flag + option + break; + case '?': + default: + usage(); + } + } + GtkWidget *w; int i; @@ -172,7 +201,7 @@ main (int argc, const char **argv) textdomain (GETTEXT_PACKAGE); LIBXML_TEST_VERSION - + Inkscape::GC::init(); Inkscape::Preferences::loadSkeleton(); @@ -191,7 +220,7 @@ main (int argc, const char **argv) ss.size = 32; ss.length = 0; ss.current = 0; - ss.slides = nr_new (char *, ss.size); + ss.slides = g_new (char *, ss.size); ss.current = 0; ss.doc = NULL; ss.view = NULL; @@ -199,11 +228,13 @@ main (int argc, const char **argv) inkscape = (Inkscape::Application *)g_object_new (SP_TYPE_INKSCAPE, NULL); Inkscape::Preferences::load(); - - for (i = 1; i < argc; i++) { + + // starting at where the commandline options stopped parsing because + // we want all the files to be in the list + for (i = num_parsed_options + 1 ; i < argc; i++) { struct stat st; - if (stat (argv[i], &st) - || !S_ISREG (st.st_mode) + if (stat (argv[i], &st) + || !S_ISREG (st.st_mode) || (st.st_size < 64)) { fprintf(stderr, "could not open file %s\n", argv[i]); } else { @@ -230,10 +261,10 @@ main (int argc, const char **argv) if (ss.length >= ss.size) { /* Expand */ ss.size <<= 1; - ss.slides = nr_renew (ss.slides, char *, ss.size); + ss.slides = g_renew (char *, ss.slides, ss.size); } - - ss.doc = sp_document_new_from_mem ((const gchar *)gba->data, + + ss.doc = sp_document_new_from_mem ((const gchar *)gba->data, gba->len, TRUE); gchar *last_filename = jar_file_reader.get_last_filename(); @@ -252,13 +283,13 @@ main (int argc, const char **argv) if (ss.length >= ss.size) { /* Expand */ ss.size <<= 1; - ss.slides = nr_renew (ss.slides, char *, ss.size); - + ss.slides = g_renew (char *, ss.slides, ss.size); + } - + ss.slides[ss.length++] = strdup (argv[i]); ss.doc = sp_document_new (ss.slides[ss.current], TRUE, false); - + if (!ss.doc && ++ss.current >= ss.length) { /* No loadable documents */ return 1; @@ -268,7 +299,7 @@ main (int argc, const char **argv) #endif } } - + if(!ss.doc) return 1; /* none of the slides loadable */ @@ -313,29 +344,29 @@ sp_svgview_control_show (struct SPSlideShow *ss) t = gtk_table_new (1, 4, TRUE); gtk_container_add ((GtkContainer *) ctrlwin, t); b = gtk_button_new_from_stock (GTK_STOCK_GOTO_FIRST); - gtk_table_attach ((GtkTable *) t, b, 0, 1, 0, 1, - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), + gtk_table_attach ((GtkTable *) t, b, 0, 1, 0, 1, + (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), + (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); - g_signal_connect ((GObject *) b, "clicked", (GCallback) sp_svgview_goto_first_cb, ss); + g_signal_connect ((GObject *) b, "clicked", (GCallback) sp_svgview_goto_first_cb, ss); b = gtk_button_new_from_stock (GTK_STOCK_GO_BACK); gtk_table_attach ((GtkTable *) t, b, 1, 2, 0, 1, - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), + (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), + (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); - g_signal_connect (G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_prev_cb, ss); + g_signal_connect (G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_prev_cb, ss); b = gtk_button_new_from_stock (GTK_STOCK_GO_FORWARD); gtk_table_attach ((GtkTable *) t, b, 2, 3, 0, 1, - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), + (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), + (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); - g_signal_connect (G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_next_cb, ss); + g_signal_connect (G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_next_cb, ss); b = gtk_button_new_from_stock (GTK_STOCK_GOTO_LAST); gtk_table_attach ((GtkTable *) t, b, 3, 4, 0, 1, - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), + (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), + (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); - g_signal_connect (G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_last_cb, ss); + g_signal_connect (G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_last_cb, ss); gtk_widget_show_all (ctrlwin); } else { gtk_window_present ((GtkWindow *) ctrlwin); @@ -344,28 +375,28 @@ sp_svgview_control_show (struct SPSlideShow *ss) return NULL; } -static int +static int sp_svgview_show_next_cb (GtkWidget *widget, void *data) { sp_svgview_show_next(static_cast(data)); return FALSE; } -static int +static int sp_svgview_show_prev_cb (GtkWidget *widget, void *data) { sp_svgview_show_prev(static_cast(data)); return FALSE; } -static int +static int sp_svgview_goto_first_cb (GtkWidget *widget, void *data) { sp_svgview_goto_first(static_cast(data)); return FALSE; } -static int +static int sp_svgview_goto_last_cb (GtkWidget *widget, void *data) { sp_svgview_goto_last(static_cast(data)); @@ -458,12 +489,15 @@ is_jar(char const *filename) static void usage() { - fprintf(stderr, - "Usage: inkview [FILES ...]\n" + fprintf(stderr, + "Usage: inkview [OPTIONS...] [FILES ...]\n" "\twhere FILES are SVG (.svg or .svgz)" #ifdef WITH_INKJAR - "or archives of SVGs (.sxw, .jar)" + " or archives of SVGs (.sxw, .jar)" #endif + "\n\n" + "Available options:\n" + "\t-t\t\tTimer for automatically changing slides in seconds.\n" "\n"); exit(1); }