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