Basic filtering for package browser

This commit is contained in:
Ellwood Zwovic
2017-07-14 00:23:26 -07:00
parent 745331a927
commit bbaa928c2b

View File

@@ -360,23 +360,60 @@ class USERPREF_PT_packages(bpy.types.Panel):
spl_r = spl.row() spl_r = spl.row()
spl_r.prop(context.window_manager, "package_install_filter", expand=True) 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): def draw_package(package, layout):
"""Draws the given package"""
pkgbox = layout.box() pkgbox = layout.box()
spl = pkgbox.split(.8) spl = pkgbox.split(.8)
left = spl.column() left = spl.column(align=True)
# for install/uninstall buttons
right = spl.row() right = spl.row()
right.alignment = 'RIGHT' right.alignment = 'RIGHT'
right.scale_y = 2
# for title & description
lr1 = left.row() lr1 = left.row()
lr2 = left.row() lr2 = left.row()
lr2.enabled = False #Give name more visual weight
lr1.label(text=pkg['bl_info'].get('name', "MISSING NAME")) lr1.label(text=pkg['bl_info'].get('name', "MISSING NAME"))
lr2.label(text=pkg['bl_info'].get('description', "MISSING DESCRIPTION")) 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=""
right.operator(BPKG_OT_install.bl_idname).package_url="Asdf"
for pkg in repo['packages']: for pkg in repo['packages']:
row = pkgzone.row() if filter_package(pkg):
draw_package(pkg, row) row = pkgzone.row()
draw_package(pkg, row)
class PackageManagerPreferences(bpy.types.AddonPreferences): class PackageManagerPreferences(bpy.types.AddonPreferences):