110 lines
3.4 KiB
Python
110 lines
3.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
# This file is for code dealing specifically with blender
|
|
|
|
import logging
|
|
import bpy
|
|
from bpy.props import CollectionProperty
|
|
from bpy.types import PropertyGroup, Panel, UIList, AddonPreferences, Operator
|
|
from .subprocess_adapter import subprocess_operator
|
|
from . import bpackage as bpkg
|
|
|
|
class RepositoryProperty(PropertyGroup):
|
|
url = bpy.props.StringProperty(name="URL")
|
|
# status = bpy.props.EnumProperty(name="Status")
|
|
|
|
|
|
class PACKAGE_UL_repositories(UIList):
|
|
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
|
|
split = layout.split(0.3)
|
|
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="")
|
|
|
|
row = layout.row()
|
|
row.operator("package.refresh")
|
|
|
|
|
|
@subprocess_operator
|
|
class PACKAGE_OT_refresh(Operator):
|
|
bl_idname = "package.refresh"
|
|
bl_label = "Update package list(s)"
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
def invoke(self, context, event):
|
|
prefs = context.user_preferences.addons[__package__].preferences
|
|
if 'repositories' not in prefs:
|
|
return {'FINISHED'}
|
|
# HACK: just do the active repo for now
|
|
repo = bpkg.Repository(prefs['repositories'][prefs.active_repository].to_dict())
|
|
self.proc_args = []
|
|
self.proc_kwargs = {'target': repo.refresh}
|
|
|
|
def execute(self, context, event):
|
|
pass
|
|
|
|
def modal(self, context, event):
|
|
# try:
|
|
self.poll_subprocess()
|
|
# except:
|
|
|
|
def handle_response(self, resp):
|
|
self.report({'INFO'}, "Request returned %s" % resp)
|
|
|
|
|
|
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(RepositoryProperty)
|
|
bpy.utils.register_class(PackagePreferences)
|
|
|
|
bpy.utils.register_class(PACKAGE_OT_refresh)
|
|
|
|
bpy.utils.register_class(PACKAGE_OT_add_repository)
|
|
bpy.utils.register_class(PACKAGE_OT_remove_repository)
|
|
bpy.utils.register_class(PACKAGE_UL_repositories)
|
|
|
|
def unregister():
|
|
bpy.utils.unregister_class(RepositoryProperty)
|
|
bpy.utils.unregister_class(PackagePreferences)
|
|
|
|
bpy.utils.unregister_class(PACKAGE_OT_refresh)
|
|
|
|
bpy.utils.unregister_class(PACKAGE_OT_add_repository)
|
|
bpy.utils.unregister_class(PACKAGE_OT_remove_repository)
|
|
bpy.utils.unregister_class(PACKAGE_UL_repositories)
|
|
|