Basic package browsing UI
This commit is contained in:
@@ -346,22 +346,37 @@ class USERPREF_PT_packages(bpy.types.Panel):
|
|||||||
repo = context.user_preferences.addons[__package__].preferences['repo']
|
repo = context.user_preferences.addons[__package__].preferences['repo']
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
|
|
||||||
# top = layout.row()
|
main = layout.row()
|
||||||
# top.prop(context.window_manager, "addon_search", text="", icon='VIEWZOOM')
|
spl = main.split(.12)
|
||||||
# top.prop(
|
sidebar = spl.column(align=True)
|
||||||
|
pkgzone = spl.column()
|
||||||
|
|
||||||
def draw_package(layout):
|
sidebar.label(text="Category")
|
||||||
pass
|
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']:
|
for pkg in repo['packages']:
|
||||||
row = layout.row()
|
row = pkgzone.row()
|
||||||
|
draw_package(pkg, 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"))
|
|
||||||
|
|
||||||
|
|
||||||
class PackageManagerPreferences(bpy.types.AddonPreferences):
|
class PackageManagerPreferences(bpy.types.AddonPreferences):
|
||||||
@@ -390,6 +405,19 @@ def register():
|
|||||||
bpy.utils.register_class(BPKG_OT_refresh)
|
bpy.utils.register_class(BPKG_OT_refresh)
|
||||||
bpy.utils.register_class(BPKG_OT_hang)
|
bpy.utils.register_class(BPKG_OT_hang)
|
||||||
bpy.utils.register_class(USERPREF_PT_packages)
|
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)
|
bpy.utils.register_class(PackageManagerPreferences)
|
||||||
|
|
||||||
|
|
||||||
@@ -398,4 +426,6 @@ def unregister():
|
|||||||
bpy.utils.unregister_class(BPKG_OT_refresh)
|
bpy.utils.unregister_class(BPKG_OT_refresh)
|
||||||
bpy.utils.unregister_class(BPKG_OT_hang)
|
bpy.utils.unregister_class(BPKG_OT_hang)
|
||||||
bpy.utils.unregister_class(USERPREF_PT_packages)
|
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)
|
bpy.utils.unregister_class(PackageManagerPreferences)
|
||||||
|
@@ -263,7 +263,7 @@ class Repository:
|
|||||||
setattr(self, attr, value)
|
setattr(self, attr, value)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_dict(cls, repodict: dict) -> Repository:
|
def from_dict(cls, repodict: dict):
|
||||||
"""
|
"""
|
||||||
Like `set_from_dict`, but immutable
|
Like `set_from_dict`, but immutable
|
||||||
"""
|
"""
|
||||||
|
Reference in New Issue
Block a user