From 29e2db89522c9752a5737f5b77672e1f0f95eb36 Mon Sep 17 00:00:00 2001 From: Ellwood Zwovic Date: Thu, 13 Jul 2017 22:19:09 -0700 Subject: [PATCH] Basic package browsing UI --- bpkg_manager/__init__.py | 56 ++++++++++++++++++++++++++++++---------- bpkg_manager/subproc.py | 2 +- 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/bpkg_manager/__init__.py b/bpkg_manager/__init__.py index 12594ee..1293b58 100644 --- a/bpkg_manager/__init__.py +++ b/bpkg_manager/__init__.py @@ -346,22 +346,37 @@ class USERPREF_PT_packages(bpy.types.Panel): repo = context.user_preferences.addons[__package__].preferences['repo'] layout = self.layout - # top = layout.row() - # top.prop(context.window_manager, "addon_search", text="", icon='VIEWZOOM') - # top.prop( + main = layout.row() + spl = main.split(.12) + sidebar = spl.column(align=True) + pkgzone = spl.column() - def draw_package(layout): - pass + sidebar.label(text="Category") + sidebar.prop(context.window_manager, "addon_filter", text="") + + top = pkgzone.row() + spl = top.split(.6) + spl.prop(context.window_manager, "package_search", text="", icon='VIEWZOOM') + spl_r = spl.row() + spl_r.prop(context.window_manager, "package_install_filter", expand=True) + + def draw_package(package, layout): + pkgbox = layout.box() + spl = pkgbox.split(.8) + left = spl.column() + right = spl.row() + right.alignment = 'RIGHT' + lr1 = left.row() + lr2 = left.row() + lr1.label(text=pkg['bl_info'].get('name', "MISSING NAME")) + lr2.label(text=pkg['bl_info'].get('description', "MISSING DESCRIPTION")) + lr2.enabled = False #Give name more visual weight + right.scale_y = 2 + right.operator(BPKG_OT_install.bl_idname).package_url="Asdf" for pkg in repo['packages']: - row = layout.row() - - pkgbox = row.box() - left = pkgbox.split(.7) - row1 = left.row() - row2 = left.row() - row1.label(text=pkg['bl_info'].get('name', "MISSING NAME")) - row2.label(text=pkg['bl_info'].get('description', "MISSING DESCRIPTION")) + row = pkgzone.row() + draw_package(pkg, row) class PackageManagerPreferences(bpy.types.AddonPreferences): @@ -390,6 +405,19 @@ def register(): bpy.utils.register_class(BPKG_OT_refresh) bpy.utils.register_class(BPKG_OT_hang) bpy.utils.register_class(USERPREF_PT_packages) + bpy.types.WindowManager.package_search = bpy.props.StringProperty( + name="Search", + description="Filter packages by name", + options={'TEXTEDIT_UPDATE'} + ) + bpy.types.WindowManager.package_install_filter = bpy.props.EnumProperty( + items=[('AVAILABLE', "Available", "All packages in selected repositories"), + ('INSTALLED', "Installed", "All installed packages"), + ('UPDATES', "Updates", "All installed packages for which there is a newer version availabe") + ], + name="Install filter", + default='AVAILABLE', + ) bpy.utils.register_class(PackageManagerPreferences) @@ -398,4 +426,6 @@ def unregister(): bpy.utils.unregister_class(BPKG_OT_refresh) bpy.utils.unregister_class(BPKG_OT_hang) bpy.utils.unregister_class(USERPREF_PT_packages) + del bpy.types.WindowManager.package_search + del bpy.types.WindowManager.package_install_filter bpy.utils.unregister_class(PackageManagerPreferences) diff --git a/bpkg_manager/subproc.py b/bpkg_manager/subproc.py index f5147ef..525d440 100644 --- a/bpkg_manager/subproc.py +++ b/bpkg_manager/subproc.py @@ -263,7 +263,7 @@ class Repository: setattr(self, attr, value) @classmethod - def from_dict(cls, repodict: dict) -> Repository: + def from_dict(cls, repodict: dict): """ Like `set_from_dict`, but immutable """