Code

specialize MaybeStorage for Rect, and start using reference maybes to
[inkscape.git] / src / slideshow.cpp
1 #define __SLIDESHOW_C__
3 /*
4  * Help/About window
5  *
6  * Authors:
7  *   Lauris Kaplinski <lauris@kaplinski.com>
8  *
9  * Copyright (C) 1999-2003 authors
10  * Copyright (C) 2000-2002 Ximian, Inc.
11  *
12  * Released under GNU GPL, read the file 'COPYING' for more information
13  */
15 #ifdef HAVE_CONFIG_H
16 # include "config.h"
17 #endif
19 #include <gdk/gdkkeysyms.h>
20 #include <gtk/gtkwindow.h>
22 #include <glibmm/i18n.h>
23 #include "document.h"
24 #include "svg-view-widget.h"
25 #include "svg-view.h"
27 static gint
28 sp_slideshow_event (SPViewWidget *vw, GdkEvent *event, GtkWidget *window)
29 {
30         GSList *slides;
31         const gchar *fname, *nname;
32         int idx;
34         slides = (GSList*)g_object_get_data (G_OBJECT (window), "slides");
35         fname = (const gchar*)g_object_get_data (G_OBJECT (window), "current");
36         idx = g_slist_index (slides, fname);
38         switch (event->type) {
39         case GDK_KEY_PRESS:
40                 switch (event->key.keyval) {
41                 case GDK_BackSpace:
42                 case GDK_Delete:
43                 case GDK_Left:
44                         idx -= 1;
45                         break;
46                 case GDK_Escape:
47                         gtk_widget_destroy (window);
48                         return TRUE;
49                         break;
50                 default:
51                         idx += 1;
52                         break;
53                 }
54                 break;
55         case GDK_BUTTON_PRESS:
56                 idx += 1;
57                 break;
58         default:
59                 break;
60         }
62         nname = (const gchar*)g_slist_nth_data (slides, idx);
63 //      g_print ("Old %s new %s\n", fname, nname);
65         if (nname && (nname != fname)) {
66                 SPDocument *doc;
67                 g_print ("Trying to load %s\n", nname);
68                 doc = sp_document_new (nname, TRUE);
69                 if (doc) {
70                         reinterpret_cast<SPSVGView*>(SP_VIEW_WIDGET_VIEW (vw))->setDocument (doc);
71                         sp_document_unref (doc);
72                 }
73                 g_object_set_data (G_OBJECT (window), "current", (gpointer) nname);
74         }
76         return TRUE;
77 }
79 GtkWidget *
80 sp_slideshow_new (const GSList *files)
81 {
82         SPDocument *doc;
83         GtkWidget *w, *v;
85         doc = sp_document_new ((const gchar*)files->data, TRUE);
86         g_return_val_if_fail (doc != NULL, NULL);
88         w = gtk_window_new (GTK_WINDOW_TOPLEVEL);
89         gtk_window_set_title (GTK_WINDOW (w), _("Inkscape slideshow"));
90         gtk_window_set_default_size (GTK_WINDOW (w), 480, 360);
91         gtk_window_set_policy (GTK_WINDOW (w), TRUE, TRUE, FALSE);
93         v = sp_svg_view_widget_new (doc);
94         sp_svg_view_widget_set_resize (SP_SVG_VIEW_WIDGET (v), FALSE, sp_document_width (doc), sp_document_height (doc));
95         sp_document_unref (doc);
96         gtk_widget_show (v);
97         gtk_container_add (GTK_CONTAINER (w), v);
99         g_object_set_data (G_OBJECT (w), "slides", (gpointer) files);
100         g_object_set_data (G_OBJECT (w), "current", files->data);
102         g_signal_connect (G_OBJECT (v), "event", G_CALLBACK (sp_slideshow_event), w);
104         return w;