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',
|
'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():
|
||||||
from . import (pkg_ops, pkg_ui)
|
|
||||||
|
|
||||||
bpy.utils.register_class(PackageSettings)
|
# Reload support
|
||||||
bpy.types.WindowManager.package_manager_settings = bpy.props.PointerProperty(type=PackageSettings)
|
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_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)
|
||||||
|
|
||||||
|
23
pkg_ops.py
23
pkg_ops.py
@@ -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)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user