1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2
3 /*
4 * GThumb
5 *
6 * Copyright (C) 2009 Free Software Foundation, Inc.
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22 #include <config.h>
23 #include "gth-marshal.h"
24 #include "gth-viewer-page.h"
25
26
27 enum {
28 FILE_LOADED,
29 LAST_SIGNAL
30 };
31
32 static guint gth_viewer_page_signals[LAST_SIGNAL] = { 0 };
33
34
35 G_DEFINE_INTERFACE (GthViewerPage, gth_viewer_page, 0)
36
37
38 static void
gth_viewer_page_default_init(GthViewerPageInterface * iface)39 gth_viewer_page_default_init (GthViewerPageInterface *iface)
40 {
41 static gboolean initialized = FALSE;
42
43 if (initialized)
44 return;
45
46 gth_viewer_page_signals[FILE_LOADED] =
47 g_signal_new ("file-loaded",
48 GTH_TYPE_VIEWER_PAGE,
49 G_SIGNAL_RUN_LAST,
50 G_STRUCT_OFFSET (GthViewerPageInterface, file_loaded),
51 NULL, NULL,
52 gth_marshal_VOID__OBJECT_OBJECT_BOOLEAN,
53 G_TYPE_NONE,
54 3,
55 G_TYPE_OBJECT,
56 G_TYPE_OBJECT,
57 G_TYPE_BOOLEAN);
58
59 initialized = TRUE;
60 }
61
62
63 void
gth_viewer_page_activate(GthViewerPage * self,GthBrowser * browser)64 gth_viewer_page_activate (GthViewerPage *self,
65 GthBrowser *browser)
66 {
67 GTH_VIEWER_PAGE_GET_INTERFACE (self)->activate (self, browser);
68 }
69
70
71 void
gth_viewer_page_deactivate(GthViewerPage * self)72 gth_viewer_page_deactivate (GthViewerPage *self)
73 {
74 gth_viewer_page_hide (self);
75 GTH_VIEWER_PAGE_GET_INTERFACE (self)->deactivate (self);
76 }
77
78
79 void
gth_viewer_page_show(GthViewerPage * self)80 gth_viewer_page_show (GthViewerPage *self)
81 {
82 GTH_VIEWER_PAGE_GET_INTERFACE (self)->show (self);
83 }
84
85
86 void
gth_viewer_page_hide(GthViewerPage * self)87 gth_viewer_page_hide (GthViewerPage *self)
88 {
89 GTH_VIEWER_PAGE_GET_INTERFACE (self)->hide (self);
90 }
91
92
93 gboolean
gth_viewer_page_can_view(GthViewerPage * self,GthFileData * file_data)94 gth_viewer_page_can_view (GthViewerPage *self,
95 GthFileData *file_data)
96 {
97 return GTH_VIEWER_PAGE_GET_INTERFACE (self)->can_view (self, file_data);
98 }
99
100
101 void
gth_viewer_page_view(GthViewerPage * self,GthFileData * file_data)102 gth_viewer_page_view (GthViewerPage *self,
103 GthFileData *file_data)
104 {
105 GTH_VIEWER_PAGE_GET_INTERFACE (self)->view (self, file_data);
106 }
107
108
109 void
gth_viewer_page_focus(GthViewerPage * self)110 gth_viewer_page_focus (GthViewerPage *self)
111 {
112 GTH_VIEWER_PAGE_GET_INTERFACE (self)->focus (self);
113 }
114
115
116 void
gth_viewer_page_fullscreen(GthViewerPage * self,gboolean active)117 gth_viewer_page_fullscreen (GthViewerPage *self,
118 gboolean active)
119 {
120 GTH_VIEWER_PAGE_GET_INTERFACE (self)->fullscreen (self, active);
121 }
122
123
124 void
gth_viewer_page_show_pointer(GthViewerPage * self,gboolean show)125 gth_viewer_page_show_pointer (GthViewerPage *self,
126 gboolean show)
127 {
128 GTH_VIEWER_PAGE_GET_INTERFACE (self)->show_pointer (self, show);
129 }
130
131
132 void
gth_viewer_page_update_sensitivity(GthViewerPage * self)133 gth_viewer_page_update_sensitivity (GthViewerPage *self)
134 {
135 GTH_VIEWER_PAGE_GET_INTERFACE (self)->update_sensitivity (self);
136 }
137
138
139 gboolean
gth_viewer_page_can_save(GthViewerPage * self)140 gth_viewer_page_can_save (GthViewerPage *self)
141 {
142 if (self == NULL)
143 return FALSE;
144 if (GTH_VIEWER_PAGE_GET_INTERFACE (self)->can_save != NULL)
145 return GTH_VIEWER_PAGE_GET_INTERFACE (self)->can_save (self);
146 else
147 return FALSE;
148 }
149
150
151 void
gth_viewer_page_save(GthViewerPage * self,GFile * file,FileSavedFunc func,gpointer data)152 gth_viewer_page_save (GthViewerPage *self,
153 GFile *file,
154 FileSavedFunc func,
155 gpointer data)
156 {
157 GTH_VIEWER_PAGE_GET_INTERFACE (self)->save (self, file, func, data);
158 }
159
160
161 void
gth_viewer_page_save_as(GthViewerPage * self,FileSavedFunc func,gpointer data)162 gth_viewer_page_save_as (GthViewerPage *self,
163 FileSavedFunc func,
164 gpointer data)
165 {
166 GTH_VIEWER_PAGE_GET_INTERFACE (self)->save_as (self, func, data);
167 }
168
169
170 void
gth_viewer_page_revert(GthViewerPage * self)171 gth_viewer_page_revert (GthViewerPage *self)
172 {
173 GTH_VIEWER_PAGE_GET_INTERFACE (self)->revert (self);
174 }
175
176
177 void
gth_viewer_page_update_info(GthViewerPage * self,GthFileData * file_data)178 gth_viewer_page_update_info (GthViewerPage *self,
179 GthFileData *file_data)
180 {
181 GTH_VIEWER_PAGE_GET_INTERFACE (self)->update_info (self, file_data);
182 }
183
184
185 void
gth_viewer_page_show_properties(GthViewerPage * self,gboolean show)186 gth_viewer_page_show_properties (GthViewerPage *self,
187 gboolean show)
188 {
189 if (GTH_VIEWER_PAGE_GET_INTERFACE (self)->show_properties != NULL)
190 GTH_VIEWER_PAGE_GET_INTERFACE (self)->show_properties (self, show);
191 }
192
193
194 gboolean
gth_viewer_page_zoom_from_scroll(GthViewerPage * self,GdkEventScroll * event)195 gth_viewer_page_zoom_from_scroll (GthViewerPage *self,
196 GdkEventScroll *event)
197 {
198 if (GTH_VIEWER_PAGE_GET_INTERFACE (self)->zoom_from_scroll != NULL)
199 return GTH_VIEWER_PAGE_GET_INTERFACE (self)->zoom_from_scroll (self, event);
200 else
201 return FALSE;
202 }
203
204
205 void
gth_viewer_page_file_loaded(GthViewerPage * self,GthFileData * file_data,GFileInfo * updated_metadata,gboolean success)206 gth_viewer_page_file_loaded (GthViewerPage *self,
207 GthFileData *file_data,
208 GFileInfo *updated_metadata,
209 gboolean success)
210 {
211 g_signal_emit (self, gth_viewer_page_signals[FILE_LOADED], 0, file_data, updated_metadata, success);
212 }
213