# -*- 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, subprocess_function 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): """ Operator which checks for updates to known package lists """ bl_idname = "package.refresh" bl_label = "Refresh 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_kwargs = {'target': subprocess_function(repo.refresh, pipe=self.pipe)} def modal(self, context, event): # try: self.poll_subprocess() # except: return {'RUNNING_MODAL'} 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)