Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2010-02-14 14:21:21 +0300
committerCampbell Barton <ideasman42@gmail.com>2010-02-14 14:21:21 +0300
commit39c04315e2815bbd24c9ba5f7e0aa11736fa1c48 (patch)
tree6c88f9d9dc4562374df40f080147b3a6144834e6 /release
parentb02f78ed02fd0c6fbb8f67bba1c123552052321c (diff)
change python scripts so modules which register with blender have a register() function rather then making import automatically run the register functions (generally considered bad practice by python people)
Diffstat (limited to 'release')
-rw-r--r--release/scripts/io/engine_render_pov.py17
-rw-r--r--release/scripts/io/export_3ds.py10
-rw-r--r--release/scripts/io/export_fbx.py11
-rw-r--r--release/scripts/io/export_mdd.py12
-rw-r--r--release/scripts/io/export_obj.py12
-rw-r--r--release/scripts/io/export_ply.py13
-rw-r--r--release/scripts/io/export_x3d.py11
-rw-r--r--release/scripts/io/import_anim_bvh.py11
-rw-r--r--release/scripts/io/import_scene_3ds.py11
-rw-r--r--release/scripts/io/import_scene_obj.py11
-rw-r--r--release/scripts/io/netrender/__init__.py6
-rw-r--r--release/scripts/modules/bpy/utils.py12
-rw-r--r--release/scripts/modules/bpy_types.py10
-rw-r--r--release/scripts/op/add_armature_human.py13
-rw-r--r--release/scripts/op/add_mesh_torus.py13
-rw-r--r--release/scripts/op/console_python.py6
-rw-r--r--release/scripts/op/console_shell.py7
-rw-r--r--release/scripts/op/euler_filter.py6
-rw-r--r--release/scripts/op/image.py7
-rw-r--r--release/scripts/op/mesh.py20
-rw-r--r--release/scripts/op/object.py26
-rw-r--r--release/scripts/op/object_align.py11
-rw-r--r--release/scripts/op/object_randomize_transform.py14
-rw-r--r--release/scripts/op/presets.py21
-rw-r--r--release/scripts/op/screen_play_rendered_anim.py7
-rw-r--r--release/scripts/op/sequencer.py7
-rw-r--r--release/scripts/op/uv.py13
-rw-r--r--release/scripts/op/uvcalc_follow_active.py13
-rw-r--r--release/scripts/op/uvcalc_smart_project.py11
-rw-r--r--release/scripts/op/vertexpaint_dirt.py9
-rw-r--r--release/scripts/op/wm.py56
-rw-r--r--release/scripts/ui/properties_animviz.py21
-rw-r--r--release/scripts/ui/properties_data_armature.py28
-rw-r--r--release/scripts/ui/properties_data_armature_rigify.py43
-rw-r--r--release/scripts/ui/properties_data_bone.py30
-rw-r--r--release/scripts/ui/properties_data_camera.py20
-rw-r--r--release/scripts/ui/properties_data_curve.py32
-rw-r--r--release/scripts/ui/properties_data_empty.py14
-rw-r--r--release/scripts/ui/properties_data_lamp.py36
-rw-r--r--release/scripts/ui/properties_data_lattice.py18
-rw-r--r--release/scripts/ui/properties_data_mesh.py37
-rw-r--r--release/scripts/ui/properties_data_metaball.py21
-rw-r--r--release/scripts/ui/properties_data_modifier.py15
-rw-r--r--release/scripts/ui/properties_game.py42
-rw-r--r--release/scripts/ui/properties_material.py65
-rw-r--r--release/scripts/ui/properties_object.py32
-rw-r--r--release/scripts/ui/properties_object_constraint.py17
-rw-r--r--release/scripts/ui/properties_particle.py45
-rw-r--r--release/scripts/ui/properties_physics_cloth.py25
-rw-r--r--release/scripts/ui/properties_physics_common.py7
-rw-r--r--release/scripts/ui/properties_physics_field.py17
-rw-r--r--release/scripts/ui/properties_physics_fluid.py21
-rw-r--r--release/scripts/ui/properties_physics_smoke.py25
-rw-r--r--release/scripts/ui/properties_physics_softbody.py27
-rw-r--r--release/scripts/ui/properties_render.py38
-rw-r--r--release/scripts/ui/properties_scene.py28
-rw-r--r--release/scripts/ui/properties_texture.py65
-rw-r--r--release/scripts/ui/properties_world.py35
-rw-r--r--release/scripts/ui/space_buttons.py17
-rw-r--r--release/scripts/ui/space_console.py36
-rw-r--r--release/scripts/ui/space_dopesheet.py24
-rw-r--r--release/scripts/ui/space_filebrowser.py15
-rw-r--r--release/scripts/ui/space_graph.py24
-rw-r--r--release/scripts/ui/space_image.py47
-rw-r--r--release/scripts/ui/space_info.py56
-rw-r--r--release/scripts/ui/space_logic.py15
-rw-r--r--release/scripts/ui/space_nla.py24
-rw-r--r--release/scripts/ui/space_node.py21
-rw-r--r--release/scripts/ui/space_outliner.py19
-rw-r--r--release/scripts/ui/space_sequencer.py49
-rw-r--r--release/scripts/ui/space_text.py35
-rw-r--r--release/scripts/ui/space_time.py22
-rw-r--r--release/scripts/ui/space_userpref.py48
-rw-r--r--release/scripts/ui/space_view3d.py214
-rw-r--r--release/scripts/ui/space_view3d_toolbar.py98
75 files changed, 1344 insertions, 631 deletions
diff --git a/release/scripts/io/engine_render_pov.py b/release/scripts/io/engine_render_pov.py
index 33e6dee22d5..6e7c7ea68cc 100644
--- a/release/scripts/io/engine_render_pov.py
+++ b/release/scripts/io/engine_render_pov.py
@@ -854,7 +854,6 @@ class PovrayRender(bpy.types.RenderEngine):
self._cleanup()
-bpy.types.register(PovrayRender)
# Use some of the existing buttons.
import properties_render
@@ -944,4 +943,18 @@ class RENDER_PT_povray_radiosity(RenderButtonsPanel):
col = split.column()
col.prop(scene, "pov_radio_always_sample")
-bpy.types.register(RENDER_PT_povray_radiosity)
+
+classes = [
+ PovrayRender,
+ RENDER_PT_povray_radiosity]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/io/export_3ds.py b/release/scripts/io/export_3ds.py
index af6dd7cd59c..4f6972ea2a3 100644
--- a/release/scripts/io/export_3ds.py
+++ b/release/scripts/io/export_3ds.py
@@ -1136,11 +1136,17 @@ class Export3DS(bpy.types.Operator):
def poll(self, context): # Poll isnt working yet
return context.active_object != None
-bpy.types.register(Export3DS)
# Add to a menu
def menu_func(self, context):
default_path = bpy.data.filename.replace(".blend", ".3ds")
self.layout.operator(Export3DS.bl_idname, text="Autodesk 3DS...").path = default_path
-bpy.types.INFO_MT_file_export.append(menu_func)
+
+def register():
+ bpy.types.register(Export3DS)
+ bpy.types.INFO_MT_file_export.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(Export3DS)
+ bpy.types.INFO_MT_file_export.remove(menu_func)
diff --git a/release/scripts/io/export_fbx.py b/release/scripts/io/export_fbx.py
index 3574059f942..50a1e9e1c1c 100644
--- a/release/scripts/io/export_fbx.py
+++ b/release/scripts/io/export_fbx.py
@@ -3435,7 +3435,7 @@ class ExportFBX(bpy.types.Operator):
return {'RUNNING_MODAL'}
-bpy.types.register(ExportFBX)
+
# if __name__ == "__main__":
# bpy.ops.EXPORT_OT_ply(filename="/tmp/test.ply")
@@ -3467,4 +3467,11 @@ def menu_func(self, context):
default_path = bpy.data.filename.replace(".blend", ".fbx")
self.layout.operator(ExportFBX.bl_idname, text="Autodesk FBX...").path = default_path
-menu_item = bpy.types.INFO_MT_file_export.append(menu_func)
+
+def register():
+ bpy.types.register(ExportFBX)
+ bpy.types.INFO_MT_file_export.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(ExportFBX)
+ bpy.types.INFO_MT_file_export.remove(menu_func)
diff --git a/release/scripts/io/export_mdd.py b/release/scripts/io/export_mdd.py
index f8fd2f34d2e..ff25d0dc3f3 100644
--- a/release/scripts/io/export_mdd.py
+++ b/release/scripts/io/export_mdd.py
@@ -181,14 +181,16 @@ class ExportMDD(bpy.types.Operator):
wm.add_fileselect(self)
return {'RUNNING_MODAL'}
-bpy.types.register(ExportMDD)
-
def menu_func(self, context):
default_path = bpy.data.filename.replace(".blend", ".mdd")
self.layout.operator(ExportMDD.bl_idname, text="Vertex Keyframe Animation (.mdd)...").path = default_path
-bpy.types.INFO_MT_file_export.append(menu_func)
-if __name__ == '__main__':
- bpy.ops.export.mdd(path="/tmp/test.mdd")
+def register():
+ bpy.types.register(ExportMDD)
+ bpy.types.INFO_MT_file_export.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(ExportMDD)
+ bpy.types.INFO_MT_file_export.remove(menu_func)
diff --git a/release/scripts/io/export_obj.py b/release/scripts/io/export_obj.py
index add54e8e156..2e90d66b7a7 100644
--- a/release/scripts/io/export_obj.py
+++ b/release/scripts/io/export_obj.py
@@ -958,16 +958,20 @@ class ExportOBJ(bpy.types.Operator):
wm.add_fileselect(self)
return {'RUNNING_MODAL'}
-bpy.types.register(ExportOBJ)
def menu_func(self, context):
default_path = bpy.data.filename.replace(".blend", ".obj")
self.layout.operator(ExportOBJ.bl_idname, text="Wavefront (.obj)...").path = default_path
-menu_item = bpy.types.INFO_MT_file_export.append(menu_func)
-if __name__ == "__main__":
- bpy.ops.EXPORT_OT_obj(filename="/tmp/test.obj")
+def register():
+ bpy.types.register(ExportOBJ)
+ bpy.types.INFO_MT_file_export.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(ExportOBJ)
+ bpy.types.INFO_MT_file_export.remove(menu_func)
+
# CONVERSION ISSUES
# - matrix problem
diff --git a/release/scripts/io/export_ply.py b/release/scripts/io/export_ply.py
index d0712d820fd..9bae14ff468 100644
--- a/release/scripts/io/export_ply.py
+++ b/release/scripts/io/export_ply.py
@@ -313,14 +313,15 @@ class ExportPLY(bpy.types.Operator):
row.prop(props, "use_colors")
-bpy.types.register(ExportPLY)
-
-
def menu_func(self, context):
default_path = bpy.data.filename.replace(".blend", ".ply")
self.layout.operator(ExportPLY.bl_idname, text="Stanford (.ply)...").path = default_path
-bpy.types.INFO_MT_file_export.append(menu_func)
-if __name__ == "__main__":
- bpy.ops.export.ply(path="/tmp/test.ply")
+def register():
+ bpy.types.register(ExportPLY)
+ bpy.types.INFO_MT_file_export.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(ExportPLY)
+ bpy.types.INFO_MT_file_export.remove(menu_func)
diff --git a/release/scripts/io/export_x3d.py b/release/scripts/io/export_x3d.py
index c7210e5ceb7..be648ddb11a 100644
--- a/release/scripts/io/export_x3d.py
+++ b/release/scripts/io/export_x3d.py
@@ -1242,14 +1242,19 @@ class ExportX3D(bpy.types.Operator):
wm.add_fileselect(self)
return {'RUNNING_MODAL'}
-bpy.types.register(ExportX3D)
-
def menu_func(self, context):
default_path = bpy.data.filename.replace(".blend", ".x3d")
self.layout.operator(ExportX3D.bl_idname, text="X3D Extensible 3D (.x3d)...").path = default_path
-bpy.types.INFO_MT_file_export.append(menu_func)
+
+def register():
+ bpy.types.register(ExportX3D)
+ bpy.types.INFO_MT_file_export.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(ExportX3D)
+ bpy.types.INFO_MT_file_export.remove(menu_func)
# NOTES
# - blender version is hardcoded
diff --git a/release/scripts/io/import_anim_bvh.py b/release/scripts/io/import_anim_bvh.py
index 7b455fb4b28..98b80ae879d 100644
--- a/release/scripts/io/import_anim_bvh.py
+++ b/release/scripts/io/import_anim_bvh.py
@@ -895,7 +895,12 @@ class BvhImporter(bpy.types.Operator):
return {'RUNNING_MODAL'}
-bpy.types.register(BvhImporter)
-
menu_func = lambda self, context: self.layout.operator(BvhImporter.bl_idname, text="Motion Capture (.bvh)...")
-bpy.types.INFO_MT_file_import.append(menu_func)
+
+def register():
+ bpy.types.register(BvhImporter)
+ bpy.types.INFO_MT_file_export.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(BvhImporter)
+ bpy.types.INFO_MT_file_export.remove(menu_func)
diff --git a/release/scripts/io/import_scene_3ds.py b/release/scripts/io/import_scene_3ds.py
index 29289ae0970..e5f9ef5a8bd 100644
--- a/release/scripts/io/import_scene_3ds.py
+++ b/release/scripts/io/import_scene_3ds.py
@@ -1031,10 +1031,17 @@ class IMPORT_OT_autodesk_3ds(bpy.types.Operator):
wm.add_fileselect(self)
return {'RUNNING_MODAL'}
-bpy.types.register(IMPORT_OT_autodesk_3ds)
menu_func = lambda self, context: self.layout.operator(IMPORT_OT_autodesk_3ds.bl_idname, text="3D Studio (.3ds)...")
-bpy.types.INFO_MT_file_import.append(menu_func)
+
+
+def register():
+ bpy.types.register(IMPORT_OT_autodesk_3ds)
+ bpy.types.INFO_MT_file_export.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(IMPORT_OT_autodesk_3ds)
+ bpy.types.INFO_MT_file_export.remove(menu_func)
# NOTES:
# why add 1 extra vertex? and remove it when done? - "Answer - eekadoodle - would need to re-order UV's without this since face order isnt always what we give blender, BMesh will solve :D"
diff --git a/release/scripts/io/import_scene_obj.py b/release/scripts/io/import_scene_obj.py
index 1ebf08451a6..5ff5ec015d8 100644
--- a/release/scripts/io/import_scene_obj.py
+++ b/release/scripts/io/import_scene_obj.py
@@ -1623,11 +1623,16 @@ class IMPORT_OT_obj(bpy.types.Operator):
return {'RUNNING_MODAL'}
-bpy.types.register(IMPORT_OT_obj)
+menu_func = lambda self, context: self.layout.operator(IMPORT_OT_obj.bl_idname, text="Wavefront (.obj)...")
-menu_func = lambda self, context: self.layout.operator(IMPORT_OT_obj.bl_idname, text="Wavefront (.obj)...")
-menu_item = bpy.types.INFO_MT_file_import.append(menu_func)
+def register():
+ bpy.types.register(IMPORT_OT_obj)
+ bpy.types.INFO_MT_file_export.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(IMPORT_OT_obj)
+ bpy.types.INFO_MT_file_export.remove(menu_func)
# NOTES (all line numbers refer to 2.4x import_obj.py, not this file)
diff --git a/release/scripts/io/netrender/__init__.py b/release/scripts/io/netrender/__init__.py
index 0ba6b76c653..37102e611ff 100644
--- a/release/scripts/io/netrender/__init__.py
+++ b/release/scripts/io/netrender/__init__.py
@@ -35,3 +35,9 @@ blacklist = []
init_file = ""
init_data = True
init_address = True
+
+def register():
+ pass # TODO
+
+def unregister():
+ pass # TODO
diff --git a/release/scripts/modules/bpy/utils.py b/release/scripts/modules/bpy/utils.py
index 6d83450e059..8e2e86acb66 100644
--- a/release/scripts/modules/bpy/utils.py
+++ b/release/scripts/modules/bpy/utils.py
@@ -56,7 +56,7 @@ def load_scripts(reload_scripts=False, refresh_scripts=False):
def test_reload(module):
try:
- reload(module)
+ return reload(module)
except:
traceback.print_exc()
@@ -97,7 +97,15 @@ def load_scripts(reload_scripts=False, refresh_scripts=False):
if reload_scripts and mod:
print("Reloading:", mod)
- test_reload(mod)
+ mod = test_reload(mod)
+
+ if mod:
+ register = getattr(mod, "register", None)
+ if register:
+ register()
+ else:
+ print("\nWarning! '%s%s%s' has no register function, this is now a requirement for registerable scripts." % (path, _os.sep, f))
+
if _bpy.app.debug:
print("Time %.4f" % (time.time() - t_main))
diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py
index 8f8151f2976..9d2e157f843 100644
--- a/release/scripts/modules/bpy_types.py
+++ b/release/scripts/modules/bpy_types.py
@@ -448,9 +448,9 @@ class _GenericUI:
if draw_funcs is None:
- def draw_ls(*args):
+ def draw_ls(self, context):
for func in draw_ls._draw_funcs:
- func(*args)
+ func(self, context)
draw_funcs = draw_ls._draw_funcs = [cls.draw]
cls.draw = draw_ls
@@ -469,6 +469,12 @@ class _GenericUI:
draw_funcs = cls._dyn_ui_initialize()
draw_funcs.insert(0, draw_func)
+ @classmethod
+ def remove(cls, draw_func):
+ """Remove a draw function that has been added to this menu"""
+ draw_funcs = cls._dyn_ui_initialize()
+ draw_funcs.remove(draw_func)
+
class Panel(StructRNA, _GenericUI):
__slots__ = ()
diff --git a/release/scripts/op/add_armature_human.py b/release/scripts/op/add_armature_human.py
index bc47fe41798..a8fd5cc3c1f 100644
--- a/release/scripts/op/add_armature_human.py
+++ b/release/scripts/op/add_armature_human.py
@@ -600,14 +600,17 @@ class AddHuman(bpy.types.Operator):
bpy.ops.object.mode_set(mode=mode_orig)
return {'FINISHED'}
-# Register the operator
-bpy.types.register(AddHuman)
# Add to a menu
menu_func = (lambda self, context: self.layout.operator(AddHuman.bl_idname,
icon='OUTLINER_OB_ARMATURE', text="Human (Meta-Rig)"))
-bpy.types.INFO_MT_armature_add.append(menu_func)
-if __name__ == "__main__":
- bpy.ops.mesh.armature_human_advanced_add()
+def register():
+ bpy.types.register(AddHuman)
+ bpy.types.INFO_MT_armature_add.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(AddHuman)
+ bpy.types.INFO_MT_armature_add.remove(menu_func)
+
diff --git a/release/scripts/op/add_mesh_torus.py b/release/scripts/op/add_mesh_torus.py
index 66b4e9ddf13..56d4e3ee687 100644
--- a/release/scripts/op/add_mesh_torus.py
+++ b/release/scripts/op/add_mesh_torus.py
@@ -157,14 +157,15 @@ class AddTorus(bpy.types.Operator):
return {'FINISHED'}
-# Register the operator
-bpy.types.register(AddTorus)
-
# Add to the menu
menu_func = (lambda self, context: self.layout.operator(AddTorus.bl_idname,
text="Torus", icon='MESH_DONUT'))
-bpy.types.INFO_MT_mesh_add.append(menu_func)
-if __name__ == "__main__":
- bpy.ops.mesh.primitive_torus_add()
+def register():
+ bpy.types.register(AddTorus)
+ bpy.types.INFO_MT_mesh_add.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(AddTorus)
+ bpy.types.INFO_MT_mesh_add.remove(menu_func)
diff --git a/release/scripts/op/console_python.py b/release/scripts/op/console_python.py
index 6fd3ba394ef..dab4899b3e6 100644
--- a/release/scripts/op/console_python.py
+++ b/release/scripts/op/console_python.py
@@ -196,3 +196,9 @@ def banner(context):
console.locals["C"] = bpy.context
return {'FINISHED'}
+
+def register():
+ pass
+
+def unregister():
+ pass
diff --git a/release/scripts/op/console_shell.py b/release/scripts/op/console_shell.py
index 8a96dde3cee..7e6f2847cda 100644
--- a/release/scripts/op/console_shell.py
+++ b/release/scripts/op/console_shell.py
@@ -76,3 +76,10 @@ def banner(context):
sc.prompt = os.getcwd() + PROMPT
return {'FINISHED'}
+
+
+def register():
+ pass
+
+def unregister():
+ pass
diff --git a/release/scripts/op/euler_filter.py b/release/scripts/op/euler_filter.py
index 030d3c54bac..c472af6c8c4 100644
--- a/release/scripts/op/euler_filter.py
+++ b/release/scripts/op/euler_filter.py
@@ -55,7 +55,11 @@ class DiscontFilterOp(bpy.types.Operator):
main(context)
return {'FINISHED'}
-bpy.types.register(DiscontFilterOp)
+def register():
+ bpy.types.register(DiscontFilterOp)
+
+def unregister():
+ bpy.types.unregister(DiscontFilterOp)
if __name__ == "__main__":
bpy.ops.graph.discont_filter()
diff --git a/release/scripts/op/image.py b/release/scripts/op/image.py
index 37d2936f7af..18a286ccf5b 100644
--- a/release/scripts/op/image.py
+++ b/release/scripts/op/image.py
@@ -41,4 +41,9 @@ class SaveDirty(bpy.types.Operator):
image.save(path=path)
return {'FINISHED'}
-bpy.types.register(SaveDirty) \ No newline at end of file
+
+def register():
+ bpy.types.register(SaveDirty)
+
+def unregister():
+ bpy.types.unregister(SaveDirty)
diff --git a/release/scripts/op/mesh.py b/release/scripts/op/mesh.py
index d8b28094e3a..08363c83892 100644
--- a/release/scripts/op/mesh.py
+++ b/release/scripts/op/mesh.py
@@ -173,10 +173,20 @@ class MeshMirrorUV(bpy.types.Operator):
return {'FINISHED'}
+
# Register the operator
-bpy.types.register(MeshSelectInteriorFaces)
-bpy.types.register(MeshMirrorUV)
+classes = [
+ MeshSelectInteriorFaces,
+ MeshMirrorUV]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
-if __name__ == "__main__":
- # bpy.ops.mesh.faces_select_interior()
- bpy.ops.mesh.faces_miror_uv()
diff --git a/release/scripts/op/object.py b/release/scripts/op/object.py
index 4759d8e5082..b17f824b8a9 100644
--- a/release/scripts/op/object.py
+++ b/release/scripts/op/object.py
@@ -466,13 +466,23 @@ class MakeDupliFace(bpy.types.Operator):
self._main(context)
return {'FINISHED'}
-# if __name__ == "__main__":
-# bpy.ops.uv.simple_operator()
+classes = [
+ SelectPattern,
+ SelectCamera,
+ SubdivisionSet,
+ ShapeTransfer,
+ JoinUVs,
+ MakeDupliFace]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
-bpy.types.register(SelectPattern)
-bpy.types.register(SelectCamera)
-bpy.types.register(SubdivisionSet)
-bpy.types.register(ShapeTransfer)
-bpy.types.register(JoinUVs)
-bpy.types.register(MakeDupliFace)
diff --git a/release/scripts/op/object_align.py b/release/scripts/op/object_align.py
index 4ad5acc8cc9..35d8b2c1d07 100644
--- a/release/scripts/op/object_align.py
+++ b/release/scripts/op/object_align.py
@@ -197,11 +197,16 @@ class AlignObjects(bpy.types.Operator):
return {'FINISHED'}
-bpy.types.register(AlignObjects)
-
def menu_func(self, context):
if context.mode == 'OBJECT':
self.layout.operator(AlignObjects.bl_idname,
text="Align Objects")
-bpy.types.VIEW3D_MT_transform.append(menu_func) \ No newline at end of file
+
+def register():
+ bpy.types.register(AlignObjects)
+ bpy.types.VIEW3D_MT_transform.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(AlignObjects)
+ bpy.types.VIEW3D_MT_transform.remove(menu_func)
diff --git a/release/scripts/op/object_randomize_transform.py b/release/scripts/op/object_randomize_transform.py
index a33b2701b63..f44219469f2 100644
--- a/release/scripts/op/object_randomize_transform.py
+++ b/release/scripts/op/object_randomize_transform.py
@@ -134,13 +134,17 @@ class RandomizeLocRotSize(bpy.types.Operator):
return {'FINISHED'}
-# Register the operator
-bpy.types.register(RandomizeLocRotSize)
-
-
def menu_func(self, context):
if context.mode == 'OBJECT':
self.layout.operator(RandomizeLocRotSize.bl_idname,
text="Randomize Transform")
-bpy.types.VIEW3D_MT_transform.append(menu_func)
+
+def register():
+ bpy.types.register(RandomizeLocRotSize)
+ bpy.types.VIEW3D_MT_transform.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(RandomizeLocRotSize)
+ bpy.types.VIEW3D_MT_transform.remove(menu_func)
+
diff --git a/release/scripts/op/presets.py b/release/scripts/op/presets.py
index d1e059622fc..0d220fe9c2b 100644
--- a/release/scripts/op/presets.py
+++ b/release/scripts/op/presets.py
@@ -158,7 +158,20 @@ class AddPresetSunSky(AddPresetBase):
preset_subdir = "sunsky"
-bpy.types.register(AddPresetRender)
-bpy.types.register(AddPresetSSS)
-bpy.types.register(AddPresetCloth)
-bpy.types.register(AddPresetSunSky)
+classes = [
+ AddPresetRender,
+ AddPresetSSS,
+ AddPresetCloth,
+ AddPresetSunSky]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
+
diff --git a/release/scripts/op/screen_play_rendered_anim.py b/release/scripts/op/screen_play_rendered_anim.py
index 18843e41028..73b30b4e6ac 100644
--- a/release/scripts/op/screen_play_rendered_anim.py
+++ b/release/scripts/op/screen_play_rendered_anim.py
@@ -114,4 +114,9 @@ class PlayRenderedAnim(bpy.types.Operator):
return('FINISHED',)
-bpy.types.register(PlayRenderedAnim)
+
+def register():
+ bpy.types.register(PlayRenderedAnim)
+
+def unregister():
+ bpy.types.unregister(PlayRenderedAnim)
diff --git a/release/scripts/op/sequencer.py b/release/scripts/op/sequencer.py
index 9d3ee4a7fd7..3ce2aa87d84 100644
--- a/release/scripts/op/sequencer.py
+++ b/release/scripts/op/sequencer.py
@@ -70,7 +70,12 @@ class SequencerCrossfadeSounds(bpy.types.Operator):
self.report({'ERROR'}, "The selected strips don't overlap.")
return {'CANCELLED'}
-bpy.types.register(SequencerCrossfadeSounds)
+
+def register():
+ bpy.types.register(SequencerCrossfadeSounds)
+
+def unregister():
+ bpy.types.unregister(SequencerCrossfadeSounds)
if __name__ == "__main__":
bpy.ops.sequencer.crossfade_sounds()
diff --git a/release/scripts/op/uv.py b/release/scripts/op/uv.py
index 1c425f6c451..95a234b9c79 100644
--- a/release/scripts/op/uv.py
+++ b/release/scripts/op/uv.py
@@ -196,15 +196,16 @@ class ExportUVLayout(bpy.types.Operator):
wm.add_fileselect(self)
return {'RUNNING_MODAL'}
-# Register the operator
-bpy.types.register(ExportUVLayout)
-
def menu_func(self, context):
default_path = bpy.data.filename.replace(".blend", ".svg")
self.layout.operator(ExportUVLayout.bl_idname).path = default_path
-bpy.types.IMAGE_MT_uvs.append(menu_func)
-#if __name__ == "__main__":
-# bpy.ops.uv.export_layout(path="/home/ideasman42/foo.svg")
+def register():
+ bpy.types.register(ExportUVLayout)
+ bpy.types.IMAGE_MT_uvs.append(menu_func)
+
+def unreguster():
+ bpy.types.unregister(ExportUVLayout)
+ bpy.types.IMAGE_MT_uvs.remove(menu_func)
diff --git a/release/scripts/op/uvcalc_follow_active.py b/release/scripts/op/uvcalc_follow_active.py
index baca4060e0a..2abacfb081f 100644
--- a/release/scripts/op/uvcalc_follow_active.py
+++ b/release/scripts/op/uvcalc_follow_active.py
@@ -259,11 +259,16 @@ class FollowActiveQuads(bpy.types.Operator):
main(context, self)
return {'FINISHED'}
-bpy.types.register(FollowActiveQuads)
# Add to a menu
menu_func = (lambda self, context: self.layout.operator(FollowActiveQuads.bl_idname))
-bpy.types.VIEW3D_MT_uv_map.append(menu_func)
-if __name__ == '__main__':
- bpy.ops.uv.follow_active_quads()
+
+def register():
+ bpy.types.register(FollowActiveQuads)
+ bpy.types.VIEW3D_MT_uv_map.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(FollowActiveQuads)
+ bpy.types.VIEW3D_MT_uv_map.remove(menu_func)
+
diff --git a/release/scripts/op/uvcalc_smart_project.py b/release/scripts/op/uvcalc_smart_project.py
index 1256358a32b..85d1983d67c 100644
--- a/release/scripts/op/uvcalc_smart_project.py
+++ b/release/scripts/op/uvcalc_smart_project.py
@@ -1134,13 +1134,16 @@ class SmartProject(bpy.types.Operator):
main(context, self.properties.island_margin, self.properties.angle_limit)
return {'FINISHED'}
-bpy.types.register(SmartProject)
# Add to a menu
menu_func = (lambda self, context: self.layout.operator(SmartProject.bl_idname,
text="Smart Project"))
-bpy.types.VIEW3D_MT_uv_map.append(menu_func)
-if __name__ == '__main__':
- bpy.ops.uv.smart_project()
+def register():
+ bpy.types.register(SmartProject)
+ bpy.types.VIEW3D_MT_uv_map.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(SmartProject)
+ bpy.types.VIEW3D_MT_uv_map.remove(menu_func)
diff --git a/release/scripts/op/vertexpaint_dirt.py b/release/scripts/op/vertexpaint_dirt.py
index 030fed21ac2..142563902e9 100644
--- a/release/scripts/op/vertexpaint_dirt.py
+++ b/release/scripts/op/vertexpaint_dirt.py
@@ -174,7 +174,10 @@ class VertexPaintDirt(bpy.types.Operator):
return('FINISHED',)
-bpy.types.register(VertexPaintDirt)
-if __name__ == "__main__":
- bpy.ops.mesh.vertex_paint_dirt()
+def register():
+ bpy.types.register(VertexPaintDirt)
+
+def unregister():
+ bpy.types.unregister(VertexPaintDirt)
+
diff --git a/release/scripts/op/wm.py b/release/scripts/op/wm.py
index 077d633757a..07c6bbf0c36 100644
--- a/release/scripts/op/wm.py
+++ b/release/scripts/op/wm.py
@@ -418,26 +418,38 @@ class WM_OT_reload_scripts(bpy.types.Operator):
return {'FINISHED'}
-bpy.types.register(MESH_OT_delete_edgeloop)
-
-bpy.types.register(WM_OT_context_set_boolean)
-bpy.types.register(WM_OT_context_set_int)
-bpy.types.register(WM_OT_context_set_float)
-bpy.types.register(WM_OT_context_set_string)
-bpy.types.register(WM_OT_context_set_enum)
-bpy.types.register(WM_OT_context_set_value)
-bpy.types.register(WM_OT_context_toggle)
-bpy.types.register(WM_OT_context_toggle_enum)
-bpy.types.register(WM_OT_context_cycle_enum)
-bpy.types.register(WM_OT_context_cycle_int)
-
-bpy.types.register(WM_OT_doc_view)
-bpy.types.register(WM_OT_doc_edit)
-
-bpy.types.register(WM_OT_reload_scripts)
-
-# experemental!
import rna_prop_ui
-bpy.types.register(rna_prop_ui.WM_OT_properties_edit)
-bpy.types.register(rna_prop_ui.WM_OT_properties_add)
-bpy.types.register(rna_prop_ui.WM_OT_properties_remove)
+
+classes = [
+ MESH_OT_delete_edgeloop,
+
+ WM_OT_context_set_boolean,
+ WM_OT_context_set_int,
+ WM_OT_context_set_float,
+ WM_OT_context_set_string,
+ WM_OT_context_set_enum,
+ WM_OT_context_set_value,
+ WM_OT_context_toggle,
+ WM_OT_context_toggle_enum,
+ WM_OT_context_cycle_enum,
+ WM_OT_context_cycle_int,
+
+ WM_OT_doc_view,
+ WM_OT_doc_edit,
+
+ WM_OT_reload_scripts,
+
+ # experemental!
+ rna_prop_ui.WM_OT_properties_edit,
+ rna_prop_ui.WM_OT_properties_add,
+ rna_prop_ui.WM_OT_properties_remove]
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_animviz.py b/release/scripts/ui/properties_animviz.py
index 7954ac199dd..556fe6f165d 100644
--- a/release/scripts/ui/properties_animviz.py
+++ b/release/scripts/ui/properties_animviz.py
@@ -157,8 +157,19 @@ class DATA_PT_motion_paths(MotionPathButtonsPanel):
col.operator("pose.paths_clear", text="Clear Paths")
-
-#bpy.types.register(OBJECT_PT_onion_skinning)
-#bpy.types.register(DATA_PT_onion_skinning)
-bpy.types.register(OBJECT_PT_motion_paths)
-bpy.types.register(DATA_PT_motion_paths)
+classes = [
+ OBJECT_PT_motion_paths,
+ DATA_PT_motion_paths]
+
+# OBJECT_PT_onion_skinning
+# DATA_PT_onion_skinning
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_data_armature.py b/release/scripts/ui/properties_data_armature.py
index 43800955291..47d8c821952 100644
--- a/release/scripts/ui/properties_data_armature.py
+++ b/release/scripts/ui/properties_data_armature.py
@@ -253,12 +253,22 @@ class DATA_PT_iksolver_itasc(DataButtonsPanel):
row.prop(itasc, "dampmax", text="Damp", slider=True)
row.prop(itasc, "dampeps", text="Eps", slider=True)
-
-bpy.types.register(DATA_PT_context_arm)
-bpy.types.register(DATA_PT_skeleton)
-bpy.types.register(DATA_PT_display)
-bpy.types.register(DATA_PT_bone_groups)
-bpy.types.register(DATA_PT_ghost)
-bpy.types.register(DATA_PT_iksolver_itasc)
-
-bpy.types.register(DATA_PT_custom_props_arm)
+classes = [
+ DATA_PT_context_arm,
+ DATA_PT_skeleton,
+ DATA_PT_display,
+ DATA_PT_bone_groups,
+ DATA_PT_ghost,
+ DATA_PT_iksolver_itasc,
+
+ DATA_PT_custom_props_arm]
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_data_armature_rigify.py b/release/scripts/ui/properties_data_armature_rigify.py
index de516cd8fd4..e737bdfcf9f 100644
--- a/release/scripts/ui/properties_data_armature_rigify.py
+++ b/release/scripts/ui/properties_data_armature_rigify.py
@@ -327,24 +327,37 @@ class INFO_MT_armature_metarig_add(bpy.types.Menu):
text = bpy.utils.display_name(submodule_type)
layout.operator("pose.metarig_sample_add", text=text, icon='OUTLINER_OB_ARMATURE').metarig_type = submodule_type
-bpy.types.register(DATA_PT_template)
+classes = [
+ DATA_PT_template,
-bpy.types.register(PoseTemplateSettings)
-bpy.types.register(PoseTemplate)
+ PoseTemplateSettings,
+ PoseTemplate,
-bpy.types.register(Reload)
-bpy.types.register(Generate)
-bpy.types.register(Validate)
-bpy.types.register(Sample)
-bpy.types.register(Graph)
-bpy.types.register(AsScript)
+ Reload,
+ Generate,
+ Validate,
+ Sample,
+ Graph,
+ AsScript,
-bpy.types.register(ActiveAssign)
-bpy.types.register(ActiveClear)
+ ActiveAssign,
+ ActiveClear,
+ INFO_MT_armature_metarig_add]
-bpy.types.register(INFO_MT_armature_metarig_add)
-
-import space_info
menu_func = (lambda self, context: self.layout.menu("INFO_MT_armature_metarig_add", icon='OUTLINER_OB_ARMATURE'))
-space_info.INFO_MT_armature_add.append(menu_func)
+import space_info # ensure the menu is loaded first
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+ space_info.INFO_MT_armature_add.append(menu_func)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
+
+ bpy.types.INFO_MT_armature_add.remove(menu_func)
diff --git a/release/scripts/ui/properties_data_bone.py b/release/scripts/ui/properties_data_bone.py
index 1a57cb40522..fbd9e715319 100644
--- a/release/scripts/ui/properties_data_bone.py
+++ b/release/scripts/ui/properties_data_bone.py
@@ -387,13 +387,23 @@ class BONE_PT_deform(BoneButtonsPanel):
col.label(text="Offset:")
col.prop(bone, "cyclic_offset")
-
-bpy.types.register(BONE_PT_context_bone)
-bpy.types.register(BONE_PT_transform)
-bpy.types.register(BONE_PT_transform_locks)
-bpy.types.register(BONE_PT_relations)
-bpy.types.register(BONE_PT_display)
-bpy.types.register(BONE_PT_inverse_kinematics)
-bpy.types.register(BONE_PT_deform)
-
-bpy.types.register(BONE_PT_custom_props)
+classes = [
+ BONE_PT_context_bone,
+ BONE_PT_transform,
+ BONE_PT_transform_locks,
+ BONE_PT_relations,
+ BONE_PT_display,
+ BONE_PT_inverse_kinematics,
+ BONE_PT_deform,
+
+ BONE_PT_custom_props]
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_data_camera.py b/release/scripts/ui/properties_data_camera.py
index de2c7ef658a..107d88bcaef 100644
--- a/release/scripts/ui/properties_data_camera.py
+++ b/release/scripts/ui/properties_data_camera.py
@@ -150,8 +150,20 @@ class DATA_PT_camera_display(DataButtonsPanel):
sub.prop(cam, "passepartout_alpha", text="Alpha", slider=True)
-bpy.types.register(DATA_PT_context_camera)
-bpy.types.register(DATA_PT_camera)
-bpy.types.register(DATA_PT_camera_display)
+classes = [
+ DATA_PT_context_camera,
+ DATA_PT_camera,
+ DATA_PT_camera_display,
-bpy.types.register(DATA_PT_custom_props_camera)
+ DATA_PT_custom_props_camera]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_data_curve.py b/release/scripts/ui/properties_data_curve.py
index 123bdf281e5..f5a35dd1272 100644
--- a/release/scripts/ui/properties_data_curve.py
+++ b/release/scripts/ui/properties_data_curve.py
@@ -383,13 +383,25 @@ class DATA_PT_textboxes(DataButtonsPanel):
col.prop(box, "y", text="Y")
-bpy.types.register(DATA_PT_context_curve)
-bpy.types.register(DATA_PT_shape_curve)
-bpy.types.register(DATA_PT_geometry_curve)
-bpy.types.register(DATA_PT_pathanim)
-bpy.types.register(DATA_PT_active_spline)
-bpy.types.register(DATA_PT_font)
-bpy.types.register(DATA_PT_paragraph)
-bpy.types.register(DATA_PT_textboxes)
-
-bpy.types.register(DATA_PT_custom_props_curve)
+classes = [
+ DATA_PT_context_curve,
+ DATA_PT_shape_curve,
+ DATA_PT_geometry_curve,
+ DATA_PT_pathanim,
+ DATA_PT_active_spline,
+ DATA_PT_font,
+ DATA_PT_paragraph,
+ DATA_PT_textboxes,
+
+ DATA_PT_custom_props_curve]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_data_empty.py b/release/scripts/ui/properties_data_empty.py
index e3c1a83c74a..3288ce39de6 100644
--- a/release/scripts/ui/properties_data_empty.py
+++ b/release/scripts/ui/properties_data_empty.py
@@ -47,4 +47,16 @@ class DATA_PT_empty(DataButtonsPanel):
layout.prop(ob, "empty_draw_size", text="Size")
-bpy.types.register(DATA_PT_empty)
+
+classes = [
+ DATA_PT_empty]
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_data_lamp.py b/release/scripts/ui/properties_data_lamp.py
index 54d7142ba2d..429d78c651a 100644
--- a/release/scripts/ui/properties_data_lamp.py
+++ b/release/scripts/ui/properties_data_lamp.py
@@ -391,15 +391,27 @@ class DATA_PT_falloff_curve(DataButtonsPanel):
self.layout.template_curve_mapping(lamp, "falloff_curve")
-bpy.types.register(LAMP_MT_sunsky_presets)
-
-bpy.types.register(DATA_PT_context_lamp)
-bpy.types.register(DATA_PT_preview)
-bpy.types.register(DATA_PT_lamp)
-bpy.types.register(DATA_PT_falloff_curve)
-bpy.types.register(DATA_PT_area)
-bpy.types.register(DATA_PT_spot)
-bpy.types.register(DATA_PT_shadow)
-bpy.types.register(DATA_PT_sunsky)
-
-bpy.types.register(DATA_PT_custom_props_lamp)
+classes = [
+ LAMP_MT_sunsky_presets,
+
+ DATA_PT_context_lamp,
+ DATA_PT_preview,
+ DATA_PT_lamp,
+ DATA_PT_falloff_curve,
+ DATA_PT_area,
+ DATA_PT_spot,
+ DATA_PT_shadow,
+ DATA_PT_sunsky,
+
+ DATA_PT_custom_props_lamp]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_data_lattice.py b/release/scripts/ui/properties_data_lattice.py
index c64462bd970..75496815c52 100644
--- a/release/scripts/ui/properties_data_lattice.py
+++ b/release/scripts/ui/properties_data_lattice.py
@@ -96,7 +96,19 @@ class DATA_PT_lattice(DataButtonsPanel):
layout.prop(lat, "outside")
-bpy.types.register(DATA_PT_context_lattice)
-bpy.types.register(DATA_PT_lattice)
+classes = [
+ DATA_PT_context_lattice,
+ DATA_PT_lattice,
-bpy.types.register(DATA_PT_custom_props_lattice)
+ DATA_PT_custom_props_lattice]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_data_mesh.py b/release/scripts/ui/properties_data_mesh.py
index b80c56ea6a5..a800a8f3d9a 100644
--- a/release/scripts/ui/properties_data_mesh.py
+++ b/release/scripts/ui/properties_data_mesh.py
@@ -304,15 +304,28 @@ class DATA_PT_vertex_colors(DataButtonsPanel):
if lay:
layout.prop(lay, "name")
-bpy.types.register(MESH_MT_vertex_group_specials)
-bpy.types.register(MESH_MT_shape_key_specials)
-
-bpy.types.register(DATA_PT_context_mesh)
-bpy.types.register(DATA_PT_normals)
-bpy.types.register(DATA_PT_settings)
-bpy.types.register(DATA_PT_vertex_groups)
-bpy.types.register(DATA_PT_shape_keys)
-bpy.types.register(DATA_PT_uv_texture)
-bpy.types.register(DATA_PT_vertex_colors)
-
-bpy.types.register(DATA_PT_custom_props_mesh)
+
+classes = [
+ MESH_MT_vertex_group_specials,
+ MESH_MT_shape_key_specials,
+
+ DATA_PT_context_mesh,
+ DATA_PT_normals,
+ DATA_PT_settings,
+ DATA_PT_vertex_groups,
+ DATA_PT_shape_keys,
+ DATA_PT_uv_texture,
+ DATA_PT_vertex_colors,
+
+ DATA_PT_custom_props_mesh]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_data_metaball.py b/release/scripts/ui/properties_data_metaball.py
index b249ceba088..4a6aab0cc2a 100644
--- a/release/scripts/ui/properties_data_metaball.py
+++ b/release/scripts/ui/properties_data_metaball.py
@@ -135,8 +135,21 @@ class DATA_PT_metaball_element(DataButtonsPanel):
col.prop(metaelem, "size_x", text="X")
col.prop(metaelem, "size_y", text="Y")
-bpy.types.register(DATA_PT_context_metaball)
-bpy.types.register(DATA_PT_metaball)
-bpy.types.register(DATA_PT_metaball_element)
-bpy.types.register(DATA_PT_custom_props_metaball)
+classes = [
+ DATA_PT_context_metaball,
+ DATA_PT_metaball,
+ DATA_PT_metaball_element,
+
+ DATA_PT_custom_props_metaball]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_data_modifier.py b/release/scripts/ui/properties_data_modifier.py
index eb91a4dc70c..10d499115d7 100644
--- a/release/scripts/ui/properties_data_modifier.py
+++ b/release/scripts/ui/properties_data_modifier.py
@@ -729,4 +729,17 @@ class DATA_PT_modifiers(DataButtonsPanel):
col.prop(md, "width", slider=True)
col.prop(md, "narrowness", slider=True)
-bpy.types.register(DATA_PT_modifiers)
+
+classes = [
+ DATA_PT_modifiers]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_game.py b/release/scripts/ui/properties_game.py
index afed8f14bc4..626c246535a 100644
--- a/release/scripts/ui/properties_game.py
+++ b/release/scripts/ui/properties_game.py
@@ -196,10 +196,6 @@ class PHYSICS_PT_game_collision_bounds(PhysicsButtonsPanel):
col.prop(game, "collision_compound", text="Compound")
-bpy.types.register(PHYSICS_PT_game_physics)
-bpy.types.register(PHYSICS_PT_game_collision_bounds)
-
-
class RenderButtonsPanel(bpy.types.Panel):
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
@@ -386,13 +382,6 @@ class RENDER_PT_game_sound(RenderButtonsPanel):
layout.prop(scene, "speed_of_sound", text="Speed")
layout.prop(scene, "doppler_factor")
-bpy.types.register(RENDER_PT_game)
-bpy.types.register(RENDER_PT_game_player)
-bpy.types.register(RENDER_PT_game_stereo)
-bpy.types.register(RENDER_PT_game_shading)
-bpy.types.register(RENDER_PT_game_performance)
-bpy.types.register(RENDER_PT_game_sound)
-
class WorldButtonsPanel(bpy.types.Panel):
bl_space_type = 'PROPERTIES'
@@ -521,7 +510,30 @@ class WORLD_PT_game_physics(WorldButtonsPanel):
col.label(text="Logic Steps:")
col.prop(gs, "logic_step_max", text="Max")
-bpy.types.register(WORLD_PT_game_context_world)
-bpy.types.register(WORLD_PT_game_world)
-bpy.types.register(WORLD_PT_game_mist)
-bpy.types.register(WORLD_PT_game_physics)
+
+classes = [
+ PHYSICS_PT_game_physics,
+ PHYSICS_PT_game_collision_bounds,
+
+ RENDER_PT_game,
+ RENDER_PT_game_player,
+ RENDER_PT_game_stereo,
+ RENDER_PT_game_shading,
+ RENDER_PT_game_performance,
+ RENDER_PT_game_sound,
+
+ WORLD_PT_game_context_world,
+ WORLD_PT_game_world,
+ WORLD_PT_game_mist,
+ WORLD_PT_game_physics]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_material.py b/release/scripts/ui/properties_material.py
index 88611766dd6..cf705c8d693 100644
--- a/release/scripts/ui/properties_material.py
+++ b/release/scripts/ui/properties_material.py
@@ -773,22 +773,6 @@ class MATERIAL_PT_flare(MaterialButtonsPanel):
col.prop(halo, "flares_sub", text="Subflares")
col.prop(halo, "flare_subsize", text="Subsize")
-bpy.types.register(MATERIAL_PT_context_material)
-bpy.types.register(MATERIAL_PT_preview)
-bpy.types.register(MATERIAL_PT_diffuse)
-bpy.types.register(MATERIAL_PT_specular)
-bpy.types.register(MATERIAL_PT_shading)
-bpy.types.register(MATERIAL_PT_transp)
-bpy.types.register(MATERIAL_PT_mirror)
-bpy.types.register(MATERIAL_PT_sss)
-bpy.types.register(MATERIAL_PT_halo)
-bpy.types.register(MATERIAL_PT_flare)
-bpy.types.register(MATERIAL_PT_physics)
-bpy.types.register(MATERIAL_PT_strand)
-bpy.types.register(MATERIAL_PT_options)
-bpy.types.register(MATERIAL_PT_shadow)
-bpy.types.register(MATERIAL_PT_transp_game)
-
class VolumeButtonsPanel(bpy.types.Panel):
bl_space_type = 'PROPERTIES'
@@ -927,14 +911,43 @@ class MATERIAL_PT_volume_integration(VolumeButtonsPanel):
col.label()
col.prop(vol, "depth_cutoff")
-bpy.types.register(MATERIAL_MT_sss_presets)
-bpy.types.register(MATERIAL_MT_specials)
-
-bpy.types.register(MATERIAL_PT_volume_density)
-bpy.types.register(MATERIAL_PT_volume_shading)
-bpy.types.register(MATERIAL_PT_volume_lighting)
-bpy.types.register(MATERIAL_PT_volume_transp)
-
-bpy.types.register(MATERIAL_PT_volume_integration)
-bpy.types.register(MATERIAL_PT_custom_props)
+classes = [
+ MATERIAL_PT_context_material,
+ MATERIAL_PT_preview,
+ MATERIAL_PT_diffuse,
+ MATERIAL_PT_specular,
+ MATERIAL_PT_shading,
+ MATERIAL_PT_transp,
+ MATERIAL_PT_mirror,
+ MATERIAL_PT_sss,
+ MATERIAL_PT_halo,
+ MATERIAL_PT_flare,
+ MATERIAL_PT_physics,
+ MATERIAL_PT_strand,
+ MATERIAL_PT_options,
+ MATERIAL_PT_shadow,
+ MATERIAL_PT_transp_game,
+
+ MATERIAL_MT_sss_presets,
+ MATERIAL_MT_specials,
+
+ MATERIAL_PT_volume_density,
+ MATERIAL_PT_volume_shading,
+ MATERIAL_PT_volume_lighting,
+ MATERIAL_PT_volume_transp,
+
+ MATERIAL_PT_volume_integration,
+
+ MATERIAL_PT_custom_props]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_object.py b/release/scripts/ui/properties_object.py
index 6a36e899570..c50edccbab5 100644
--- a/release/scripts/ui/properties_object.py
+++ b/release/scripts/ui/properties_object.py
@@ -305,13 +305,25 @@ class OBJECT_PT_animation(ObjectButtonsPanel):
row.active = (ob.parent is not None)
-bpy.types.register(OBJECT_PT_context_object)
-bpy.types.register(OBJECT_PT_transform)
-bpy.types.register(OBJECT_PT_transform_locks)
-bpy.types.register(OBJECT_PT_relations)
-bpy.types.register(OBJECT_PT_groups)
-bpy.types.register(OBJECT_PT_display)
-bpy.types.register(OBJECT_PT_duplication)
-bpy.types.register(OBJECT_PT_animation)
-
-bpy.types.register(OBJECT_PT_custom_props)
+classes = [
+ OBJECT_PT_context_object,
+ OBJECT_PT_transform,
+ OBJECT_PT_transform_locks,
+ OBJECT_PT_relations,
+ OBJECT_PT_groups,
+ OBJECT_PT_display,
+ OBJECT_PT_duplication,
+ OBJECT_PT_animation,
+
+ OBJECT_PT_custom_props]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_object_constraint.py b/release/scripts/ui/properties_object_constraint.py
index 8ad9634b682..3ec647cda0c 100644
--- a/release/scripts/ui/properties_object_constraint.py
+++ b/release/scripts/ui/properties_object_constraint.py
@@ -754,5 +754,18 @@ class BONE_PT_constraints(ConstraintButtonsPanel):
for con in context.pose_bone.constraints:
self.draw_constraint(context, con)
-bpy.types.register(OBJECT_PT_constraints)
-bpy.types.register(BONE_PT_constraints)
+
+classes = [
+ OBJECT_PT_constraints,
+ BONE_PT_constraints]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_particle.py b/release/scripts/ui/properties_particle.py
index 093494befdd..88e2ef7d264 100644
--- a/release/scripts/ui/properties_particle.py
+++ b/release/scripts/ui/properties_particle.py
@@ -998,19 +998,32 @@ class PARTICLE_PT_vertexgroups(ParticleButtonsPanel):
row.prop_object(psys, "vertex_group_field", ob, "vertex_groups", text="Field")
row.prop(psys, "vertex_group_field_negate", text="")
-bpy.types.register(PARTICLE_PT_context_particles)
-bpy.types.register(PARTICLE_PT_hair_dynamics)
-bpy.types.register(PARTICLE_PT_cache)
-bpy.types.register(PARTICLE_PT_emission)
-bpy.types.register(PARTICLE_PT_velocity)
-bpy.types.register(PARTICLE_PT_rotation)
-bpy.types.register(PARTICLE_PT_physics)
-bpy.types.register(PARTICLE_PT_boidbrain)
-bpy.types.register(PARTICLE_PT_render)
-bpy.types.register(PARTICLE_PT_draw)
-bpy.types.register(PARTICLE_PT_children)
-bpy.types.register(PARTICLE_PT_field_weights)
-bpy.types.register(PARTICLE_PT_force_fields)
-bpy.types.register(PARTICLE_PT_vertexgroups)
-
-bpy.types.register(PARTICLE_PT_custom_props)
+
+classes = [
+ PARTICLE_PT_context_particles,
+ PARTICLE_PT_hair_dynamics,
+ PARTICLE_PT_cache,
+ PARTICLE_PT_emission,
+ PARTICLE_PT_velocity,
+ PARTICLE_PT_rotation,
+ PARTICLE_PT_physics,
+ PARTICLE_PT_boidbrain,
+ PARTICLE_PT_render,
+ PARTICLE_PT_draw,
+ PARTICLE_PT_children,
+ PARTICLE_PT_field_weights,
+ PARTICLE_PT_force_fields,
+ PARTICLE_PT_vertexgroups,
+
+ PARTICLE_PT_custom_props]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_physics_cloth.py b/release/scripts/ui/properties_physics_cloth.py
index 5b205e74c26..49db6e34bf1 100644
--- a/release/scripts/ui/properties_physics_cloth.py
+++ b/release/scripts/ui/properties_physics_cloth.py
@@ -228,10 +228,23 @@ class PHYSICS_PT_cloth_field_weights(PhysicButtonsPanel):
cloth = context.cloth.settings
effector_weights_ui(self, context, cloth.effector_weights)
-bpy.types.register(CLOTH_MT_presets)
-bpy.types.register(PHYSICS_PT_cloth)
-bpy.types.register(PHYSICS_PT_cloth_cache)
-bpy.types.register(PHYSICS_PT_cloth_collision)
-bpy.types.register(PHYSICS_PT_cloth_stiffness)
-bpy.types.register(PHYSICS_PT_cloth_field_weights)
+classes = [
+ CLOTH_MT_presets,
+
+ PHYSICS_PT_cloth,
+ PHYSICS_PT_cloth_cache,
+ PHYSICS_PT_cloth_collision,
+ PHYSICS_PT_cloth_stiffness,
+ PHYSICS_PT_cloth_field_weights]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_physics_common.py b/release/scripts/ui/properties_physics_common.py
index dab4cc27a8d..bf77004d298 100644
--- a/release/scripts/ui/properties_physics_common.py
+++ b/release/scripts/ui/properties_physics_common.py
@@ -210,3 +210,10 @@ def basic_force_field_falloff_ui(self, context, field):
sub = col.column()
sub.active = field.use_max_distance
sub.prop(field, "maximum_distance", text="Distance")
+
+
+def register():
+ pass
+
+def unregister():
+ pass
diff --git a/release/scripts/ui/properties_physics_field.py b/release/scripts/ui/properties_physics_field.py
index fdedcd440ec..a336d2a7c04 100644
--- a/release/scripts/ui/properties_physics_field.py
+++ b/release/scripts/ui/properties_physics_field.py
@@ -242,5 +242,18 @@ class PHYSICS_PT_collision(PhysicButtonsPanel):
col.label(text="Force Fields:")
col.prop(settings, "absorption", text="Absorption")
-bpy.types.register(PHYSICS_PT_field)
-bpy.types.register(PHYSICS_PT_collision)
+
+classes = [
+ PHYSICS_PT_field,
+ PHYSICS_PT_collision]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_physics_fluid.py b/release/scripts/ui/properties_physics_fluid.py
index 1a841baf5b3..ff8080d450a 100644
--- a/release/scripts/ui/properties_physics_fluid.py
+++ b/release/scripts/ui/properties_physics_fluid.py
@@ -291,7 +291,20 @@ class PHYSICS_PT_domain_particles(PhysicButtonsPanel):
col.prop(fluid, "tracer_particles")
col.prop(fluid, "generate_particles")
-bpy.types.register(PHYSICS_PT_fluid)
-bpy.types.register(PHYSICS_PT_domain_gravity)
-bpy.types.register(PHYSICS_PT_domain_boundary)
-bpy.types.register(PHYSICS_PT_domain_particles)
+
+classes = [
+ PHYSICS_PT_fluid,
+ PHYSICS_PT_domain_gravity,
+ PHYSICS_PT_domain_boundary,
+ PHYSICS_PT_domain_particles]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_physics_smoke.py b/release/scripts/ui/properties_physics_smoke.py
index 2cba19dc8dc..5fcb7f9cc22 100644
--- a/release/scripts/ui/properties_physics_smoke.py
+++ b/release/scripts/ui/properties_physics_smoke.py
@@ -238,9 +238,22 @@ class PHYSICS_PT_smoke_field_weights(PhysicButtonsPanel):
domain = context.smoke.domain_settings
effector_weights_ui(self, context, domain.effector_weights)
-bpy.types.register(PHYSICS_PT_smoke)
-bpy.types.register(PHYSICS_PT_smoke_field_weights)
-bpy.types.register(PHYSICS_PT_smoke_cache)
-bpy.types.register(PHYSICS_PT_smoke_highres)
-bpy.types.register(PHYSICS_PT_smoke_groups)
-bpy.types.register(PHYSICS_PT_smoke_cache_highres)
+
+classes = [
+ PHYSICS_PT_smoke,
+ PHYSICS_PT_smoke_field_weights,
+ PHYSICS_PT_smoke_cache,
+ PHYSICS_PT_smoke_highres,
+ PHYSICS_PT_smoke_groups,
+ PHYSICS_PT_smoke_cache_highres]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_physics_softbody.py b/release/scripts/ui/properties_physics_softbody.py
index f0c7b2617a4..1166afd67ba 100644
--- a/release/scripts/ui/properties_physics_softbody.py
+++ b/release/scripts/ui/properties_physics_softbody.py
@@ -280,10 +280,23 @@ class PHYSICS_PT_softbody_field_weights(PhysicButtonsPanel):
effector_weights_ui(self, context, softbody.effector_weights)
-bpy.types.register(PHYSICS_PT_softbody)
-bpy.types.register(PHYSICS_PT_softbody_cache)
-bpy.types.register(PHYSICS_PT_softbody_goal)
-bpy.types.register(PHYSICS_PT_softbody_edge)
-bpy.types.register(PHYSICS_PT_softbody_collision)
-bpy.types.register(PHYSICS_PT_softbody_solver)
-bpy.types.register(PHYSICS_PT_softbody_field_weights)
+
+classes = [
+ PHYSICS_PT_softbody,
+ PHYSICS_PT_softbody_cache,
+ PHYSICS_PT_softbody_goal,
+ PHYSICS_PT_softbody_edge,
+ PHYSICS_PT_softbody_collision,
+ PHYSICS_PT_softbody_solver,
+ PHYSICS_PT_softbody_field_weights]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_render.py b/release/scripts/ui/properties_render.py
index d5fb9672518..c630c0992ce 100644
--- a/release/scripts/ui/properties_render.py
+++ b/release/scripts/ui/properties_render.py
@@ -624,16 +624,28 @@ class RENDER_PT_bake(RenderButtonsPanel):
sub.prop(rd, "bake_bias")
-bpy.types.register(RENDER_MT_presets)
-bpy.types.register(RENDER_PT_render)
-bpy.types.register(RENDER_PT_layers)
-bpy.types.register(RENDER_PT_dimensions)
-bpy.types.register(RENDER_PT_antialiasing)
-bpy.types.register(RENDER_PT_motion_blur)
-bpy.types.register(RENDER_PT_shading)
-bpy.types.register(RENDER_PT_output)
-bpy.types.register(RENDER_PT_encoding)
-bpy.types.register(RENDER_PT_performance)
-bpy.types.register(RENDER_PT_post_processing)
-bpy.types.register(RENDER_PT_stamp)
-bpy.types.register(RENDER_PT_bake)
+classes = [
+ RENDER_MT_presets,
+ RENDER_PT_render,
+ RENDER_PT_layers,
+ RENDER_PT_dimensions,
+ RENDER_PT_antialiasing,
+ RENDER_PT_motion_blur,
+ RENDER_PT_shading,
+ RENDER_PT_output,
+ RENDER_PT_encoding,
+ RENDER_PT_performance,
+ RENDER_PT_post_processing,
+ RENDER_PT_stamp,
+ RENDER_PT_bake]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_scene.py b/release/scripts/ui/properties_scene.py
index eb9cb1b7836..dc7c24b2b37 100644
--- a/release/scripts/ui/properties_scene.py
+++ b/release/scripts/ui/properties_scene.py
@@ -215,22 +215,11 @@ class SCENE_PT_simplify(SceneButtonsPanel):
col = split.column()
col.prop(rd, "simplify_shadow_samples", text="Shadow Samples")
col.prop(rd, "simplify_ao_sss", text="AO and SSS")
-
-
-
-bpy.types.register(SCENE_PT_scene)
-bpy.types.register(SCENE_PT_unit)
-bpy.types.register(SCENE_PT_keying_sets)
-bpy.types.register(SCENE_PT_keying_set_paths)
-bpy.types.register(SCENE_PT_physics)
-bpy.types.register(SCENE_PT_simplify)
-bpy.types.register(SCENE_PT_custom_props)
-
-################################
from bpy.props import *
+
class ANIM_OT_keying_set_export(bpy.types.Operator):
"Export Keying Set to a python script."
bl_idname = "anim.keying_set_export"
@@ -340,4 +329,17 @@ class ANIM_OT_keying_set_export(bpy.types.Operator):
wm.add_fileselect(self)
return {'RUNNING_MODAL'}
-bpy.types.register(ANIM_OT_keying_set_export)
+
+classes = [
+ ANIM_OT_keying_set_export]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_texture.py b/release/scripts/ui/properties_texture.py
index a07bf2ff69e..89d653a0e80 100644
--- a/release/scripts/ui/properties_texture.py
+++ b/release/scripts/ui/properties_texture.py
@@ -956,29 +956,42 @@ class TEXTURE_PT_pointdensity_turbulence(TextureButtonsPanel):
col.prop(pd, "turbulence_depth")
col.prop(pd, "turbulence_strength")
-bpy.types.register(TEXTURE_PT_context_texture)
-bpy.types.register(TEXTURE_PT_preview)
-
-bpy.types.register(TEXTURE_PT_clouds) # Texture Type Panels
-bpy.types.register(TEXTURE_PT_wood)
-bpy.types.register(TEXTURE_PT_marble)
-bpy.types.register(TEXTURE_PT_magic)
-bpy.types.register(TEXTURE_PT_blend)
-bpy.types.register(TEXTURE_PT_stucci)
-bpy.types.register(TEXTURE_PT_image)
-bpy.types.register(TEXTURE_PT_image_sampling)
-bpy.types.register(TEXTURE_PT_image_mapping)
-bpy.types.register(TEXTURE_PT_plugin)
-bpy.types.register(TEXTURE_PT_envmap)
-bpy.types.register(TEXTURE_PT_musgrave)
-bpy.types.register(TEXTURE_PT_voronoi)
-bpy.types.register(TEXTURE_PT_distortednoise)
-bpy.types.register(TEXTURE_PT_voxeldata)
-bpy.types.register(TEXTURE_PT_pointdensity)
-bpy.types.register(TEXTURE_PT_pointdensity_turbulence)
-
-bpy.types.register(TEXTURE_PT_colors)
-bpy.types.register(TEXTURE_PT_mapping)
-bpy.types.register(TEXTURE_PT_influence)
-
-bpy.types.register(TEXTURE_PT_custom_props)
+
+classes = [
+ TEXTURE_PT_context_texture,
+ TEXTURE_PT_preview,
+
+ TEXTURE_PT_clouds, # Texture Type Panels
+ TEXTURE_PT_wood,
+ TEXTURE_PT_marble,
+ TEXTURE_PT_magic,
+ TEXTURE_PT_blend,
+ TEXTURE_PT_stucci,
+ TEXTURE_PT_image,
+ TEXTURE_PT_image_sampling,
+ TEXTURE_PT_image_mapping,
+ TEXTURE_PT_plugin,
+ TEXTURE_PT_envmap,
+ TEXTURE_PT_musgrave,
+ TEXTURE_PT_voronoi,
+ TEXTURE_PT_distortednoise,
+ TEXTURE_PT_voxeldata,
+ TEXTURE_PT_pointdensity,
+ TEXTURE_PT_pointdensity_turbulence,
+
+ TEXTURE_PT_colors,
+ TEXTURE_PT_mapping,
+ TEXTURE_PT_influence,
+
+ TEXTURE_PT_custom_props]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/properties_world.py b/release/scripts/ui/properties_world.py
index a53aeec2c17..5902c70b2e7 100644
--- a/release/scripts/ui/properties_world.py
+++ b/release/scripts/ui/properties_world.py
@@ -267,14 +267,27 @@ class WORLD_PT_gather(WorldButtonsPanel):
col.prop(light, "pixel_cache")
col.prop(light, "correction")
-bpy.types.register(WORLD_PT_context_world)
-bpy.types.register(WORLD_PT_preview)
-bpy.types.register(WORLD_PT_world)
-bpy.types.register(WORLD_PT_ambient_occlusion)
-bpy.types.register(WORLD_PT_environment_lighting)
-bpy.types.register(WORLD_PT_indirect_lighting)
-bpy.types.register(WORLD_PT_gather)
-bpy.types.register(WORLD_PT_mist)
-bpy.types.register(WORLD_PT_stars)
-
-bpy.types.register(WORLD_PT_custom_props)
+
+classes = [
+ WORLD_PT_context_world,
+ WORLD_PT_preview,
+ WORLD_PT_world,
+ WORLD_PT_ambient_occlusion,
+ WORLD_PT_environment_lighting,
+ WORLD_PT_indirect_lighting,
+ WORLD_PT_gather,
+ WORLD_PT_mist,
+ WORLD_PT_stars,
+
+ WORLD_PT_custom_props]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_buttons.py b/release/scripts/ui/space_buttons.py
index de5b77ec9cc..24d1a257714 100644
--- a/release/scripts/ui/space_buttons.py
+++ b/release/scripts/ui/space_buttons.py
@@ -51,5 +51,18 @@ class Buttons_MT_view(bpy.types.Menu):
col = layout.column()
col.prop(so, "panel_alignment", expand=True)
-bpy.types.register(Buttons_HT_header)
-bpy.types.register(Buttons_MT_view)
+
+classes = [
+ Buttons_HT_header,
+ Buttons_MT_view]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_console.py b/release/scripts/ui/space_console.py
index 992a087a554..6e0cc9ceba8 100644
--- a/release/scripts/ui/space_console.py
+++ b/release/scripts/ui/space_console.py
@@ -198,15 +198,27 @@ class ConsoleLanguage(bpy.types.Operator):
return {'FINISHED'}
-bpy.types.register(CONSOLE_HT_header)
-bpy.types.register(CONSOLE_MT_console)
-bpy.types.register(CONSOLE_MT_report)
-bpy.types.register(CONSOLE_MT_language)
-
-# Stubs that call the language operators
-bpy.types.register(ConsoleExec)
-bpy.types.register(ConsoleAutocomplete)
-bpy.types.register(ConsoleBanner)
-
-# Set the language and call the banner
-bpy.types.register(ConsoleLanguage)
+classes = [
+ CONSOLE_HT_header,
+ CONSOLE_MT_console,
+ CONSOLE_MT_report,
+ CONSOLE_MT_language,
+
+ # Stubs that call the language operators
+ ConsoleExec,
+ ConsoleAutocomplete,
+ ConsoleBanner,
+
+ # Set the language and call the banner
+ ConsoleLanguage]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_dopesheet.py b/release/scripts/ui/space_dopesheet.py
index 1d2d4754861..2eb9b82a766 100644
--- a/release/scripts/ui/space_dopesheet.py
+++ b/release/scripts/ui/space_dopesheet.py
@@ -191,9 +191,21 @@ class DOPESHEET_MT_key_transform(bpy.types.Menu):
layout.operator("transform.resize", text="Scale")
-bpy.types.register(DOPESHEET_HT_header) # header/menu classes
-bpy.types.register(DOPESHEET_MT_view)
-bpy.types.register(DOPESHEET_MT_select)
-bpy.types.register(DOPESHEET_MT_channel)
-bpy.types.register(DOPESHEET_MT_key)
-bpy.types.register(DOPESHEET_MT_key_transform)
+classes = [
+ DOPESHEET_HT_header, # header/menu classes
+ DOPESHEET_MT_view,
+ DOPESHEET_MT_select,
+ DOPESHEET_MT_channel,
+ DOPESHEET_MT_key,
+ DOPESHEET_MT_key_transform]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_filebrowser.py b/release/scripts/ui/space_filebrowser.py
index 01f6f111812..85a8295dbcf 100644
--- a/release/scripts/ui/space_filebrowser.py
+++ b/release/scripts/ui/space_filebrowser.py
@@ -64,4 +64,17 @@ class FILEBROWSER_HT_header(bpy.types.Header):
row.prop(params, "filter_sound", text="")
row.prop(params, "filter_text", text="")
-bpy.types.register(FILEBROWSER_HT_header)
+
+classes = [
+ FILEBROWSER_HT_header]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_graph.py b/release/scripts/ui/space_graph.py
index 16a615d2be7..fa8d607e4ff 100644
--- a/release/scripts/ui/space_graph.py
+++ b/release/scripts/ui/space_graph.py
@@ -198,9 +198,21 @@ class GRAPH_MT_key_transform(bpy.types.Menu):
layout.operator("transform.resize", text="Scale")
-bpy.types.register(GRAPH_HT_header) # header/menu classes
-bpy.types.register(GRAPH_MT_view)
-bpy.types.register(GRAPH_MT_select)
-bpy.types.register(GRAPH_MT_channel)
-bpy.types.register(GRAPH_MT_key)
-bpy.types.register(GRAPH_MT_key_transform)
+classes = [
+ GRAPH_HT_header, # header/menu classes
+ GRAPH_MT_view,
+ GRAPH_MT_select,
+ GRAPH_MT_channel,
+ GRAPH_MT_key,
+ GRAPH_MT_key_transform]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_image.py b/release/scripts/ui/space_image.py
index 61e5b481d6f..b879aff7f13 100644
--- a/release/scripts/ui/space_image.py
+++ b/release/scripts/ui/space_image.py
@@ -570,20 +570,33 @@ class IMAGE_PT_paint_curve(bpy.types.Panel):
layout.template_curve_mapping(brush, "curve")
layout.operator_menu_enum("brush.curve_preset", property="shape")
-bpy.types.register(IMAGE_MT_view)
-bpy.types.register(IMAGE_MT_select)
-bpy.types.register(IMAGE_MT_image)
-bpy.types.register(IMAGE_MT_uvs_showhide)
-bpy.types.register(IMAGE_MT_uvs_transform)
-bpy.types.register(IMAGE_MT_uvs_snap)
-bpy.types.register(IMAGE_MT_uvs_mirror)
-bpy.types.register(IMAGE_MT_uvs_weldalign)
-bpy.types.register(IMAGE_MT_uvs)
-bpy.types.register(IMAGE_HT_header)
-bpy.types.register(IMAGE_PT_image_properties)
-bpy.types.register(IMAGE_PT_paint)
-bpy.types.register(IMAGE_PT_paint_stroke)
-bpy.types.register(IMAGE_PT_paint_curve)
-bpy.types.register(IMAGE_PT_game_properties)
-bpy.types.register(IMAGE_PT_view_properties)
-bpy.types.register(IMAGE_PT_view_histogram)
+
+classes = [
+ IMAGE_MT_view,
+ IMAGE_MT_select,
+ IMAGE_MT_image,
+ IMAGE_MT_uvs_showhide,
+ IMAGE_MT_uvs_transform,
+ IMAGE_MT_uvs_snap,
+ IMAGE_MT_uvs_mirror,
+ IMAGE_MT_uvs_weldalign,
+ IMAGE_MT_uvs,
+ IMAGE_HT_header,
+ IMAGE_PT_image_properties,
+ IMAGE_PT_paint,
+ IMAGE_PT_paint_stroke,
+ IMAGE_PT_paint_curve,
+ IMAGE_PT_game_properties,
+ IMAGE_PT_view_properties,
+ IMAGE_PT_view_histogram]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_info.py b/release/scripts/ui/space_info.py
index 84bfc5a9b1e..24b080d80df 100644
--- a/release/scripts/ui/space_info.py
+++ b/release/scripts/ui/space_info.py
@@ -293,18 +293,6 @@ class INFO_MT_help(bpy.types.Menu):
layout.operator("help.python_api", icon='URL')
layout.operator("help.operator_cheat_sheet")
-bpy.types.register(INFO_HT_header)
-bpy.types.register(INFO_MT_file)
-bpy.types.register(INFO_MT_file_open_recent)
-bpy.types.register(INFO_MT_file_import)
-bpy.types.register(INFO_MT_file_export)
-bpy.types.register(INFO_MT_file_external_data)
-bpy.types.register(INFO_MT_add)
-bpy.types.register(INFO_MT_mesh_add)
-bpy.types.register(INFO_MT_armature_add)
-bpy.types.register(INFO_MT_game)
-bpy.types.register(INFO_MT_render)
-bpy.types.register(INFO_MT_help)
# Help operators
@@ -397,12 +385,38 @@ class HELP_OT_operator_cheat_sheet(bpy.types.Operator):
self.report({'INFO'}, "See OperatorList.txt textblock")
return {'FINISHED'}
-bpy.types.register(HELP_OT_manual)
-bpy.types.register(HELP_OT_release_logs)
-bpy.types.register(HELP_OT_blender_website)
-bpy.types.register(HELP_OT_blender_eshop)
-bpy.types.register(HELP_OT_developer_community)
-bpy.types.register(HELP_OT_user_community)
-bpy.types.register(HELP_OT_report_bug)
-bpy.types.register(HELP_OT_python_api)
-bpy.types.register(HELP_OT_operator_cheat_sheet)
+
+classes = [
+ INFO_HT_header,
+ INFO_MT_file,
+ INFO_MT_file_open_recent,
+ INFO_MT_file_import,
+ INFO_MT_file_export,
+ INFO_MT_file_external_data,
+ INFO_MT_add,
+ INFO_MT_mesh_add,
+ INFO_MT_armature_add,
+ INFO_MT_game,
+ INFO_MT_render,
+ INFO_MT_help,
+
+ HELP_OT_manual,
+ HELP_OT_release_logs,
+ HELP_OT_blender_website,
+ HELP_OT_blender_eshop,
+ HELP_OT_developer_community,
+ HELP_OT_user_community,
+ HELP_OT_report_bug,
+ HELP_OT_python_api,
+ HELP_OT_operator_cheat_sheet]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_logic.py b/release/scripts/ui/space_logic.py
index 001a947b330..29fd1114c26 100644
--- a/release/scripts/ui/space_logic.py
+++ b/release/scripts/ui/space_logic.py
@@ -46,4 +46,17 @@ class LOGIC_PT_properties(bpy.types.Panel):
row.prop(prop, "debug", text="", toggle=True, icon='INFO')
row.operator("object.game_property_remove", text="", icon='X').index = i
-bpy.types.register(LOGIC_PT_properties)
+
+classes = [
+ LOGIC_PT_properties]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_nla.py b/release/scripts/ui/space_nla.py
index 3f133b1eb2c..63297c1989e 100644
--- a/release/scripts/ui/space_nla.py
+++ b/release/scripts/ui/space_nla.py
@@ -159,9 +159,21 @@ class NLA_MT_edit_transform(bpy.types.Menu):
layout.operator("transform.resize", text="Scale")
-bpy.types.register(NLA_HT_header) # header/menu classes
-bpy.types.register(NLA_MT_view)
-bpy.types.register(NLA_MT_select)
-bpy.types.register(NLA_MT_edit)
-bpy.types.register(NLA_MT_add)
-bpy.types.register(NLA_MT_edit_transform)
+classes = [
+ NLA_HT_header, # header/menu classes
+ NLA_MT_view,
+ NLA_MT_select,
+ NLA_MT_edit,
+ NLA_MT_add,
+ NLA_MT_edit_transform]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_node.py b/release/scripts/ui/space_node.py
index 45501104633..4ed66582178 100644
--- a/release/scripts/ui/space_node.py
+++ b/release/scripts/ui/space_node.py
@@ -139,7 +139,20 @@ class NODE_MT_node(bpy.types.Menu):
layout.operator("node.show_cyclic_dependencies")
-bpy.types.register(NODE_HT_header)
-bpy.types.register(NODE_MT_view)
-bpy.types.register(NODE_MT_select)
-bpy.types.register(NODE_MT_node)
+
+classes = [
+ NODE_HT_header,
+ NODE_MT_view,
+ NODE_MT_select,
+ NODE_MT_node]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_outliner.py b/release/scripts/ui/space_outliner.py
index 34a519c119e..ea6354b6e6e 100644
--- a/release/scripts/ui/space_outliner.py
+++ b/release/scripts/ui/space_outliner.py
@@ -99,6 +99,19 @@ class OUTLINER_MT_edit_datablocks(bpy.types.Menu):
col.operator("outliner.drivers_add_selected")
col.operator("outliner.drivers_delete_selected")
-bpy.types.register(OUTLINER_HT_header)
-bpy.types.register(OUTLINER_MT_view)
-bpy.types.register(OUTLINER_MT_edit_datablocks)
+
+classes = [
+ OUTLINER_HT_header,
+ OUTLINER_MT_view,
+ OUTLINER_MT_edit_datablocks]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_sequencer.py b/release/scripts/ui/space_sequencer.py
index a2f4a28d691..7dd37cc5457 100644
--- a/release/scripts/ui/space_sequencer.py
+++ b/release/scripts/ui/space_sequencer.py
@@ -665,21 +665,34 @@ class SEQUENCER_PT_view(SequencerButtonsPanel_Output):
col.prop(st, "draw_overexposed") # text="Zebra"
col.prop(st, "draw_safe_margin")
-bpy.types.register(SEQUENCER_HT_header) # header/menu classes
-bpy.types.register(SEQUENCER_MT_view)
-bpy.types.register(SEQUENCER_MT_view_toggle)
-bpy.types.register(SEQUENCER_MT_select)
-bpy.types.register(SEQUENCER_MT_marker)
-bpy.types.register(SEQUENCER_MT_add)
-bpy.types.register(SEQUENCER_MT_add_effect)
-bpy.types.register(SEQUENCER_MT_strip)
-
-bpy.types.register(SEQUENCER_PT_edit) # sequencer panels
-bpy.types.register(SEQUENCER_PT_effect)
-bpy.types.register(SEQUENCER_PT_input)
-bpy.types.register(SEQUENCER_PT_sound)
-bpy.types.register(SEQUENCER_PT_scene)
-bpy.types.register(SEQUENCER_PT_filter)
-bpy.types.register(SEQUENCER_PT_proxy)
-
-bpy.types.register(SEQUENCER_PT_view) # view panels
+
+classes = [
+ SEQUENCER_HT_header, # header/menu classes
+ SEQUENCER_MT_view,
+ SEQUENCER_MT_view_toggle,
+ SEQUENCER_MT_select,
+ SEQUENCER_MT_marker,
+ SEQUENCER_MT_add,
+ SEQUENCER_MT_add_effect,
+ SEQUENCER_MT_strip,
+
+ SEQUENCER_PT_edit, # sequencer panels
+ SEQUENCER_PT_effect,
+ SEQUENCER_PT_input,
+ SEQUENCER_PT_sound,
+ SEQUENCER_PT_scene,
+ SEQUENCER_PT_filter,
+ SEQUENCER_PT_proxy,
+
+ SEQUENCER_PT_view] # view panels
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_text.py b/release/scripts/ui/space_text.py
index 8e972cc31fb..cbc7ce9244b 100644
--- a/release/scripts/ui/space_text.py
+++ b/release/scripts/ui/space_text.py
@@ -273,14 +273,27 @@ class TEXT_MT_edit(bpy.types.Menu):
layout.menu("TEXT_MT_edit_to3d")
-bpy.types.register(TEXT_HT_header)
-bpy.types.register(TEXT_PT_properties)
-bpy.types.register(TEXT_PT_find)
-bpy.types.register(TEXT_MT_text)
-bpy.types.register(TEXT_MT_templates)
-bpy.types.register(TEXT_MT_format)
-bpy.types.register(TEXT_MT_edit)
-bpy.types.register(TEXT_MT_edit_view)
-bpy.types.register(TEXT_MT_edit_select)
-bpy.types.register(TEXT_MT_edit_markers)
-bpy.types.register(TEXT_MT_edit_to3d)
+
+classes = [
+ TEXT_HT_header,
+ TEXT_PT_properties,
+ TEXT_PT_find,
+ TEXT_MT_text,
+ TEXT_MT_templates,
+ TEXT_MT_format,
+ TEXT_MT_edit,
+ TEXT_MT_edit_view,
+ TEXT_MT_edit_select,
+ TEXT_MT_edit_markers,
+ TEXT_MT_edit_to3d]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_time.py b/release/scripts/ui/space_time.py
index 947929ae776..b5be1b5da56 100644
--- a/release/scripts/ui/space_time.py
+++ b/release/scripts/ui/space_time.py
@@ -167,8 +167,20 @@ class TIME_MT_autokey(bpy.types.Menu):
layout.prop_enum(tools, "autokey_mode", 'ADD_REPLACE_KEYS')
layout.prop_enum(tools, "autokey_mode", 'REPLACE_KEYS')
-bpy.types.register(TIME_HT_header)
-bpy.types.register(TIME_MT_view)
-bpy.types.register(TIME_MT_frame)
-bpy.types.register(TIME_MT_autokey)
-bpy.types.register(TIME_MT_playback)
+classes = [
+ TIME_HT_header,
+ TIME_MT_view,
+ TIME_MT_frame,
+ TIME_MT_autokey,
+ TIME_MT_playback]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_userpref.py b/release/scripts/ui/space_userpref.py
index b1f7f10a70e..f05f9246ade 100644
--- a/release/scripts/ui/space_userpref.py
+++ b/release/scripts/ui/space_userpref.py
@@ -1348,14 +1348,6 @@ class USERPREF_PT_input(bpy.types.Panel):
#print("runtime", time.time() - start)
-bpy.types.register(USERPREF_HT_header)
-bpy.types.register(USERPREF_PT_tabs)
-bpy.types.register(USERPREF_PT_interface)
-bpy.types.register(USERPREF_PT_theme)
-bpy.types.register(USERPREF_PT_edit)
-bpy.types.register(USERPREF_PT_system)
-bpy.types.register(USERPREF_PT_file)
-bpy.types.register(USERPREF_PT_input)
from bpy.props import *
@@ -1755,12 +1747,34 @@ class WM_OT_keyconfig_remove(bpy.types.Operator):
wm.remove_keyconfig(keyconfig)
return {'FINISHED'}
-bpy.types.register(WM_OT_keyconfig_export)
-bpy.types.register(WM_OT_keyconfig_import)
-bpy.types.register(WM_OT_keyconfig_test)
-bpy.types.register(WM_OT_keyconfig_remove)
-bpy.types.register(WM_OT_keymap_edit)
-bpy.types.register(WM_OT_keymap_restore)
-bpy.types.register(WM_OT_keyitem_add)
-bpy.types.register(WM_OT_keyitem_remove)
-bpy.types.register(WM_OT_keyitem_restore)
+
+classes = [
+ USERPREF_HT_header,
+ USERPREF_PT_tabs,
+ USERPREF_PT_interface,
+ USERPREF_PT_theme,
+ USERPREF_PT_edit,
+ USERPREF_PT_system,
+ USERPREF_PT_file,
+ USERPREF_PT_input,
+
+ WM_OT_keyconfig_export,
+ WM_OT_keyconfig_import,
+ WM_OT_keyconfig_test,
+ WM_OT_keyconfig_remove,
+ WM_OT_keymap_edit,
+ WM_OT_keymap_restore,
+ WM_OT_keyitem_add,
+ WM_OT_keyitem_remove,
+ WM_OT_keyitem_restore]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_view3d.py b/release/scripts/ui/space_view3d.py
index 96c98f1376d..2f20dc08e10 100644
--- a/release/scripts/ui/space_view3d.py
+++ b/release/scripts/ui/space_view3d.py
@@ -2101,105 +2101,115 @@ class VIEW3D_PT_context_properties(bpy.types.Panel):
# Draw with no edit button
rna_prop_ui.draw(self.layout, context, member, False)
-
-bpy.types.register(VIEW3D_OT_edit_mesh_extrude_move) # detects constraints setup and extrude region
-bpy.types.register(VIEW3D_OT_edit_mesh_extrude_individual_move)
-
-bpy.types.register(VIEW3D_HT_header) # Header
-
-bpy.types.register(VIEW3D_MT_view) #View Menus
-bpy.types.register(VIEW3D_MT_view_navigation)
-bpy.types.register(VIEW3D_MT_view_align)
-bpy.types.register(VIEW3D_MT_view_align_selected)
-bpy.types.register(VIEW3D_MT_view_cameras)
-
-bpy.types.register(VIEW3D_MT_select_object) # Select Menus
-bpy.types.register(VIEW3D_MT_select_pose)
-bpy.types.register(VIEW3D_MT_select_particle)
-bpy.types.register(VIEW3D_MT_select_edit_mesh)
-bpy.types.register(VIEW3D_MT_select_edit_curve)
-bpy.types.register(VIEW3D_MT_select_edit_surface)
-bpy.types.register(VIEW3D_MT_select_edit_metaball)
-bpy.types.register(VIEW3D_MT_select_edit_lattice)
-bpy.types.register(VIEW3D_MT_select_edit_armature)
-bpy.types.register(VIEW3D_MT_select_face) # XXX todo
-
-bpy.types.register(VIEW3D_MT_transform) # Object/Edit Menus
-bpy.types.register(VIEW3D_MT_mirror) # Object/Edit Menus
-bpy.types.register(VIEW3D_MT_snap) # Object/Edit Menus
-bpy.types.register(VIEW3D_MT_uv_map) # Edit Menus
-
-bpy.types.register(VIEW3D_MT_object) # Object Menu
-bpy.types.register(VIEW3D_MT_object_apply)
-bpy.types.register(VIEW3D_MT_object_clear)
-bpy.types.register(VIEW3D_MT_object_parent)
-bpy.types.register(VIEW3D_MT_object_track)
-bpy.types.register(VIEW3D_MT_object_group)
-bpy.types.register(VIEW3D_MT_object_constraints)
-bpy.types.register(VIEW3D_MT_object_showhide)
-bpy.types.register(VIEW3D_MT_make_single_user)
-bpy.types.register(VIEW3D_MT_make_links)
-
-bpy.types.register(VIEW3D_MT_hook)
-bpy.types.register(VIEW3D_MT_vertex_group)
-
-bpy.types.register(VIEW3D_MT_sculpt) # Sculpt Menu
-bpy.types.register(VIEW3D_MT_paint_vertex)
-bpy.types.register(VIEW3D_MT_paint_weight)
-
-bpy.types.register(VIEW3D_MT_particle)# Particle Menu
-bpy.types.register(VIEW3D_MT_particle_specials)
-bpy.types.register(VIEW3D_MT_particle_showhide)
-
-bpy.types.register(VIEW3D_MT_pose) # POSE Menu
-bpy.types.register(VIEW3D_MT_pose_transform)
-bpy.types.register(VIEW3D_MT_pose_pose)
-bpy.types.register(VIEW3D_MT_pose_motion)
-bpy.types.register(VIEW3D_MT_pose_group)
-bpy.types.register(VIEW3D_MT_pose_ik)
-bpy.types.register(VIEW3D_MT_pose_constraints)
-bpy.types.register(VIEW3D_MT_pose_showhide)
-
-bpy.types.register(VIEW3D_MT_edit_mesh)
-bpy.types.register(VIEW3D_MT_edit_mesh_specials) # Only as a menu for keybindings
-bpy.types.register(VIEW3D_MT_edit_mesh_selection_mode) # Only as a menu for keybindings
-bpy.types.register(VIEW3D_MT_edit_mesh_vertices)
-bpy.types.register(VIEW3D_MT_edit_mesh_edges)
-bpy.types.register(VIEW3D_MT_edit_mesh_faces)
-bpy.types.register(VIEW3D_MT_edit_mesh_normals)
-bpy.types.register(VIEW3D_MT_edit_mesh_showhide)
-bpy.types.register(VIEW3D_MT_edit_mesh_extrude) # use with VIEW3D_OT_edit_mesh_extrude_menu
-
-bpy.types.register(VIEW3D_MT_edit_curve)
-bpy.types.register(VIEW3D_MT_edit_curve_ctrlpoints)
-bpy.types.register(VIEW3D_MT_edit_curve_segments)
-bpy.types.register(VIEW3D_MT_edit_curve_specials)
-bpy.types.register(VIEW3D_MT_edit_curve_showhide)
-
-bpy.types.register(VIEW3D_MT_edit_surface)
-
-bpy.types.register(VIEW3D_MT_edit_text)
-bpy.types.register(VIEW3D_MT_edit_text_chars)
-
-bpy.types.register(VIEW3D_MT_edit_meta)
-bpy.types.register(VIEW3D_MT_edit_meta_showhide)
-
-bpy.types.register(VIEW3D_MT_edit_lattice)
-
-bpy.types.register(VIEW3D_MT_edit_armature)
-bpy.types.register(VIEW3D_MT_edit_armature_parent)
-bpy.types.register(VIEW3D_MT_edit_armature_roll)
-
-bpy.types.register(VIEW3D_MT_armature_specials) # Only as a menu for keybindings
-
- # Panels
-bpy.types.register(VIEW3D_PT_3dview_properties)
-bpy.types.register(VIEW3D_PT_3dview_display)
-bpy.types.register(VIEW3D_PT_3dview_name)
-bpy.types.register(VIEW3D_PT_3dview_meshdisplay)
-bpy.types.register(VIEW3D_PT_3dview_curvedisplay)
-bpy.types.register(VIEW3D_PT_background_image)
-bpy.types.register(VIEW3D_PT_transform_orientations)
-bpy.types.register(VIEW3D_PT_etch_a_ton)
-
-bpy.types.register(VIEW3D_PT_context_properties)
+classes = [
+ VIEW3D_OT_edit_mesh_extrude_move, # detects constraints setup and extrude region
+ VIEW3D_OT_edit_mesh_extrude_individual_move,
+
+ VIEW3D_HT_header, # Header
+
+ VIEW3D_MT_view, #View Menus
+ VIEW3D_MT_view_navigation,
+ VIEW3D_MT_view_align,
+ VIEW3D_MT_view_align_selected,
+ VIEW3D_MT_view_cameras,
+
+ VIEW3D_MT_select_object, # Select Menus
+ VIEW3D_MT_select_pose,
+ VIEW3D_MT_select_particle,
+ VIEW3D_MT_select_edit_mesh,
+ VIEW3D_MT_select_edit_curve,
+ VIEW3D_MT_select_edit_surface,
+ VIEW3D_MT_select_edit_metaball,
+ VIEW3D_MT_select_edit_lattice,
+ VIEW3D_MT_select_edit_armature,
+ VIEW3D_MT_select_face, # XXX todo
+
+ VIEW3D_MT_transform, # Object/Edit Menus
+ VIEW3D_MT_mirror, # Object/Edit Menus
+ VIEW3D_MT_snap, # Object/Edit Menus
+ VIEW3D_MT_uv_map, # Edit Menus
+
+ VIEW3D_MT_object, # Object Menu
+ VIEW3D_MT_object_apply,
+ VIEW3D_MT_object_clear,
+ VIEW3D_MT_object_parent,
+ VIEW3D_MT_object_track,
+ VIEW3D_MT_object_group,
+ VIEW3D_MT_object_constraints,
+ VIEW3D_MT_object_showhide,
+ VIEW3D_MT_make_single_user,
+ VIEW3D_MT_make_links,
+
+ VIEW3D_MT_hook,
+ VIEW3D_MT_vertex_group,
+
+ VIEW3D_MT_sculpt, # Sculpt Menu
+ VIEW3D_MT_paint_vertex,
+ VIEW3D_MT_paint_weight,
+
+ VIEW3D_MT_particle, # Particle Menu
+ VIEW3D_MT_particle_specials,
+ VIEW3D_MT_particle_showhide,
+
+ VIEW3D_MT_pose, # POSE Menu
+ VIEW3D_MT_pose_transform,
+ VIEW3D_MT_pose_pose,
+ VIEW3D_MT_pose_motion,
+ VIEW3D_MT_pose_group,
+ VIEW3D_MT_pose_ik,
+ VIEW3D_MT_pose_constraints,
+ VIEW3D_MT_pose_showhide,
+
+ VIEW3D_MT_edit_mesh,
+ VIEW3D_MT_edit_mesh_specials, # Only as a menu for keybindings
+ VIEW3D_MT_edit_mesh_selection_mode, # Only as a menu for keybindings
+ VIEW3D_MT_edit_mesh_vertices,
+ VIEW3D_MT_edit_mesh_edges,
+ VIEW3D_MT_edit_mesh_faces,
+ VIEW3D_MT_edit_mesh_normals,
+ VIEW3D_MT_edit_mesh_showhide,
+ VIEW3D_MT_edit_mesh_extrude, # use with VIEW3D_OT_edit_mesh_extrude_menu
+
+ VIEW3D_MT_edit_curve,
+ VIEW3D_MT_edit_curve_ctrlpoints,
+ VIEW3D_MT_edit_curve_segments,
+ VIEW3D_MT_edit_curve_specials,
+ VIEW3D_MT_edit_curve_showhide,
+
+ VIEW3D_MT_edit_surface,
+
+ VIEW3D_MT_edit_text,
+ VIEW3D_MT_edit_text_chars,
+
+ VIEW3D_MT_edit_meta,
+ VIEW3D_MT_edit_meta_showhide,
+
+ VIEW3D_MT_edit_lattice,
+
+ VIEW3D_MT_edit_armature,
+ VIEW3D_MT_edit_armature_parent,
+ VIEW3D_MT_edit_armature_roll,
+
+ VIEW3D_MT_armature_specials, # Only as a menu for keybindings
+
+ # Panels
+ VIEW3D_PT_3dview_properties,
+ VIEW3D_PT_3dview_display,
+ VIEW3D_PT_3dview_name,
+ VIEW3D_PT_3dview_meshdisplay,
+ VIEW3D_PT_3dview_curvedisplay,
+ VIEW3D_PT_background_image,
+ VIEW3D_PT_transform_orientations,
+ VIEW3D_PT_etch_a_ton,
+ VIEW3D_PT_context_properties]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
diff --git a/release/scripts/ui/space_view3d_toolbar.py b/release/scripts/ui/space_view3d_toolbar.py
index 98ea4c67b85..243c9304ae4 100644
--- a/release/scripts/ui/space_view3d_toolbar.py
+++ b/release/scripts/ui/space_view3d_toolbar.py
@@ -903,28 +903,27 @@ class VIEW3D_PT_tools_projectpaint(View3DPanel):
sub = col.column()
sub.prop(ipaint, "seam_bleed")
- class VIEW3D_MT_tools_projectpaint_clone(bpy.types.Menu):
- bl_label = "Clone Layer"
- def draw(self, context):
- layout = self.layout
- for i, tex in enumerate(context.active_object.data.uv_textures):
- prop = layout.operator("wm.context_set_int", text=tex.name)
- prop.path = "active_object.data.uv_texture_clone_index"
- prop.value = i
+class VIEW3D_MT_tools_projectpaint_clone(bpy.types.Menu):
+ bl_label = "Clone Layer"
+
+ def draw(self, context):
+ layout = self.layout
+ for i, tex in enumerate(context.active_object.data.uv_textures):
+ prop = layout.operator("wm.context_set_int", text=tex.name)
+ prop.path = "active_object.data.uv_texture_clone_index"
+ prop.value = i
- class VIEW3D_MT_tools_projectpaint_stencil(bpy.types.Menu):
- bl_label = "Mask Layer"
- def draw(self, context):
- layout = self.layout
- for i, tex in enumerate(context.active_object.data.uv_textures):
- prop = layout.operator("wm.context_set_int", text=tex.name)
- prop.path = "active_object.data.uv_texture_stencil_index"
- prop.value = i
+class VIEW3D_MT_tools_projectpaint_stencil(bpy.types.Menu):
+ bl_label = "Mask Layer"
- bpy.types.register(VIEW3D_MT_tools_projectpaint_clone)
- bpy.types.register(VIEW3D_MT_tools_projectpaint_stencil)
+ def draw(self, context):
+ layout = self.layout
+ for i, tex in enumerate(context.active_object.data.uv_textures):
+ prop = layout.operator("wm.context_set_int", text=tex.name)
+ prop.path = "active_object.data.uv_texture_stencil_index"
+ prop.value = i
class VIEW3D_PT_tools_particlemode(View3DPanel):
@@ -990,26 +989,43 @@ class VIEW3D_PT_tools_particlemode(View3DPanel):
sub.active = pe.fade_time
sub.prop(pe, "fade_frames", slider=True)
-bpy.types.register(VIEW3D_PT_tools_weightpaint)
-bpy.types.register(VIEW3D_PT_tools_objectmode)
-bpy.types.register(VIEW3D_PT_tools_meshedit)
-bpy.types.register(VIEW3D_PT_tools_meshedit_options)
-bpy.types.register(VIEW3D_PT_tools_curveedit)
-bpy.types.register(VIEW3D_PT_tools_surfaceedit)
-bpy.types.register(VIEW3D_PT_tools_textedit)
-bpy.types.register(VIEW3D_PT_tools_armatureedit)
-bpy.types.register(VIEW3D_PT_tools_armatureedit_options)
-bpy.types.register(VIEW3D_PT_tools_mballedit)
-bpy.types.register(VIEW3D_PT_tools_latticeedit)
-bpy.types.register(VIEW3D_PT_tools_posemode)
-bpy.types.register(VIEW3D_PT_tools_posemode_options)
-bpy.types.register(VIEW3D_PT_tools_brush)
-bpy.types.register(VIEW3D_PT_tools_brush_texture)
-bpy.types.register(VIEW3D_PT_tools_brush_tool)
-bpy.types.register(VIEW3D_PT_tools_brush_stroke)
-bpy.types.register(VIEW3D_PT_tools_brush_curve)
-bpy.types.register(VIEW3D_PT_sculpt_options)
-bpy.types.register(VIEW3D_PT_tools_vertexpaint)
-bpy.types.register(VIEW3D_PT_tools_weightpaint_options)
-bpy.types.register(VIEW3D_PT_tools_projectpaint)
-bpy.types.register(VIEW3D_PT_tools_particlemode)
+
+classes = [
+ VIEW3D_PT_tools_weightpaint,
+ VIEW3D_PT_tools_objectmode,
+ VIEW3D_PT_tools_meshedit,
+ VIEW3D_PT_tools_meshedit_options,
+ VIEW3D_PT_tools_curveedit,
+ VIEW3D_PT_tools_surfaceedit,
+ VIEW3D_PT_tools_textedit,
+ VIEW3D_PT_tools_armatureedit,
+ VIEW3D_PT_tools_armatureedit_options,
+ VIEW3D_PT_tools_mballedit,
+ VIEW3D_PT_tools_latticeedit,
+ VIEW3D_PT_tools_posemode,
+ VIEW3D_PT_tools_posemode_options,
+ VIEW3D_PT_tools_brush,
+ VIEW3D_PT_tools_brush_texture,
+ VIEW3D_PT_tools_brush_tool,
+ VIEW3D_PT_tools_brush_stroke,
+ VIEW3D_PT_tools_brush_curve,
+ VIEW3D_PT_sculpt_options,
+ VIEW3D_PT_tools_vertexpaint,
+ VIEW3D_PT_tools_weightpaint_options,
+
+ VIEW3D_PT_tools_projectpaint,
+ VIEW3D_MT_tools_projectpaint_clone,
+ VIEW3D_MT_tools_projectpaint_stencil,
+
+ VIEW3D_PT_tools_particlemode]
+
+
+def register():
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
+
+def unregister():
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)