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