Cleanup: remove redundant doxygen \file argument
[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 \ingroup blenloader
23  *  \brief external readfile function prototypes.
24  */
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 struct BHead;
31 struct BlendThumbnail;
32 struct FileData;
33 struct LinkNode;
34 struct ListBase;
35 struct Main;
36 struct MemFile;
37 struct ReportList;
38 struct Scene;
39 struct UserDef;
40 struct View3D;
41 struct ViewLayer;
42 struct bContext;
43 struct bScreen;
44 struct wmWindowManager;
45
46 typedef struct BlendHandle BlendHandle;
47
48 typedef enum eBlenFileType {
49         BLENFILETYPE_BLEND = 1,
50         BLENFILETYPE_PUB = 2,
51         BLENFILETYPE_RUNTIME = 3,
52 } eBlenFileType;
53
54 typedef struct BlendFileData {
55         struct Main *main;
56         struct UserDef *user;
57
58         int fileflags;
59         int globalf;
60         char filename[1024];    /* 1024 = FILE_MAX */
61
62         struct bScreen *curscreen; /* TODO think this isn't needed anymore? */
63         struct Scene *curscene;
64         struct ViewLayer *cur_view_layer; /* layer to activate in workspaces when reading without UI */
65
66         eBlenFileType type;
67 } BlendFileData;
68
69 typedef struct WorkspaceConfigFileData {
70         struct Main *main; /* has to be freed when done reading file data */
71
72         struct ListBase workspaces;
73 } WorkspaceConfigFileData;
74
75 struct BlendFileReadParams {
76         uint skip_flags : 2;  /* eBLOReadSkip */
77         uint is_startup : 1;
78 };
79
80 /* skip reading some data-block types (may want to skip screen data too). */
81 typedef enum eBLOReadSkip {
82         BLO_READ_SKIP_NONE          = 0,
83         BLO_READ_SKIP_USERDEF       = (1 << 0),
84         BLO_READ_SKIP_DATA          = (1 << 1),
85 } eBLOReadSkip;
86 #define BLO_READ_SKIP_ALL \
87         (BLO_READ_SKIP_USERDEF | BLO_READ_SKIP_DATA)
88
89 BlendFileData *BLO_read_from_file(
90         const char *filepath,
91         eBLOReadSkip skip_flags,
92         struct ReportList *reports);
93 BlendFileData *BLO_read_from_memory(
94         const void *mem, int memsize,
95         eBLOReadSkip skip_flags,
96         struct ReportList *reports);
97 BlendFileData *BLO_read_from_memfile(
98         struct Main *oldmain, const char *filename, struct MemFile *memfile,
99         eBLOReadSkip skip_flags,
100         struct ReportList *reports);
101
102 void BLO_blendfiledata_free(BlendFileData *bfd);
103
104 BlendHandle *BLO_blendhandle_from_file(const char *filepath, struct ReportList *reports);
105 BlendHandle *BLO_blendhandle_from_memory(const void *mem, int memsize);
106
107 struct LinkNode *BLO_blendhandle_get_datablock_names(BlendHandle *bh, int ofblocktype, int *tot_names);
108 struct LinkNode *BLO_blendhandle_get_previews(BlendHandle *bh, int ofblocktype, int *tot_prev);
109 struct LinkNode *BLO_blendhandle_get_linkable_groups(BlendHandle *bh);
110
111 void BLO_blendhandle_close(BlendHandle *bh);
112
113 /***/
114
115 #define BLO_GROUP_MAX 32
116 #define BLO_EMBEDDED_STARTUP_BLEND "<startup.blend>"
117
118 bool BLO_has_bfile_extension(const char *str);
119 bool BLO_library_path_explode(const char *path, char *r_dir, char **r_group, char **r_name);
120
121 /* Options controlling behavior of append/link code.
122  * Note: merged with 'user-level' options from operators etc. in 16 lower bits
123  *       (see eFileSel_Params_Flag in DNA_space_types.h). */
124 typedef enum BLO_LibLinkFlags {
125         /* Generate a placeholder (empty ID) if not found in current lib file. */
126         BLO_LIBLINK_USE_PLACEHOLDERS = 1 << 16,
127         /* Force loaded ID to be tagged as LIB_TAG_INDIRECT (used in reload context only). */
128         BLO_LIBLINK_FORCE_INDIRECT   = 1 << 17,
129 } BLO_LinkFlags;
130
131 struct Main *BLO_library_link_begin(struct Main *mainvar, BlendHandle **bh, const char *filepath);
132 struct ID *BLO_library_link_named_part(struct Main *mainl, BlendHandle **bh, const short idcode, const char *name);
133 struct ID *BLO_library_link_named_part_ex(
134         struct Main *mainl, BlendHandle **bh,
135         const short idcode, const char *name, const int flag,
136         struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, const struct View3D *v3d);
137 void BLO_library_link_end(
138         struct Main *mainl, BlendHandle **bh, int flag,
139         struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, const struct View3D *v3d);
140
141 void BLO_library_link_copypaste(struct Main *mainl, BlendHandle *bh);
142
143 void *BLO_library_read_struct(struct FileData *fd, struct BHead *bh, const char *blockname);
144
145 /* internal function but we need to expose it */
146 void blo_lib_link_restore(
147         struct Main *newmain, struct wmWindowManager *curwm,
148         struct Scene *curscene, struct ViewLayer *cur_render_layer);
149
150 typedef void (*BLOExpandDoitCallback) (void *fdhandle, struct Main *mainvar, void *idv);
151
152 void BLO_main_expander(BLOExpandDoitCallback expand_doit_func);
153 void BLO_expand_main(void *fdhandle, struct Main *mainvar);
154
155 /* Update defaults in startup.blend & userprefs.blend, without having to save and embed it */
156 void BLO_update_defaults_userpref_blend(void);
157 void BLO_update_defaults_startup_blend(struct Main *mainvar, const char *app_template);
158
159 /* Version patch user preferences. */
160 void BLO_version_defaults_userpref_blend(struct Main *mainvar, struct UserDef *userdef);
161
162 struct BlendThumbnail *BLO_thumbnail_from_file(const char *filepath);
163
164 /* datafiles (generated theme) */
165 extern const struct bTheme U_theme_default;
166
167 #ifdef __cplusplus
168 }
169 #endif
170
171 #endif  /* __BLO_READFILE_H__ */