[Bf-blender-cvs] [b61dfee18a5] userpref_redesign: Use subpanels for User Interface theme options
Julian Eisel
noreply at git.blender.org
Mon Dec 17 00:10:57 CET 2018
Commit: b61dfee18a5c4fc38e30c670fc6746efcd7a4ce7
Author: Julian Eisel
Date: Mon Dec 17 00:02:22 2018 +0100
Branches: userpref_redesign
https://developer.blender.org/rBb61dfee18a5c4fc38e30c670fc6746efcd7a4ce7
Use subpanels for User Interface theme options
The widget color subpanels are dynamically generated.
===================================================================
M release/scripts/startup/bl_ui/space_userpref.py
===================================================================
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index 44b8e0302df..e8173931813 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -754,8 +754,27 @@ class USERPREF_PT_theme_user_interface(PreferencePanel):
userpref = context.user_preferences
return (userpref.active_section == 'THEMES')
+ def draw_header(self, context):
+ layout = self.layout
+
+ layout.label(icon='WORKSPACE')
+
+ def draw(self, context):
+ pass
+
+
+# Base class for dynamically defined widget color panels.
+class PreferenceThemeWidgetColorPanel(Panel):
+ bl_space_type = 'USER_PREFERENCES'
+ bl_region_type = 'WINDOW'
+ bl_parent_id = "USERPREF_PT_theme_user_interface"
+
@staticmethod
- def _theme_widget_style(layout, widget_style):
+ def draw(self, context):
+ theme = context.user_preferences.themes[0]
+ ui = theme.user_interface
+ widget_style = getattr(ui, self.wcol)
+ layout = self.layout
col = layout.column()
@@ -780,82 +799,23 @@ class USERPREF_PT_theme_user_interface(PreferencePanel):
rowsub.prop(widget_style, "shadetop")
rowsub.prop(widget_style, "shadedown")
- def draw_header(self, context):
- layout = self.layout
+ @classmethod
+ def poll(cls, context):
+ userpref = context.user_preferences
+ return (userpref.active_section == 'THEMES')
- layout.label(icon='WORKSPACE')
- def draw(self, context):
- layout = self.layout
+class USERPREF_PT_theme_interface_state(PreferencePanel):
+ bl_label = "State"
+ bl_options = {'DEFAULT_CLOSED'}
+ bl_parent_id = "USERPREF_PT_theme_user_interface"
+
+ def draw_props(self, context, layout):
theme = context.user_preferences.themes[0]
ui = theme.user_interface
-
- col = layout.column()
-
- col.label(text="Regular:")
- self._theme_widget_style(col, ui.wcol_regular)
-
- col.label(text="Tool:")
- self._theme_widget_style(col, ui.wcol_tool)
-
- col.label(text="Toolbar Item:")
- self._theme_widget_style(col, ui.wcol_toolbar_item)
-
- col.label(text="Radio Buttons:")
- self._theme_widget_style(col, ui.wcol_radio)
-
- col.label(text="Text:")
- self._theme_widget_style(col, ui.wcol_text)
-
- col.label(text="Option:")
- self._theme_widget_style(col, ui.wcol_option)
-
- col.label(text="Toggle:")
- self._theme_widget_style(col, ui.wcol_toggle)
-
- col.label(text="Number Field:")
- self._theme_widget_style(col, ui.wcol_num)
-
- col.label(text="Value Slider:")
- self._theme_widget_style(col, ui.wcol_numslider)
-
- col.label(text="Box:")
- self._theme_widget_style(col, ui.wcol_box)
-
- col.label(text="Menu:")
- self._theme_widget_style(col, ui.wcol_menu)
-
- col.label(text="Pie Menu:")
- self._theme_widget_style(col, ui.wcol_pie_menu)
-
- col.label(text="Pulldown:")
- self._theme_widget_style(col, ui.wcol_pulldown)
-
- col.label(text="Menu Back:")
- self._theme_widget_style(col, ui.wcol_menu_back)
-
- col.label(text="Tooltip:")
- self._theme_widget_style(col, ui.wcol_tooltip)
-
- col.label(text="Menu Item:")
- self._theme_widget_style(col, ui.wcol_menu_item)
-
- col.label(text="Scroll Bar:")
- self._theme_widget_style(col, ui.wcol_scroll)
-
- col.label(text="Progress Bar:")
- self._theme_widget_style(col, ui.wcol_progress)
-
- col.label(text="List Item:")
- self._theme_widget_style(col, ui.wcol_list_item)
-
- col.label(text="Tab:")
- self._theme_widget_style(col, ui.wcol_tab)
-
ui_state = theme.user_interface.wcol_state
- col.label(text="State:")
- row = col.row()
+ row = layout.row()
subsplit = row.split(factor=0.95)
@@ -880,12 +840,17 @@ class USERPREF_PT_theme_user_interface(PreferencePanel):
colsub.row().prop(ui_state, "inner_changed")
colsub.row().prop(ui_state, "inner_changed_sel")
- col.separator()
- col.separator()
- col.label(text="Styles:")
+class USERPREF_PT_theme_interface_styles(PreferencePanel):
+ bl_label = "Styles"
+ bl_options = {'DEFAULT_CLOSED'}
+ bl_parent_id = "USERPREF_PT_theme_user_interface"
- row = col.row()
+ def draw_props(self, context, layout):
+ theme = context.user_preferences.themes[0]
+ ui = theme.user_interface
+
+ row = layout.row()
subsplit = row.split(factor=0.95)
@@ -905,12 +870,17 @@ class USERPREF_PT_theme_user_interface(PreferencePanel):
colsub.row().prop(ui, "menu_shadow_width")
colsub.row().prop(ui, "widget_emboss")
- col.separator()
- col.separator()
- col.label(text="Axis & Gizmo Colors:")
+class USERPREF_PT_theme_interface_gizmos(PreferencePanel):
+ bl_label = "Axis & Gizmo Colors"
+ bl_options = {'DEFAULT_CLOSED'}
+ bl_parent_id = "USERPREF_PT_theme_user_interface"
- row = col.row()
+ def draw_props(self, context, layout):
+ theme = context.user_preferences.themes[0]
+ ui = theme.user_interface
+
+ row = layout.row()
subsplit = row.split(factor=0.95)
@@ -931,12 +901,17 @@ class USERPREF_PT_theme_user_interface(PreferencePanel):
colsub.row().prop(ui, "gizmo_a")
colsub.row().prop(ui, "gizmo_b")
- col.separator()
- col.separator()
- col.label(text="Icon Colors:")
+class USERPREF_PT_theme_interface_icons(PreferencePanel):
+ bl_label = "Icon Colors"
+ bl_options = {'DEFAULT_CLOSED'}
+ bl_parent_id = "USERPREF_PT_theme_user_interface"
- row = col.row()
+ def draw_props(self, context, layout):
+ theme = context.user_preferences.themes[0]
+ ui = theme.user_interface
+
+ row = layout.row()
subsplit = row.split(factor=0.95)
@@ -955,9 +930,6 @@ class USERPREF_PT_theme_user_interface(PreferencePanel):
colsub.row().prop(ui, "icon_modifier")
colsub.row().prop(ui, "icon_shading")
- col.separator()
- col.separator()
-
class USERPREF_PT_theme_text_style(PreferencePanel):
bl_label = "Text Style"
@@ -1052,6 +1024,7 @@ class USERPREF_PT_theme_bone_color_sets(PreferencePanel):
colsub.row().prop(ui, "show_colored_constraints")
+# Base class for dynamically defined theme-space panels.
class PreferenceThemeSpacePanel(Panel):
bl_space_type = 'USER_PREFERENCES'
bl_region_type = 'WINDOW'
@@ -1131,7 +1104,7 @@ class PreferenceThemeSpacePanel(Panel):
@staticmethod
def draw_header(self, context):
- if hasattr(self, "icon"):
+ if hasattr(self, "icon") and self.icon != 'NONE':
layout = self.layout
layout.label(icon=self.icon)
@@ -1153,6 +1126,44 @@ class PreferenceThemeSpacePanel(Panel):
class ThemeGenericClassGenerator():
+ generated_classes = []
+
+ @staticmethod
+ def generate_panel_classes_for_wcols():
+ wcols = [
+ ("Regular", "wcol_regular"),
+ ("Tool", "wcol_tool"),
+ ("Toolbar Item", "wcol_toolbar_item"),
+ ("Radio Buttons", "wcol_radio"),
+ ("Text", "wcol_text"),
+ ("Option", "wcol_option"),
+ ("Toggle", "wcol_toggle"),
+ ("Number Field", "wcol_num"),
+ ("Value Slider", "wcol_numslider"),
+ ("Box", "wcol_box"),
+ ("Menu", "wcol_menu"),
+ ("Pie Menu", "wcol_pie_menu"),
+ ("Pulldown", "wcol_pulldown"),
+ ("Menu Back", "wcol_menu_back"),
+ ("Tooltip", "wcol_tooltip"),
+ ("Menu Item", "wcol_menu_item"),
+ ("Scroll Bar", "wcol_scroll"),
+ ("Progress Bar", "wcol_progress"),
+ ("List Item", "wcol_list_item"),
+ ("Tab", "wcol_tab"),
+ ]
+
+ for (name, wcol) in wcols:
+ panel_id = "USERPREF_PT_theme_interface_" + wcol
+ paneltype = type(panel_id, (PreferenceThemeWidgetColorPanel,), {
+ "bl_label": name,
+ "bl_options": {'DEFAULT_CLOSED'},
+ "draw": PreferenceThemeWidgetColorPanel.draw,
+ "wcol": wcol,
+ })
+
+ ThemeGenericClassGenerator.generated_classes.append(paneltype)
+
@staticmethod
def generate_theme_area_child_panel_classes(parent_id, rna_type, theme_area, datapath):
def generate_child_panel_classes_recurse(parent_id, rna_type, theme_area, datapath):
@@ -1178,7 +1189,7 @@ class ThemeGenericClassGenerator():
"datapath": new_datapath,
})
- bpy.utils.register_class(paneltype)
+ ThemeGenericClassGenerator.generated_classes.append(paneltype)
generate_child_panel_classes_recurse(panel_id, prop.fixed_type, theme_area, new_datapath)
generate_child_panel_classes_recurse(parent_id, rna_type, theme_area, datapath)
@@ -1202,7 +1213,8 @@ class ThemeGenericClassGenerator():
"icon": theme_area.icon,
"datapath": theme_area.identifier.lower(),
})
- bpy.utils.register_class(paneltype)
+
+ ThemeGenericClassGenerator.generated_classes.append(paneltype)
ThemeGenericClassGenerator.generate_theme_area_child_panel_classes(
panel_id, Theme.bl_rna.properties[theme_area.identifier.lower()].fixed_type,
theme_area, theme_area.identifier.lower())
@@ -1982,7 +1994,12 @@ class USERPREF_PT_studiolight_light_editor(Panel):
layout.prop(system, "light_ambient")
-classes = (
+ThemeGenericClassGenerator.generate_panel_classes_for_wcols()
+
+# Order of registration defines order in UI, so dynamically generated classes are 'injected' in the intended order.
+classes = (USERPREF_PT_theme_user_interface,) + tuple(ThemeGenericClassGenerator.generated_class
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list