Cleanup: Typos in comments (to to)
[blender.git] / source / blender / blenloader / BLO_readfile.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19 #ifndef __BLO_READFILE_H__
20 #define __BLO_READFILE_H__
21
22 /** \file BLO_readfile.h
23  *  \ingroup blenloader
24  *  \brief external readfile function prototypes.
25  */
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31 struct BHead;
32 struct BlendThumbnail;
33 struct FileData;
34 struct LinkNode;
35 struct ListBase;
36 struct Main;
37 struct MemFile;
38 struct ReportList;
39 struct Scene;
40 struct UserDef;
41 struct View3D;
42 struct ViewLayer;
43 struct bContext;
44 struct bScreen;
45 struct wmWindowManager;
46
47 typedef struct BlendHandle BlendHandle;
48
49 typedef enum eBlenFileType {
50         BLENFILETYPE_BLEND = 1,
51         BLENFILETYPE_PUB = 2,
52         BLENFILETYPE_RUNTIME = 3,
53 } eBlenFileType;
54
55 typedef struct BlendFileData {
56         struct Main *main;
57         struct UserDef *user;
58
59         int fileflags;
60         int globalf;
61         char filename[1024];    /* 1024 = FILE_MAX */
62
63         struct bScreen *curscreen; /* TODO think this isn't needed anymore? */
64         struct Scene *curscene;
65         struct ViewLayer *cur_view_layer; /* layer to activate in workspaces when reading without UI */
66
67         eBlenFileType type;
68 } BlendFileData;
69
70 typedef struct WorkspaceConfigFileData {
71         struct Main *main; /* has to be freed when done reading file data */
72
73         struct ListBase workspaces;
74 } WorkspaceConfigFileData;
75
76 struct BlendFileReadParams {
77         uint skip_flags : 2;  /* eBLOReadSkip */
78         uint is_startup : 1;
79 };
80
81 /* skip reading some data-block types (may want to skip screen data too). */
82 typedef enum eBLOReadSkip {
83         BLO_READ_SKIP_NONE          = 0,
84         BLO_READ_SKIP_USERDEF       = (1 << 0),
85         BLO_READ_SKIP_DATA          = (1 << 1),
86 } eBLOReadSkip;
87 #define BLO_READ_SKIP_ALL \
88         (BLO_READ_SKIP_USERDEF | BLO_READ_SKIP_DATA)
89
90 BlendFileData *BLO_read_from_file(
91         const char *filepath,
92         eBLOReadSkip skip_flags,
93         struct ReportList *reports);
94 BlendFileData *BLO_read_from_memory(
95         const void *mem, int memsize,
96         eBLOReadSkip skip_flags,
97         struct ReportList *reports);
98 BlendFileData *BLO_read_from_memfile(
99         struct Main *oldmain, const char *filename, struct MemFile *memfile,
100         eBLOReadSkip skip_flags,
101         struct ReportList *reports);
102
103 void BLO_blendfiledata_free(BlendFileData *bfd);
104
105 BlendHandle *BLO_blendhandle_from_file(const char *filepath, struct ReportList *reports);
106 BlendHandle *BLO_blendhandle_from_memory(const void *mem, int memsize);
107
108 struct LinkNode *BLO_blendhandle_get_datablock_names(BlendHandle *bh, int ofblocktype, int *tot_names);
109 struct LinkNode *BLO_blendhandle_get_previews(BlendHandle *bh, int ofblocktype, int *tot_prev);
110 struct LinkNode *BLO_blendhandle_get_linkable_groups(BlendHandle *bh);
111
112 void BLO_blendhandle_close(BlendHandle *bh);
113
114 /***/
115
116 #define BLO_GROUP_MAX 32
117 #define BLO_EMBEDDED_STARTUP_BLEND "<startup.blend>"
118
119 bool BLO_has_bfile_extension(const char *str);
120 bool BLO_library_path_explode(const char *path, char *r_dir, char **r_group, char **r_name);
121
122 /* Options controlling behavior of append/link code.
123  * Note: merged with 'user-level' options from operators etc. in 16 lower bits
124  *       (see eFileSel_Params_Flag in DNA_space_types.h). */
125 typedef enum BLO_LibLinkFlags {
126         /* Generate a placeholder (empty ID) if not found in current lib file. */
127         BLO_LIBLINK_USE_PLACEHOLDERS = 1 << 16,
128         /* Force loaded ID to be tagged as LIB_TAG_INDIRECT (used in reload context only). */
129         BLO_LIBLINK_FORCE_INDIRECT   = 1 << 17,
130 } BLO_LinkFlags;
131
132 struct Main *BLO_library_link_begin(struct Main *mainvar, BlendHandle **bh, const char *filepath);
133 struct ID *BLO_library_link_named_part(struct Main *mainl, BlendHandle **bh, const short idcode, const char *name);
134 struct ID *BLO_library_link_named_part_ex(
135         struct Main *mainl, BlendHandle **bh,
136         const short idcode, const char *name, const int flag,
137         struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, const struct View3D *v3d);
138 void BLO_library_link_end(
139         struct Main *mainl, BlendHandle **bh, int flag,
140         struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, const struct View3D *v3d);
141
142 void BLO_library_link_copypaste(struct Main *mainl, BlendHandle *bh);
143
144 void *BLO_library_read_struct(struct FileData *fd, struct BHead *bh, const char *blockname);
145
146 /* internal function but we need to expose it */
147 void blo_lib_link_restore(
148         struct Main *newmain, struct wmWindowManager *curwm,
149         struct Scene *curscene, struct ViewLayer *cur_render_layer);
150
151 typedef void (*BLOExpandDoitCallback) (void *fdhandle, struct Main *mainvar, void *idv);
152
153 void BLO_main_expander(BLOExpandDoitCallback expand_doit_func);
154 void BLO_expand_main(void *fdhandle, struct Main *mainvar);
155
156 /* Update defaults in startup.blend & userprefs.blend, without having to save and embed it */
157 void BLO_update_defaults_userpref_blend(void);
158 void BLO_update_defaults_startup_blend(struct Main *mainvar, const char *app_template);
159
160 /* Version patch user preferences. */
161 void BLO_version_defaults_userpref_blend(struct Main *mainvar, struct UserDef *userdef);
162
163 struct BlendThumbnail *BLO_thumbnail_from_file(const char *filepath);
164
165 /* datafiles (generated theme) */
166 extern const struct bTheme U_theme_default;
167
168 #ifdef __cplusplus
169 }
170 #endif
171
172 #endif  /* __BLO_READFILE_H__ */