[Bf-blender-cvs] [b03542b61f] id_override_static: Add public API to BKE's lib override to delete override properties & operations.
Bastien Montagne
noreply at git.blender.org
Fri Mar 24 12:55:12 CET 2017
Commit: b03542b61fbcf8d9689f9807e92f7c01a0d9e3e0
Author: Bastien Montagne
Date: Fri Mar 24 12:44:53 2017 +0100
Branches: id_override_static
https://developer.blender.org/rBb03542b61fbcf8d9689f9807e92f7c01a0d9e3e0
Add public API to BKE's lib override to delete override properties & operations.
===================================================================
M source/blender/blenkernel/BKE_library_override.h
M source/blender/blenkernel/intern/library_override.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_library_override.h b/source/blender/blenkernel/BKE_library_override.h
index 07854ebef0..7701088d62 100644
--- a/source/blender/blenkernel/BKE_library_override.h
+++ b/source/blender/blenkernel/BKE_library_override.h
@@ -44,6 +44,7 @@ void BKE_override_free(struct IDOverride **override);
struct IDOverrideProperty *BKE_override_property_find(struct IDOverride *override, const char *rna_path);
struct IDOverrideProperty *BKE_override_property_get(struct IDOverride *override, const char *rna_path, bool *r_created);
+void BKE_override_property_delete(struct IDOverride *override, struct IDOverrideProperty *override_property);
struct IDOverridePropertyOperation *BKE_override_property_operation_find(
struct IDOverrideProperty *override_property,
@@ -53,6 +54,8 @@ struct IDOverridePropertyOperation *BKE_override_property_operation_get(
struct IDOverrideProperty *override_property, const int operation,
const char *subitem_refname, const char *subitem_locname,
const int subitem_refindex, const int subitem_locindex, bool *r_created);
+void BKE_override_property_operation_delete(
+ struct IDOverrideProperty *override_property, struct IDOverridePropertyOperation *override_property_operation);
bool BKE_override_status_check_local(struct ID *local);
bool BKE_override_status_check_reference(struct ID *local);
diff --git a/source/blender/blenkernel/intern/library_override.c b/source/blender/blenkernel/intern/library_override.c
index 2bf87af369..e898e4687b 100644
--- a/source/blender/blenkernel/intern/library_override.c
+++ b/source/blender/blenkernel/intern/library_override.c
@@ -52,6 +52,9 @@
#define OVERRIDE_AUTO_CHECK_DELAY 0.2 /* 200ms between auto-override checks. */
+static void bke_override_property_clear(IDOverrideProperty *op);
+static void bke_override_property_operation_clear(IDOverridePropertyOperation *opop);
+
/** Initialize empty overriding of \a reference_id by \a local_id. */
IDOverride *BKE_override_init(struct ID *local_id, struct ID *reference_id)
{
@@ -71,19 +74,7 @@ void BKE_override_clear(struct IDOverride *override)
BLI_assert(override != NULL);
for (IDOverrideProperty *op = override->properties.first; op; op = op->next) {
- BLI_assert(op->rna_path != NULL);
-
- MEM_freeN(op->rna_path);
-
- for (IDOverridePropertyOperation *opop = op->operations.first; opop; opop = opop->next) {
- if (opop->subitem_reference_name) {
- MEM_freeN(opop->subitem_reference_name);
- }
- if (opop->subitem_local_name) {
- MEM_freeN(opop->subitem_local_name);
- }
- }
- BLI_freelistN(&op->operations);
+ bke_override_property_clear(op);
}
BLI_freelistN(&override->properties);
}
@@ -131,6 +122,27 @@ IDOverrideProperty *BKE_override_property_get(IDOverride *override, const char *
return op;
}
+void bke_override_property_clear(IDOverrideProperty *op)
+{
+ BLI_assert(op->rna_path != NULL);
+
+ MEM_freeN(op->rna_path);
+
+ for (IDOverridePropertyOperation *opop = op->operations.first; opop; opop = opop->next) {
+ bke_override_property_operation_clear(opop);
+ }
+ BLI_freelistN(&op->operations);
+}
+
+/**
+ * Remove and free given \a override_property from given ID \a override.
+ */
+void BKE_override_property_delete(IDOverride *override, IDOverrideProperty *override_property)
+{
+ bke_override_property_clear(override_property);
+ BLI_freelinkN(&override->properties, override_property);
+}
+
/**
* Find override property operation from given sub-item(s), if it exists.
*/
@@ -203,6 +215,26 @@ IDOverridePropertyOperation *BKE_override_property_operation_get(
return opop;
}
+void bke_override_property_operation_clear(IDOverridePropertyOperation *opop)
+{
+ if (opop->subitem_reference_name) {
+ MEM_freeN(opop->subitem_reference_name);
+ }
+ if (opop->subitem_local_name) {
+ MEM_freeN(opop->subitem_local_name);
+ }
+}
+
+/**
+ * Remove and free given \a override_property_operation from given ID \a override_property.
+ */
+void BKE_override_property_operation_delete(
+ IDOverrideProperty *override_property, IDOverridePropertyOperation *override_property_operation)
+{
+ bke_override_property_operation_clear(override_property_operation);
+ BLI_freelinkN(&override_property->operations, override_property_operation);
+}
+
/**
* Check that status of local data-block is still valid against current reference one.
*
More information about the Bf-blender-cvs
mailing list