1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
2 
3 /* CajaUndoStackManager - Manages undo of file operations (header)
4  *
5  * Copyright (C) 2007-2010 Amos Brocco
6  * Copyright (C) 2011 Stefano Karapetsas
7  * Copyright (C) 2012-2021 The MATE developers
8  *
9  * Authors: Amos Brocco <amos.brocco@unifr.ch>,
10  *          Stefano Karapetsas <stefano@karapetsas.com>
11  *
12  * This library is free software; you can redistribute it and/or
13  * modify it under the terms of the GNU General Public
14  * License as published by the Free Software Foundation; either
15  * version 2 of the License, or (at your option) any later version.
16  *
17  * This library is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20  * General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public
23  * License along with this library; if not, write to the
24  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
25  * Boston, MA 02110-1301, USA.
26  */
27 
28 #ifndef CAJA_UNDOSTACK_MANAGER_H
29 #define CAJA_UNDOSTACK_MANAGER_H
30 
31 #include <glib.h>
32 #include <glib-object.h>
33 #include <gtk/gtk.h>
34 #include <gio/gio.h>
35 
36 /* Begin action structures */
37 
38 typedef enum
39 {
40   CAJA_UNDOSTACK_COPY,
41   CAJA_UNDOSTACK_DUPLICATE,
42   CAJA_UNDOSTACK_MOVE,
43   CAJA_UNDOSTACK_RENAME,
44   CAJA_UNDOSTACK_CREATEEMPTYFILE,
45   CAJA_UNDOSTACK_CREATEFILEFROMTEMPLATE,
46   CAJA_UNDOSTACK_CREATEFOLDER,
47   CAJA_UNDOSTACK_MOVETOTRASH,
48   CAJA_UNDOSTACK_CREATELINK,
49   CAJA_UNDOSTACK_DELETE,
50   CAJA_UNDOSTACK_RESTOREFROMTRASH,
51   CAJA_UNDOSTACK_SETPERMISSIONS,
52   CAJA_UNDOSTACK_RECURSIVESETPERMISSIONS,
53   CAJA_UNDOSTACK_CHANGEOWNER,
54   CAJA_UNDOSTACK_CHANGEGROUP
55 } CajaUndoStackActionType;
56 
57 typedef struct _CajaUndoStackActionData CajaUndoStackActionData;
58 
59 typedef struct _CajaUndoStackMenuData CajaUndoStackMenuData;
60 
61 struct _CajaUndoStackMenuData {
62   char* undo_label;
63   char* undo_description;
64   char* redo_label;
65   char* redo_description;
66 };
67 
68 /* End action structures */
69 
70 typedef void
71 (*CajaUndostackFinishCallback)(gpointer data);
72 
73 typedef struct _CajaUndoStackManagerPrivate CajaUndoStackManagerPrivate;
74 
75 typedef struct _CajaUndoStackManager
76 {
77   GObject parent_instance;
78 
79   CajaUndoStackManagerPrivate* priv;
80 
81 } CajaUndoStackManager;
82 
83 typedef struct _CajaUndoStackManagerClass
84 {
85   GObjectClass parent_class;
86 
87 } CajaUndoStackManagerClass;
88 
89 #define TYPE_CAJA_UNDOSTACK_MANAGER (caja_undostack_manager_get_type())
90 
91 #define CAJA_UNDOSTACK_MANAGER(object) \
92  (G_TYPE_CHECK_INSTANCE_CAST((object), TYPE_CAJA_UNDOSTACK_MANAGER, CajaUndoStackManager))
93 
94 #define CAJA_UNDOSTACK_MANAGER_CLASS(klass) \
95  (G_TYPE_CHECK_CLASS_CAST((klass), TYPE_CAJA_UNDOSTACK_MANAGER, CajaUndoStackManagerClass))
96 
97 #define IS_CAJA_UNDOSTACK_MANAGER(object) \
98  (G_TYPE_CHECK_INSTANCE_TYPE((object), TYPE_CAJA_UNDOSTACK_MANAGER))
99 
100 #define IS_CAJA_UNDOSTACK_MANAGER_CLASS(klass) \
101  (G_TYPE_CHECK_CLASS_TYPE((klass), TYPE_CAJA_UNDOSTACK_MANAGER))
102 
103 #define CAJA_UNDOSTACK_MANAGER_GET_CLASS(object) \
104  (G_TYPE_INSTANCE_GET_CLASS((object), TYPE_CAJA_UNDOSTACK_MANAGER, CajaUndoStackManagerClass))
105 
106 GType
107 caja_undostack_manager_get_type (void);
108 
109 void
110 caja_undostack_manager_add_action(CajaUndoStackManager* manager,
111     CajaUndoStackActionData* action);
112 
113 void
114 caja_undostack_manager_undo(CajaUndoStackManager* manager,
115     GtkWidget *parent_view, CajaUndostackFinishCallback cb);
116 
117 void
118 caja_undostack_manager_redo(CajaUndoStackManager* manager,
119     GtkWidget *parent_view, CajaUndostackFinishCallback cb);
120 
121 CajaUndoStackActionData*
122 caja_undostack_manager_data_new(CajaUndoStackActionType type,
123     gint items_count);
124 
125 gboolean
126 caja_undostack_manager_is_undo_redo(CajaUndoStackManager* manager);
127 
128 void
129 caja_undostack_manager_trash_has_emptied(CajaUndoStackManager* manager);
130 
131 CajaUndoStackManager*
132 caja_undostack_manager_instance(void);
133 
134 void
135 caja_undostack_manager_data_set_src_dir(CajaUndoStackActionData* data,
136     GFile* src);
137 
138 void
139 caja_undostack_manager_data_set_dest_dir(CajaUndoStackActionData* data,
140     GFile* dest);
141 
142 void
143 caja_undostack_manager_data_add_origin_target_pair(
144     CajaUndoStackActionData* data, GFile* origin, GFile* target);
145 
146 void
147 caja_undostack_manager_data_set_create_data(
148     CajaUndoStackActionData* data, char* target_uri, char* template_uri);
149 
150 void
151 caja_undostack_manager_data_set_rename_information(
152     CajaUndoStackActionData* data, GFile* old_file, GFile* new_file);
153 
154 guint64
155 caja_undostack_manager_get_file_modification_time(GFile* file);
156 
157 void
158 caja_undostack_manager_data_add_trashed_file(
159     CajaUndoStackActionData* data, GFile* file, guint64 mtime);
160 
161 void
162 caja_undostack_manager_request_menu_update(CajaUndoStackManager* manager);
163 
164 void
165 caja_undostack_manager_data_add_file_permissions(
166     CajaUndoStackActionData* data, GFile* file, guint32 permission);
167 
168 void
169 caja_undostack_manager_data_set_recursive_permissions(
170     CajaUndoStackActionData* data, guint32 file_permissions, guint32 file_mask,
171 	guint32 dir_permissions, guint32 dir_mask);
172 
173 void
174 caja_undostack_manager_data_set_file_permissions(
175     CajaUndoStackActionData* data, char* uri, guint32 current_permissions, guint32 new_permissions);
176 
177 void
178 caja_undostack_manager_data_set_owner_change_information(
179     CajaUndoStackActionData* data, char* uri, const char* current_user, const char* new_user);
180 
181 void
182 caja_undostack_manager_data_set_group_change_information(
183     CajaUndoStackActionData* data, char* uri, const char* current_group, const char* new_group);
184 
185 #endif /* CAJA_UNDOSTACK_MANAGER_H */
186