diff --git a/ui/atlas_materials_panel.py b/ui/atlas_materials_panel.py index 2d1a31e..cba1782 100644 --- a/ui/atlas_materials_panel.py +++ b/ui/atlas_materials_panel.py @@ -2,6 +2,7 @@ from bpy.types import UIList, Panel, UILayout, Object, Context, Material, Operat import bpy from math import sqrt from .main_panel import AvatarToolKit_PT_AvatarToolkitPanel, CATEGORY_NAME +from .panel_layout import get_panel_order, should_open_by_default from ..core.common import SceneMatClass, MaterialListBool, get_active_armature from ..functions.atlas_materials import AvatarToolKit_OT_AtlasMaterials from ..core.translations import t @@ -214,7 +215,8 @@ class AvatarToolKit_PT_TextureAtlasPanel(Panel): bl_region_type = 'UI' bl_category = CATEGORY_NAME bl_parent_id = AvatarToolKit_PT_AvatarToolkitPanel.bl_idname - bl_order = 7 + bl_order = get_panel_order('texture_atlas') + bl_options = set() if not should_open_by_default('TEXTURE_ATLAS') else {'DEFAULT_CLOSED'} def draw(self, context: Context): layout = self.layout diff --git a/ui/custom_avatar_panel.py b/ui/custom_avatar_panel.py index 451c88d..b80ca0a 100644 --- a/ui/custom_avatar_panel.py +++ b/ui/custom_avatar_panel.py @@ -2,6 +2,7 @@ import bpy from typing import Set, List, Tuple, Any from bpy.types import Panel, Context, UILayout, Operator, Event, WindowManager from .main_panel import AvatarToolKit_PT_AvatarToolkitPanel, CATEGORY_NAME +from .panel_layout import get_panel_order, should_open_by_default from ..functions.custom_tools.mesh_attachment import AvatarToolkit_OT_AttachMesh from ..functions.custom_tools.armature_merging import AvatarToolkit_OT_MergeArmature from ..core.translations import t @@ -112,8 +113,8 @@ class AvatarToolKit_PT_CustomPanel(Panel): bl_region_type: str = 'UI' bl_category: str = CATEGORY_NAME bl_parent_id: str = AvatarToolKit_PT_AvatarToolkitPanel.bl_idname - bl_order: int = 4 - bl_options: Set[str] = {'DEFAULT_CLOSED'} + bl_order: int = get_panel_order('custom_avatar') + bl_options: Set[str] = set() if not should_open_by_default('CUSTOM_AVATAR') else {'DEFAULT_CLOSED'} def draw(self, context: Context) -> None: """Draw the custom avatar panel UI""" diff --git a/ui/eye_tracking_panel.py b/ui/eye_tracking_panel.py index 85b534a..c7f542b 100644 --- a/ui/eye_tracking_panel.py +++ b/ui/eye_tracking_panel.py @@ -3,6 +3,7 @@ from typing import Set from bpy.types import Panel, Context, UILayout, Operator, Event, WindowManager from .main_panel import AvatarToolKit_PT_AvatarToolkitPanel, CATEGORY_NAME from .ui_utils import UIStyle, draw_section_header, wrap_text_label +from .panel_layout import get_panel_order, should_open_by_default from ..core.translations import t from ..core.common import get_active_armature, get_all_meshes from ..functions.eye_tracking import ( @@ -27,8 +28,8 @@ class AvatarToolKit_PT_EyeTrackingPanel(Panel): bl_region_type: str = 'UI' bl_category: str = CATEGORY_NAME bl_parent_id: str = AvatarToolKit_PT_AvatarToolkitPanel.bl_idname - bl_order: int = 6 - bl_options: Set[str] = {'DEFAULT_CLOSED'} + bl_order: int = get_panel_order('eye_tracking') + bl_options: Set[str] = set() if not should_open_by_default('EYE_TRACKING') else {'DEFAULT_CLOSED'} def draw(self, context: Context) -> None: """Draw the eye tracking panel interface""" diff --git a/ui/optimization_panel.py b/ui/optimization_panel.py index 25255c0..103658d 100644 --- a/ui/optimization_panel.py +++ b/ui/optimization_panel.py @@ -3,6 +3,7 @@ from typing import Set from bpy.types import Panel, Context, UILayout, Operator from .main_panel import AvatarToolKit_PT_AvatarToolkitPanel, CATEGORY_NAME from .ui_utils import UIStyle, draw_section_header, draw_operator_row +from .panel_layout import get_panel_order, should_open_by_default from ..core.translations import t from ..functions.optimization.materials_tools import AvatarToolkit_OT_CombineMaterials from ..functions.optimization.remove_doubles import AvatarToolkit_OT_RemoveDoubles @@ -16,8 +17,8 @@ class AvatarToolKit_PT_OptimizationPanel(Panel): bl_region_type: str = 'UI' bl_category: str = CATEGORY_NAME bl_parent_id: str = AvatarToolKit_PT_AvatarToolkitPanel.bl_idname - bl_order: int = 1 - bl_options = {'DEFAULT_CLOSED'} + bl_order: int = get_panel_order('optimization') + bl_options = set() if not should_open_by_default('OPTIMIZATION') else {'DEFAULT_CLOSED'} def draw(self, context: Context) -> None: """Draws the optimization panel interface with material, mesh cleanup and join mesh tools""" diff --git a/ui/quick_access_panel.py b/ui/quick_access_panel.py index 8fdc1db..38c2d24 100644 --- a/ui/quick_access_panel.py +++ b/ui/quick_access_panel.py @@ -11,6 +11,7 @@ from bpy.types import ( ) from .main_panel import AvatarToolKit_PT_AvatarToolkitPanel, CATEGORY_NAME from .ui_utils import UIStyle, draw_section_header, draw_operator_row +from .panel_layout import get_panel_order, should_open_by_default from ..core.translations import t from ..core.common import ( get_active_armature, @@ -80,7 +81,8 @@ class AvatarToolKit_PT_QuickAccessPanel(Panel): bl_region_type: str = 'UI' bl_category: str = CATEGORY_NAME bl_parent_id: str = AvatarToolKit_PT_AvatarToolkitPanel.bl_idname - bl_order: int = 0 + bl_order: int = get_panel_order('quick_access') + bl_options = {'DEFAULT_CLOSED'} if should_open_by_default('QUICK_ACCESS') else set() def draw(self, context: Context) -> None: """Draw the panel layout""" diff --git a/ui/settings_panel.py b/ui/settings_panel.py index 7b676d1..a39a04b 100644 --- a/ui/settings_panel.py +++ b/ui/settings_panel.py @@ -10,6 +10,7 @@ from bpy.types import ( ) from .main_panel import AvatarToolKit_PT_AvatarToolkitPanel, CATEGORY_NAME from .ui_utils import UIStyle, draw_section_header, wrap_text_label +from .panel_layout import get_panel_order, should_open_by_default from ..core.translations import t, get_languages_list from ..core.armature_validation import AvatarToolkit_OT_HighlightProblemBones, AvatarToolkit_OT_ClearBoneHighlighting @@ -40,8 +41,8 @@ class AvatarToolKit_PT_SettingsPanel(Panel): bl_region_type: str = 'UI' bl_category: str = CATEGORY_NAME bl_parent_id: str = AvatarToolKit_PT_AvatarToolkitPanel.bl_idname - bl_order: int = 8 - bl_options = {'DEFAULT_CLOSED'} + bl_order: int = get_panel_order('settings') + bl_options = set() if not should_open_by_default('SETTINGS') else {'DEFAULT_CLOSED'} def draw(self, context: Context) -> None: """Draw the settings panel layout with language selection""" diff --git a/ui/tools_panel.py b/ui/tools_panel.py index 4312707..e94e1ef 100644 --- a/ui/tools_panel.py +++ b/ui/tools_panel.py @@ -3,6 +3,7 @@ from typing import Set from bpy.types import Panel, Context, UILayout, Operator, UIList from .main_panel import AvatarToolKit_PT_AvatarToolkitPanel, CATEGORY_NAME from .ui_utils import UIStyle, draw_section_header, draw_operator_row +from .panel_layout import get_panel_order, should_open_by_default from ..core.translations import t from ..core.resonite_utils import AvatarToolkit_OT_ConvertResonite @@ -30,8 +31,8 @@ class AvatarToolKit_PT_ToolsPanel(Panel): bl_region_type: str = 'UI' bl_category: str = CATEGORY_NAME bl_parent_id: str = AvatarToolKit_PT_AvatarToolkitPanel.bl_idname - bl_order: int = 2 - bl_options = {'DEFAULT_CLOSED'} + bl_order: int = get_panel_order('tools') + bl_options = set() if not should_open_by_default('TOOLS') else {'DEFAULT_CLOSED'} def draw(self, context: Context) -> None: """Draw the tools panel interface""" diff --git a/ui/translation_panel.py b/ui/translation_panel.py index 8ea5cb9..fc8f990 100644 --- a/ui/translation_panel.py +++ b/ui/translation_panel.py @@ -12,6 +12,7 @@ from bpy.types import ( Object ) from .main_panel import AvatarToolKit_PT_AvatarToolkitPanel, CATEGORY_NAME +from .panel_layout import get_panel_order, should_open_by_default from ..core.translations import t from ..core.logging_setup import logger from ..core.common import get_active_armature, ProgressTracker @@ -465,8 +466,8 @@ class AvatarToolKit_PT_TranslationPanel(Panel): bl_region_type: str = 'UI' bl_category: str = CATEGORY_NAME bl_parent_id: str = AvatarToolKit_PT_AvatarToolkitPanel.bl_idname - bl_order: int = 9 - bl_options = {'DEFAULT_CLOSED'} + bl_order: int = get_panel_order('translation') + bl_options = set() if not should_open_by_default('TRANSLATION') else {'DEFAULT_CLOSED'} def draw(self, context: Context) -> None: """Draw the translation panel layout""" diff --git a/ui/ui_utils.py b/ui/ui_utils.py index 6e19d1c..cb388b0 100644 --- a/ui/ui_utils.py +++ b/ui/ui_utils.py @@ -6,7 +6,7 @@ from bpy.types import UILayout, Context, Operator class UIStyle: """Centralized UI styling constants for consistent appearance""" - g + SECTION_SEPARATOR_FACTOR: float = 0.5 SUBSECTION_SEPARATOR_FACTOR: float = 0.3 PRIMARY_BUTTON_SCALE: float = 1.5 diff --git a/ui/visemes_panel.py b/ui/visemes_panel.py index 11d2a30..b5563dd 100644 --- a/ui/visemes_panel.py +++ b/ui/visemes_panel.py @@ -2,6 +2,7 @@ import bpy from bpy.types import Panel, Context, UILayout, Object, ShapeKey from ..core.translations import t from .main_panel import AvatarToolKit_PT_AvatarToolkitPanel, CATEGORY_NAME +from .panel_layout import get_panel_order, should_open_by_default from ..core.common import get_active_armature from ..functions.visemes import AvatarToolkit_OT_PreviewVisemes, AvatarToolkit_OT_CreateVisemes @@ -13,8 +14,8 @@ class AvatarToolKit_PT_VisemesPanel(Panel): bl_region_type: str = 'UI' bl_category: str = CATEGORY_NAME bl_parent_id: str = AvatarToolKit_PT_AvatarToolkitPanel.bl_idname - bl_order: int = 5 - bl_options: set[str] = {'DEFAULT_CLOSED'} + bl_order: int = get_panel_order('visemes') + bl_options: set[str] = set() if not should_open_by_default('VISEMES') else {'DEFAULT_CLOSED'} def draw(self, context: Context) -> None: """Draw the visemes panel interface with shape key selection and preview controls""" diff --git a/ui/vrm_unity_panel.py b/ui/vrm_unity_panel.py index f1565ab..0263ccc 100644 --- a/ui/vrm_unity_panel.py +++ b/ui/vrm_unity_panel.py @@ -1,6 +1,7 @@ import bpy from bpy.types import Panel, Context, UILayout from .main_panel import AvatarToolKit_PT_AvatarToolkitPanel, CATEGORY_NAME +from .panel_layout import get_panel_order, should_open_by_default from ..core.translations import t from ..core.common import get_active_armature from ..core.vrm_unity_converter import detect_vrm_armature @@ -15,8 +16,8 @@ class AvatarToolKit_PT_VRMUnityPanel(Panel): bl_region_type = 'UI' bl_category = CATEGORY_NAME bl_parent_id = AvatarToolKit_PT_AvatarToolkitPanel.bl_idname - bl_order = 3 - bl_options = {'DEFAULT_CLOSED'} + bl_order = get_panel_order('vrm_unity') + bl_options = set() if not should_open_by_default('VRM_UNITY') else {'DEFAULT_CLOSED'} def draw(self, context: Context) -> None: """Draw the VRM to Unity conversion panel interface"""