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',
}
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)