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