== ImageBrowser ==
[blender.git] / source / blender / blenloader / BLO_readfile.h
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  * external readfile function prototypes
32  */
33 #ifndef BLO_READFILE_H
34 #define BLO_READFILE_H
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 struct SpaceFile;
41 struct SpaceImaSel;
42 struct FileList;
43 struct LinkNode;
44 struct Main;
45 struct UserDef;
46 struct bScreen;
47 struct Scene;
48 struct MemFile;
49 struct direntry;
50
51 typedef struct BlendHandle      BlendHandle;
52
53 typedef enum BlenFileType {
54         BLENFILETYPE_BLEND= 1, 
55         BLENFILETYPE_PUB= 2, 
56         BLENFILETYPE_RUNTIME= 3
57 } BlenFileType;
58
59 typedef enum {
60         BRE_NONE, 
61         
62         BRE_UNABLE_TO_OPEN, 
63         BRE_UNABLE_TO_READ, 
64
65         BRE_OUT_OF_MEMORY, 
66         BRE_INTERNAL_ERROR, 
67
68         BRE_NOT_A_BLEND, 
69         BRE_NOT_A_PUBFILE,
70         BRE_INCOMPLETE, 
71         BRE_CORRUPT, 
72         
73         BRE_TOO_NEW, 
74         BRE_NOT_ALLOWED, 
75         
76         BRE_NO_SCREEN, 
77         BRE_NO_SCENE, 
78         
79         BRE_INVALID
80 } BlendReadError;
81
82 typedef struct BlendFileData {
83         struct Main*    main;
84         struct UserDef* user;
85
86         int winpos;
87         int fileflags;
88         int displaymode;
89         int globalf;
90
91         struct bScreen* curscreen;
92         struct Scene*   curscene;
93         
94         BlenFileType    type;
95 } BlendFileData;
96
97         /**
98          * Open a blender file from a pathname. The function
99          * returns NULL and sets the @a error_r argument if
100          * it cannot open the file.
101          * 
102          * @param file The path of the file to open.
103          * @param error_r If the return value is NULL, an error
104          * code indicating the cause of the failure.
105          * @return The data of the file.
106          */
107 BlendFileData*  BLO_read_from_file              (char *file, BlendReadError *error_r);
108
109         /**
110          * Open a blender file from memory. The function
111          * returns NULL and sets the @a error_r argument if
112          * it cannot open the file.
113          * 
114          * @param mem The file data.
115          * @param memsize The length of @a mem.
116          * @param error_r If the return value is NULL, an error
117          * code indicating the cause of the failure.
118          * @return The data of the file.
119          */
120 BlendFileData*  BLO_read_from_memory(void *mem, int memsize, BlendReadError *error_r);
121
122 /**
123  * file name is current file, only for retrieving library data */
124
125 BlendFileData *BLO_read_from_memfile(const char *filename, struct MemFile *memfile, BlendReadError *error_r);
126
127 /**
128  * Convert a BlendReadError to a human readable string.
129  * The string is static and does not need to be free'd.
130  * 
131  * @param error The error to return a string for.
132  * @return A static human readable string representation
133  * of @a error.
134  */
135  
136         char*
137 BLO_bre_as_string(
138         BlendReadError error);
139
140 /**
141  * Free's a BlendFileData structure and _all_ the
142  * data associated with it (the userdef data, and
143  * the main libblock data).
144  * 
145  * @param bfd The structure to free.
146  */
147         void
148 BLO_blendfiledata_free(
149         BlendFileData *bfd);
150
151 /**
152  * Convert an idcode into a name.
153  * 
154  * @param code The code to convert.
155  * @return A static string representing the name of
156  * the code.
157  */
158         char*
159 BLO_idcode_to_name(
160         int code);
161
162 /**
163  * Convert a name into an idcode (ie. ID_SCE)
164  * 
165  * @param name The name to convert.
166  * @return The code for the name, or 0 if invalid.
167  */
168         int
169 BLO_idcode_from_name(
170         char *name);
171         
172 /**
173  * Open a blendhandle from a file path.
174  * 
175  * @param file The file path to open.
176  * @return A handle on success, or NULL on failure.
177  */
178         BlendHandle*
179 BLO_blendhandle_from_file(
180         char *file);
181
182 /**
183  * Gets the names of all the datablocks in a file
184  * of a certain type (ie. All the scene names in
185  * a file).
186  * 
187  * @param bh The blendhandle to access.
188  * @param ofblocktype The type of names to get.
189  * @return A BLI_linklist of strings. The string links
190  * should be freed with malloc.
191  */
192         struct LinkNode*
193 BLO_blendhandle_get_datablock_names(
194         BlendHandle *bh, 
195         int ofblocktype);
196
197 /**
198  * Gets the previews of all the datablocks in a file
199  * of a certain type (ie. All the scene names in
200  * a file).
201  * 
202  * @param bh The blendhandle to access.
203  * @param ofblocktype The type of names to get.
204  * @return A BLI_linklist of PreviewImage. The PreviewImage links
205  * should be freed with malloc.
206  */
207         struct LinkNode*
208 BLO_blendhandle_get_previews(
209         BlendHandle *bh, 
210         int ofblocktype);
211
212 /**
213  * Gets the names of all the datablock groups in a
214  * file. (ie. file contains Scene, Mesh, and Lamp
215  * datablocks).
216  * 
217  * @param bh The blendhandle to access.
218  * @return A BLI_linklist of strings. The string links
219  * should be freed with malloc.
220  */
221         struct LinkNode*
222 BLO_blendhandle_get_linkable_groups(
223         BlendHandle *bh);
224
225 /**
226  * Close and free a blendhandle. The handle
227  * becomes invalid after this call.
228  *
229  * @param bh The handle to close.
230  */
231         void
232 BLO_blendhandle_close(
233         BlendHandle *bh);
234         
235         /***/
236
237 char *BLO_gethome(void);
238 int BLO_has_bfile_extension(char *str);
239 void BLO_library_append(struct SpaceFile *sfile, char *dir, int idcode);
240 void BLO_library_append_(BlendHandle **libfiledata, struct direntry* filelist, int totfile, char *dir, char* file, short flag, int idcode);
241 void BLO_script_library_append(BlendHandle *bh, char *dir, char *name, int idcode, short flag, struct Scene *scene);
242
243 BlendFileData* blo_read_blendafterruntime(int file, int actualsize, BlendReadError *error_r);
244
245 #ifdef __cplusplus
246
247 #endif
248
249 #endif
250