[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