summaryrefslogtreecommitdiffstats
path: root/src/slideshow.cpp
blob: eb07abc8c6768abc09f6a3476cc71ce8a63cd27e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#define __SLIDESHOW_C__

/*
 * Help/About window
 *
 * Authors:
 *   Lauris Kaplinski <lauris@kaplinski.com>
 *
 * Copyright (C) 1999-2003 authors
 * Copyright (C) 2000-2002 Ximian, Inc.
 *
 * Released under GNU GPL, read the file 'COPYING' for more information
 */

#ifdef HAVE_CONFIG_H
# include "config.h"
#endif

#include <gdk/gdkkeysyms.h>
#include <gtk/gtkwindow.h>

#include <glibmm/i18n.h>
#include "document.h"
#include "svg-view-widget.h"
#include "svg-view.h"

static gint
sp_slideshow_event (SPViewWidget *vw, GdkEvent *event, GtkWidget *window)
{
	GSList *slides;
	const gchar *fname, *nname;
	int idx;

	slides = (GSList*)g_object_get_data (G_OBJECT (window), "slides");
	fname = (const gchar*)g_object_get_data (G_OBJECT (window), "current");
	idx = g_slist_index (slides, fname);

	switch (event->type) {
	case GDK_KEY_PRESS:
		switch (event->key.keyval) {
		case GDK_BackSpace:
		case GDK_Delete:
		case GDK_Left:
			idx -= 1;
			break;
		case GDK_Escape:
			gtk_widget_destroy (window);
			return TRUE;
			break;
		default:
			idx += 1;
			break;
		}
		break;
	case GDK_BUTTON_PRESS:
		idx += 1;
		break;
	default:
		break;
	}

	nname = (const gchar*)g_slist_nth_data (slides, idx);
//	g_print ("Old %s new %s\n", fname, nname);

	if (nname && (nname != fname)) {
		SPDocument *doc;
		g_print ("Trying to load %s\n", nname);
		doc = sp_document_new (nname, TRUE);
		if (doc) {
			reinterpret_cast<SPSVGView*>(SP_VIEW_WIDGET_VIEW (vw))->setDocument (doc);
			sp_document_unref (doc);
		}
		g_object_set_data (G_OBJECT (window), "current", (gpointer) nname);
	}

	return TRUE;
}

GtkWidget *
sp_slideshow_new (const GSList *files)
{
	SPDocument *doc;
	GtkWidget *w, *v;

	doc = sp_document_new ((const gchar*)files->data, TRUE);
	g_return_val_if_fail (doc != NULL, NULL);

	w = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title (GTK_WINDOW (w), _("Inkscape slideshow"));
	gtk_window_set_default_size (GTK_WINDOW (w), 480, 360);
	gtk_window_set_policy (GTK_WINDOW (w), TRUE, TRUE, FALSE);

	v = sp_svg_view_widget_new (doc);
	sp_svg_view_widget_set_resize (SP_SVG_VIEW_WIDGET (v), FALSE, sp_document_width (doc), sp_document_height (doc));
	sp_document_unref (doc);
	gtk_widget_show (v);
	gtk_container_add (GTK_CONTAINER (w), v);

	g_object_set_data (G_OBJECT (w), "slides", (gpointer) files);
	g_object_set_data (G_OBJECT (w), "current", files->data);

	g_signal_connect (G_OBJECT (v), "event", G_CALLBACK (sp_slideshow_event), w);

	return w;
}