1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 
3 /*
4  *  File-Roller
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, see <http://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef FR_WINDOW_H
23 #define FR_WINDOW_H
24 
25 #include <gio/gio.h>
26 #include <gtk/gtk.h>
27 #include "typedefs.h"
28 #include "fr-archive.h"
29 #include "fr-error.h"
30 
31 enum {
32 	COLUMN_FILE_DATA,
33 	COLUMN_ICON,
34 	COLUMN_NAME,
35 	COLUMN_EMBLEM,
36 	COLUMN_SIZE,
37 	COLUMN_TYPE,
38 	COLUMN_TIME,
39 	COLUMN_PATH,
40 	NUMBER_OF_COLUMNS
41 };
42 
43 enum {
44 	TREE_COLUMN_PATH,
45 	TREE_COLUMN_ICON,
46 	TREE_COLUMN_NAME,
47 	TREE_COLUMN_WEIGHT,
48 	TREE_NUMBER_OF_COLUMNS
49 };
50 
51 typedef enum {
52 	FR_BATCH_ACTION_NONE,
53 	FR_BATCH_ACTION_LOAD,
54 	FR_BATCH_ACTION_OPEN,
55 	FR_BATCH_ACTION_ADD,
56 	FR_BATCH_ACTION_REMOVE,
57 	FR_BATCH_ACTION_EXTRACT,
58 	FR_BATCH_ACTION_EXTRACT_HERE,
59 	FR_BATCH_ACTION_EXTRACT_ASK_OPTIONS,
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_ENCRYPT,
66 	FR_BATCH_ACTION_CLOSE,
67 	FR_BATCH_ACTION_QUIT,
68 	FR_BATCH_ACTIONS
69 } FrBatchActionType;
70 
71 /* -- FrWindow -- */
72 
73 #define FR_TYPE_WINDOW              (fr_window_get_type ())
74 #define FR_WINDOW(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), FR_TYPE_WINDOW, FrWindow))
75 #define FR_WINDOW_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), FR_WINDOW_TYPE, FrWindowClass))
76 #define FR_IS_WINDOW(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FR_TYPE_WINDOW))
77 #define FR_IS_WINDOW_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), FR_TYPE_WINDOW))
78 #define FR_WINDOW_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS((obj), FR_TYPE_WINDOW, FrWindowClass))
79 
80 typedef struct _FrWindow        FrWindow;
81 typedef struct _FrWindowClass   FrWindowClass;
82 typedef struct _FrWindowPrivate FrWindowPrivate;
83 
84 struct _FrWindow
85 {
86 	GtkApplicationWindow __parent;
87 	FrWindowPrivate *priv;
88 	FrArchive *archive;
89 };
90 
91 struct _FrWindowClass
92 {
93 	GtkApplicationWindowClass __parent_class;
94 
95 	/*<signals>*/
96 
97 	void (*archive_loaded) (FrWindow   *window,
98 				gboolean    success);
99 	void (*progress)       (FrWindow   *window,
100 			        double      fraction,
101 			        const char *msg);
102 	void (*ready)          (FrWindow   *window,
103 				GError     *error);
104 };
105 
106 GType           fr_window_get_type                     (void);
107 GtkWidget *     fr_window_new                          (void);
108 void            fr_window_close                        (FrWindow      *window);
109 void            fr_window_set_dialog		       (FrWindow      *window,
110 							const char    *dialog_name,
111 							GtkWidget     *dialog);
112 gboolean        fr_window_present_dialog_if_created    (FrWindow      *window,
113 							const char    *dialog_name);
114 
115 /* archive operations */
116 
117 gboolean        fr_window_archive_new                  (FrWindow      *window,
118 							GFile         *file,
119 						        const char    *mime_type);
120 FrWindow *      fr_window_archive_open                 (FrWindow      *window,
121 							GFile         *file,
122 						        GtkWindow     *parent);
123 void            fr_window_archive_close                (FrWindow      *window);
124 GFile *         fr_window_get_archive_file             (FrWindow      *window);
125 GFile *         fr_window_get_archive_file_for_paste   (FrWindow      *window);
126 gboolean        fr_window_archive_is_present           (FrWindow      *window);
127 void            fr_window_archive_reload               (FrWindow      *window);
128 void            fr_window_archive_add_files            (FrWindow      *window,
129 							GList         *file_list, /* GFile list */
130 							GFile         *base_dir,
131 							gboolean       update);
132 void            fr_window_archive_add_with_filter      (FrWindow      *window,
133 							GList         *files, /* GFile list */
134 							GFile         *base_dir,
135 						        const char    *include_files,
136 						        const char    *exclude_files,
137 						        const char    *exclude_folders,
138 						        const char    *dest_dir,
139 						        gboolean       update,
140 						        gboolean       follow_links);
141 void            fr_window_archive_add_dropped_items    (FrWindow      *window,
142 						        GList         *file_list);
143 void            fr_window_archive_remove               (FrWindow      *window,
144 						        GList         *file_list);
145 void            fr_window_archive_extract              (FrWindow      *window,
146 						        GList         *file_list,
147 						        GFile         *destination,
148 						        const char    *base_dir,
149 						        gboolean       skip_older,
150 						        FrOverwrite    overwrite,
151 						        gboolean       junk_paths,
152 							gboolean       ask_to_open_destination);
153 void            fr_window_archive_extract_here         (FrWindow      *window,
154 						        gboolean       skip_older,
155 						        gboolean       overwrite,
156 						        gboolean       junk_paths);
157 void            fr_window_archive_test	               (FrWindow      *window);
158 void            fr_window_archive_encrypt              (FrWindow      *window,
159 							const char    *password,
160 							gboolean       encrypt_header);
161 
162 /**/
163 
164 void            fr_window_set_password                 (FrWindow      *window,
165 						        const char    *password);
166 void            fr_window_set_password_for_second_archive
167 						       (FrWindow      *window,
168 						        const char    *password);
169 const char *    fr_window_get_password                 (FrWindow      *window);
170 const char *    fr_window_get_password_for_second_archive
171 						       (FrWindow      *window);
172 void            fr_window_set_encrypt_header           (FrWindow      *window,
173 						        gboolean       encrypt_header);
174 gboolean        fr_window_get_encrypt_header           (FrWindow      *window);
175 void            fr_window_set_compression 	       (FrWindow      *window,
176 						        FrCompression  compression);
177 FrCompression   fr_window_get_compression 	       (FrWindow      *window);
178 void            fr_window_set_volume_size 	       (FrWindow      *window,
179 						        guint          volume_size);
180 guint           fr_window_get_volume_size 	       (FrWindow      *window);
181 
182 /**/
183 
184 void            fr_window_go_to_location               (FrWindow      *window,
185 						        const char    *path,
186 						        gboolean       force_update);
187 const char *    fr_window_get_current_location         (FrWindow      *window);
188 void            fr_window_go_up_one_level              (FrWindow      *window);
189 void            fr_window_go_back                      (FrWindow      *window);
190 void            fr_window_go_forward                   (FrWindow      *window);
191 void            fr_window_current_folder_activated     (FrWindow      *window,
192 						        gboolean       from_sidebar);
193 void            fr_window_set_list_mode                (FrWindow      *window,
194 						        FrWindowListMode
195 						        	       list_mode);
196 
197 /**/
198 
199 GList *         fr_window_get_file_list_selection      (FrWindow    *window,
200 						        gboolean     recursive,
201 						        gboolean    *has_dirs);
202 GList *         fr_window_get_file_list_from_path_list (FrWindow    *window,
203 						        GList       *path_list,
204 						        gboolean    *has_dirs);
205 GList *         fr_window_get_file_list_pattern        (FrWindow    *window,
206 						        const char  *pattern);
207 int             fr_window_get_n_selected_files         (FrWindow    *window);
208 GList *         fr_window_get_folder_tree_selection    (FrWindow    *window,
209 						        gboolean     recursive,
210 						        gboolean    *has_dirs);
211 GList *         fr_window_get_selection                (FrWindow    *window,
212 						        gboolean     from_sidebar,
213 						        char       **return_base_dir);
214 GtkTreeModel *  fr_window_get_list_store               (FrWindow    *window);
215 void            fr_window_find                         (FrWindow    *window,
216 							gboolean     active);
217 void            fr_window_select_all                   (FrWindow    *window);
218 void            fr_window_unselect_all                 (FrWindow    *window);
219 
220 /**/
221 
222 void            fr_window_rename_selection             (FrWindow    *window,
223 						        gboolean     from_sidebar);
224 void            fr_window_cut_selection                (FrWindow    *window,
225 						        gboolean     from_sidebar);
226 void            fr_window_copy_selection               (FrWindow    *window,
227 						        gboolean     from_sidebar);
228 void            fr_window_paste_selection              (FrWindow    *window,
229 						        gboolean     from_sidebar);
230 
231 /**/
232 
233 void            fr_window_stop                         (FrWindow    *window);
234 
235 /**/
236 
237 void            fr_window_action_new_archive           (FrWindow   *window);
238 gboolean        fr_window_create_archive_and_continue  (FrWindow   *window,
239 							GFile      *file,
240 							const char *mime_type,
241 							GtkWindow  *error_dialog_parent);
242 void            fr_window_action_save_as               (FrWindow   *window);
243 void            fr_window_view_last_output             (FrWindow   *window,
244 						        const char *title);
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_history_list          (FrWindow   *window);
257 void            fr_window_set_default_dir              (FrWindow   *window,
258 							GFile      *default_dir,
259 						        gboolean    freeze);
260 void            fr_window_set_open_default_dir         (FrWindow   *window,
261 							GFile      *default_dir);
262 GFile *         fr_window_get_open_default_dir         (FrWindow   *window);
263 void            fr_window_set_add_default_dir          (FrWindow   *window,
264 							GFile      *default_dir);
265 GFile *         fr_window_get_add_default_dir          (FrWindow   *window);
266 void            fr_window_set_extract_default_dir      (FrWindow   *window,
267 							GFile      *default_dir);
268 GFile *         fr_window_get_extract_default_dir      (FrWindow   *window);
269 void            fr_window_set_folders_visibility       (FrWindow   *window,
270 						        gboolean    value);
271 void            fr_window_use_progress_dialog          (FrWindow   *window,
272 						        gboolean    value);
273 
274 /* batch mode procedures. */
275 
276 void            fr_window_set_current_action  	       (FrWindow      *window,
277 						        FrBatchActionType
278 								       action,
279 						        void          *data,
280 						        GFreeFunc      free_func);
281 void            fr_window_reset_current_action         (FrWindow      *window);
282 void            fr_window_restart_current_action       (FrWindow      *window);
283 
284 void            fr_window_batch_new                    (FrWindow      *window,
285 						        const char    *title);
286 const char *    fr_window_batch_get_title              (FrWindow      *window);
287 void            fr_window_batch_append_action          (FrWindow      *window,
288 						        FrBatchActionType
289 						        	       action,
290 						        void          *data,
291 						        GFreeFunc      free_func);
292 void            fr_window_batch_replace_current_action (FrWindow      *window,
293 							FrBatchActionType
294 								       action,
295 							void          *data,
296 							GFreeFunc      free_func);
297 FrBatchActionType
298 		fr_window_batch_get_current_action_type(FrWindow      *window);
299 void            fr_window_batch_start                  (FrWindow      *window);
300 void            fr_window_batch_stop                   (FrWindow      *window);
301 void            fr_window_batch_stop_with_error        (FrWindow      *window,
302 							FrAction       action,
303 							FrErrorType    error_type,
304 							const char    *error_message);
305 void            fr_window_batch_resume                 (FrWindow      *window);
306 gboolean        fr_window_is_batch_mode                (FrWindow      *window);
307 void            fr_window_batch__extract               (FrWindow      *window,
308 						        GFile         *archive,
309 						        GFile         *destination,
310 							gboolean       ask_to_open_destination);
311 void            fr_window_batch__extract_here          (FrWindow      *window,
312 							GFile         *archive,
313 							gboolean       ask_to_open_destination);
314 void            fr_window_batch__add_files             (FrWindow      *window,
315 							GFile         *archive,
316 						        GList         *file_list);
317 void            fr_window_destroy_with_error_dialog    (FrWindow      *window);
318 void            fr_window_set_notify                   (FrWindow      *window,
319 							gboolean       notify);
320 
321 /**/
322 
323 gboolean        fr_window_file_list_drag_data_get      (FrWindow         *window,
324 						        GdkDragContext   *context,
325 						        GtkSelectionData *selection_data,
326 						        GList            *path_list);
327 void            fr_window_update_dialog_closed         (FrWindow         *window);
328 void		fr_window_dnd_extraction_finished      (FrWindow	 *window,
329 							gboolean	  error);
330 void            fr_window_extract_archive_and_continue (FrWindow   *window,
331 							GList      *file_list,
332 							GFile      *destination,
333 							const char *base_dir,
334 							gboolean    skip_older,
335 							FrOverwrite overwrite,
336 							gboolean    junk_paths);
337 
338 #endif /* FR_WINDOW_H */
339