Cleanup: comments (long lines) in blenkernel
[blender.git] / source / blender / blenkernel / BKE_library_remap.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 #ifndef __BKE_LIBRARY_REMAP_H__
17 #define __BKE_LIBRARY_REMAP_H__
18
19 /** \file
20  * \ingroup bke
21  */
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25
26 #include "BLI_compiler_attrs.h"
27
28 /* BKE_libblock_free, delete are declared in BKE_library.h for convenience. */
29
30 /* Also IDRemap->flag. */
31 enum {
32   /** Do not remap indirect usages of IDs (that is, when user is some linked data). */
33   ID_REMAP_SKIP_INDIRECT_USAGE = 1 << 0,
34   /**
35    * This flag should always be set, *except for 'unlink' scenarios*
36    * (only relevant when new_id == NULL).
37    * Basically, when unset, NEVER_NULL ID usages will keep pointing to old_id, but (if needed)
38    * old_id user count will still be decremented.
39    * This is mandatory for 'delete ID' case,
40    * but in all other situation this would lead to invalid user counts!
41    */
42   ID_REMAP_SKIP_NEVER_NULL_USAGE = 1 << 1,
43   /**
44    * This tells the callback func to flag with #LIB_DOIT all IDs
45    * using target one with a 'never NULL' pointer (like e.g. #Object.data).
46    */
47   ID_REMAP_FLAG_NEVER_NULL_USAGE = 1 << 2,
48   /**
49    * This tells the callback func to force setting IDs
50    * using target one with a 'never NULL' pointer to NULL.
51    * \warning Use with extreme care, this will leave database in broken state
52    * and can cause crashes very easily!
53    */
54   ID_REMAP_FORCE_NEVER_NULL_USAGE = 1 << 3,
55   /**
56    * Do not consider proxy/_group pointers of local objects as indirect usages...
57    * Our oh-so-beloved proxies again...
58    * Do not consider data used by local proxy object as indirect usage.
59    * This is needed e.g. in reload scenario,
60    * since we have to ensure remapping of Armature data of local proxy
61    * is also performed. Usual nightmare...
62    */
63   ID_REMAP_NO_INDIRECT_PROXY_DATA_USAGE = 1 << 4,
64   /** Do not remap static override pointers. */
65   ID_REMAP_SKIP_STATIC_OVERRIDE = 1 << 5,
66 };
67
68 /* Note: Requiring new_id to be non-null, this *may* not be the case ultimately,
69  * but makes things simpler for now. */
70 void BKE_libblock_remap_locked(struct Main *bmain,
71                                void *old_idv,
72                                void *new_idv,
73                                const short remap_flags) ATTR_NONNULL(1, 2);
74 void BKE_libblock_remap(struct Main *bmain, void *old_idv, void *new_idv, const short remap_flags)
75     ATTR_NONNULL(1, 2);
76
77 void BKE_libblock_unlink(struct Main *bmain,
78                          void *idv,
79                          const bool do_flag_never_null,
80                          const bool do_skip_indirect) ATTR_NONNULL();
81
82 void BKE_libblock_relink_ex(struct Main *bmain,
83                             void *idv,
84                             void *old_idv,
85                             void *new_idv,
86                             const bool us_min_never_null) ATTR_NONNULL(1, 2);
87
88 void BKE_libblock_relink_to_newid(struct ID *id) ATTR_NONNULL();
89
90 typedef void (*BKE_library_free_window_manager_cb)(struct bContext *, struct wmWindowManager *);
91 typedef void (*BKE_library_free_notifier_reference_cb)(const void *);
92 typedef void (*BKE_library_remap_editor_id_reference_cb)(struct ID *, struct ID *);
93
94 void BKE_library_callback_free_window_manager_set(BKE_library_free_window_manager_cb func);
95 void BKE_library_callback_free_notifier_reference_set(BKE_library_free_notifier_reference_cb func);
96 void BKE_library_callback_remap_editor_id_reference_set(
97     BKE_library_remap_editor_id_reference_cb func);
98
99 #ifdef __cplusplus
100 }
101 #endif
102
103 #endif /* __BKE_LIBRARY_REMAP_H__ */