[Bf-blender-cvs] [9cec3f72129] soc-2017-package_manager: Use EnumProperty for repository list
gandalf3
noreply at git.blender.org
Tue Aug 29 03:53:51 CEST 2017
Commit: 9cec3f7212999bfb8a6d2a5f601f5d894941802e
Author: gandalf3
Date: Mon Aug 28 16:04:43 2017 -0700
Branches: soc-2017-package_manager
https://developer.blender.org/rB9cec3f7212999bfb8a6d2a5f601f5d894941802e
Use EnumProperty for repository list
Make UIlist editable and move it to a dialog
===================================================================
M release/scripts/modules/bpkg/__init__.py
M release/scripts/modules/bpkg/display.py
M release/scripts/modules/bpkg/types.py
M release/scripts/startup/bl_operators/package.py
M release/scripts/startup/bl_ui/__init__.py
M release/scripts/startup/bl_ui/properties_package.py
M release/scripts/startup/bl_ui/space_userpref.py
===================================================================
diff --git a/release/scripts/modules/bpkg/__init__.py b/release/scripts/modules/bpkg/__init__.py
index 525acb7b6f2..39b480449a0 100644
--- a/release/scripts/modules/bpkg/__init__.py
+++ b/release/scripts/modules/bpkg/__init__.py
@@ -29,6 +29,20 @@ def get_repositories() -> list:
repos = utils.load_repositories(storage_path)
return repos
+def refresh_repository_props():
+ """Create RepositoryProperty collection from repository files"""
+ #TODO: store repository props in .blend so enabled/disabled state can be remembered
+ import bpy
+ wm = bpy.context.window_manager
+ repos = get_repositories()
+ wm.package_repositories.clear()
+ for repo in repos:
+ repo_prop = wm.package_repositories.add()
+ repo_prop.name = repo.name
+ repo_prop.enabled = True
+ repo_prop.url = repo.url
+ repo_prop.file = repo.file
+
def get_installed_packages(refresh=False) -> list:
"""Get list of packages installed on disk"""
log = logging.getLogger(__name__ + ".get_installed_packages")
diff --git a/release/scripts/modules/bpkg/display.py b/release/scripts/modules/bpkg/display.py
index b06784a3056..b489d171385 100644
--- a/release/scripts/modules/bpkg/display.py
+++ b/release/scripts/modules/bpkg/display.py
@@ -7,6 +7,20 @@ expanded_packages = []
# name of package who's preferences are shown
preference_package = None
+def repository_items(self, context) -> list:
+ """Return displayed repository enum items"""
+ import bpy
+ try:
+ repos = context.window_manager.package_repositories
+ except AttributeError:
+ return []
+ repolist = []
+ for repo in repos:
+ try:
+ repolist.append((repo['name'], repo['name'], "{} ({})".format(repo['name'], repo['url'])))
+ except KeyError: # name may not be set before refresh() finishes execution, in which case leave it out
+ pass
+ return repolist
#errors
pkg_errors = []
diff --git a/release/scripts/modules/bpkg/types.py b/release/scripts/modules/bpkg/types.py
index d4b1b182cf3..cebbe2e35fc 100644
--- a/release/scripts/modules/bpkg/types.py
+++ b/release/scripts/modules/bpkg/types.py
@@ -406,6 +406,7 @@ class Repository:
self.name = str()
self.url = url if url is not None else str()
self.packages = list()
+ self.file = Path()
self._headers = dict()
def refresh(self, storage_path: Path, progress_callback=None):# {{{
@@ -581,6 +582,7 @@ class Repository:
raise exceptions.BadRepositoryException(err) from err
if repo.url is None or len(repo.url) == 0:
raise exceptions.BadRepositoryException("Repository missing URL")
+ repo.file = repo_file
cls.log.debug("Repository read from %s", path)
return repo
diff --git a/release/scripts/startup/bl_operators/package.py b/release/scripts/startup/bl_operators/package.py
index b9f660fe488..c4afacb110b 100644
--- a/release/scripts/startup/bl_operators/package.py
+++ b/release/scripts/startup/bl_operators/package.py
@@ -366,6 +366,7 @@ else:
def _subproc_success(self, success: messages.Success):
self.report({'INFO'}, 'Finished refreshing lists')
+ bpkg.refresh_repository_props()
self.quit()
def _subproc_aborted(self, aborted: messages.Aborted):
@@ -379,16 +380,16 @@ else:
else:
self.log.error('Refresh process died without telling us! Exit code was 0 though')
self.report({'WARNING'}, 'Error refreshing package lists, but process finished OK. This is weird.')
-
- class RepositoryProperty(bpy.types.PropertyGroup):
- name = bpy.props.StringProperty(name="Name")
- url = bpy.props.StringProperty(name="URL")
- status = bpy.props.EnumProperty(name="Status", items=[
- ("OK", "Okay", "FILE_TICK"),
- ("NOTFOUND", "Not found", "ERROR"),
- ("NOCONNECT", "Could not connect", "QUESTION"),
- ])
- enabled = bpy.props.BoolProperty(name="Enabled")
+ #
+ # class RepositoryProperty(bpy.types.PropertyGroup):
+ # name = bpy.props.StringProperty(name="Name")
+ # url = bpy.props.StringProperty(name="URL")
+ # status = bpy.props.EnumProperty(name="Status", items=[
+ # ("OK", "Okay", "FILE_TICK"),
+ # ("NOTFOUND", "Not found", "ERROR"),
+ # ("NOCONNECT", "Could not connect", "QUESTION"),
+ # ])
+ # enabled = bpy.props.BoolProperty(name="Enabled")
class PACKAGE_UL_repositories(bpy.types.UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
@@ -435,15 +436,38 @@ else:
except IndexError:
return {'CANCELLED'}
- filename = bpkg.utils.format_filename(repo.name) + ".json"
+ filename = bpkg.utils.format_filename(repo['name']) + ".json"
path = (bpkg.get_repo_storage_path() / filename)
- if path.exists():
- path.unlink()
-
wm.package_repositories.remove(wm.package_active_repository)
+ if not path.exists():
+ raise ValueError("Failed find repository file")
+ path.unlink()
+ bpkg.tag_reindex()
+
+ return {'FINISHED'}
+
+ class PACKAGE_OT_edit_repositories(Operator):
+ bl_idname = "package.edit_repositories"
+ bl_label = "Edit Repositories"
+ def execute(self, context):
return {'FINISHED'}
+ def invoke(self, context, event):
+ wm = context.window_manager
+ return wm.invoke_props_dialog(self)
+
+ def draw(self, context):
+ layout = self.layout
+ wm = context.window_manager
+
+ row = layout.row()
+ row.template_list("PACKAGE_UL_repositories", "", wm, "package_repositories", wm, "package_active_repository")
+ col = row.column(align=True)
+ col.operator("package.add_repository", text="", icon='ZOOMIN')
+ col.operator("package.remove_repository", text="", icon='ZOOMOUT')
+
+
class WM_OT_package_toggle_expand(Operator):# {{{
bl_idname = "wm.package_toggle_expand"
bl_label = ""
@@ -558,5 +582,6 @@ classes = (
WM_OT_package_toggle_preferences,
PACKAGE_OT_add_repository,
PACKAGE_OT_remove_repository,
+ PACKAGE_OT_edit_repositories,
PACKAGE_UL_repositories,
)
diff --git a/release/scripts/startup/bl_ui/__init__.py b/release/scripts/startup/bl_ui/__init__.py
index d68ac2974ff..2a029ee1a25 100644
--- a/release/scripts/startup/bl_ui/__init__.py
+++ b/release/scripts/startup/bl_ui/__init__.py
@@ -152,6 +152,13 @@ def register():
default='AVAILABLE',
)
+ from bpkg import display
+ WindowManager.package_repository_filter = EnumProperty(
+ items=display.repository_items,
+ name="Repository filter",
+ options={'ENUM_FLAG'},
+ )
+
from .properties_package import RepositoryProperty
WindowManager.package_repositories = CollectionProperty(
type=RepositoryProperty,
@@ -160,6 +167,11 @@ def register():
WindowManager.package_active_repository = IntProperty()
+ WindowManager.package_repository_tab = EnumProperty(
+ items=[('REPOSITORIES', "Repositories", "Add, remove, and edit repositories")],
+ name="Repository tab",
+ )
+
# done...
diff --git a/release/scripts/startup/bl_ui/properties_package.py b/release/scripts/startup/bl_ui/properties_package.py
index f2a9e50382a..4f9090237cc 100644
--- a/release/scripts/startup/bl_ui/properties_package.py
+++ b/release/scripts/startup/bl_ui/properties_package.py
@@ -13,12 +13,7 @@ class RepositoryProperty(PropertyGroup):
class PACKAGE_UL_repositories(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
- layout.alignment='LEFT'
- layout.prop(item, "enabled", text="")
- if len(item.name) == 0:
- layout.label(item['url'])
- else:
- layout.label(item.name)
+ layout.prop(item, "url", text="", emboss=False)
classes = (
RepositoryProperty,
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index ef07e119717..da7c2d17211 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -1320,8 +1320,6 @@ class USERPREF_PT_packages(Panel):
bl_region_type = 'WINDOW'
bl_options = {'HIDE_HEADER'}
- _started = False
-
@classmethod
def poll(cls, context):
userpref = context.user_preferences
@@ -1339,14 +1337,18 @@ class USERPREF_PT_packages(Panel):
sidebar = spl.column(align=True)
pkgzone = spl.column()
+ sidebar.operator("package.refresh", text="Check for updates")
sidebar.label("Repositories")
row = sidebar.row()
- row.template_list("PACKAGE_UL_repositories", "", wm, "package_repositories", wm, "package_active_repository")
- col = row.column(align=True)
- col.operator("package.add_repository", text="", icon='ZOOMIN')
- col.operator("package.remove_repository", text="", icon='ZOOMOUT')
- sidebar.separator()
- sidebar.operator("package.refresh", text="Check for updates")
+ row.prop(wm, "package_repository_filter", expand=True)
+ # row.template_list("PACKAGE_UL_repositories", "", wm, "package_repositories", wm, "package_active_repository")
+ # col = row.column(align=True)
+ # col.operator("package.add_repository", text="", icon='ZOOMIN')
+ # col.operator("package.remove_repository", text="", icon='ZOOMOUT')
+ # sidebar.separator()
+
+ row = sidebar.row()
+ row.operator("package.edit_repositories")
sidebar.separator()
sidebar.label("Category")
@@ -1647,20 +1649,6 @@ class USERPREF_PT_packages(Panel):
row.alignment='CENTER'
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list