1 /*
2  * gedit-file-browser-store.h - Gedit plugin providing easy file access
3  * from the sidepanel
4  *
5  * Copyright (C) 2006 - Jesse van den Kieboom <jesse@icecrew.nl>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2, or (at your option)
10  * any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 #ifndef GEDIT_FILE_BROWSER_STORE_H
22 #define GEDIT_FILE_BROWSER_STORE_H
23 
24 #include <gtk/gtk.h>
25 
26 G_BEGIN_DECLS
27 #define GEDIT_TYPE_FILE_BROWSER_STORE			(gedit_file_browser_store_get_type ())
28 #define GEDIT_FILE_BROWSER_STORE(obj)			(G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_FILE_BROWSER_STORE, GeditFileBrowserStore))
29 #define GEDIT_FILE_BROWSER_STORE_CONST(obj)		(G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_FILE_BROWSER_STORE, GeditFileBrowserStore const))
30 #define GEDIT_FILE_BROWSER_STORE_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_FILE_BROWSER_STORE, GeditFileBrowserStoreClass))
31 #define GEDIT_IS_FILE_BROWSER_STORE(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_FILE_BROWSER_STORE))
32 #define GEDIT_IS_FILE_BROWSER_STORE_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_FILE_BROWSER_STORE))
33 #define GEDIT_FILE_BROWSER_STORE_GET_CLASS(obj)		(G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_FILE_BROWSER_STORE, GeditFileBrowserStoreClass))
34 
35 typedef enum
36 {
37 	GEDIT_FILE_BROWSER_STORE_COLUMN_ICON = 0,
38 	GEDIT_FILE_BROWSER_STORE_COLUMN_ICON_NAME,
39 	GEDIT_FILE_BROWSER_STORE_COLUMN_MARKUP,
40 	GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION,
41 	GEDIT_FILE_BROWSER_STORE_COLUMN_FLAGS,
42 
43 	/* Columns not in common with GeditFileBookmarksStore */
44 	GEDIT_FILE_BROWSER_STORE_COLUMN_NAME,
45 	GEDIT_FILE_BROWSER_STORE_COLUMN_EMBLEM,
46 	GEDIT_FILE_BROWSER_STORE_COLUMN_NUM
47 } GeditFileBrowserStoreColumn;
48 
49 typedef enum
50 {
51 	GEDIT_FILE_BROWSER_STORE_FLAG_IS_DIRECTORY = 1 << 0,
52 	GEDIT_FILE_BROWSER_STORE_FLAG_IS_HIDDEN    = 1 << 1,
53 	GEDIT_FILE_BROWSER_STORE_FLAG_IS_TEXT      = 1 << 2,
54 	GEDIT_FILE_BROWSER_STORE_FLAG_LOADED       = 1 << 3,
55 	GEDIT_FILE_BROWSER_STORE_FLAG_IS_FILTERED  = 1 << 4,
56 	GEDIT_FILE_BROWSER_STORE_FLAG_IS_DUMMY     = 1 << 5
57 } GeditFileBrowserStoreFlag;
58 
59 typedef enum
60 {
61 	GEDIT_FILE_BROWSER_STORE_RESULT_OK,
62 	GEDIT_FILE_BROWSER_STORE_RESULT_NO_CHANGE,
63 	GEDIT_FILE_BROWSER_STORE_RESULT_ERROR,
64 	GEDIT_FILE_BROWSER_STORE_RESULT_NO_TRASH,
65 	GEDIT_FILE_BROWSER_STORE_RESULT_MOUNTING,
66 	GEDIT_FILE_BROWSER_STORE_RESULT_NUM
67 } GeditFileBrowserStoreResult;
68 
69 typedef enum
70 {
71 	GEDIT_FILE_BROWSER_STORE_FILTER_MODE_NONE        = 0,
72 	GEDIT_FILE_BROWSER_STORE_FILTER_MODE_HIDE_HIDDEN = 1 << 0,
73 	GEDIT_FILE_BROWSER_STORE_FILTER_MODE_HIDE_BINARY = 1 << 1
74 } GeditFileBrowserStoreFilterMode;
75 
76 #define FILE_IS_DIR(flags)	(flags & GEDIT_FILE_BROWSER_STORE_FLAG_IS_DIRECTORY)
77 #define FILE_IS_HIDDEN(flags)	(flags & GEDIT_FILE_BROWSER_STORE_FLAG_IS_HIDDEN)
78 #define FILE_IS_TEXT(flags)	(flags & GEDIT_FILE_BROWSER_STORE_FLAG_IS_TEXT)
79 #define FILE_LOADED(flags)	(flags & GEDIT_FILE_BROWSER_STORE_FLAG_LOADED)
80 #define FILE_IS_FILTERED(flags)	(flags & GEDIT_FILE_BROWSER_STORE_FLAG_IS_FILTERED)
81 #define FILE_IS_DUMMY(flags)	(flags & GEDIT_FILE_BROWSER_STORE_FLAG_IS_DUMMY)
82 
83 typedef struct _GeditFileBrowserStore        GeditFileBrowserStore;
84 typedef struct _GeditFileBrowserStoreClass   GeditFileBrowserStoreClass;
85 typedef struct _GeditFileBrowserStorePrivate GeditFileBrowserStorePrivate;
86 
87 typedef gboolean (*GeditFileBrowserStoreFilterFunc) (GeditFileBrowserStore *model,
88 						     GtkTreeIter           *iter,
89 						     gpointer               user_data);
90 
91 struct _GeditFileBrowserStore
92 {
93 	GObject parent;
94 
95 	GeditFileBrowserStorePrivate *priv;
96 };
97 
98 struct _GeditFileBrowserStoreClass {
99 	GObjectClass parent_class;
100 
101 	/* Signals */
102 	void (* begin_loading)      (GeditFileBrowserStore *model,
103 	                             GtkTreeIter           *iter);
104 	void (* end_loading)        (GeditFileBrowserStore *model,
105 	                             GtkTreeIter           *iter);
106 	void (* error)              (GeditFileBrowserStore *model,
107 	                             guint                  code,
108 	                             gchar                 *message);
109 	gboolean (* no_trash)       (GeditFileBrowserStore *model,
110 	                             GList                 *files);
111 	void (* rename)             (GeditFileBrowserStore *model,
112 	                             GFile                 *oldfile,
113 	                             GFile                 *newfile);
114 	void (* begin_refresh)      (GeditFileBrowserStore *model);
115 	void (* end_refresh)        (GeditFileBrowserStore *model);
116 	void (* unload)             (GeditFileBrowserStore *model,
117 	                             GFile                 *location);
118 	void (* before_row_deleted) (GeditFileBrowserStore *model,
119 	                             GtkTreePath           *path);
120 };
121 
122 GType                            gedit_file_browser_store_get_type                       (void) G_GNUC_CONST;
123 
124 GeditFileBrowserStore           *gedit_file_browser_store_new                            (GFile                            *root);
125 GeditFileBrowserStoreResult      gedit_file_browser_store_set_root_and_virtual_root      (GeditFileBrowserStore            *model,
126                                                                                           GFile                            *root,
127                                                                                           GFile                            *virtual_root);
128 GeditFileBrowserStoreResult      gedit_file_browser_store_set_root                       (GeditFileBrowserStore            *model,
129                                                                                           GFile                            *root);
130 GeditFileBrowserStoreResult      gedit_file_browser_store_set_virtual_root               (GeditFileBrowserStore            *model,
131                                                                                           GtkTreeIter                      *iter);
132 GeditFileBrowserStoreResult      gedit_file_browser_store_set_virtual_root_from_location (GeditFileBrowserStore            *model,
133                                                                                           GFile                            *root);
134 GeditFileBrowserStoreResult      gedit_file_browser_store_set_virtual_root_up            (GeditFileBrowserStore            *model);
135 GeditFileBrowserStoreResult      gedit_file_browser_store_set_virtual_root_top           (GeditFileBrowserStore            *model);
136 gboolean                         gedit_file_browser_store_get_iter_virtual_root          (GeditFileBrowserStore            *model,
137                                                                                           GtkTreeIter                      *iter);
138 gboolean                         gedit_file_browser_store_get_iter_root                  (GeditFileBrowserStore            *model,
139                                                                                           GtkTreeIter                      *iter);
140 GFile                           *gedit_file_browser_store_get_root                       (GeditFileBrowserStore            *model);
141 GFile                           *gedit_file_browser_store_get_virtual_root               (GeditFileBrowserStore            *model);
142 gboolean                         gedit_file_browser_store_iter_equal                     (GeditFileBrowserStore            *model,
143                                                                                           GtkTreeIter                      *iter1,
144                                                                                           GtkTreeIter                      *iter2);
145 void                             gedit_file_browser_store_set_value                      (GeditFileBrowserStore            *tree_model,
146                                                                                           GtkTreeIter                      *iter,
147                                                                                           gint                              column,
148                                                                                           GValue                           *value);
149 void                             _gedit_file_browser_store_iter_expanded                 (GeditFileBrowserStore            *model,
150                                                                                           GtkTreeIter                      *iter);
151 void                             _gedit_file_browser_store_iter_collapsed                (GeditFileBrowserStore            *model,
152                                                                                           GtkTreeIter                      *iter);
153 GeditFileBrowserStoreFilterMode  gedit_file_browser_store_get_filter_mode                (GeditFileBrowserStore            *model);
154 void                             gedit_file_browser_store_set_filter_mode                (GeditFileBrowserStore            *model,
155                                                                                           GeditFileBrowserStoreFilterMode   mode);
156 void                             gedit_file_browser_store_set_filter_func                (GeditFileBrowserStore            *model,
157                                                                                           GeditFileBrowserStoreFilterFunc   func,
158                                                                                           gpointer                          user_data);
159 const gchar * const             *gedit_file_browser_store_get_binary_patterns            (GeditFileBrowserStore            *model);
160 void                             gedit_file_browser_store_set_binary_patterns            (GeditFileBrowserStore            *model,
161                                                                                           const gchar                     **binary_patterns);
162 void                             gedit_file_browser_store_refilter                       (GeditFileBrowserStore            *model);
163 GeditFileBrowserStoreFilterMode  gedit_file_browser_store_filter_mode_get_default        (void);
164 void                             gedit_file_browser_store_refresh                        (GeditFileBrowserStore            *model);
165 gboolean                         gedit_file_browser_store_rename                         (GeditFileBrowserStore            *model,
166                                                                                           GtkTreeIter                      *iter,
167                                                                                           gchar const                      *new_name,
168                                                                                           GError                          **error);
169 GeditFileBrowserStoreResult      gedit_file_browser_store_delete                         (GeditFileBrowserStore            *model,
170                                                                                           GtkTreeIter                      *iter,
171                                                                                           gboolean                          trash);
172 GeditFileBrowserStoreResult      gedit_file_browser_store_delete_all                     (GeditFileBrowserStore            *model,
173                                                                                           GList                            *rows,
174                                                                                           gboolean                          trash);
175 gboolean                         gedit_file_browser_store_new_file                       (GeditFileBrowserStore            *model,
176                                                                                           GtkTreeIter                      *parent,
177                                                                                           GtkTreeIter                      *iter);
178 gboolean                         gedit_file_browser_store_new_directory                  (GeditFileBrowserStore            *model,
179                                                                                           GtkTreeIter                      *parent,
180                                                                                           GtkTreeIter                      *iter);
181 void                             gedit_file_browser_store_cancel_mount_operation         (GeditFileBrowserStore            *store);
182 
183 void                             _gedit_file_browser_store_register_type                 (GTypeModule                      *type_module);
184 
185 G_END_DECLS
186 
187 #endif /* GEDIT_FILE_BROWSER_STORE_H */
188 /* ex:set ts=8 noet: */
189