diff --git a/leenkx/blender/lnx/props_traits_props.py b/leenkx/blender/lnx/props_traits_props.py index 8761095..61c40c3 100644 --- a/leenkx/blender/lnx/props_traits_props.py +++ b/leenkx/blender/lnx/props_traits_props.py @@ -3,13 +3,6 @@ from bpy.props import * __all__ = ['LnxTraitPropWarning', 'LnxTraitPropListItem', 'LNX_UL_PropList'] -# Helper function to handle version compatibility -def compatible_prop(prop_func, **kwargs): - """Create properties compatible with both Blender 2.83 and newer versions.""" - if bpy.app.version < (2, 90, 0): - # Remove override parameter for Blender 2.83 - kwargs.pop('override', None) - return prop_func(**kwargs) PROP_TYPE_ICONS = { "String": "SORTALPHA", @@ -43,53 +36,75 @@ def filter_objects(item, b_object): class LnxTraitPropWarning(bpy.types.PropertyGroup): - propName = compatible_prop(StringProperty, name="Property Name", override={"LIBRARY_OVERRIDABLE"}) - warning = compatible_prop(StringProperty, name="Warning", override={"LIBRARY_OVERRIDABLE"}) + propName: StringProperty(name="Property Name") + warning: StringProperty(name="Warning") class LnxTraitPropListItem(bpy.types.PropertyGroup): """Group of properties representing an item in the list.""" - name = compatible_prop(StringProperty, + name: StringProperty( name="Name", description="The name of this property", - default="Untitled", - override={"LIBRARY_OVERRIDABLE"}) - - type = compatible_prop(EnumProperty, - items=( - # (Haxe Type, Display Name, Description) - ("String", "String", "String Type"), - ("Int", "Integer", "Integer Type"), - ("Float", "Float", "Float Type"), - ("Bool", "Boolean", "Boolean Type"), - ("Vec2", "Vec2", "2D Vector Type"), - ("Vec3", "Vec3", "3D Vector Type"), - ("Vec4", "Vec4", "4D Vector Type"), - ("Object", "Object", "Object Type"), - ("CameraObject", "Camera Object", "Camera Object Type"), - ("LightObject", "Light Object", "Light Object Type"), - ("MeshObject", "Mesh Object", "Mesh Object Type"), - ("SpeakerObject", "Speaker Object", "Speaker Object Type"), - ("TSceneFormat", "Scene", "Scene Type")), - name="Type", - description="The type of this property", - default="String", - override={"LIBRARY_OVERRIDABLE"} - ) - - # === VALUES === - value_string = compatible_prop(StringProperty, name="Value", default="", override={"LIBRARY_OVERRIDABLE"}) - value_int = compatible_prop(IntProperty, name="Value", default=0, override={"LIBRARY_OVERRIDABLE"}) - value_float = compatible_prop(FloatProperty, name="Value", default=0.0, override={"LIBRARY_OVERRIDABLE"}) - value_bool = compatible_prop(BoolProperty, name="Value", default=False, override={"LIBRARY_OVERRIDABLE"}) - value_vec2 = compatible_prop(FloatVectorProperty, name="Value", size=2, override={"LIBRARY_OVERRIDABLE"}) - value_vec3 = compatible_prop(FloatVectorProperty, name="Value", size=3, override={"LIBRARY_OVERRIDABLE"}) - value_vec4 = compatible_prop(FloatVectorProperty, name="Value", size=4, override={"LIBRARY_OVERRIDABLE"}) - value_object = compatible_prop(PointerProperty, - name="Value", type=bpy.types.Object, poll=filter_objects, - override={"LIBRARY_OVERRIDABLE"} - ) - value_scene = compatible_prop(PointerProperty, name="Value", type=bpy.types.Scene, override={"LIBRARY_OVERRIDABLE"}) + default="Untitled") + if bpy.app.version < (2, 90, 0): + type: EnumProperty( + items=( + # (Haxe Type, Display Name, Description) + ("String", "String", "String Type"), + ("Int", "Integer", "Integer Type"), + ("Float", "Float", "Float Type"), + ("Bool", "Boolean", "Boolean Type"), + ("Vec2", "Vec2", "2D Vector Type"), + ("Vec3", "Vec3", "3D Vector Type"), + ("Vec4", "Vec4", "4D Vector Type"), + ("Object", "Object", "Object Type"), + ("CameraObject", "Camera Object", "Camera Object Type"), + ("LightObject", "Light Object", "Light Object Type"), + ("MeshObject", "Mesh Object", "Mesh Object Type"), + ("SpeakerObject", "Speaker Object", "Speaker Object Type"), + ("TSceneFormat", "Scene", "Scene Type")), + name="Type", + description="The type of this property", + default="String") + value_string: StringProperty(name="Value", default="") + value_int: IntProperty(name="Value", default=0) + value_float: FloatProperty(name="Value", default=0.0) + value_bool: BoolProperty(name="Value", default=False) + value_vec2: FloatVectorProperty(name="Value", size=2) + value_vec3: FloatVectorProperty(name="Value", size=3) + value_vec4: FloatVectorProperty(name="Value", size=4) + value_object: PointerProperty(name="Value", type=bpy.types.Object, poll=filter_objects) + value_scene: PointerProperty(name="Value", type=bpy.types.Scene) + else: + type: EnumProperty( + items=( + # (Haxe Type, Display Name, Description) + ("String", "String", "String Type"), + ("Int", "Integer", "Integer Type"), + ("Float", "Float", "Float Type"), + ("Bool", "Boolean", "Boolean Type"), + ("Vec2", "Vec2", "2D Vector Type"), + ("Vec3", "Vec3", "3D Vector Type"), + ("Vec4", "Vec4", "4D Vector Type"), + ("Object", "Object", "Object Type"), + ("CameraObject", "Camera Object", "Camera Object Type"), + ("LightObject", "Light Object", "Light Object Type"), + ("MeshObject", "Mesh Object", "Mesh Object Type"), + ("SpeakerObject", "Speaker Object", "Speaker Object Type"), + ("TSceneFormat", "Scene", "Scene Type")), + name="Type", + description="The type of this property", + default="String", + override={"LIBRARY_OVERRIDABLE"}) + value_string: StringProperty(name="Value", default="", override={"LIBRARY_OVERRIDABLE"}) + value_int: IntProperty(name="Value", default=0, override={"LIBRARY_OVERRIDABLE"}) + value_float: FloatProperty(name="Value", default=0.0, override={"LIBRARY_OVERRIDABLE"}) + value_bool: BoolProperty(name="Value", default=False, override={"LIBRARY_OVERRIDABLE"}) + value_vec2: FloatVectorProperty(name="Value", size=2, override={"LIBRARY_OVERRIDABLE"}) + value_vec3: FloatVectorProperty(name="Value", size=3, override={"LIBRARY_OVERRIDABLE"}) + value_vec4: FloatVectorProperty(name="Value", size=4, override={"LIBRARY_OVERRIDABLE"}) + value_object: PointerProperty(name="Value", type=bpy.types.Object, poll=filter_objects, override={"LIBRARY_OVERRIDABLE"}) + value_scene: PointerProperty(name="Value", type=bpy.types.Scene, override={"LIBRARY_OVERRIDABLE"}) def set_value(self, val): # Would require way too much effort, so it's out of scope here.