Plugin Registration Changes
- Re-wrote how the plugin registers itself. - No longer need @register_wrapper classes get auto detected and added. - The new Auto loader is much better then the old way, no longer need "if "bpy" not in locals():" this was an old way of doing things and wasn't really efficient. using auto_load.py provides several advantages: - It automatically discovers and loads all modules in the addon. - It handles dependencies between classes correctly through topological sorting. - It manages registration order automatically. - It properly handles unregistration in the correct order. This approach is much less error prone and I not had any issues so far. However it still needs testing fully. I have also start to re-organise files into folders as well, this is going to be needed so we don't have a long list of files as Avatar Toolkit is getting larger then i originally planned.
This commit is contained in:
+9
-51
@@ -1,55 +1,13 @@
|
||||
if "bpy" not in locals():
|
||||
import bpy
|
||||
from . import ui
|
||||
from . import core
|
||||
from . import functions
|
||||
from .core import register
|
||||
from .core.register import __bl_ordered_classes
|
||||
from .core import properties
|
||||
from .core import addon_preferences
|
||||
from .core.updater import check_for_update_on_start
|
||||
else:
|
||||
import importlib
|
||||
importlib.reload(ui)
|
||||
importlib.reload(core)
|
||||
importlib.reload(functions)
|
||||
importlib.reload(properties)
|
||||
importlib.reload(addon_preferences)
|
||||
modules = None
|
||||
ordered_classes = None
|
||||
|
||||
def register():
|
||||
print("Registering Avatar Toolkit")
|
||||
# Register the addon properties
|
||||
properties.register()
|
||||
|
||||
# Load the translations
|
||||
functions.translations.load_translations()
|
||||
|
||||
# Order the classes before registration
|
||||
core.register.order_classes()
|
||||
# Register the UI classes
|
||||
for cls in core.register.__bl_ordered_classes:
|
||||
print("registering " + str(cls))
|
||||
bpy.utils.register_class(cls)
|
||||
|
||||
#finally register properties that may use some classes.
|
||||
core.register.register_properties()
|
||||
|
||||
bpy.app.handlers.load_post.append(check_for_update_on_start)
|
||||
|
||||
from .functions.mesh_tools import AvatarToolkit_OT_ApplyShapeKey
|
||||
|
||||
bpy.types.MESH_MT_shape_key_context_menu.append((lambda self, context: self.layout.separator()))
|
||||
bpy.types.MESH_MT_shape_key_context_menu.append((lambda self, context: self.layout.operator(AvatarToolkit_OT_ApplyShapeKey.bl_idname, icon="KEY_HLT")))
|
||||
from .core import auto_load
|
||||
print("Starting registration")
|
||||
auto_load.init()
|
||||
auto_load.register()
|
||||
print("Registration complete")
|
||||
|
||||
def unregister():
|
||||
print("Unregistering Avatar Toolkit")
|
||||
# Unregister the UI classes
|
||||
if check_for_update_on_start in bpy.app.handlers.load_post:
|
||||
bpy.app.handlers.load_post.remove(check_for_update_on_start)
|
||||
|
||||
# Iterate over the classes to unregister in reverse order and unregister them
|
||||
for cls in reversed(list(__bl_ordered_classes)):
|
||||
bpy.utils.unregister_class(cls)
|
||||
print("unregistering " + str(cls))
|
||||
core.register.unregister_properties()
|
||||
properties.unregister()
|
||||
from .core import auto_load
|
||||
auto_load.unregister()
|
||||
|
||||
Reference in New Issue
Block a user