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"
8 __date__
= "22 Apr 2022"
15 class BlClassRegistry
:
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
,
27 cls
.bl_context
, cls
.bl_label
)
28 BlClassRegistry
.add_class(bl_idname
, cls
, self
.legacy
)
30 bl_idname
= "{}{}{}".format(cls
.bl_space_type
,
33 BlClassRegistry
.add_class(bl_idname
, cls
, self
.legacy
)
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"
45 "bl_idname": bl_idname
,
49 cls
.class_list
.append(new_op
)
50 common
.debug_print("{} is registered.".format(bl_idname
))
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"]))
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"]))
69 common
.debug_print("Cleanup registry.")