Add simple preferences display (just good enough to match functionality with addons section)

This commit is contained in:
Ellwood Zwovic
2017-08-19 23:17:56 -07:00
parent 85ce4c3bc7
commit 02fdc67d6b

View File

@@ -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