[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