forked from bartvdbraak/blender
LibOverride RNA API: add removal of properties and operations.
This should complete the basics of RNA API for library overrides. Ref. T86656.
This commit is contained in:
parent
a8185d2d74
commit
58ba75f9e3
@ -807,6 +807,18 @@ static IDOverrideLibraryProperty *rna_ID_override_library_properties_add(
|
|||||||
return result;
|
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(
|
static IDOverrideLibraryPropertyOperation *rna_ID_override_library_property_operations_add(
|
||||||
IDOverrideLibraryProperty *override_property,
|
IDOverrideLibraryProperty *override_property,
|
||||||
ReportList *reports,
|
ReportList *reports,
|
||||||
@ -834,6 +846,19 @@ static IDOverrideLibraryPropertyOperation *rna_ID_override_library_property_oper
|
|||||||
return result;
|
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)
|
static void rna_ID_update_tag(ID *id, Main *bmain, ReportList *reports, int flag)
|
||||||
{
|
{
|
||||||
/* XXX, new function for this! */
|
/* XXX, new function for this! */
|
||||||
@ -1685,6 +1710,16 @@ static void rna_def_ID_override_library_property_operations(BlenderRNA *brna, Pr
|
|||||||
"New Operation",
|
"New Operation",
|
||||||
"Created operation");
|
"Created operation");
|
||||||
RNA_def_function_return(func, parm);
|
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)
|
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(
|
parm = RNA_def_string(
|
||||||
func, "rna_path", NULL, 256, "RNA Path", "RNA-Path of the property to add");
|
func, "rna_path", NULL, 256, "RNA Path", "RNA-Path of the property to add");
|
||||||
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
|
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)
|
static void rna_def_ID_override_library(BlenderRNA *brna)
|
||||||
|
@ -59,8 +59,26 @@ class TestLibraryOverrides(TestHelper, unittest.TestCase):
|
|||||||
self.assertIsNone(local_id.data.override_library)
|
self.assertIsNone(local_id.data.override_library)
|
||||||
assert(len(local_id.override_library.properties) == 0)
|
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.location.y = 1.0
|
||||||
local_id.override_library.operations_update()
|
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")
|
||||||
|
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)
|
||||||
|
|
||||||
|
##### 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)
|
assert(len(local_id.override_library.properties) == 1)
|
||||||
override_prop = local_id.override_library.properties[0]
|
override_prop = local_id.override_library.properties[0]
|
||||||
@ -71,11 +89,13 @@ class TestLibraryOverrides(TestHelper, unittest.TestCase):
|
|||||||
# Setting location.y overridded all elements in the location array. -1 is a wildcard.
|
# Setting location.y overridded all elements in the location array. -1 is a wildcard.
|
||||||
assert(override_operation.subitem_local_index == -1)
|
assert(override_operation.subitem_local_index == -1)
|
||||||
|
|
||||||
local_id.override_library.reset()
|
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)
|
assert(len(local_id.override_library.properties) == 0)
|
||||||
assert(local_id.location == local_id.override_library.reference.location)
|
|
||||||
|
|
||||||
|
##### Delete the override.
|
||||||
local_id_name = local_id.name
|
local_id_name = local_id.name
|
||||||
assert(bpy.data.objects.get((local_id_name, None), None) == local_id)
|
assert(bpy.data.objects.get((local_id_name, None), None) == local_id)
|
||||||
local_id.override_library.destroy()
|
local_id.override_library.destroy()
|
||||||
|
Loading…
Reference in New Issue
Block a user