Add UIlist for repositories (and make reloadable)

This commit is contained in:
gandalf3
2017-07-04 02:11:03 -07:00
parent e509559c22
commit 7ce5bd2010
2 changed files with 86 additions and 7 deletions

View File

@@ -5,10 +5,36 @@ bl_info = {
'support': 'TESTING', 'support': 'TESTING',
} }
import bpy import bpy
from bpy.props import CollectionProperty
from bpy.types import PropertyGroup, Panel, UIList, AddonPreferences
class PackageSettings(bpy.types.PropertyGroup): class RepositoryProperty(PropertyGroup):
url = bpy.props.StringProperty(name="URL") url = bpy.props.StringProperty(name="URL")
class PACKAGE_UL_repositories(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
split = layout.split(0.3)
# split.label("Name: %s" % name)
split.prop(item, "name")
split.prop(item, "url")
def invoke(self, onctext, event):
pass
class PackagePreferences(AddonPreferences):
bl_idname = __package__
repositories = CollectionProperty(type=RepositoryProperty)
active_repository = bpy.props.IntProperty()
def draw(self, context):
layout = self.layout
row = layout.row()
row.template_list("PACKAGE_UL_repositories", "", self, "repositories", self, "active_repository")
col = row.column(align=True)
col.operator("package.add_repository", icon="ZOOMIN", text="")
col.operator("package.remove_repository", icon="ZOOMOUT", text="")
# class PackageManager: # class PackageManager:
# # For some reason accessing *Property objects stored in this class gives a TypeError: # # For some reason accessing *Property objects stored in this class gives a TypeError:
# # UILayout.prop(): error with argument 1, "data" - Function.data expected a AnyType type, not tuple # # UILayout.prop(): error with argument 1, "data" - Function.data expected a AnyType type, not tuple
@@ -17,10 +43,37 @@ class PackageSettings(bpy.types.PropertyGroup):
# last_response_code = bpy.props.PointerProperty(type=bpy.types.StringProperty) # last_response_code = bpy.props.PointerProperty(type=bpy.types.StringProperty)
def register(): def register():
# Reload support
import sys
if '%s.pkg_ops' % __name__ in sys.modules:
import importlib
def reload_mod(name):
print("Reloading %s" % name)
modname = '%s.%s' % (__name__, name)
try:
old_module = sys.modules[modname]
except KeyError:
# Wasn't loaded before -- can happen after an upgrade.
new_module = importlib.import_module(modname)
else:
new_module = importlib.reload(old_module)
sys.modules[modname] = new_module
return new_module
pkg_ops = reload_mod('pkg_ops')
pkg_ui = reload_mod('pkg_ui')
else:
from . import (pkg_ops, pkg_ui) from . import (pkg_ops, pkg_ui)
bpy.utils.register_class(PackageSettings) bpy.utils.register_class(RepositoryProperty)
bpy.types.WindowManager.package_manager_settings = bpy.props.PointerProperty(type=PackageSettings) bpy.utils.register_class(PACKAGE_UL_repositories)
bpy.utils.register_class(PackagePreferences)
# bpy.types.Scene.custom = CollectionProperty(type=RepositoryProperty)
# bpy.types.Scene.custom_idx = bpy.props.IntProperty()
# bpy.types.WindowManager.package_manager_settings = bpy.props.PointerProperty(type=RepositoryProperty)
pkg_ops.register() pkg_ops.register()
pkg_ui.register() pkg_ui.register()
@@ -29,6 +82,11 @@ def unregister():
pkg_ops.unregister() pkg_ops.unregister()
pkg_ui.unregister(); pkg_ui.unregister();
bpy.utils.unregister_class(PackageSettings) bpy.utils.unregister_class(RepositoryProperty)
del bpy.types.WindowManager.package_manager_settings bpy.utils.unregister_class(PACKAGE_UL_repositories)
bpy.utils.unregister_class(PackagePreferences)
# del bpy.types.WindowManager.package_manager_settings
del bpy.types.Scene.custom
del bpy.types.Scene.custom_idx
# bpy.types.WindowManager.package_manager_settings = bpy.props.PointerProperty(type=RepositoryProperty)

View File

@@ -57,7 +57,7 @@ class PACKAGE_OT_fetch(SubprocessOperatorMixin, bpy.types.Operator):
last_response = None last_response = None
def __init__(self): def __init__(self):
SubprocessOperatorMixin.__init__(self) super().__init__()
settings = bpy.context.window_manager.package_manager_settings settings = bpy.context.window_manager.package_manager_settings
self.subprocess = Process(target=blenderpack.fetch, args=(settings.url, self.pipe)) self.subprocess = Process(target=blenderpack.fetch, args=(settings.url, self.pipe))
@@ -68,10 +68,31 @@ class PACKAGE_OT_fetch(SubprocessOperatorMixin, bpy.types.Operator):
def execute(self, context): def execute(self, context):
return {'FINISHED'} return {'FINISHED'}
class PACKAGE_OT_add_repository(bpy.types.Operator):
bl_idname = "package.add_repository"
bl_label = "Add Repository"
def execute(self, context):
prefs = context.user_preferences.addons[__package__].preferences
prefs.repositories.add()
return {'FINISHED'}
class PACKAGE_OT_remove_repository(bpy.types.Operator):
bl_idname = "package.remove_repository"
bl_label = "Remove Repository"
def execute(self, context):
prefs = context.user_preferences.addons[__package__].preferences
prefs.repositories.remove(prefs.active_repository)
return {'FINISHED'}
def register(): def register():
bpy.utils.register_class(PACKAGE_OT_fetch) bpy.utils.register_class(PACKAGE_OT_fetch)
bpy.utils.register_class(PACKAGE_OT_add_repository)
bpy.utils.register_class(PACKAGE_OT_remove_repository)
def unregister(): def unregister():
bpy.utils.unregister_class(PACKAGE_OT_fetch) bpy.utils.unregister_class(PACKAGE_OT_fetch)
bpy.utils.unregister_class(PACKAGE_OT_remove_repository)