From 7f4c8d34f3525912d649a25a21b67da460ac21b6 Mon Sep 17 00:00:00 2001 From: DasLixou Date: Tue, 20 Aug 2024 18:08:53 +0200 Subject: [PATCH] fix for all propgroups other than tuple, that already worked --- .../propGroups/process_list.py | 3 +- .../bevy_components/propGroups/process_map.py | 5 ++-- .../propGroups/process_structs.py | 17 +++++++++-- .../bevy_components/propGroups/utils.py | 30 ++++++++++++------- 4 files changed, 39 insertions(+), 16 deletions(-) diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/process_list.py b/tools/blenvy/add_ons/bevy_components/propGroups/process_list.py index 8c884e4..48952ae 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/process_list.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/process_list.py @@ -3,6 +3,7 @@ from .utils import generate_wrapper_propertyGroup from . import process_component def process_list(registry, definition, update, nesting_long_names=[]): + blender_property_mapping = registry.blender_property_mapping value_types_defaults = registry.value_types_defaults type_infos = registry.type_infos @@ -13,7 +14,7 @@ def process_list(registry, definition, update, nesting_long_names=[]): item_definition = type_infos[ref_name] item_long_name = item_definition["long_name"] - is_item_value_type = item_long_name in value_types_defaults + is_item_value_type = item_long_name in blender_property_mapping property_group_class = None #if the content of the list is a unit type, we need to generate a fake wrapper, otherwise we cannot use layout.prop(group, "propertyName") as there is no propertyName ! diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/process_map.py b/tools/blenvy/add_ons/bevy_components/propGroups/process_map.py index 2b9d261..8dd9c40 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/process_map.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/process_map.py @@ -3,6 +3,7 @@ from .utils import generate_wrapper_propertyGroup from . import process_component def process_map(registry, definition, update, nesting_long_names=[]): + blender_property_mapping = registry.blender_property_mapping value_types_defaults = registry.value_types_defaults type_infos = registry.type_infos @@ -19,7 +20,7 @@ def process_map(registry, definition, update, nesting_long_names=[]): if key_ref_name in type_infos: key_definition = type_infos[key_ref_name] original_long_name = key_definition["long_name"] - is_key_value_type = original_long_name in value_types_defaults + is_key_value_type = original_long_name in blender_property_mapping definition_link = definition["keyType"]["type"]["$ref"] #if the content of the list is a unit type, we need to generate a fake wrapper, otherwise we cannot use layout.prop(group, "propertyName") as there is no propertyName ! @@ -38,7 +39,7 @@ def process_map(registry, definition, update, nesting_long_names=[]): if value_ref_name in type_infos: value_definition = type_infos[value_ref_name] original_long_name = value_definition["long_name"] - is_value_value_type = original_long_name in value_types_defaults + is_value_value_type = original_long_name in blender_property_mapping definition_link = definition["valueType"]["type"]["$ref"] #if the content of the list is a unit type, we need to generate a fake wrapper, otherwise we cannot use layout.prop(group, "propertyName") as there is no propertyName ! diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/process_structs.py b/tools/blenvy/add_ons/bevy_components/propGroups/process_structs.py index 255111e..05aba7d 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/process_structs.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/process_structs.py @@ -17,12 +17,15 @@ def process_structs(registry, definition, properties, update, nesting_long_names if ref_name in type_infos: original = type_infos[ref_name] original_long_name = original["long_name"] - is_value_type = original_long_name in value_types_defaults - value = value_types_defaults[original_long_name] if is_value_type else None + + is_value_type = original_long_name in blender_property_mapping + has_default_value = original_long_name in value_types_defaults + + value = value_types_defaults[original_long_name] if has_default_value else None default_values[property_name] = value if is_value_type: - if original_long_name in blender_property_mapping: + if has_default_value: blender_property_def = blender_property_mapping[original_long_name] blender_property = blender_property_def["type"]( **blender_property_def["presets"],# we inject presets first @@ -31,6 +34,14 @@ def process_structs(registry, definition, properties, update, nesting_long_names update = update ) __annotations__[property_name] = blender_property + else: + blender_property_def = blender_property_mapping[original_long_name] + blender_property = blender_property_def["type"]( + **blender_property_def["presets"],# we inject presets first + name = property_name, + update = update + ) + __annotations__[property_name] = blender_property else: original_long_name = original["long_name"] (sub_component_group, _) = process_component.process_component(registry, original, update, {"nested": True, "long_name": original_long_name}, nesting_long_names+[property_name]) diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/utils.py b/tools/blenvy/add_ons/bevy_components/propGroups/utils.py index 9c0b928..bbf3d58 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/utils.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/utils.py @@ -11,7 +11,9 @@ from bpy_types import PropertyGroup def generate_wrapper_propertyGroup(wrapped_type_long_name, item_long_name, definition_link, registry, update, nesting_long_names=[]): value_types_defaults = registry.value_types_defaults blender_property_mapping = registry.blender_property_mapping - is_item_value_type = item_long_name in value_types_defaults + + is_item_value_type = item_long_name in blender_property_mapping + has_item_default_value = item_long_name in value_types_defaults wrapper_name = "wrapper_" + wrapped_type_long_name @@ -42,15 +44,23 @@ def generate_wrapper_propertyGroup(wrapped_type_long_name, item_long_name, defin blender_property = StringProperty(default="", update=update) - if item_long_name in blender_property_mapping: - value = value_types_defaults[item_long_name] if is_item_value_type else None - blender_property_def = blender_property_mapping[item_long_name] - blender_property = blender_property_def["type"]( - **blender_property_def["presets"],# we inject presets first - name = "property_name", - default = value, - update = update - ) + if is_item_value_type: + value = value_types_defaults[item_long_name] if has_item_default_value else None + if has_item_default_value: + blender_property_def = blender_property_mapping[item_long_name] + blender_property = blender_property_def["type"]( + **blender_property_def["presets"],# we inject presets first + name = "property_name", + default = value, + update = update + ) + else: + blender_property_def = blender_property_mapping[item_long_name] + blender_property = blender_property_def["type"]( + **blender_property_def["presets"],# we inject presets first + name = "property_name", + update = update + ) wrapper_annotations = { '0' : blender_property