From 02fdc67d6b70c531596be2e52ad83f2e5e1ce3f7 Mon Sep 17 00:00:00 2001 From: Ellwood Zwovic Date: Sat, 19 Aug 2017 23:17:56 -0700 Subject: [PATCH] Add simple preferences display (just good enough to match functionality with addons section) --- package_manager/__init__.py | 71 ++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 21 deletions(-) diff --git a/package_manager/__init__.py b/package_manager/__init__.py index 3f46502..c13ce62 100644 --- a/package_manager/__init__.py +++ b/package_manager/__init__.py @@ -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