Code

change API: separate functions creating a blur filter, one for a given item, another...
[inkscape.git] / src / inkview.cpp
index bd1ef6e31cfde05b6011de31633c8e4a4d6374b2..95af5b73432b4596d485d4ae6ab720978e05b965 100644 (file)
  *
  * 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
  */
 
 # include "config.h"
 #endif
 
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+
 #include <string.h>
 #include <sys/stat.h>
 #include <locale.h>
 
+#include <glib/gmem.h>
 #include <libnr/nr-macros.h>
 
+// #include <stropts.h>
+
 #include <libxml/tree.h>
 #include <gdk/gdkkeysyms.h>
 #include <gtk/gtkmain.h>
@@ -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<struct SPSlideShow *>(data));
     return FALSE;
 }
 
-static int 
+static int
 sp_svgview_show_prev_cb (GtkWidget *widget, void *data)
 {
     sp_svgview_show_prev(static_cast<struct SPSlideShow *>(data));
     return FALSE;
 }
 
-static int 
+static int
 sp_svgview_goto_first_cb (GtkWidget *widget, void *data)
 {
     sp_svgview_goto_first(static_cast<struct SPSlideShow *>(data));
     return FALSE;
 }
 
-static int 
+static int
 sp_svgview_goto_last_cb (GtkWidget *widget, void *data)
 {
     sp_svgview_goto_last(static_cast<struct SPSlideShow *>(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);
 }