[Bf-extensions-cvs] [0f3294a0] master: bugfix: dynamic enum not holding proper reference

Stephen Leger noreply at git.blender.org
Mon Mar 5 12:23:19 CET 2018


Commit: 0f3294a07904c411cd85e7c2f0f0fd8c3d9d865e
Author: Stephen Leger
Date:   Mon Mar 5 12:22:00 2018 +0100
Branches: master
https://developer.blender.org/rBA0f3294a07904c411cd85e7c2f0f0fd8c3d9d865e

bugfix: dynamic enum not holding proper reference

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

M	archipack/archipack_material.py

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

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):



More information about the Bf-extensions-cvs mailing list