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