1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 
3 /*
4  *  Engrampa
5  *
6  *  Copyright (C) 2007 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, write to the Free Software
20  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21  */
22 
23 #ifndef FR_WINDOW_H
24 #define FR_WINDOW_H
25 
26 #include <gio/gio.h>
27 #include <gtk/gtk.h>
28 #include "typedefs.h"
29 #include "fr-archive.h"
30 
31 
32 enum {
33 	COLUMN_FILE_DATA,
34 	COLUMN_ICON,
35 	COLUMN_NAME,
36 	COLUMN_EMBLEM,
37 	COLUMN_SIZE,
38 	COLUMN_TYPE,
39 	COLUMN_TIME,
40 	COLUMN_PATH,
41 	NUMBER_OF_COLUMNS
42 };
43 
44 enum {
45 	TREE_COLUMN_PATH,
46 	TREE_COLUMN_ICON,
47 	TREE_COLUMN_NAME,
48 	TREE_COLUMN_WEIGHT,
49 	TREE_NUMBER_OF_COLUMNS
50 };
51 
52 typedef enum {
53 	FR_BATCH_ACTION_NONE,
54 	FR_BATCH_ACTION_LOAD,
55 	FR_BATCH_ACTION_OPEN,
56 	FR_BATCH_ACTION_ADD,
57 	FR_BATCH_ACTION_EXTRACT,
58 	FR_BATCH_ACTION_EXTRACT_HERE,
59 	FR_BATCH_ACTION_EXTRACT_INTERACT,
60 	FR_BATCH_ACTION_RENAME,
61 	FR_BATCH_ACTION_PASTE,
62 	FR_BATCH_ACTION_OPEN_FILES,
63 	FR_BATCH_ACTION_SAVE_AS,
64 	FR_BATCH_ACTION_TEST,
65 	FR_BATCH_ACTION_CLOSE,
66 	FR_BATCH_ACTION_QUIT,
67 	FR_BATCH_ACTIONS
68 } FrBatchActionType;
69 
70 /* -- FrWindow -- */
71 
72 #define FR_TYPE_WINDOW              (fr_window_get_type ())
73 #define FR_WINDOW(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), FR_TYPE_WINDOW, FrWindow))
74 #define FR_WINDOW_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), FR_WINDOW_TYPE, FrWindowClass))
75 #define FR_IS_WINDOW(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FR_TYPE_WINDOW))
76 #define FR_IS_WINDOW_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), FR_TYPE_WINDOW))
77 #define FR_WINDOW_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS((obj), FR_TYPE_WINDOW, FrWindowClass))
78 
79 typedef struct _FrWindow            FrWindow;
80 typedef struct _FrWindowClass       FrWindowClass;
81 typedef struct _FrWindowPrivateData FrWindowPrivateData;
82 
83 struct _FrWindow
84 {
85 	GtkApplicationWindow __parent;
86 	FrArchive *archive;
87 	FrWindowPrivateData *priv;
88 };
89 
90 struct _FrWindowClass
91 {
92 	GtkApplicationWindowClass __parent_class;
93 
94 	/*<signals>*/
95 
96 	void (*archive_loaded) (FrWindow   *window,
97 				gboolean    success);
98 	void (*progress)       (FrWindow   *window,
99 			        double      fraction,
100 			        const char *msg);
101 	void (*ready)          (FrWindow   *window,
102 				GError     *error);
103 };
104 
105 GType       fr_window_get_type                  (void);
106 GtkWidget * fr_window_new                       (void);
107 void        fr_window_close                     (FrWindow      *window);
108 
109 /* archive operations */
110 
111 gboolean    fr_window_archive_new               (FrWindow      *window,
112 						 const char    *uri);
113 FrWindow *  fr_window_archive_open              (FrWindow      *window,
114 						 const char    *uri,
115 						 GtkWindow     *parent);
116 void        fr_window_archive_close             (FrWindow      *window);
117 const char *fr_window_get_archive_uri           (FrWindow      *window);
118 const char *fr_window_get_paste_archive_uri     (FrWindow      *window);
119 gboolean    fr_window_archive_is_present        (FrWindow      *window);
120 void        fr_window_archive_save_as           (FrWindow      *window,
121 						 const char    *filename,
122 						 const char    *password,
123 						 gboolean       encrypt_header,
124 						 guint          volume_size);
125 void        fr_window_archive_reload            (FrWindow      *window);
126 void        fr_window_archive_add_files         (FrWindow      *window,
127 						 GList         *file_list, /* GFile list */
128 						 gboolean       update);
129 void        fr_window_archive_add_with_wildcard (FrWindow      *window,
130 						 const char    *include_files,
131 						 const char    *exclude_files,
132 						 const char    *exclude_folders,
133 						 const char    *base_dir,
134 						 const char    *dest_dir,
135 						 gboolean       update,
136 						 gboolean       follow_links);
137 void        fr_window_archive_add_directory     (FrWindow      *window,
138 						 const char    *directory,
139 						 const char    *base_dir,
140 						 const char    *dest_dir,
141 						 gboolean       update);
142 void        fr_window_archive_add_items         (FrWindow      *window,
143 						 GList         *dir_list,
144 						 const char    *base_dir,
145 						 const char    *dest_dir,
146 						 gboolean       update);
147 void        fr_window_archive_add_dropped_items (FrWindow      *window,
148 						 GList         *item_list,
149 						 gboolean       update);
150 void        fr_window_archive_remove            (FrWindow      *window,
151 						 GList         *file_list);
152 void        fr_window_archive_extract           (FrWindow      *window,
153 						 GList         *file_list,
154 						 const char    *extract_to_dir,
155 						 const char    *base_dir,
156 						 gboolean       skip_older,
157 						 FrOverwrite    overwrite,
158 						 gboolean       junk_paths,
159 						 gboolean       ask_to_open_destination);
160 void        fr_window_archive_extract_here      (FrWindow      *window,
161 						 gboolean       skip_older,
162 						 gboolean       overwrite,
163 						 gboolean       junk_paths);
164 void        fr_window_archive_test	        (FrWindow      *window);
165 
166 /**/
167 
168 void        fr_window_set_password              (FrWindow      *window,
169 						 const char    *password);
170 void        fr_window_set_password_for_paste    (FrWindow      *window,
171 					         const char    *password);
172 const char *fr_window_get_password              (FrWindow      *window);
173 void        fr_window_set_encrypt_header        (FrWindow      *window,
174 						 gboolean       encrypt_header);
175 gboolean    fr_window_get_encrypt_header        (FrWindow      *window);
176 void        fr_window_set_compression 	        (FrWindow      *window,
177 						 FrCompression  compression);
178 FrCompression fr_window_get_compression 	(FrWindow      *window);
179 void        fr_window_set_volume_size 	        (FrWindow      *window,
180 						 guint          volume_size);
181 guint       fr_window_get_volume_size 	        (FrWindow      *window);
182 
183 /**/
184 
185 void       fr_window_go_to_location             (FrWindow       *window,
186 					 	 const char     *path,
187 					 	 gboolean        force_update);
188 const char*fr_window_get_current_location       (FrWindow       *window);
189 void       fr_window_go_up_one_level            (FrWindow       *window);
190 void       fr_window_go_back                    (FrWindow       *window);
191 void       fr_window_go_forward                 (FrWindow       *window);
192 void       fr_window_current_folder_activated   (FrWindow       *window,
193 						 gboolean        from_sidebar);
194 void       fr_window_set_list_mode              (FrWindow       *window,
195 						 FrWindowListMode  list_mode);
196 
197 /**/
198 
199 void       fr_window_update_list_order            (FrWindow    *window);
200 GList *    fr_window_get_file_list_selection      (FrWindow    *window,
201 						   gboolean     recursive,
202 						   gboolean    *has_dirs);
203 GList *    fr_window_get_file_list_from_path_list (FrWindow    *window,
204 						   GList       *path_list,
205 						   gboolean    *has_dirs);
206 GList *    fr_window_get_file_list_pattern        (FrWindow    *window,
207 						   const char  *pattern);
208 int        fr_window_get_n_selected_files         (FrWindow    *window);
209 GList *    fr_window_get_folder_tree_selection    (FrWindow    *window,
210 				     		   gboolean     recursive,
211 				     		   gboolean    *has_dirs);
212 GList *    fr_window_get_selection                (FrWindow    *window,
213 		  	 			   gboolean     from_sidebar,
214 		  	 			   char       **return_base_dir);
215 GtkTreeModel *
216 	   fr_window_get_list_store               (FrWindow    *window);
217 void       fr_window_find                         (FrWindow    *window);
218 void       fr_window_select_all                   (FrWindow    *window);
219 void       fr_window_unselect_all                 (FrWindow    *window);
220 void       fr_window_set_sort_type                (FrWindow    *window,
221 						   GtkSortType  sort_type);
222 
223 /**/
224 
225 void       fr_window_rename_selection             (FrWindow    *window,
226 						   gboolean     from_sidebar);
227 void       fr_window_cut_selection                (FrWindow    *window,
228 						   gboolean     from_sidebar);
229 void       fr_window_copy_selection               (FrWindow    *window,
230 						   gboolean     from_sidebar);
231 void       fr_window_paste_selection              (FrWindow    *window,
232 						   gboolean     from_sidebar);
233 
234 /**/
235 
236 void       fr_window_stop                         (FrWindow    *window);
237 void       fr_window_start_activity_mode          (FrWindow    *window);
238 void       fr_window_stop_activity_mode           (FrWindow    *window);
239 
240 /**/
241 
242 void        fr_window_view_last_output            (FrWindow   *window,
243 						   const char *title);
244 
245 void        fr_window_open_files                  (FrWindow   *window,
246 						   GList      *file_list,
247 						   gboolean    ask_application);
248 void        fr_window_open_files_with_command     (FrWindow   *window,
249 						   GList      *file_list,
250 						   char       *command);
251 void        fr_window_open_files_with_application (FrWindow   *window,
252 						   GList      *file_list,
253 						   GAppInfo   *app);
254 gboolean    fr_window_update_files                (FrWindow   *window,
255 						   GList      *file_list);
256 void        fr_window_update_columns_visibility   (FrWindow   *window);
257 void        fr_window_update_history_list         (FrWindow   *window);
258 void        fr_window_set_default_dir             (FrWindow   *window,
259 						   const char *default_dir,
260 						   gboolean    freeze);
261 void        fr_window_set_open_default_dir        (FrWindow   *window,
262 						   const char *default_dir);
263 const char *fr_window_get_open_default_dir        (FrWindow   *window);
264 void        fr_window_set_add_default_dir         (FrWindow   *window,
265 						   const char *default_dir);
266 const char *fr_window_get_add_default_dir         (FrWindow   *window);
267 void        fr_window_set_extract_default_dir     (FrWindow   *window,
268 						   const char *default_dir,
269 						   gboolean    freeze);
270 const char *fr_window_get_extract_default_dir     (FrWindow   *window);
271 void        fr_window_push_message                (FrWindow   *window,
272 						   const char *msg);
273 void        fr_window_pop_message                 (FrWindow   *window);
274 void        fr_window_set_toolbar_visibility      (FrWindow   *window,
275 						   gboolean    value);
276 void        fr_window_set_statusbar_visibility    (FrWindow   *window,
277 						   gboolean    value);
278 void        fr_window_set_folders_visibility      (FrWindow   *window,
279 						   gboolean    value);
280 void        fr_window_use_progress_dialog         (FrWindow   *window,
281 						   gboolean    value);
282 
283 /* batch mode procedures. */
284 
285 void       fr_window_new_batch                    (FrWindow      *window,
286 						   const char    *title);
287 void       fr_window_set_current_batch_action     (FrWindow      *window,
288 						   FrBatchActionType  action,
289 						   void          *data,
290 						   GFreeFunc      free_func);
291 void       fr_window_reset_current_batch_action   (FrWindow      *window);
292 void       fr_window_restart_current_batch_action (FrWindow      *window);
293 void       fr_window_append_batch_action          (FrWindow      *window,
294 						   FrBatchActionType  action,
295 						   void          *data,
296 						   GFreeFunc      free_func);
297 void       fr_window_start_batch                  (FrWindow      *window);
298 void       fr_window_stop_batch                   (FrWindow      *window);
299 void       fr_window_resume_batch                 (FrWindow      *window);
300 gboolean   fr_window_is_batch_mode                (FrWindow      *window);
301 void       fr_window_set_batch__extract           (FrWindow      *window,
302 						   const char    *filename,
303 						   const char    *dest_dir);
304 void       fr_window_set_batch__extract_here      (FrWindow      *window,
305 						   const char    *filename);
306 void       fr_window_set_batch__add               (FrWindow      *window,
307 						   const char    *archive,
308 						   GList         *file_list);
309 void       fr_window_destroy_with_error_dialog    (FrWindow      *window);
310 
311 /**/
312 
313 gboolean   fr_window_file_list_drag_data_get (FrWindow         *window,
314 					      GdkDragContext   *context,
315 					      GtkSelectionData *selection_data,
316 					      GList            *path_list);
317 
318 void       fr_window_update_dialog_closed    (FrWindow *window);
319 
320 #endif /* FR_WINDOW_H */
321