From bbaa928c2b462bb9eb44b0184fcc6b1677749349 Mon Sep 17 00:00:00 2001 From: Ellwood Zwovic Date: Fri, 14 Jul 2017 00:23:26 -0700 Subject: [PATCH] Basic filtering for package browser --- bpkg_manager/__init__.py | 49 +++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/bpkg_manager/__init__.py b/bpkg_manager/__init__.py index 1293b58..4cf73ac 100644 --- a/bpkg_manager/__init__.py +++ b/bpkg_manager/__init__.py @@ -360,23 +360,60 @@ class USERPREF_PT_packages(bpy.types.Panel): spl_r = spl.row() spl_r.prop(context.window_manager, "package_install_filter", expand=True) + #TODO: more advanced filter/sorting; sort matches which match the filter string from the start higher + #Also some caching of this would be nice, this only needs to be re-run when any of the filters change. + def filter_package(package): + """Returns true if the given package matches all filters""" + filterstr = bpy.context.window_manager.package_search + category = bpy.context.window_manager.addon_filter + blinfo = package['bl_info'] + + def match_search() -> bool: + if len(filterstr) == 0: + return True + if blinfo['name'].lower().__contains__(filterstr.lower()): + return True + return False + + def match_category() -> bool: + if category.upper() == 'ALL': + return True + if 'category' not in blinfo: + return True + if blinfo['category'].upper() == category.upper(): + return True + return False + + if match_search() and match_category(): + return True + + return False + def draw_package(package, layout): + """Draws the given package""" pkgbox = layout.box() spl = pkgbox.split(.8) - left = spl.column() + left = spl.column(align=True) + + # for install/uninstall buttons right = spl.row() right.alignment = 'RIGHT' + right.scale_y = 2 + + # for title & description lr1 = left.row() lr2 = left.row() + lr2.enabled = False #Give name more visual weight + 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" + + right.operator(BPKG_OT_install.bl_idname).package_url="" for pkg in repo['packages']: - row = pkgzone.row() - draw_package(pkg, row) + if filter_package(pkg): + row = pkgzone.row() + draw_package(pkg, row) class PackageManagerPreferences(bpy.types.AddonPreferences):