Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Leger <stephen@3dservices.ch>2018-03-05 14:22:00 +0300
committerStephen Leger <stephen@3dservices.ch>2018-03-05 14:22:43 +0300
commit0f3294a07904c411cd85e7c2f0f0fd8c3d9d865e (patch)
treef0749bb027daf1c5633667c68f0528ffba317d48 /archipack
parentbcc369ff484b32cae14ef0da92c1120607d88011 (diff)
bugfix: dynamic enum not holding proper reference
Diffstat (limited to 'archipack')
-rw-r--r--archipack/archipack_material.py34
1 files changed, 23 insertions, 11 deletions
diff --git a/archipack/archipack_material.py b/archipack/archipack_material.py
index c226c7fb..22da496d 100644
--- a/archipack/archipack_material.py
+++ b/archipack/archipack_material.py
@@ -223,6 +223,8 @@ class MaterialSetManager():
Store sets for each object type
"""
self.objects = {}
+ # hold reference of dynamic enumerator
+ self.enums = {}
def get_filename(self, object_type):
@@ -234,6 +236,7 @@ class MaterialSetManager():
def cleanup(self):
self.objects.clear()
+ self.enums.clear()
def register_set(self, object_type, set_name, materials_names):
@@ -275,16 +278,20 @@ class MaterialSetManager():
finally:
f.close()
- for s_key in material_sets.keys():
+ s_keys = material_sets.keys()
+ for s_key in s_keys:
self.register_set(object_type, s_key, material_sets[s_key])
+ self.make_enum(object_type, s_keys)
+
def save(self, object_type):
# always save in user prefs
filename = self.get_filename(object_type)
# print("filename:%s" % filename)
o_dict = self.objects[object_type]
lines = []
- for s_key in o_dict.keys():
+ s_keys = o_dict.keys()
+ for s_key in s_keys:
for mat in o_dict[s_key]:
lines.append("{}##|##{}\n".format(s_key, mat))
try:
@@ -296,6 +303,8 @@ class MaterialSetManager():
finally:
f.close()
+ self.make_enum(object_type, s_keys)
+
def add(self, context, set_name):
o = context.active_object
if "archipack_material" in o:
@@ -311,9 +320,11 @@ class MaterialSetManager():
d = o.archipack_material[0]
object_type = d.category
set_name = d.material
- if set_name in self.objects[object_type].keys():
+ s_keys = self.objects[object_type].keys()
+ if set_name in s_keys:
self.objects[object_type].pop(set_name)
self.save(object_type)
+ self.make_enum(object_type, s_keys)
def get_materials(self, object_type, set_name):
if object_type not in self.objects.keys():
@@ -326,7 +337,13 @@ class MaterialSetManager():
return None
return self.objects[object_type][set_name]
- def make_enum(self, object_type):
+ def make_enum(self, object_type, s_keys):
+ if len(s_keys) < 1:
+ self.enums[object_type] = [('DEFAULT', 'Default', '', 0)]
+ else:
+ self.enums[object_type] = [(s.upper(), s.capitalize(), '', i) for i, s in enumerate(s_keys)]
+
+ def get_enum(self, object_type):
if object_type not in self.objects.keys():
self.load(object_type)
@@ -334,19 +351,14 @@ class MaterialSetManager():
if object_type not in self.objects.keys():
self.objects[object_type] = {}
- s_keys = self.objects[object_type].keys()
-
- if len(s_keys) < 1:
- return [('DEFAULT', 'Default', '', 0)]
-
- return [(s.upper(), s.capitalize(), '', i) for i, s in enumerate(s_keys)]
+ return self.enums[object_type]
def material_enum(self, context):
global setman
if setman is None:
setman = MaterialSetManager()
- return setman.make_enum(self.category)
+ return setman.get_enum(self.category)
def update(self, context):