[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