]> Pileus Git - ~andy/gtk/blob - gtk/gtkfilesystem.h
Finish monitoring, add a TODO, fill in details in README, fix some missing finalizati...
[~andy/gtk] / gtk / gtkfilesystem.h
1 /* GTK - The GIMP Toolkit
2  * gtkfilesystem.h: Abstract file system interfaces
3  * Copyright (C) 2003, Red Hat, Inc.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18  * Boston, MA 02111-1307, USA.
19  */
20
21 #ifndef __GTK_FILE_SYSTEM_H__
22 #define __GTK_FILE_SYSTEM_H__
23
24 #include <glib-object.h>
25 #include <gdk-pixbuf/gdk-pixbuf.h>
26
27 G_BEGIN_DECLS
28
29 typedef gint64 GtkFileTime;
30
31 typedef struct _GtkFileFolder      GtkFileFolder;
32 typedef struct _GtkFileFolderIface GtkFileFolderIface;
33 typedef struct _GtkFileInfo        GtkFileInfo;
34 typedef struct _GtkFileSystem      GtkFileSystem;
35 typedef struct _GtkFileSystemIface GtkFileSystemIface;
36
37 /* Mask of information about a file, for monitoring and
38  * gtk_file_system_get_info()
39  */
40 typedef enum {
41   GTK_FILE_INFO_DISPLAY_NAME      = 1 << 0,
42   GTK_FILE_INFO_IS_FOLDER         = 1 << 1,
43   GTK_FILE_INFO_IS_HIDDEN         = 1 << 2,
44   GTK_FILE_INFO_MIME_TYPE         = 1 << 3,
45   GTK_FILE_INFO_MODIFICATION_TIME = 1 << 4,
46   GTK_FILE_INFO_SIZE              = 1 << 5,
47   GTK_FILE_INFO_ICON              = 1 << 6
48 } GtkFileInfoType;
49
50 /* GError enumeration for GtkFileSystem
51  */
52
53 #define GTK_FILE_SYSTEM_ERROR (gtk_file_system_error_quark ())
54
55 typedef enum
56 {
57   GTK_FILE_SYSTEM_ERROR_NONEXISTANT,
58   GTK_FILE_SYSTEM_ERROR_NOT_FOLDER,
59   GTK_FILE_SYSTEM_ERROR_INVALID_URI,
60   GTK_FILE_SYSTEM_ERROR_BAD_FILENAME,
61   GTK_FILE_SYSTEM_ERROR_FAILED,
62 } GtkFileSystemError;
63
64 GQuark     gtk_file_system_error_quark      (void);
65
66 /* Boxed-type for gtk_file_folder_get_info() results
67  */
68 #define GTK_TYPE_FILE_INFO (gtk_file_info_get_type ())
69
70 GType       gtk_file_info_get_type (void);
71
72 GtkFileInfo *gtk_file_info_new  (void);
73 GtkFileInfo *gtk_file_info_copy (GtkFileInfo *info);
74 void         gtk_file_info_free (GtkFileInfo *info);
75
76
77 G_CONST_RETURN gchar *gtk_file_info_get_display_name      (const GtkFileInfo *info);
78 G_CONST_RETURN gchar *gtk_file_info_get_display_key       (const GtkFileInfo *info);
79 void                  gtk_file_info_set_display_name      (GtkFileInfo       *info,
80                                                            const gchar       *display_name);
81 gboolean              gtk_file_info_get_is_folder         (const GtkFileInfo *info);
82 void                  gtk_file_info_set_is_folder         (GtkFileInfo       *info,
83                                                            gboolean           is_folder);
84 gboolean              gtk_file_info_get_is_hidden         (const GtkFileInfo *info);
85 void                  gtk_file_info_set_is_hidden         (GtkFileInfo       *info,
86                                                            gboolean           is_hidden);
87 G_CONST_RETURN gchar *gtk_file_info_get_mime_type         (const GtkFileInfo *info);
88 void                  gtk_file_info_set_mime_type         (GtkFileInfo       *info,
89                                                            const gchar       *mime_type);
90 GtkFileTime           gtk_file_info_get_modification_time (const GtkFileInfo *info);
91 void                  gtk_file_info_set_modification_time (GtkFileInfo       *info,
92                                                            GtkFileTime        modification_time);
93 gint64                gtk_file_info_get_size              (const GtkFileInfo *info);
94 void                  gtk_file_info_set_size              (GtkFileInfo       *info,
95                                                            gint64             size);
96 GdkPixbuf *           gtk_file_info_get_icon              (const GtkFileInfo *info);
97 void                  gtk_file_info_set_icon              (GtkFileInfo       *info,
98                                                            GdkPixbuf         *icon);
99
100 /* The base GtkFileSystem interface
101  */
102 #define GTK_TYPE_FILE_SYSTEM             (gtk_file_system_get_type ())
103 #define GTK_FILE_SYSTEM(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_SYSTEM, GtkFileSystem))
104 #define GTK_IS_FILE_SYSTEM(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FILE_SYSTEM))
105 #define GTK_FILE_SYSTEM_GET_IFACE(inst)  (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GTK_TYPE_FILE_SYSTEM, GtkFileSystemIface))
106
107 struct _GtkFileSystemIface
108 {
109   GTypeInterface base_iface;
110
111   /* Methods
112    */
113   GSList *           (*list_roots)     (GtkFileSystem *file_system);
114
115   GtkFileInfo *      (*get_root_info)  (GtkFileSystem   *file_system,
116                                         const gchar     *uri,
117                                         GtkFileInfoType  types,
118                                         GError         **error);
119   
120   GtkFileFolder *    (*get_folder)     (GtkFileSystem  *file_system,
121                                         const gchar    *uri,
122                                         GtkFileInfoType types,
123                                         GError        **error);
124   gboolean           (*create_folder)  (GtkFileSystem  *file_system,
125                                         const gchar    *uri,
126                                         GError        **error);
127
128   /* URI Manipulation
129    */
130   gboolean           (*get_parent)     (GtkFileSystem  *file_system,
131                                         const gchar    *uri,
132                                         gchar         **parent,
133                                         GError        **error);
134   gchar *            (*make_uri)       (GtkFileSystem  *file_system,
135                                         const gchar    *base_uri,
136                                         const gchar    *display_name,
137                                         GError        **error);                                 
138   gboolean           (*parse)          (GtkFileSystem  *file_system,
139                                         const gchar    *base_uri,
140                                         const gchar    *str,
141                                         gchar         **folder,
142                                         gchar         **file_part,
143                                         GError        **error);
144   /* Signals
145    */
146   void (*roots_changed) (GtkFileSystem *file_system);
147 };
148
149 GType             gtk_file_system_get_type       (void);
150
151 GSList *          gtk_file_system_list_roots     (GtkFileSystem    *file_system);
152 GtkFileInfo *     gtk_file_system_get_root_info  (GtkFileSystem    *file_system,
153                                                   const gchar      *uri,
154                                                   GtkFileInfoType   types,
155                                                   GError          **error);
156   
157 gboolean          gtk_file_system_get_parent     (GtkFileSystem    *file_system,
158                                                   const gchar      *uri,
159                                                   gchar           **parent,
160                                                   GError          **error);
161 GtkFileFolder    *gtk_file_system_get_folder     (GtkFileSystem    *file_system,
162                                                   const gchar      *uri,
163                                                   GtkFileInfoType   types,
164                                                   GError          **error);
165 gboolean          gtk_file_system_create_folder  (GtkFileSystem    *file_system,
166                                                   const gchar      *uri,
167                                                   GError          **error);
168 gchar *           gtk_file_system_make_uri       (GtkFileSystem    *file_system,
169                                                   const gchar      *base_uri,
170                                                   const gchar      *display_name,
171                                                   GError          **error);
172 gboolean          gtk_file_system_parse          (GtkFileSystem    *file_system,
173                                                   const gchar      *base_uri,
174                                                   const gchar      *str,
175                                                   gchar           **folder,
176                                                   gchar           **file_part,
177                                                   GError          **error);
178 /*
179  * Detailed information about a particular folder
180  */
181 #define GTK_TYPE_FILE_FOLDER             (gtk_file_folder_get_type ())
182 #define GTK_FILE_FOLDER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_FOLDER, GtkFileFolder))
183 #define GTK_IS_FILE_FOLDER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FILE_FOLDER))
184 #define GTK_FILE_FOLDER_GET_IFACE(inst)  (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GTK_TYPE_FILE_FOLDER, GtkFileFolderIface))
185
186 struct _GtkFileFolderIface
187 {
188   GTypeInterface base_iface;
189
190   /* Methods
191    */
192   GtkFileInfo *      (*get_info)       (GtkFileFolder  *folder,
193                                         const gchar    *uri,
194                                         GError        **error);
195   gboolean           (*list_children)  (GtkFileFolder  *folder,
196                                         GSList        **children,
197                                         GError        **error);
198
199   /* ??? refresh() ??? */
200
201   /* Signals
202    */
203   void (*deleted)       (GtkFileFolder *monitor);
204   void (*files_added)   (GtkFileFolder *monitor,
205                          GSList        *uris);
206   void (*files_changed) (GtkFileFolder *monitor,
207                          GSList        *uris);
208   void (*files_removed) (GtkFileFolder *monitor,
209                          GSList        *uris);
210 };
211
212 GType        gtk_file_folder_get_type      (void);
213 gboolean     gtk_file_folder_list_children (GtkFileFolder    *folder,
214                                             GSList          **children,
215                                             GError          **error);
216 GtkFileInfo *gtk_file_folder_get_info      (GtkFileFolder    *folder,
217                                             const gchar      *uri,
218                                             GError          **error);
219
220 G_END_DECLS
221
222 #endif /* __GTK_FILE_SYSTEM_H__ */