Import_3ds: Improved distance cue node setup
[blender-addons.git] / magic_uv / utils / bl_class_registry.py
blob5d4227ef06a8df00dad0b666eb0ad4176a052b3f
1 # SPDX-FileCopyrightText: 2018-2022 Blender Foundation
3 # SPDX-License-Identifier: GPL-2.0-or-later
5 __author__ = "Nutti <nutti.metro@gmail.com>"
6 __status__ = "production"
7 __version__ = "6.6"
8 __date__ = "22 Apr 2022"
10 import bpy
12 from .. import common
15 class BlClassRegistry:
16 class_list = []
18 def __init__(self, *_, **kwargs):
19 self.legacy = kwargs.get('legacy', False)
21 def __call__(self, cls):
22 if hasattr(cls, "bl_idname"):
23 BlClassRegistry.add_class(cls.bl_idname, cls, self.legacy)
24 elif hasattr(cls, "bl_context"):
25 bl_idname = "{}{}{}{}".format(cls.bl_space_type,
26 cls.bl_region_type,
27 cls.bl_context, cls.bl_label)
28 BlClassRegistry.add_class(bl_idname, cls, self.legacy)
29 else:
30 bl_idname = "{}{}{}".format(cls.bl_space_type,
31 cls.bl_region_type,
32 cls.bl_label)
33 BlClassRegistry.add_class(bl_idname, cls, self.legacy)
34 return cls
36 @classmethod
37 def add_class(cls, bl_idname, op_class, legacy):
38 for class_ in cls.class_list:
39 if (class_["bl_idname"] == bl_idname) and \
40 (class_["legacy"] == legacy):
41 raise RuntimeError("{} is already registered"
42 .format(bl_idname))
44 new_op = {
45 "bl_idname": bl_idname,
46 "class": op_class,
47 "legacy": legacy,
49 cls.class_list.append(new_op)
50 common.debug_print("{} is registered.".format(bl_idname))
52 @classmethod
53 def register(cls):
54 for class_ in cls.class_list:
55 bpy.utils.register_class(class_["class"])
56 common.debug_print("{} is registered to Blender."
57 .format(class_["bl_idname"]))
59 @classmethod
60 def unregister(cls):
61 for class_ in cls.class_list:
62 bpy.utils.unregister_class(class_["class"])
63 common.debug_print("{} is unregistered from Blender."
64 .format(class_["bl_idname"]))
66 @classmethod
67 def cleanup(cls):
68 cls.class_list = []
69 common.debug_print("Cleanup registry.")