1 /* vi: set sw=4 ts=4 wrap ai: */
2 /*
3 * caja-widget-view-provider.c: This file is part of caja.
4 *
5 * Copyright (C) 2019 Wu Xiaotian <yetist@gmail.com>
6 * Copyright (C) 2019-2021 The MATE developers
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 along
19 * with this program; if not, write to the Free Software Foundation, Inc.,
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 * */
22
23 #include <config.h>
24 #include "caja-widget-view-provider.h"
25
26 #include <glib-object.h>
27
28 /**
29 * SECTION:caja-widget-view-provider
30 * @title: CajaWidgetViewProvider
31 * @short_description: Interface to provide widgets view.
32 * @include: libcaja-extension/caja-widget-view-provider.h
33 *
34 * #CajaWidgetViewProvider allows extension to provide widgets view
35 * in the file manager.
36 */
37
38 static void
caja_widget_view_provider_base_init(gpointer g_class)39 caja_widget_view_provider_base_init (gpointer g_class)
40 {
41 }
42
43 GType
caja_widget_view_provider_get_type(void)44 caja_widget_view_provider_get_type (void)
45 {
46 static GType type = 0;
47
48 if (!type) {
49 const GTypeInfo info = {
50 sizeof (CajaWidgetViewProviderIface),
51 caja_widget_view_provider_base_init,
52 NULL,
53 NULL,
54 NULL,
55 NULL,
56 0,
57 0,
58 NULL
59 };
60
61 type = g_type_register_static (G_TYPE_INTERFACE,
62 "CajaWidgetViewProvider",
63 &info, 0);
64 g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
65 }
66
67 return type;
68 }
69
70 /**
71 * caja_widget_view_provider_get_widget:
72 * @provider: a #CajaWidgetViewProvider
73 *
74 * Return a #GtkWidget to show the current location content.
75 *
76 * Returns: The #GtkWidget used to show the contents.
77 **/
78 GtkWidget *
caja_widget_view_provider_get_widget(CajaWidgetViewProvider * provider)79 caja_widget_view_provider_get_widget (CajaWidgetViewProvider *provider)
80 {
81 g_return_val_if_fail (CAJA_IS_WIDGET_VIEW_PROVIDER (provider), NULL);
82 g_return_val_if_fail (CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->get_widget != NULL, NULL);
83
84 return CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->get_widget (provider);
85 }
86
87 /**
88 * caja_widget_view_provider_add_file:
89 * @provider: a #CajaWidgetViewProvider
90 * @file: add a #CajaFile into the widget view.
91 * @directory: the directory of the file.
92 *
93 * Add a file of this location into the widget view.
94 **/
caja_widget_view_provider_add_file(CajaWidgetViewProvider * provider,CajaFile * file,CajaFile * directory)95 void caja_widget_view_provider_add_file (CajaWidgetViewProvider *provider, CajaFile *file, CajaFile *directory)
96 {
97 g_return_if_fail (CAJA_IS_WIDGET_VIEW_PROVIDER (provider));
98 g_return_if_fail (CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->add_file != NULL);
99
100 CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->add_file (provider, file, directory);
101 }
102
103 /**
104 * caja_widget_view_provider_set_location:
105 * @provider: a #CajaWidgetViewProvider
106 * @uri: the URI of the location
107 *
108 * Set the location of this #CajaWidgetViewProvider.
109 **/
caja_widget_view_provider_set_location(CajaWidgetViewProvider * provider,const char * location)110 void caja_widget_view_provider_set_location (CajaWidgetViewProvider *provider, const char *location)
111 {
112 g_return_if_fail (CAJA_IS_WIDGET_VIEW_PROVIDER (provider));
113 g_return_if_fail (CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->set_location != NULL);
114
115 CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->set_location (provider, location);
116 }
117
118 /**
119 * caja_widget_view_provider_set_window:
120 * @provider: a #CajaWidgetViewProvider
121 * @window: parent #GtkWindow
122 *
123 * Set parent #GtkWindow of this #CajaWidgetViewProvider.
124 **/
caja_widget_view_provider_set_window(CajaWidgetViewProvider * provider,GtkWindow * window)125 void caja_widget_view_provider_set_window (CajaWidgetViewProvider *provider, GtkWindow *window)
126 {
127 g_return_if_fail (CAJA_IS_WIDGET_VIEW_PROVIDER (provider));
128 g_return_if_fail (CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->set_window != NULL);
129
130 CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->set_window (provider, window);
131 }
132
133 /**
134 * caja_widget_view_provider_get_item_count:
135 * @provider: a #CajaWidgetViewProvider
136 *
137 * Return value: The item count of this #CajaWidgetViewProvider
138 **/
caja_widget_view_provider_get_item_count(CajaWidgetViewProvider * provider)139 guint caja_widget_view_provider_get_item_count (CajaWidgetViewProvider *provider)
140 {
141 g_return_val_if_fail (CAJA_IS_WIDGET_VIEW_PROVIDER (provider), 0);
142 g_return_val_if_fail (CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->get_item_count != NULL, 0);
143
144 return CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->get_item_count (provider);
145 }
146
147 /**
148 * caja_widget_view_provider_get_first_visible_file:
149 * @provider: a #CajaWidgetViewProvider
150 *
151 * Return the first visible file. When use start visit the location, the caja's status is waiting, until
152 * get the first visible file.
153 *
154 * Return value: the first visible file.
155 **/
caja_widget_view_provider_get_first_visible_file(CajaWidgetViewProvider * provider)156 gchar* caja_widget_view_provider_get_first_visible_file (CajaWidgetViewProvider *provider)
157 {
158 g_return_val_if_fail (CAJA_IS_WIDGET_VIEW_PROVIDER (provider), NULL);
159 g_return_val_if_fail (CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->get_first_visible_file != NULL, NULL);
160
161 return CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->get_first_visible_file (provider);
162 }
163
164 /**
165 * caja_widget_view_provider_clear:
166 * @provider: a #CajaWidgetViewProvider
167 *
168 * Clear the content of this widget view.
169 **/
caja_widget_view_provider_clear(CajaWidgetViewProvider * provider)170 void caja_widget_view_provider_clear (CajaWidgetViewProvider *provider)
171 {
172 g_return_if_fail (CAJA_IS_WIDGET_VIEW_PROVIDER (provider));
173 g_return_if_fail (CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->clear != NULL);
174
175 CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->clear (provider);
176 }
177
178 /**
179 * caja_widget_view_provider_supports_uri:
180 * @provider: a #CajaWidgetViewProvider
181 * @uri: the location to visit.
182 * @file_type: The #GFileType for the uri
183 * @mime_type: The mimetype for the uri
184 *
185 * Whether this widget view works for the uri.
186 *
187 * Return value: True to use custom widget view, False to ignore, and caja use normal view.
188 **/
caja_widget_view_provider_supports_uri(CajaWidgetViewProvider * provider,const char * uri,GFileType file_type,const char * mime_type)189 gboolean caja_widget_view_provider_supports_uri (CajaWidgetViewProvider *provider,
190 const char *uri,
191 GFileType file_type,
192 const char *mime_type)
193 {
194 g_return_val_if_fail (CAJA_IS_WIDGET_VIEW_PROVIDER (provider), FALSE);
195 g_return_val_if_fail (CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->supports_uri!= NULL, FALSE);
196
197 return CAJA_WIDGET_VIEW_PROVIDER_GET_IFACE (provider)->supports_uri (provider, uri, file_type, mime_type);
198 }
199