1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ 2 3 /* nemo-file-undo-operations.h - Manages undo/redo of file operations 4 * 5 * Copyright (C) 2007-2011 Amos Brocco 6 * Copyright (C) 2010 Red Hat, Inc. 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public 10 * License as published by the Free Software Foundation; either 11 * version 2 of the License, or (at your option) any later version. 12 * 13 * This library 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 GNU 16 * General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public 19 * License along with this library; if not, write to the 20 * Free Software Foundation, Inc., 51 Franklin Street - Suite 500, 21 * Boston, MA 02110-1335, USA. 22 * 23 * Authors: Amos Brocco <amos.brocco@gmail.com> 24 * Cosimo Cecchi <cosimoc@redhat.com> 25 * 26 */ 27 28 #ifndef __NEMO_FILE_UNDO_OPERATIONS_H__ 29 #define __NEMO_FILE_UNDO_OPERATIONS_H__ 30 31 #include <gio/gio.h> 32 #include <gtk/gtk.h> 33 34 typedef enum { 35 NEMO_FILE_UNDO_OP_COPY, 36 NEMO_FILE_UNDO_OP_DUPLICATE, 37 NEMO_FILE_UNDO_OP_MOVE, 38 NEMO_FILE_UNDO_OP_RENAME, 39 NEMO_FILE_UNDO_OP_CREATE_EMPTY_FILE, 40 NEMO_FILE_UNDO_OP_CREATE_FILE_FROM_TEMPLATE, 41 NEMO_FILE_UNDO_OP_CREATE_FOLDER, 42 NEMO_FILE_UNDO_OP_MOVE_TO_TRASH, 43 NEMO_FILE_UNDO_OP_RESTORE_FROM_TRASH, 44 NEMO_FILE_UNDO_OP_CREATE_LINK, 45 NEMO_FILE_UNDO_OP_RECURSIVE_SET_PERMISSIONS, 46 NEMO_FILE_UNDO_OP_SET_PERMISSIONS, 47 NEMO_FILE_UNDO_OP_CHANGE_GROUP, 48 NEMO_FILE_UNDO_OP_CHANGE_OWNER, 49 NEMO_FILE_UNDO_OP_NUM_TYPES, 50 } NemoFileUndoOp; 51 52 #define NEMO_TYPE_FILE_UNDO_INFO (nemo_file_undo_info_get_type ()) 53 #define NEMO_FILE_UNDO_INFO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NEMO_TYPE_FILE_UNDO_INFO, NemoFileUndoInfo)) 54 #define NEMO_FILE_UNDO_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NEMO_TYPE_FILE_UNDO_INFO, NemoFileUndoInfoClass)) 55 #define NEMO_IS_FILE_UNDO_INFO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NEMO_TYPE_FILE_UNDO_INFO)) 56 #define NEMO_IS_FILE_UNDO_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NEMO_TYPE_FILE_UNDO_INFO)) 57 #define NEMO_FILE_UNDO_INFO_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NEMO_TYPE_FILE_UNDO_INFO, NemoFileUndoInfoClass)) 58 59 typedef struct _NemoFileUndoInfo NemoFileUndoInfo; 60 typedef struct _NemoFileUndoInfoClass NemoFileUndoInfoClass; 61 typedef struct _NemoFileUndoInfoDetails NemoFileUndoInfoDetails; 62 63 struct _NemoFileUndoInfo { 64 GObject parent; 65 NemoFileUndoInfoDetails *priv; 66 }; 67 68 struct _NemoFileUndoInfoClass { 69 GObjectClass parent_class; 70 71 void (* undo_func) (NemoFileUndoInfo *self, 72 GtkWindow *parent_window); 73 void (* redo_func) (NemoFileUndoInfo *self, 74 GtkWindow *parent_window); 75 76 void (* strings_func) (NemoFileUndoInfo *self, 77 gchar **undo_label, 78 gchar **undo_description, 79 gchar **redo_label, 80 gchar **redo_description); 81 }; 82 83 GType nemo_file_undo_info_get_type (void) G_GNUC_CONST; 84 85 void nemo_file_undo_info_apply_async (NemoFileUndoInfo *self, 86 gboolean undo, 87 GtkWindow *parent_window, 88 GAsyncReadyCallback callback, 89 gpointer user_data); 90 gboolean nemo_file_undo_info_apply_finish (NemoFileUndoInfo *self, 91 GAsyncResult *res, 92 gboolean *user_cancel, 93 GError **error); 94 95 void nemo_file_undo_info_get_strings (NemoFileUndoInfo *self, 96 gchar **undo_label, 97 gchar **undo_description, 98 gchar **redo_label, 99 gchar **redo_description); 100 101 /* copy/move/duplicate/link/restore from trash */ 102 #define NEMO_TYPE_FILE_UNDO_INFO_EXT (nemo_file_undo_info_ext_get_type ()) 103 #define NEMO_FILE_UNDO_INFO_EXT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NEMO_TYPE_FILE_UNDO_INFO_EXT, NemoFileUndoInfoExt)) 104 #define NEMO_FILE_UNDO_INFO_EXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NEMO_TYPE_FILE_UNDO_INFO_EXT, NemoFileUndoInfoExtClass)) 105 #define NEMO_IS_FILE_UNDO_INFO_EXT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NEMO_TYPE_FILE_UNDO_INFO_EXT)) 106 #define NEMO_IS_FILE_UNDO_INFO_EXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NEMO_TYPE_FILE_UNDO_INFO_EXT)) 107 #define NEMO_FILE_UNDO_INFO_EXT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NEMO_TYPE_FILE_UNDO_INFO_EXT, NemoFileUndoInfoExtClass)) 108 109 typedef struct _NemoFileUndoInfoExt NemoFileUndoInfoExt; 110 typedef struct _NemoFileUndoInfoExtClass NemoFileUndoInfoExtClass; 111 typedef struct _NemoFileUndoInfoExtDetails NemoFileUndoInfoExtDetails; 112 113 struct _NemoFileUndoInfoExt { 114 NemoFileUndoInfo parent; 115 NemoFileUndoInfoExtDetails *priv; 116 }; 117 118 struct _NemoFileUndoInfoExtClass { 119 NemoFileUndoInfoClass parent_class; 120 }; 121 122 GType nemo_file_undo_info_ext_get_type (void) G_GNUC_CONST; 123 NemoFileUndoInfo *nemo_file_undo_info_ext_new (NemoFileUndoOp op_type, 124 gint item_count, 125 GFile *src_dir, 126 GFile *target_dir); 127 void nemo_file_undo_info_ext_add_origin_target_pair (NemoFileUndoInfoExt *self, 128 GFile *origin, 129 GFile *target); 130 131 /* create new file/folder */ 132 #define NEMO_TYPE_FILE_UNDO_INFO_CREATE (nemo_file_undo_info_create_get_type ()) 133 #define NEMO_FILE_UNDO_INFO_CREATE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NEMO_TYPE_FILE_UNDO_INFO_CREATE, NemoFileUndoInfoCreate)) 134 #define NEMO_FILE_UNDO_INFO_CREATE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NEMO_TYPE_FILE_UNDO_INFO_CREATE, NemoFileUndoInfoCreateClass)) 135 #define NEMO_IS_FILE_UNDO_INFO_CREATE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NEMO_TYPE_FILE_UNDO_INFO_CREATE)) 136 #define NEMO_IS_FILE_UNDO_INFO_CREATE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NEMO_TYPE_FILE_UNDO_INFO_CREATE)) 137 #define NEMO_FILE_UNDO_INFO_CREATE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NEMO_TYPE_FILE_UNDO_INFO_CREATE, NemoFileUndoInfoCreateClass)) 138 139 typedef struct _NemoFileUndoInfoCreate NemoFileUndoInfoCreate; 140 typedef struct _NemoFileUndoInfoCreateClass NemoFileUndoInfoCreateClass; 141 typedef struct _NemoFileUndoInfoCreateDetails NemoFileUndoInfoCreateDetails; 142 143 struct _NemoFileUndoInfoCreate { 144 NemoFileUndoInfo parent; 145 NemoFileUndoInfoCreateDetails *priv; 146 }; 147 148 struct _NemoFileUndoInfoCreateClass { 149 NemoFileUndoInfoClass parent_class; 150 }; 151 152 GType nemo_file_undo_info_create_get_type (void) G_GNUC_CONST; 153 NemoFileUndoInfo *nemo_file_undo_info_create_new (NemoFileUndoOp op_type); 154 void nemo_file_undo_info_create_set_data (NemoFileUndoInfoCreate *self, 155 GFile *file, 156 const char *template, 157 gint length); 158 159 /* rename */ 160 #define NEMO_TYPE_FILE_UNDO_INFO_RENAME (nemo_file_undo_info_rename_get_type ()) 161 #define NEMO_FILE_UNDO_INFO_RENAME(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NEMO_TYPE_FILE_UNDO_INFO_RENAME, NemoFileUndoInfoRename)) 162 #define NEMO_FILE_UNDO_INFO_RENAME_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NEMO_TYPE_FILE_UNDO_INFO_RENAME, NemoFileUndoInfoRenameClass)) 163 #define NEMO_IS_FILE_UNDO_INFO_RENAME(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NEMO_TYPE_FILE_UNDO_INFO_RENAME)) 164 #define NEMO_IS_FILE_UNDO_INFO_RENAME_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NEMO_TYPE_FILE_UNDO_INFO_RENAME)) 165 #define NEMO_FILE_UNDO_INFO_RENAME_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NEMO_TYPE_FILE_UNDO_INFO_RENAME, NemoFileUndoInfoRenameClass)) 166 167 typedef struct _NemoFileUndoInfoRename NemoFileUndoInfoRename; 168 typedef struct _NemoFileUndoInfoRenameClass NemoFileUndoInfoRenameClass; 169 typedef struct _NemoFileUndoInfoRenameDetails NemoFileUndoInfoRenameDetails; 170 171 struct _NemoFileUndoInfoRename { 172 NemoFileUndoInfo parent; 173 NemoFileUndoInfoRenameDetails *priv; 174 }; 175 176 struct _NemoFileUndoInfoRenameClass { 177 NemoFileUndoInfoClass parent_class; 178 }; 179 180 GType nemo_file_undo_info_rename_get_type (void) G_GNUC_CONST; 181 NemoFileUndoInfo *nemo_file_undo_info_rename_new (void); 182 void nemo_file_undo_info_rename_set_data_pre (NemoFileUndoInfoRename *self, 183 GFile *old_file, 184 gchar *old_display_name, 185 gchar *new_display_name); 186 void nemo_file_undo_info_rename_set_data_post (NemoFileUndoInfoRename *self, 187 GFile *new_file); 188 189 /* trash */ 190 #define NEMO_TYPE_FILE_UNDO_INFO_TRASH (nemo_file_undo_info_trash_get_type ()) 191 #define NEMO_FILE_UNDO_INFO_TRASH(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NEMO_TYPE_FILE_UNDO_INFO_TRASH, NemoFileUndoInfoTrash)) 192 #define NEMO_FILE_UNDO_INFO_TRASH_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NEMO_TYPE_FILE_UNDO_INFO_TRASH, NemoFileUndoInfoTrashClass)) 193 #define NEMO_IS_FILE_UNDO_INFO_TRASH(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NEMO_TYPE_FILE_UNDO_INFO_TRASH)) 194 #define NEMO_IS_FILE_UNDO_INFO_TRASH_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NEMO_TYPE_FILE_UNDO_INFO_TRASH)) 195 #define NEMO_FILE_UNDO_INFO_TRASH_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NEMO_TYPE_FILE_UNDO_INFO_TRASH, NemoFileUndoInfoTrashClass)) 196 197 typedef struct _NemoFileUndoInfoTrash NemoFileUndoInfoTrash; 198 typedef struct _NemoFileUndoInfoTrashClass NemoFileUndoInfoTrashClass; 199 typedef struct _NemoFileUndoInfoTrashDetails NemoFileUndoInfoTrashDetails; 200 201 struct _NemoFileUndoInfoTrash { 202 NemoFileUndoInfo parent; 203 NemoFileUndoInfoTrashDetails *priv; 204 }; 205 206 struct _NemoFileUndoInfoTrashClass { 207 NemoFileUndoInfoClass parent_class; 208 }; 209 210 GType nemo_file_undo_info_trash_get_type (void) G_GNUC_CONST; 211 NemoFileUndoInfo *nemo_file_undo_info_trash_new (gint item_count); 212 void nemo_file_undo_info_trash_add_file (NemoFileUndoInfoTrash *self, 213 GFile *file); 214 215 /* recursive permissions */ 216 #define NEMO_TYPE_FILE_UNDO_INFO_REC_PERMISSIONS (nemo_file_undo_info_rec_permissions_get_type ()) 217 #define NEMO_FILE_UNDO_INFO_REC_PERMISSIONS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NEMO_TYPE_FILE_UNDO_INFO_REC_PERMISSIONS, NemoFileUndoInfoRecPermissions)) 218 #define NEMO_FILE_UNDO_INFO_REC_PERMISSIONS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NEMO_TYPE_FILE_UNDO_INFO_REC_PERMISSIONS, NemoFileUndoInfoRecPermissionsClass)) 219 #define NEMO_IS_FILE_UNDO_INFO_REC_PERMISSIONS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NEMO_TYPE_FILE_UNDO_INFO_REC_PERMISSIONS)) 220 #define NEMO_IS_FILE_UNDO_INFO_REC_PERMISSIONS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NEMO_TYPE_FILE_UNDO_INFO_REC_PERMISSIONS)) 221 #define NEMO_FILE_UNDO_INFO_REC_PERMISSIONS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NEMO_TYPE_FILE_UNDO_INFO_REC_PERMISSIONS, NemoFileUndoInfoRecPermissionsClass)) 222 223 typedef struct _NemoFileUndoInfoRecPermissions NemoFileUndoInfoRecPermissions; 224 typedef struct _NemoFileUndoInfoRecPermissionsClass NemoFileUndoInfoRecPermissionsClass; 225 typedef struct _NemoFileUndoInfoRecPermissionsDetails NemoFileUndoInfoRecPermissionsDetails; 226 227 struct _NemoFileUndoInfoRecPermissions { 228 NemoFileUndoInfo parent; 229 NemoFileUndoInfoRecPermissionsDetails *priv; 230 }; 231 232 struct _NemoFileUndoInfoRecPermissionsClass { 233 NemoFileUndoInfoClass parent_class; 234 }; 235 236 GType nemo_file_undo_info_rec_permissions_get_type (void) G_GNUC_CONST; 237 NemoFileUndoInfo *nemo_file_undo_info_rec_permissions_new (GFile *dest, 238 guint32 file_permissions, 239 guint32 file_mask, 240 guint32 dir_permissions, 241 guint32 dir_mask); 242 void nemo_file_undo_info_rec_permissions_add_file (NemoFileUndoInfoRecPermissions *self, 243 GFile *file, 244 guint32 permission); 245 246 /* single file change permissions */ 247 #define NEMO_TYPE_FILE_UNDO_INFO_PERMISSIONS (nemo_file_undo_info_permissions_get_type ()) 248 #define NEMO_FILE_UNDO_INFO_PERMISSIONS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NEMO_TYPE_FILE_UNDO_INFO_PERMISSIONS, NemoFileUndoInfoPermissions)) 249 #define NEMO_FILE_UNDO_INFO_PERMISSIONS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NEMO_TYPE_FILE_UNDO_INFO_PERMISSIONS, NemoFileUndoInfoPermissionsClass)) 250 #define NEMO_IS_FILE_UNDO_INFO_PERMISSIONS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NEMO_TYPE_FILE_UNDO_INFO_PERMISSIONS)) 251 #define NEMO_IS_FILE_UNDO_INFO_PERMISSIONS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NEMO_TYPE_FILE_UNDO_INFO_PERMISSIONS)) 252 #define NEMO_FILE_UNDO_INFO_PERMISSIONS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NEMO_TYPE_FILE_UNDO_INFO_PERMISSIONS, NemoFileUndoInfoPermissionsClass)) 253 254 typedef struct _NemoFileUndoInfoPermissions NemoFileUndoInfoPermissions; 255 typedef struct _NemoFileUndoInfoPermissionsClass NemoFileUndoInfoPermissionsClass; 256 typedef struct _NemoFileUndoInfoPermissionsDetails NemoFileUndoInfoPermissionsDetails; 257 258 struct _NemoFileUndoInfoPermissions { 259 NemoFileUndoInfo parent; 260 NemoFileUndoInfoPermissionsDetails *priv; 261 }; 262 263 struct _NemoFileUndoInfoPermissionsClass { 264 NemoFileUndoInfoClass parent_class; 265 }; 266 267 GType nemo_file_undo_info_permissions_get_type (void) G_GNUC_CONST; 268 NemoFileUndoInfo *nemo_file_undo_info_permissions_new (GFile *file, 269 guint32 current_permissions, 270 guint32 new_permissions); 271 272 /* group and owner change */ 273 #define NEMO_TYPE_FILE_UNDO_INFO_OWNERSHIP (nemo_file_undo_info_ownership_get_type ()) 274 #define NEMO_FILE_UNDO_INFO_OWNERSHIP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NEMO_TYPE_FILE_UNDO_INFO_OWNERSHIP, NemoFileUndoInfoOwnership)) 275 #define NEMO_FILE_UNDO_INFO_OWNERSHIP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NEMO_TYPE_FILE_UNDO_INFO_OWNERSHIP, NemoFileUndoInfoOwnershipClass)) 276 #define NEMO_IS_FILE_UNDO_INFO_OWNERSHIP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NEMO_TYPE_FILE_UNDO_INFO_OWNERSHIP)) 277 #define NEMO_IS_FILE_UNDO_INFO_OWNERSHIP_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NEMO_TYPE_FILE_UNDO_INFO_OWNERSHIP)) 278 #define NEMO_FILE_UNDO_INFO_OWNERSHIP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NEMO_TYPE_FILE_UNDO_INFO_OWNERSHIP, NemoFileUndoInfoOwnershipClass)) 279 280 typedef struct _NemoFileUndoInfoOwnership NemoFileUndoInfoOwnership; 281 typedef struct _NemoFileUndoInfoOwnershipClass NemoFileUndoInfoOwnershipClass; 282 typedef struct _NemoFileUndoInfoOwnershipDetails NemoFileUndoInfoOwnershipDetails; 283 284 struct _NemoFileUndoInfoOwnership { 285 NemoFileUndoInfo parent; 286 NemoFileUndoInfoOwnershipDetails *priv; 287 }; 288 289 struct _NemoFileUndoInfoOwnershipClass { 290 NemoFileUndoInfoClass parent_class; 291 }; 292 293 GType nemo_file_undo_info_ownership_get_type (void) G_GNUC_CONST; 294 NemoFileUndoInfo *nemo_file_undo_info_ownership_new (NemoFileUndoOp op_type, 295 GFile *file, 296 const char *current_data, 297 const char *new_data); 298 299 #endif /* __NEMO_FILE_UNDO_OPERATIONS_H__ */ 300