[Bf-blender-cvs] [9146dd3] ui-preview-buttons: bpy.utils.previews api tweaks

Campbell Barton noreply at git.blender.org
Tue May 5 14:37:40 CEST 2015


Commit: 9146dd38f41c5a5f3b582d93e967b19c8bf58de6
Author: Campbell Barton
Date:   Tue May 5 22:03:46 2015 +1000
Branches: ui-preview-buttons
https://developer.blender.org/rB9146dd38f41c5a5f3b582d93e967b19c8bf58de6

bpy.utils.previews api tweaks

- make BPyPreviewsCollection's annonymous
- unique id is generated automaticly
- caller store the previews in a named/meaningful location

===================================================================

M	release/scripts/modules/bpy/utils/previews.py
M	release/scripts/templates_py/ui_previews.py

===================================================================

diff --git a/release/scripts/modules/bpy/utils/previews.py b/release/scripts/modules/bpy/utils/previews.py
index 813ed59..1548fd5 100644
--- a/release/scripts/modules/bpy/utils/previews.py
+++ b/release/scripts/modules/bpy/utils/previews.py
@@ -35,6 +35,8 @@ __all__ = (
 
 from bpy.app import _previews
 
+_uuid_open = set()
+
 
 # High-level previews manager.
 class BPyPreviewsCollection(dict):
@@ -45,22 +47,22 @@ class BPyPreviewsCollection(dict):
     # Internal notes:
     # - keys in the dict are stored by name
     # - values are instances of bpy.types.Preview
-    # - Blender's internal 'PreviewImage' struct uses 'self._coll_name' prefix.
+    # - Blender's internal 'PreviewImage' struct uses 'self._uuid' prefix.
 
-    def __init__(self, name):
+    def __init__(self):
         super().__init__()
-        self._coll_name = name
-        _previews_names_used.add(name)
+        self._uuid = hex(id(self))
+        _uuid_open.add(self._uuid)
 
     def __del__(self):
-        if self._coll_name not in _previews_names_used:
+        if self._uuid not in _uuid_open:
             return
 
         raise Warning("%r: left open, remove with 'bpy.utils.previews.remove()'")
         self.close()
 
     def _gen_key(self, name):
-        return ":".join((self._coll_name, name))
+        return ":".join((self._uuid, name))
 
     def new(self, name):
         return self.setdefault(name, _previews.new(self._gen_key(name)))
@@ -88,28 +90,21 @@ class BPyPreviewsCollection(dict):
 
     def close(self):
         self.clear()
-        _previews_names_used.remove(self._coll_name)
+        _uuid_open.remove(self._uuid)
 
     def __delitem__(self, key):
         return self.release(key)
 
     def __repr__(self):
-        return "<PreviewsCollection '%s'>\n\tPreviews: %s" % (self._coll_name, super().__repr__())
-
+        return "<PreviewsCollection '%s'>\n\tPreviews: %s" % (self._uuid, super().__repr__())
 
-_previews_names_used = set()
 
-
-def new(name):
+def new():
     """
-    Return a new preview collection, or existing one if 'name' already exists.
+    Return a new preview collection.
     """
 
-    if name in _previews_names_used:
-        raise Exception("Preview %r already exists!" % name)
-
-    p = BPyPreviewsCollection(name)
-    return p
+    return BPyPreviewsCollection()
 
 
 def remove(p):
diff --git a/release/scripts/templates_py/ui_previews.py b/release/scripts/templates_py/ui_previews.py
index 4be3d9d..4549fc0 100644
--- a/release/scripts/templates_py/ui_previews.py
+++ b/release/scripts/templates_py/ui_previews.py
@@ -107,7 +107,7 @@ def register():
     #   (remember you have to keep those strings somewhere in py,
     #   else they get freed and Blender references invalid memory!).
     import bpy.utils.previews
-    pcoll = bpy.utils.previews.new("PreviewsInDirectory")
+    pcoll = bpy.utils.previews.new()
     pcoll.my_previews_dir = ""
     pcoll.my_previews = ()




More information about the Bf-blender-cvs mailing list