1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
2
3 /* fm-empty-view.c - implementation of empty view of directory.
4
5 Copyright (C) 2006 Free Software Foundation, Inc.
6
7 The Gnome Library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library 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 The Gnome Library 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 Library General Public License for more details.
16
17 You should have received a copy of the GNU Library General Public
18 License along with the Gnome Library; see the file COPYING.LIB. If not,
19 write to the Free Software Foundation, Inc., 51 Franklin Street - Suite 500,
20 Boston, MA 02110-1335, USA.
21
22 Authors: Christian Neumair <chris@gnome-de.org>
23 */
24
25 #include <config.h>
26
27 #include "nemo-empty-view.h"
28
29 #include "nemo-view.h"
30 #include "nemo-view-factory.h"
31
32 #include <string.h>
33 #include <libnemo-private/nemo-file-utilities.h>
34 #include <eel/eel-vfs-extensions.h>
35
36 struct NemoEmptyViewDetails {
37 int number_of_files;
38 };
39
40 static GList *nemo_empty_view_get_selection (NemoView *view);
41 static GList *nemo_empty_view_get_selection_for_file_transfer (NemoView *view);
42 static void nemo_empty_view_scroll_to_file (NemoView *view,
43 const char *uri);
44
G_DEFINE_TYPE(NemoEmptyView,nemo_empty_view,NEMO_TYPE_VIEW)45 G_DEFINE_TYPE (NemoEmptyView, nemo_empty_view, NEMO_TYPE_VIEW)
46
47 static void
48 nemo_empty_view_add_file (NemoView *view, NemoFile *file, NemoDirectory *directory)
49 {
50 static GTimer *timer = NULL;
51 static gdouble cumu = 0, elaps;
52 NEMO_EMPTY_VIEW (view)->details->number_of_files++;
53 GdkPixbuf *icon;
54
55 if (!timer) timer = g_timer_new ();
56
57 g_timer_start (timer);
58 icon = nemo_file_get_icon_pixbuf (file, nemo_get_icon_size_for_zoom_level (NEMO_ZOOM_LEVEL_STANDARD), TRUE, 0, NEMO_FILE_ICON_FLAGS_NONE);
59
60 elaps = g_timer_elapsed (timer, NULL);
61 g_timer_stop (timer);
62
63 g_object_unref (icon);
64
65 cumu += elaps;
66 g_message ("entire loading: %.3f, cumulative %.3f", elaps, cumu);
67 }
68
69
70 static void
nemo_empty_view_begin_loading(NemoView * view)71 nemo_empty_view_begin_loading (NemoView *view)
72 {
73 }
74
75 static void
nemo_empty_view_clear(NemoView * view)76 nemo_empty_view_clear (NemoView *view)
77 {
78 }
79
80
81 static void
nemo_empty_view_file_changed(NemoView * view,NemoFile * file,NemoDirectory * directory)82 nemo_empty_view_file_changed (NemoView *view, NemoFile *file, NemoDirectory *directory)
83 {
84 }
85
86 static GList *
nemo_empty_view_get_selection(NemoView * view)87 nemo_empty_view_get_selection (NemoView *view)
88 {
89 return NULL;
90 }
91
92
93 static GList *
nemo_empty_view_get_selection_for_file_transfer(NemoView * view)94 nemo_empty_view_get_selection_for_file_transfer (NemoView *view)
95 {
96 return NULL;
97 }
98
99 static guint
nemo_empty_view_get_item_count(NemoView * view)100 nemo_empty_view_get_item_count (NemoView *view)
101 {
102 return NEMO_EMPTY_VIEW (view)->details->number_of_files;
103 }
104
105 static gboolean
nemo_empty_view_is_empty(NemoView * view)106 nemo_empty_view_is_empty (NemoView *view)
107 {
108 return NEMO_EMPTY_VIEW (view)->details->number_of_files == 0;
109 }
110
111 static void
nemo_empty_view_end_file_changes(NemoView * view)112 nemo_empty_view_end_file_changes (NemoView *view)
113 {
114 }
115
116 static void
nemo_empty_view_remove_file(NemoView * view,NemoFile * file,NemoDirectory * directory)117 nemo_empty_view_remove_file (NemoView *view, NemoFile *file, NemoDirectory *directory)
118 {
119 NEMO_EMPTY_VIEW (view)->details->number_of_files--;
120 g_assert (NEMO_EMPTY_VIEW (view)->details->number_of_files >= 0);
121 }
122
123 static void
nemo_empty_view_set_selection(NemoView * view,GList * selection)124 nemo_empty_view_set_selection (NemoView *view, GList *selection)
125 {
126 nemo_view_notify_selection_changed (view);
127 }
128
129 static void
nemo_empty_view_select_all(NemoView * view)130 nemo_empty_view_select_all (NemoView *view)
131 {
132 }
133
134 static void
nemo_empty_view_reveal_selection(NemoView * view)135 nemo_empty_view_reveal_selection (NemoView *view)
136 {
137 }
138
139 static void
nemo_empty_view_merge_menus(NemoView * view)140 nemo_empty_view_merge_menus (NemoView *view)
141 {
142 NEMO_VIEW_CLASS (nemo_empty_view_parent_class)->merge_menus (view);
143 }
144
145 static void
nemo_empty_view_update_menus(NemoView * view)146 nemo_empty_view_update_menus (NemoView *view)
147 {
148 NEMO_VIEW_CLASS (nemo_empty_view_parent_class)->update_menus (view);
149 }
150
151 /* Reset sort criteria and zoom level to match defaults */
152 static void
nemo_empty_view_reset_to_defaults(NemoView * view)153 nemo_empty_view_reset_to_defaults (NemoView *view)
154 {
155 }
156
157 static void
nemo_empty_view_bump_zoom_level(NemoView * view,int zoom_increment)158 nemo_empty_view_bump_zoom_level (NemoView *view, int zoom_increment)
159 {
160 }
161
162 static NemoZoomLevel
nemo_empty_view_get_zoom_level(NemoView * view)163 nemo_empty_view_get_zoom_level (NemoView *view)
164 {
165 return NEMO_ZOOM_LEVEL_STANDARD;
166 }
167
168 static void
nemo_empty_view_zoom_to_level(NemoView * view,NemoZoomLevel zoom_level)169 nemo_empty_view_zoom_to_level (NemoView *view,
170 NemoZoomLevel zoom_level)
171 {
172 }
173
174 static void
nemo_empty_view_restore_default_zoom_level(NemoView * view)175 nemo_empty_view_restore_default_zoom_level (NemoView *view)
176 {
177 }
178
179 static gboolean
nemo_empty_view_can_zoom_in(NemoView * view)180 nemo_empty_view_can_zoom_in (NemoView *view)
181 {
182 return FALSE;
183 }
184
185 static gboolean
nemo_empty_view_can_zoom_out(NemoView * view)186 nemo_empty_view_can_zoom_out (NemoView *view)
187 {
188 return FALSE;
189 }
190
191 static void
nemo_empty_view_start_renaming_file(NemoView * view,NemoFile * file,gboolean select_all)192 nemo_empty_view_start_renaming_file (NemoView *view,
193 NemoFile *file,
194 gboolean select_all)
195 {
196 }
197
198 static void
nemo_empty_view_click_policy_changed(NemoView * directory_view)199 nemo_empty_view_click_policy_changed (NemoView *directory_view)
200 {
201 }
202
203
204 static int
nemo_empty_view_compare_files(NemoView * view,NemoFile * file1,NemoFile * file2)205 nemo_empty_view_compare_files (NemoView *view, NemoFile *file1, NemoFile *file2)
206 {
207 if (file1 < file2) {
208 return -1;
209 }
210
211 if (file1 > file2) {
212 return +1;
213 }
214
215 return 0;
216 }
217
218 static gboolean
nemo_empty_view_using_manual_layout(NemoView * view)219 nemo_empty_view_using_manual_layout (NemoView *view)
220 {
221 return FALSE;
222 }
223
224 static void
nemo_empty_view_end_loading(NemoView * view,gboolean all_files_seen)225 nemo_empty_view_end_loading (NemoView *view,
226 gboolean all_files_seen)
227 {
228 }
229
230 static char *
nemo_empty_view_get_first_visible_file(NemoView * view)231 nemo_empty_view_get_first_visible_file (NemoView *view)
232 {
233 return NULL;
234 }
235
236 static void
nemo_empty_view_scroll_to_file(NemoView * view,const char * uri)237 nemo_empty_view_scroll_to_file (NemoView *view,
238 const char *uri)
239 {
240 }
241
242 static void
nemo_empty_view_sort_directories_first_changed(NemoView * view)243 nemo_empty_view_sort_directories_first_changed (NemoView *view)
244 {
245 }
246
247 static const char *
nemo_empty_view_get_id(NemoView * view)248 nemo_empty_view_get_id (NemoView *view)
249 {
250 return NEMO_EMPTY_VIEW_ID;
251 }
252
253 static void
nemo_empty_view_class_init(NemoEmptyViewClass * class)254 nemo_empty_view_class_init (NemoEmptyViewClass *class)
255 {
256 NemoViewClass *nemo_view_class;
257
258 g_type_class_add_private (class, sizeof (NemoEmptyViewDetails));
259
260 nemo_view_class = NEMO_VIEW_CLASS (class);
261
262 nemo_view_class->add_file = nemo_empty_view_add_file;
263 nemo_view_class->begin_loading = nemo_empty_view_begin_loading;
264 nemo_view_class->bump_zoom_level = nemo_empty_view_bump_zoom_level;
265 nemo_view_class->can_zoom_in = nemo_empty_view_can_zoom_in;
266 nemo_view_class->can_zoom_out = nemo_empty_view_can_zoom_out;
267 nemo_view_class->click_policy_changed = nemo_empty_view_click_policy_changed;
268 nemo_view_class->clear = nemo_empty_view_clear;
269 nemo_view_class->file_changed = nemo_empty_view_file_changed;
270 nemo_view_class->get_selection = nemo_empty_view_get_selection;
271 nemo_view_class->get_selection_for_file_transfer = nemo_empty_view_get_selection_for_file_transfer;
272 nemo_view_class->get_item_count = nemo_empty_view_get_item_count;
273 nemo_view_class->is_empty = nemo_empty_view_is_empty;
274 nemo_view_class->remove_file = nemo_empty_view_remove_file;
275 nemo_view_class->merge_menus = nemo_empty_view_merge_menus;
276 nemo_view_class->update_menus = nemo_empty_view_update_menus;
277 nemo_view_class->reset_to_defaults = nemo_empty_view_reset_to_defaults;
278 nemo_view_class->restore_default_zoom_level = nemo_empty_view_restore_default_zoom_level;
279 nemo_view_class->reveal_selection = nemo_empty_view_reveal_selection;
280 nemo_view_class->select_all = nemo_empty_view_select_all;
281 nemo_view_class->set_selection = nemo_empty_view_set_selection;
282 nemo_view_class->compare_files = nemo_empty_view_compare_files;
283 nemo_view_class->sort_directories_first_changed = nemo_empty_view_sort_directories_first_changed;
284 nemo_view_class->start_renaming_file = nemo_empty_view_start_renaming_file;
285 nemo_view_class->get_zoom_level = nemo_empty_view_get_zoom_level;
286 nemo_view_class->zoom_to_level = nemo_empty_view_zoom_to_level;
287 nemo_view_class->end_file_changes = nemo_empty_view_end_file_changes;
288 nemo_view_class->using_manual_layout = nemo_empty_view_using_manual_layout;
289 nemo_view_class->end_loading = nemo_empty_view_end_loading;
290 nemo_view_class->get_view_id = nemo_empty_view_get_id;
291 nemo_view_class->get_first_visible_file = nemo_empty_view_get_first_visible_file;
292 nemo_view_class->scroll_to_file = nemo_empty_view_scroll_to_file;
293 }
294
295 static void
nemo_empty_view_init(NemoEmptyView * empty_view)296 nemo_empty_view_init (NemoEmptyView *empty_view)
297 {
298 empty_view->details = G_TYPE_INSTANCE_GET_PRIVATE (empty_view, NEMO_TYPE_EMPTY_VIEW,
299 NemoEmptyViewDetails);
300 }
301
302 static NemoView *
nemo_empty_view_create(NemoWindowSlot * slot)303 nemo_empty_view_create (NemoWindowSlot *slot)
304 {
305 NemoEmptyView *view;
306
307 g_assert (NEMO_IS_WINDOW_SLOT (slot));
308
309 view = g_object_new (NEMO_TYPE_EMPTY_VIEW,
310 "window-slot", slot,
311 NULL);
312
313 return NEMO_VIEW (view);
314 }
315
316 static gboolean
nemo_empty_view_supports_uri(const char * uri,GFileType file_type,const char * mime_type)317 nemo_empty_view_supports_uri (const char *uri,
318 GFileType file_type,
319 const char *mime_type)
320 {
321 if (file_type == G_FILE_TYPE_DIRECTORY) {
322 return TRUE;
323 }
324 if (strcmp (mime_type, NEMO_SAVED_SEARCH_MIMETYPE) == 0){
325 return TRUE;
326 }
327 if (g_str_has_prefix (uri, "trash:")) {
328 return TRUE;
329 }
330 if (g_str_has_prefix (uri, EEL_SEARCH_URI)) {
331 return TRUE;
332 }
333
334 return FALSE;
335 }
336
337 static NemoViewInfo nemo_empty_view = {
338 NEMO_EMPTY_VIEW_ID,
339 "Empty",
340 "Empty View",
341 "_Empty View",
342 "The empty view encountered an error.",
343 "Display this location with the empty view.",
344 nemo_empty_view_create,
345 nemo_empty_view_supports_uri
346 };
347
348 void
nemo_empty_view_register(void)349 nemo_empty_view_register (void)
350 {
351 nemo_empty_view.id = nemo_empty_view.id;
352 nemo_empty_view.view_combo_label = nemo_empty_view.view_combo_label;
353 nemo_empty_view.view_menu_label_with_mnemonic = nemo_empty_view.view_menu_label_with_mnemonic;
354 nemo_empty_view.error_label = nemo_empty_view.error_label;
355 nemo_empty_view.display_location_label = nemo_empty_view.display_location_label;
356
357 nemo_view_factory_register (&nemo_empty_view);
358 }
359