[Bf-blender-cvs] [395056561bf] soc-2021-uv-editor-improvements: LibOverride RNA API: add removal of properties and operations.

Bastien Montagne noreply at git.blender.org
Mon Aug 9 03:24:41 CEST 2021


Commit: 395056561bf7b99915abc700ba549961d26ddaca
Author: Bastien Montagne
Date:   Wed Aug 4 16:56:06 2021 +0200
Branches: soc-2021-uv-editor-improvements
https://developer.blender.org/rB395056561bf7b99915abc700ba549961d26ddaca

LibOverride RNA API: add removal of properties and operations.

This should complete the basics of RNA API for library overrides.

Ref. T86656.

===================================================================

M	source/blender/makesrna/intern/rna_ID.c
M	tests/python/bl_blendfile_library_overrides.py

===================================================================

diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c
index e4c9b70a1ec..8f8ad077935 100644
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@ -807,6 +807,18 @@ static IDOverrideLibraryProperty *rna_ID_override_library_properties_add(
   return result;
 }
 
+static void rna_ID_override_library_properties_remove(IDOverrideLibrary *override_library,
+                                                      ReportList *reports,
+                                                      IDOverrideLibraryProperty *override_property)
+{
+  if (BLI_findindex(&override_library->properties, override_property) == -1) {
+    BKE_report(reports, RPT_ERROR, "Override property cannot be removed");
+    return;
+  }
+
+  BKE_lib_override_library_property_delete(override_library, override_property);
+}
+
 static IDOverrideLibraryPropertyOperation *rna_ID_override_library_property_operations_add(
     IDOverrideLibraryProperty *override_property,
     ReportList *reports,
@@ -834,6 +846,19 @@ static IDOverrideLibraryPropertyOperation *rna_ID_override_library_property_oper
   return result;
 }
 
+static void rna_ID_override_library_property_operations_remove(
+    IDOverrideLibraryProperty *override_property,
+    ReportList *reports,
+    IDOverrideLibraryPropertyOperation *override_operation)
+{
+  if (BLI_findindex(&override_property->operations, override_operation) == -1) {
+    BKE_report(reports, RPT_ERROR, "Override operation cannot be removed");
+    return;
+  }
+
+  BKE_lib_override_library_property_operation_delete(override_property, override_operation);
+}
+
 static void rna_ID_update_tag(ID *id, Main *bmain, ReportList *reports, int flag)
 {
   /* XXX, new function for this! */
@@ -1685,6 +1710,16 @@ static void rna_def_ID_override_library_property_operations(BlenderRNA *brna, Pr
                          "New Operation",
                          "Created operation");
   RNA_def_function_return(func, parm);
+
+  func = RNA_def_function(srna, "remove", "rna_ID_override_library_property_operations_remove");
+  RNA_def_function_ui_description(func, "Remove and delete an operation");
+  RNA_def_function_flag(func, FUNC_USE_REPORTS);
+  parm = RNA_def_pointer(func,
+                         "operation",
+                         "IDOverrideLibraryPropertyOperation",
+                         "Operation",
+                         "Override operation to be deleted");
+  RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
 }
 
 static void rna_def_ID_override_library_property(BlenderRNA *brna)
@@ -1741,6 +1776,16 @@ static void rna_def_ID_override_library_properties(BlenderRNA *brna, PropertyRNA
   parm = RNA_def_string(
       func, "rna_path", NULL, 256, "RNA Path", "RNA-Path of the property to add");
   RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
+  func = RNA_def_function(srna, "remove", "rna_ID_override_library_properties_remove");
+  RNA_def_function_ui_description(func, "Remove and delete a property");
+  RNA_def_function_flag(func, FUNC_USE_REPORTS);
+  parm = RNA_def_pointer(func,
+                         "property",
+                         "IDOverrideLibraryProperty",
+                         "Property",
+                         "Override property to be deleted");
+  RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
 }
 
 static void rna_def_ID_override_library(BlenderRNA *brna)
diff --git a/tests/python/bl_blendfile_library_overrides.py b/tests/python/bl_blendfile_library_overrides.py
index 358f77d49ea..b44e4d48564 100644
--- a/tests/python/bl_blendfile_library_overrides.py
+++ b/tests/python/bl_blendfile_library_overrides.py
@@ -59,9 +59,9 @@ class TestLibraryOverrides(TestHelper, unittest.TestCase):
         self.assertIsNone(local_id.data.override_library)
         assert(len(local_id.override_library.properties) == 0)
 
+        ##### Generate an override property & operation automaticaly by editing the local override data.
         local_id.location.y = 1.0
         local_id.override_library.operations_update()
-
         assert(len(local_id.override_library.properties) == 1)
         override_prop = local_id.override_library.properties[0]
         assert(override_prop.rna_path == "location")
@@ -71,11 +71,31 @@ class TestLibraryOverrides(TestHelper, unittest.TestCase):
         # Setting location.y overridded all elements in the location array. -1 is a wildcard.
         assert(override_operation.subitem_local_index == -1)
 
+        ##### Reset the override to its linked reference data.
         local_id.override_library.reset()
-
         assert(len(local_id.override_library.properties) == 0)
         assert(local_id.location == local_id.override_library.reference.location)
 
+        ##### Generate an override property & operation manually using the API.
+        override_property = local_id.override_library.properties.add(rna_path="location")
+        override_property.operations.add(operation='REPLACE')
+
+        assert(len(local_id.override_library.properties) == 1)
+        override_prop = local_id.override_library.properties[0]
+        assert(override_prop.rna_path == "location")
+        assert(len(override_prop.operations) == 1)
+        override_operation = override_prop.operations[0]
+        assert(override_operation.operation == 'REPLACE')
+        # Setting location.y overridded all elements in the location array. -1 is a wildcard.
+        assert(override_operation.subitem_local_index == -1)
+
+        override_property = local_id.override_library.properties[0]
+        override_property.operations.remove(override_property.operations[0])
+        local_id.override_library.properties.remove(override_property)
+
+        assert(len(local_id.override_library.properties) == 0)
+
+        ##### Delete the override.
         local_id_name = local_id.name
         assert(bpy.data.objects.get((local_id_name, None), None) == local_id)
         local_id.override_library.destroy()



More information about the Bf-blender-cvs mailing list