1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*-
2
3 caja-view.c: Interface for caja views
4
5 Copyright (C) 2004 Red Hat Inc.
6
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 2 of the
10 License, or (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
16
17 You should have received a copy of the GNU General Public
18 License along with this program; if not, write to the
19 Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
20 Boston, MA 02110-1301, USA.
21
22 Author: Alexander Larsson <alexl@redhat.com>
23 */
24
25 #include <config.h>
26 #include "caja-view.h"
27
28 enum
29 {
30 TITLE_CHANGED,
31 ZOOM_LEVEL_CHANGED,
32 LAST_SIGNAL
33 };
34
35 static guint caja_view_signals[LAST_SIGNAL] = { 0 };
36
37 static void
caja_view_base_init(gpointer g_class)38 caja_view_base_init (gpointer g_class)
39 {
40 static gboolean initialized = FALSE;
41
42 if (! initialized)
43 {
44 caja_view_signals[TITLE_CHANGED] =
45 g_signal_new ("title_changed",
46 CAJA_TYPE_VIEW,
47 G_SIGNAL_RUN_LAST,
48 G_STRUCT_OFFSET (CajaViewIface, title_changed),
49 NULL, NULL,
50 g_cclosure_marshal_VOID__VOID,
51 G_TYPE_NONE, 0);
52
53 caja_view_signals[ZOOM_LEVEL_CHANGED] =
54 g_signal_new ("zoom_level_changed",
55 CAJA_TYPE_VIEW,
56 G_SIGNAL_RUN_LAST,
57 G_STRUCT_OFFSET (CajaViewIface, zoom_level_changed),
58 NULL, NULL,
59 g_cclosure_marshal_VOID__VOID,
60 G_TYPE_NONE, 0);
61
62 initialized = TRUE;
63 }
64 }
65
66 GType
caja_view_get_type(void)67 caja_view_get_type (void)
68 {
69 static GType type = 0;
70
71 if (!type)
72 {
73 const GTypeInfo info =
74 {
75 sizeof (CajaViewIface),
76 caja_view_base_init,
77 NULL,
78 NULL,
79 NULL,
80 NULL,
81 0,
82 0,
83 NULL
84 };
85
86 type = g_type_register_static (G_TYPE_INTERFACE,
87 "CajaView",
88 &info, 0);
89 g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
90 }
91
92 return type;
93 }
94
95 const char *
caja_view_get_view_id(CajaView * view)96 caja_view_get_view_id (CajaView *view)
97 {
98 g_return_val_if_fail (CAJA_IS_VIEW (view), NULL);
99
100 return (* CAJA_VIEW_GET_IFACE (view)->get_view_id) (view);
101 }
102
103 GtkWidget *
caja_view_get_widget(CajaView * view)104 caja_view_get_widget (CajaView *view)
105 {
106 g_return_val_if_fail (CAJA_IS_VIEW (view), NULL);
107
108 return (* CAJA_VIEW_GET_IFACE (view)->get_widget) (view);
109 }
110
111 void
caja_view_load_location(CajaView * view,const char * location_uri)112 caja_view_load_location (CajaView *view,
113 const char *location_uri)
114 {
115 g_return_if_fail (CAJA_IS_VIEW (view));
116 g_return_if_fail (location_uri != NULL);
117
118 (* CAJA_VIEW_GET_IFACE (view)->load_location) (view,
119 location_uri);
120 }
121
122 void
caja_view_stop_loading(CajaView * view)123 caja_view_stop_loading (CajaView *view)
124 {
125 g_return_if_fail (CAJA_IS_VIEW (view));
126
127 (* CAJA_VIEW_GET_IFACE (view)->stop_loading) (view);
128 }
129
130 int
caja_view_get_selection_count(CajaView * view)131 caja_view_get_selection_count (CajaView *view)
132 {
133 g_return_val_if_fail (CAJA_IS_VIEW (view), 0);
134
135 return (* CAJA_VIEW_GET_IFACE (view)->get_selection_count) (view);
136 }
137
138 GList *
caja_view_get_selection(CajaView * view)139 caja_view_get_selection (CajaView *view)
140 {
141 g_return_val_if_fail (CAJA_IS_VIEW (view), NULL);
142
143 return (* CAJA_VIEW_GET_IFACE (view)->get_selection) (view);
144 }
145
146 void
caja_view_set_selection(CajaView * view,GList * list)147 caja_view_set_selection (CajaView *view,
148 GList *list)
149 {
150 g_return_if_fail (CAJA_IS_VIEW (view));
151
152 (* CAJA_VIEW_GET_IFACE (view)->set_selection) (view,
153 list);
154 }
155
156 void
caja_view_set_is_active(CajaView * view,gboolean is_active)157 caja_view_set_is_active (CajaView *view,
158 gboolean is_active)
159 {
160 g_return_if_fail (CAJA_IS_VIEW (view));
161
162 (* CAJA_VIEW_GET_IFACE (view)->set_is_active) (view,
163 is_active);
164 }
165
166 void
caja_view_invert_selection(CajaView * view)167 caja_view_invert_selection (CajaView *view)
168 {
169 g_return_if_fail (CAJA_IS_VIEW (view));
170
171 (* CAJA_VIEW_GET_IFACE (view)->invert_selection) (view);
172 }
173
174 char *
caja_view_get_first_visible_file(CajaView * view)175 caja_view_get_first_visible_file (CajaView *view)
176 {
177 g_return_val_if_fail (CAJA_IS_VIEW (view), NULL);
178
179 return (* CAJA_VIEW_GET_IFACE (view)->get_first_visible_file) (view);
180 }
181
182 void
caja_view_scroll_to_file(CajaView * view,const char * uri)183 caja_view_scroll_to_file (CajaView *view,
184 const char *uri)
185 {
186 g_return_if_fail (CAJA_IS_VIEW (view));
187
188 (* CAJA_VIEW_GET_IFACE (view)->scroll_to_file) (view, uri);
189 }
190
191 char *
caja_view_get_title(CajaView * view)192 caja_view_get_title (CajaView *view)
193 {
194 g_return_val_if_fail (CAJA_IS_VIEW (view), NULL);
195
196 if (CAJA_VIEW_GET_IFACE (view)->get_title != NULL)
197 {
198 return (* CAJA_VIEW_GET_IFACE (view)->get_title) (view);
199 }
200 else
201 {
202 return NULL;
203 }
204 }
205
206
207 gboolean
caja_view_supports_zooming(CajaView * view)208 caja_view_supports_zooming (CajaView *view)
209 {
210 g_return_val_if_fail (CAJA_IS_VIEW (view), FALSE);
211
212 return (* CAJA_VIEW_GET_IFACE (view)->supports_zooming) (view);
213 }
214
215 void
caja_view_bump_zoom_level(CajaView * view,int zoom_increment)216 caja_view_bump_zoom_level (CajaView *view,
217 int zoom_increment)
218 {
219 g_return_if_fail (CAJA_IS_VIEW (view));
220
221 (* CAJA_VIEW_GET_IFACE (view)->bump_zoom_level) (view,
222 zoom_increment);
223 }
224
225 void
caja_view_zoom_to_level(CajaView * view,CajaZoomLevel level)226 caja_view_zoom_to_level (CajaView *view,
227 CajaZoomLevel level)
228 {
229 g_return_if_fail (CAJA_IS_VIEW (view));
230
231 (* CAJA_VIEW_GET_IFACE (view)->zoom_to_level) (view,
232 level);
233 }
234
235 void
caja_view_restore_default_zoom_level(CajaView * view)236 caja_view_restore_default_zoom_level (CajaView *view)
237 {
238 g_return_if_fail (CAJA_IS_VIEW (view));
239
240 (* CAJA_VIEW_GET_IFACE (view)->restore_default_zoom_level) (view);
241 }
242
243 gboolean
caja_view_can_zoom_in(CajaView * view)244 caja_view_can_zoom_in (CajaView *view)
245 {
246 g_return_val_if_fail (CAJA_IS_VIEW (view), FALSE);
247
248 return (* CAJA_VIEW_GET_IFACE (view)->can_zoom_in) (view);
249 }
250
251 gboolean
caja_view_can_zoom_out(CajaView * view)252 caja_view_can_zoom_out (CajaView *view)
253 {
254 g_return_val_if_fail (CAJA_IS_VIEW (view), FALSE);
255
256 return (* CAJA_VIEW_GET_IFACE (view)->can_zoom_out) (view);
257 }
258
259 CajaZoomLevel
caja_view_get_zoom_level(CajaView * view)260 caja_view_get_zoom_level (CajaView *view)
261 {
262 g_return_val_if_fail (CAJA_IS_VIEW (view), CAJA_ZOOM_LEVEL_STANDARD);
263
264 return (* CAJA_VIEW_GET_IFACE (view)->get_zoom_level) (view);
265 }
266
267 void
caja_view_grab_focus(CajaView * view)268 caja_view_grab_focus (CajaView *view)
269 {
270 g_return_if_fail (CAJA_IS_VIEW (view));
271
272 if (CAJA_VIEW_GET_IFACE (view)->grab_focus != NULL)
273 {
274 (* CAJA_VIEW_GET_IFACE (view)->grab_focus) (view);
275 }
276 }
277
278 void
caja_view_update_menus(CajaView * view)279 caja_view_update_menus (CajaView *view)
280 {
281 g_return_if_fail (CAJA_IS_VIEW (view));
282
283 if (CAJA_VIEW_GET_IFACE (view)->update_menus != NULL)
284 {
285 (* CAJA_VIEW_GET_IFACE (view)->update_menus) (view);
286 }
287 }
288
289 void
caja_view_pop_up_location_context_menu(CajaView * view,GdkEventButton * event,const char * location)290 caja_view_pop_up_location_context_menu (CajaView *view,
291 GdkEventButton *event,
292 const char *location)
293 {
294 g_return_if_fail (CAJA_IS_VIEW (view));
295
296 if (CAJA_VIEW_GET_IFACE (view)->pop_up_location_context_menu != NULL)
297 {
298 (* CAJA_VIEW_GET_IFACE (view)->pop_up_location_context_menu) (view, event, location);
299 }
300 }
301
302 void
caja_view_drop_proxy_received_uris(CajaView * view,GList * uris,const char * target_location,GdkDragAction action)303 caja_view_drop_proxy_received_uris (CajaView *view,
304 GList *uris,
305 const char *target_location,
306 GdkDragAction action)
307 {
308 g_return_if_fail (CAJA_IS_VIEW (view));
309
310 if (CAJA_VIEW_GET_IFACE (view)->drop_proxy_received_uris != NULL)
311 {
312 (* CAJA_VIEW_GET_IFACE (view)->drop_proxy_received_uris) (view, uris, target_location, action);
313 }
314 }
315
316 void
caja_view_drop_proxy_received_netscape_url(CajaView * view,const char * source_url,const char * target_location,GdkDragAction action)317 caja_view_drop_proxy_received_netscape_url (CajaView *view,
318 const char *source_url,
319 const char *target_location,
320 GdkDragAction action)
321 {
322 g_return_if_fail (CAJA_IS_VIEW (view));
323
324 if (CAJA_VIEW_GET_IFACE (view)->drop_proxy_received_netscape_url != NULL)
325 {
326 (* CAJA_VIEW_GET_IFACE (view)->drop_proxy_received_netscape_url) (view, source_url, target_location, action);
327 }
328 }
329
330
331