Add simple preferences display (just good enough to match functionality with addons section)
This commit is contained in:
@@ -538,6 +538,7 @@ else:
|
||||
|
||||
displayed_packages = []
|
||||
expanded_packages = []
|
||||
preference_package = None
|
||||
|
||||
redraw = True
|
||||
|
||||
@@ -549,7 +550,6 @@ else:
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
wm = context.window_manager
|
||||
prefs = context.user_preferences.addons[__package__].preferences
|
||||
|
||||
mainrow = layout.row()
|
||||
spl = mainrow.split(.2)
|
||||
@@ -649,6 +649,7 @@ else:
|
||||
|
||||
def draw_package(metapkg: ConsolidatedPackage, layout: bpy.types.UILayout): #{{{
|
||||
"""Draws the given package"""
|
||||
pkg = metapkg.get_display_version()
|
||||
|
||||
def draw_operators(metapkg, layout): # {{{
|
||||
"""
|
||||
@@ -665,10 +666,12 @@ else:
|
||||
).package_name=metapkg.name
|
||||
layout.separator()
|
||||
|
||||
# layout.operator(
|
||||
# PACKAGE_OT_toggle_preferences.bl_idname,
|
||||
# text="Preferences",
|
||||
# ).package_name=metapkg.name
|
||||
#TODO: only show preferences button if addon has preferences to show
|
||||
if pkg.enabled:
|
||||
layout.operator(
|
||||
WM_OT_package_toggle_preferences.bl_idname,
|
||||
text="Preferences",
|
||||
).package_name=metapkg.name
|
||||
layout.operator(
|
||||
PACKAGE_OT_uninstall.bl_idname,
|
||||
text="Uninstall",
|
||||
@@ -680,6 +683,24 @@ else:
|
||||
).package_name=metapkg.name
|
||||
# }}}
|
||||
|
||||
def draw_preferences(pkg: Package, layout: bpy.types.UILayout):
|
||||
"""Draw the package's preferences in the given layout"""
|
||||
addon_preferences = context.user_preferences.addons[pkg.module_name].preferences
|
||||
if addon_preferences is not None:
|
||||
draw = getattr(addon_preferences, "draw", None)
|
||||
if draw is not None:
|
||||
addon_preferences_class = type(addon_preferences)
|
||||
box_prefs = layout.box()
|
||||
box_prefs.label("Preferences:")
|
||||
addon_preferences_class.layout = box_prefs
|
||||
try:
|
||||
draw(context)
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
box_prefs.label(text="Error (see console)", icon='ERROR')
|
||||
del addon_preferences_class.layout
|
||||
|
||||
def collapsed(metapkg, layout):# {{{
|
||||
"""Draw collapsed version of package layout"""
|
||||
pkg = metapkg.get_display_version()
|
||||
@@ -798,6 +819,7 @@ else:
|
||||
for version in metapkg.versions:
|
||||
subvbox = pkgbox.box()
|
||||
draw_version(subvbox, version)
|
||||
|
||||
# }}}
|
||||
|
||||
is_expanded = (metapkg.name in self.expanded_packages)
|
||||
@@ -815,22 +837,9 @@ else:
|
||||
else:
|
||||
collapsed(metapkg, row)# }}}
|
||||
|
||||
# addon_preferences = userpref.addons[module_name].preferences
|
||||
# if addon_preferences is not None:
|
||||
# draw = getattr(addon_preferences, "draw", None)
|
||||
# if draw is not None:
|
||||
# addon_preferences_class = type(addon_preferences)
|
||||
# box_prefs = col_box.box()
|
||||
# box_prefs.label("Preferences:")
|
||||
# addon_preferences_class.layout = box_prefs
|
||||
# try:
|
||||
# draw(context)
|
||||
# except:
|
||||
# import traceback
|
||||
# traceback.print_exc()
|
||||
# box_prefs.label(text="Error (see console)", icon='ERROR')
|
||||
# del addon_preferences_class.layout
|
||||
#
|
||||
if pkg.installed and pkg.enabled and pkg.name == USERPREF_PT_packages.preference_package:
|
||||
draw_preferences(pkg, pkgbox)
|
||||
|
||||
|
||||
def center_message(layout, msg: str):
|
||||
"""draw a label in the center of an extra-tall row"""
|
||||
@@ -887,6 +896,24 @@ else:
|
||||
|
||||
return {'FINISHED'}# }}}
|
||||
|
||||
class WM_OT_package_toggle_preferences(bpy.types.Operator):# {{{
|
||||
bl_idname = "wm.package_toggle_preferences"
|
||||
bl_label = ""
|
||||
bl_description = "Toggle display of package preferences"
|
||||
bl_options = {'INTERNAL'}
|
||||
|
||||
package_name = bpy.props.StringProperty(
|
||||
name="Package Name",
|
||||
description="Name of package whos preferences to display",
|
||||
)
|
||||
|
||||
def invoke(self, context, event):
|
||||
if USERPREF_PT_packages.preference_package == self.package_name:
|
||||
USERPREF_PT_packages.preference_package = None
|
||||
else:
|
||||
USERPREF_PT_packages.preference_package = self.package_name
|
||||
return {'FINISHED'}# }}}
|
||||
|
||||
class PACKAGE_OT_toggle_enabled(bpy.types.Operator):# {{{
|
||||
bl_idname = "package.toggle_enabled"
|
||||
bl_label = ""
|
||||
@@ -1018,6 +1045,7 @@ else:
|
||||
bpy.utils.register_class(PACKAGE_OT_refresh)
|
||||
bpy.utils.register_class(USERPREF_PT_packages)
|
||||
bpy.utils.register_class(WM_OT_package_toggle_expand)
|
||||
bpy.utils.register_class(WM_OT_package_toggle_preferences)
|
||||
bpy.types.WindowManager.package_search = bpy.props.StringProperty(
|
||||
name="Search",
|
||||
description="Filter packages by name",
|
||||
@@ -1055,6 +1083,7 @@ else:
|
||||
bpy.utils.unregister_class(PACKAGE_OT_refresh)
|
||||
bpy.utils.unregister_class(USERPREF_PT_packages)
|
||||
bpy.utils.unregister_class(WM_OT_package_toggle_expand)
|
||||
bpy.utils.unregister_class(WM_OT_package_toggle_preferences)
|
||||
del bpy.types.WindowManager.package_search
|
||||
del bpy.types.WindowManager.package_install_filter
|
||||
|
||||
|
Reference in New Issue
Block a user