Merge branch 'blender2.7'
[blender.git] / source / blender / blenkernel / BKE_library_override.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2016 by Blender Foundation.
19  * All rights reserved.
20  *
21  * Contributor(s): Bastien Montagne.
22  *
23  * ***** END GPL LICENSE BLOCK *****
24  */
25
26 #ifndef __BKE_LIBRARY_OVERRIDE_H__
27 #define __BKE_LIBRARY_OVERRIDE_H__
28
29 /** \file BKE_library_override.h
30  *  \ingroup bke
31  *  \since December 2016
32  *  \author mont29
33  */
34
35 struct ID;
36 struct IDOverrideStatic;
37 struct IDOverrideStaticProperty;
38 struct IDOverrideStaticPropertyOperation;
39 struct Main;
40
41 void BKE_override_static_enable(const bool do_enable);
42 bool BKE_override_static_is_enabled(void);
43
44 struct IDOverrideStatic *BKE_override_static_init(struct ID *local_id, struct ID *reference_id);
45 void BKE_override_static_copy(struct ID *dst_id, const struct ID *src_id);
46 void BKE_override_static_clear(struct IDOverrideStatic *override);
47 void BKE_override_static_free(struct IDOverrideStatic **override);
48
49 struct ID *BKE_override_static_create_from_id(struct Main *bmain, struct ID *reference_id);
50 bool BKE_override_static_create_from_tag(struct Main *bmain);
51
52 struct IDOverrideStaticProperty *BKE_override_static_property_find(struct IDOverrideStatic *override, const char *rna_path);
53 struct IDOverrideStaticProperty *BKE_override_static_property_get(struct IDOverrideStatic *override, const char *rna_path, bool *r_created);
54 void BKE_override_static_property_delete(struct IDOverrideStatic *override, struct IDOverrideStaticProperty *override_property);
55
56 struct IDOverrideStaticPropertyOperation *BKE_override_static_property_operation_find(
57         struct IDOverrideStaticProperty *override_property,
58         const char *subitem_refname, const char *subitem_locname,
59         const int subitem_refindex, const int subitem_locindex, const bool strict, bool *r_strict);
60 struct IDOverrideStaticPropertyOperation *BKE_override_static_property_operation_get(
61         struct IDOverrideStaticProperty *override_property, const short operation,
62         const char *subitem_refname, const char *subitem_locname,
63         const int subitem_refindex, const int subitem_locindex,
64         const bool strict, bool *r_strict, bool *r_created);
65 void BKE_override_static_property_operation_delete(
66         struct IDOverrideStaticProperty *override_property, struct IDOverrideStaticPropertyOperation *override_property_operation);
67
68 bool BKE_override_static_status_check_local(struct Main *bmain, struct ID *local);
69 bool BKE_override_static_status_check_reference(struct Main *bmain, struct ID *local);
70
71 bool BKE_override_static_operations_create(struct Main *bmain, struct ID *local, const bool force_auto);
72 void BKE_main_override_static_operations_create(struct Main *bmain, const bool force_auto);
73
74 void BKE_override_static_update(struct Main *bmain, struct ID *local);
75 void BKE_main_override_static_update(struct Main *bmain);
76
77
78 /* Storage (.blend file writing) part. */
79
80 /* For now, we just use a temp main list. */
81 typedef struct Main OverrideStaticStorage;
82
83 OverrideStaticStorage *BKE_override_static_operations_store_initialize(void);
84 struct ID *BKE_override_static_operations_store_start(
85         struct Main *bmain, OverrideStaticStorage *override_storage, struct ID *local);
86 void BKE_override_static_operations_store_end(OverrideStaticStorage *override_storage, struct ID *local);
87 void BKE_override_static_operations_store_finalize(OverrideStaticStorage *override_storage);
88
89
90
91 #endif  /* __BKE_LIBRARY_OVERRIDE_H__ */