diff options
author | Stephen Leger <stephen@3dservices.ch> | 2018-03-05 14:22:00 +0300 |
---|---|---|
committer | Stephen Leger <stephen@3dservices.ch> | 2018-03-05 14:22:43 +0300 |
commit | 0f3294a07904c411cd85e7c2f0f0fd8c3d9d865e (patch) | |
tree | f0749bb027daf1c5633667c68f0528ffba317d48 /archipack | |
parent | bcc369ff484b32cae14ef0da92c1120607d88011 (diff) |
bugfix: dynamic enum not holding proper reference
Diffstat (limited to 'archipack')
-rw-r--r-- | archipack/archipack_material.py | 34 |
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): |