mirror of
https://github.com/kaosat-dev/Blender_bevy_components_workflow.git
synced 2024-11-22 20:00:53 +00:00
117 lines
4.6 KiB
Python
117 lines
4.6 KiB
Python
|
import bpy
|
||
|
from bpy_types import (UIList)
|
||
|
from .operators import(OT_OpenFilebrowser, ReloadRegistryOperator, COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL, COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT)
|
||
|
|
||
|
class BEVY_COMPONENTS_PT_Configuration(bpy.types.Panel):
|
||
|
bl_idname = "BEVY_COMPONENTS_PT_Configuration"
|
||
|
bl_label = "Configuration"
|
||
|
bl_space_type = 'VIEW_3D'
|
||
|
bl_region_type = 'UI'
|
||
|
bl_category = "Bevy Components"
|
||
|
bl_context = "objectmode"
|
||
|
bl_parent_id = "BEVY_COMPONENTS_PT_MainPanel"
|
||
|
bl_options = {'DEFAULT_CLOSED'}
|
||
|
bl_description = "list of missing/unregistered type from the bevy side"
|
||
|
|
||
|
def draw(self, context):
|
||
|
layout = self.layout
|
||
|
registry = context.window_manager.components_registry
|
||
|
selected_object = context.selected_objects[0] if len(context.selected_objects) > 0 else None
|
||
|
|
||
|
row = layout.row()
|
||
|
col = row.column()
|
||
|
col.enabled = False
|
||
|
col.prop(registry, "schemaPath", text="Registry Schema path")
|
||
|
col = row.column()
|
||
|
col.operator(OT_OpenFilebrowser.bl_idname, text="Browse for registry schema file (json)")
|
||
|
|
||
|
layout.separator()
|
||
|
layout.operator(ReloadRegistryOperator.bl_idname, text="reload registry" , icon="FILE_REFRESH")
|
||
|
|
||
|
layout.separator()
|
||
|
layout.separator()
|
||
|
|
||
|
row = layout.row()
|
||
|
row.label(text="WARNING ! The following operations will overwrite your existing custom properties if they have matching types on the bevy side !")
|
||
|
row.alert = True
|
||
|
|
||
|
row = layout.row()
|
||
|
row.operator(COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT.bl_idname, text="update custom properties of current object" , icon="FILE_REFRESH")
|
||
|
row.enabled = registry.type_infos != None and selected_object is not None
|
||
|
|
||
|
layout.separator()
|
||
|
row = layout.row()
|
||
|
row.operator(COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL.bl_idname, text="update custom properties of ALL objects" , icon="FILE_REFRESH")
|
||
|
row.enabled = registry.type_infos != None
|
||
|
|
||
|
|
||
|
class BEVY_COMPONENTS_PT_MissingTypesPanel(bpy.types.Panel):
|
||
|
"""panel listing all the missing bevy types in the schema"""
|
||
|
bl_idname = "BEVY_COMPONENTS_PT_MissingTypesPanel"
|
||
|
bl_label = "Bevy Missing/Unregistered Types"
|
||
|
bl_space_type = 'VIEW_3D'
|
||
|
bl_region_type = 'UI'
|
||
|
bl_category = "Bevy Components"
|
||
|
bl_context = "objectmode"
|
||
|
bl_parent_id = "BEVY_COMPONENTS_PT_MainPanel"
|
||
|
bl_options = {'DEFAULT_CLOSED'}
|
||
|
bl_description = "list of missing/unregistered type from the bevy side"
|
||
|
|
||
|
def draw(self, context):
|
||
|
layout = self.layout
|
||
|
registry = bpy.context.window_manager.components_registry
|
||
|
|
||
|
layout.label(text="Missing types ")
|
||
|
layout.template_list("MISSING_TYPES_UL_List", "Missing types list", registry, "missing_types_list", registry, "missing_types_list_index")
|
||
|
|
||
|
|
||
|
class MISSING_TYPES_UL_List(UIList):
|
||
|
"""Missing components UIList."""
|
||
|
|
||
|
use_filter_name_reverse: bpy.props.BoolProperty(
|
||
|
name="Reverse Name",
|
||
|
default=False,
|
||
|
options=set(),
|
||
|
description="Reverse name filtering",
|
||
|
)
|
||
|
|
||
|
use_order_name = bpy.props.BoolProperty(name="Name", default=False, options=set(),
|
||
|
description="Sort groups by their name (case-insensitive)")
|
||
|
|
||
|
def filter_items__(self, context, data, propname):
|
||
|
"""Filter and order items in the list."""
|
||
|
# We initialize filtered and ordered as empty lists. Notice that # if all sorting and filtering is disabled, we will return # these empty.
|
||
|
filtered = []
|
||
|
ordered = []
|
||
|
items = getattr(data, propname)
|
||
|
|
||
|
helper_funcs = bpy.types.UI_UL_list
|
||
|
|
||
|
|
||
|
print("filter, order", items, self, dict(self))
|
||
|
if self.filter_name:
|
||
|
print("ssdfs", self.filter_name)
|
||
|
filtered= helper_funcs.filter_items_by_name(self.filter_name, self.bitflag_filter_item, items, "type_name", reverse=self.use_filter_name_reverse)
|
||
|
|
||
|
if not filtered:
|
||
|
filtered = [self.bitflag_filter_item] * len(items)
|
||
|
|
||
|
if self.use_order_name:
|
||
|
ordered = helper_funcs.sort_items_by_name(items, "name")
|
||
|
|
||
|
|
||
|
return filtered, ordered
|
||
|
|
||
|
|
||
|
def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
|
||
|
if self.layout_type in {'DEFAULT', 'COMPACT'}:
|
||
|
row = layout.row()
|
||
|
#row.enabled = False
|
||
|
#row.alert = True
|
||
|
row.prop(item, "type_name", text="")
|
||
|
|
||
|
elif self.layout_type in {'GRID'}:
|
||
|
layout.alignment = 'CENTER'
|
||
|
row = layout.row()
|
||
|
row.prop(item, "type_name", text="")
|