Basic filtering for package browser
This commit is contained in:
@@ -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):
|
||||
|
Reference in New Issue
Block a user