]> Pileus Git - ~andy/gtk/blob - gtk/gtkfilesystem.h
Add GtkFileSystem::parse, and a chooser entry with completion
[~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 void                  gtk_file_info_set_display_name      (GtkFileInfo       *info,
79                                                            const gchar       *display_name);
80 gboolean              gtk_file_info_get_is_folder         (const GtkFileInfo *info);
81 void                  gtk_file_info_set_is_folder         (GtkFileInfo       *info,
82                                                            gboolean           is_folder);
83 gboolean              gtk_file_info_get_is_hidden         (const GtkFileInfo *info);
84 void                  gtk_file_info_set_is_hidden         (GtkFileInfo       *info,
85                                                            gboolean           is_hidden);
86 G_CONST_RETURN gchar *gtk_file_info_get_mime_type         (const GtkFileInfo *info);
87 void                  gtk_file_info_set_mime_type         (GtkFileInfo       *info,
88                                                            const gchar       *mime_type);
89 GtkFileTime           gtk_file_info_get_modification_time (const GtkFileInfo *info);
90 void                  gtk_file_info_set_modification_time (GtkFileInfo       *info,
91                                                            GtkFileTime        modification_time);
92 gint64                gtk_file_info_get_size              (const GtkFileInfo *info);
93 void                  gtk_file_info_set_size              (GtkFileInfo       *info,
94                                                            gint64             size);
95 GdkPixbuf *           gtk_file_info_get_icon              (const GtkFileInfo *info);
96 void                  gtk_file_info_set_icon              (GtkFileInfo       *info,
97                                                            GdkPixbuf         *icon);
98
99 /* The base GtkFileSystem interface
100  */
101 #define GTK_TYPE_FILE_SYSTEM             (gtk_file_system_get_type ())
102 #define GTK_FILE_SYSTEM(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_SYSTEM, GtkFileSystem))
103 #define GTK_IS_FILE_SYSTEM(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FILE_SYSTEM))
104 #define GTK_FILE_SYSTEM_GET_IFACE(inst)  (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GTK_TYPE_FILE_SYSTEM, GtkFileSystemIface))
105
106 struct _GtkFileSystemIface
107 {
108   GTypeInterface base_iface;
109
110   /* Methods
111    */
112   GSList *           (*list_roots)     (GtkFileSystem *file_system);
113
114   GtkFileInfo *      (*get_root_info)  (GtkFileSystem   *file_system,
115                                         const gchar     *uri,
116                                         GtkFileInfoType  types,
117                                         GError         **error);
118   
119   GtkFileFolder *    (*get_folder)     (GtkFileSystem  *file_system,
120                                         const gchar    *uri,
121                                         GtkFileInfoType types,
122                                         GError        **error);
123   gboolean           (*create_folder)  (GtkFileSystem  *file_system,
124                                         const gchar    *uri,
125                                         GError        **error);
126
127   /* URI Manipulation
128    */
129   gboolean           (*get_parent)     (GtkFileSystem  *file_system,
130                                         const gchar    *uri,
131                                         gchar         **parent,
132                                         GError        **error);
133   gchar *            (*make_uri)       (GtkFileSystem  *file_system,
134                                         const gchar    *base_uri,
135                                         const gchar    *display_name,
136                                         GError        **error);                                 
137   gboolean           (*parse)          (GtkFileSystem  *file_system,
138                                         const gchar    *base_uri,
139                                         const gchar    *str,
140                                         gchar         **folder,
141                                         gchar         **file_part,
142                                         GError        **error);
143   /* Signals
144    */
145   void (*roots_changed) (GtkFileSystem *file_system);
146 };
147
148 GType             gtk_file_system_get_type       (void);
149
150 GSList *          gtk_file_system_list_roots     (GtkFileSystem    *file_system);
151 GtkFileInfo *     gtk_file_system_get_root_info  (GtkFileSystem    *file_system,
152                                                   const gchar      *uri,
153                                                   GtkFileInfoType   types,
154                                                   GError          **error);
155   
156 gboolean          gtk_file_system_get_parent     (GtkFileSystem    *file_system,
157                                                   const gchar      *uri,
158                                                   gchar           **parent,
159                                                   GError          **error);
160 GtkFileFolder    *gtk_file_system_get_folder     (GtkFileSystem    *file_system,
161                                                   const gchar      *uri,
162                                                   GtkFileInfoType   types,
163                                                   GError          **error);
164 gboolean          gtk_file_system_create_folder  (GtkFileSystem    *file_system,
165                                                   const gchar      *uri,
166                                                   GError          **error);
167 gchar *           gtk_file_system_make_uri       (GtkFileSystem    *file_system,
168                                                   const gchar      *base_uri,
169                                                   const gchar      *display_name,
170                                                   GError          **error);
171 gboolean          gtk_file_system_parse          (GtkFileSystem    *file_system,
172                                                   const gchar      *base_uri,
173                                                   const gchar      *str,
174                                                   gchar           **folder,
175                                                   gchar           **file_part,
176                                                   GError          **error);
177 /*
178  * Detailed information about a particular folder
179  */
180 #define GTK_TYPE_FILE_FOLDER             (gtk_file_folder_get_type ())
181 #define GTK_FILE_FOLDER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_FOLDER, GtkFileFolder))
182 #define GTK_IS_FILE_FOLDER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FILE_FOLDER))
183 #define GTK_FILE_FOLDER_GET_IFACE(inst)  (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GTK_TYPE_FILE_FOLDER, GtkFileFolderIface))
184
185 struct _GtkFileFolderIface
186 {
187   GTypeInterface base_iface;
188
189   /* Methods
190    */
191   GtkFileInfo *      (*get_info)       (GtkFileFolder  *folder,
192                                         const gchar    *uri,
193                                         GError        **error);
194   gboolean           (*list_children)  (GtkFileFolder  *folder,
195                                         GSList        **children,
196                                         GError        **error);
197
198   /* ??? refresh() ??? */
199
200   /* Signals
201    */
202   void (*deleted)      (GtkFileFolder *monitor);
203   void (*file_added)   (GtkFileFolder *monitor,
204                         const gchar   *uri);
205   void (*file_changed) (GtkFileFolder *monitor,
206                         const gchar   *uri);
207   void (*file_removed) (GtkFileFolder *monitor,
208                         const gchar   *uri);
209 };
210
211 GType        gtk_file_folder_get_type      (void);
212 gboolean     gtk_file_folder_list_children (GtkFileFolder    *folder,
213                                             GSList          **children,
214                                             GError          **error);
215 GtkFileInfo *gtk_file_folder_get_info      (GtkFileFolder    *folder,
216                                             const gchar      *uri,
217                                             GError          **error);
218
219 G_END_DECLS
220
221 #endif /* __GTK_FILE_SYSTEM_H__ */