diff --git a/__init__.py b/__init__.py index 62cc677..2ff0d1d 100644 --- a/__init__.py +++ b/__init__.py @@ -5,10 +5,36 @@ bl_info = { 'support': 'TESTING', } 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") +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: # # 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 @@ -17,10 +43,37 @@ class PackageSettings(bpy.types.PropertyGroup): # last_response_code = bpy.props.PointerProperty(type=bpy.types.StringProperty) def register(): - from . import (pkg_ops, pkg_ui) - bpy.utils.register_class(PackageSettings) - bpy.types.WindowManager.package_manager_settings = bpy.props.PointerProperty(type=PackageSettings) + # 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) + + bpy.utils.register_class(RepositoryProperty) + 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_ui.register() @@ -29,6 +82,11 @@ def unregister(): pkg_ops.unregister() pkg_ui.unregister(); - bpy.utils.unregister_class(PackageSettings) - del bpy.types.WindowManager.package_manager_settings + bpy.utils.unregister_class(RepositoryProperty) + 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) diff --git a/pkg_ops.py b/pkg_ops.py index 0c745af..dfbdb61 100644 --- a/pkg_ops.py +++ b/pkg_ops.py @@ -57,7 +57,7 @@ class PACKAGE_OT_fetch(SubprocessOperatorMixin, bpy.types.Operator): last_response = None def __init__(self): - SubprocessOperatorMixin.__init__(self) + super().__init__() settings = bpy.context.window_manager.package_manager_settings 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): 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(): 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(): bpy.utils.unregister_class(PACKAGE_OT_fetch) + bpy.utils.unregister_class(PACKAGE_OT_remove_repository)