Add UIlist for repositories (and make reloadable)
This commit is contained in:
70
__init__.py
70
__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)
|
||||
|
||||
|
23
pkg_ops.py
23
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)
|
||||
|
||||
|
Reference in New Issue
Block a user