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:
authorDiptangshu Dey <Tha_Hobbist>2021-11-16 12:45:23 +0300
committerPhilipp Oeser <info@graphics-engineer.com>2021-11-16 12:45:23 +0300
commitda14a482f281e8d330ef5210ef22335a43eb726c (patch)
treecf13d60ef5ebb9fec81c02f54a427194c03e23b7
parent7d985d6b69703d7eb515c776dd5911443cde59d3 (diff)
Fix T90866: Python operator templates are not accessible from menus
Python Operator templates made accessible from respective menus (required to also use F3 search for quick access) Also fixed Modal Draw Operator id_name (had duplicate name from other template) Maniphest Tasks: T90866 Differential Revision: https://developer.blender.org/D13182
-rw-r--r--doc/python_api/examples/bpy.types.Operator.1.py5
-rw-r--r--doc/python_api/examples/bpy.types.Operator.2.py2
-rw-r--r--doc/python_api/examples/bpy.types.Operator.3.py6
-rw-r--r--doc/python_api/examples/bpy.types.Operator.4.py5
-rw-r--r--doc/python_api/examples/bpy.types.Operator.5.py5
-rw-r--r--doc/python_api/examples/bpy.types.Operator.6.py5
-rw-r--r--doc/python_api/examples/bpy.types.Operator.py5
-rw-r--r--release/scripts/templates_py/operator_file_export.py2
-rw-r--r--release/scripts/templates_py/operator_file_import.py2
-rw-r--r--release/scripts/templates_py/operator_mesh_add.py2
-rw-r--r--release/scripts/templates_py/operator_mesh_uv.py5
-rw-r--r--release/scripts/templates_py/operator_modal.py5
-rw-r--r--release/scripts/templates_py/operator_modal_draw.py7
-rw-r--r--release/scripts/templates_py/operator_modal_timer.py6
-rw-r--r--release/scripts/templates_py/operator_modal_view3d.py5
-rw-r--r--release/scripts/templates_py/operator_modal_view3d_raycast.py5
-rw-r--r--release/scripts/templates_py/operator_node.py5
-rw-r--r--release/scripts/templates_py/operator_simple.py5
18 files changed, 76 insertions, 6 deletions
diff --git a/doc/python_api/examples/bpy.types.Operator.1.py b/doc/python_api/examples/bpy.types.Operator.1.py
index 728d36f24b9..84397574856 100644
--- a/doc/python_api/examples/bpy.types.Operator.1.py
+++ b/doc/python_api/examples/bpy.types.Operator.1.py
@@ -42,8 +42,13 @@ class SimpleMouseOperator(bpy.types.Operator):
self.y = event.mouse_y
return self.execute(context)
+# Only needed if you want to add into a dynamic menu
+def menu_func(self, context):
+ self.layout.operator(SimpleMouseOperator.bl_idname, text="Simple Mouse Operator")
+# Register and add to the view menu (required to also use F3 search "Simple Mouse Operator" for quick access)
bpy.utils.register_class(SimpleMouseOperator)
+bpy.types.VIEW3D_MT_view.append(menu_func)
# Test call to the newly defined operator.
# Here we call the operator and invoke it, meaning that the settings are taken
diff --git a/doc/python_api/examples/bpy.types.Operator.2.py b/doc/python_api/examples/bpy.types.Operator.2.py
index 5ba09c7e380..7ab0143b925 100644
--- a/doc/python_api/examples/bpy.types.Operator.2.py
+++ b/doc/python_api/examples/bpy.types.Operator.2.py
@@ -43,7 +43,7 @@ def menu_func(self, context):
self.layout.operator(ExportSomeData.bl_idname, text="Text Export Operator")
-# Register and add to the file selector
+# Register and add to the file selector (required to also use F3 search "Text Export Operator" for quick access)
bpy.utils.register_class(ExportSomeData)
bpy.types.TOPBAR_MT_file_export.append(menu_func)
diff --git a/doc/python_api/examples/bpy.types.Operator.3.py b/doc/python_api/examples/bpy.types.Operator.3.py
index ef8bce3d8a9..9a12a7e3615 100644
--- a/doc/python_api/examples/bpy.types.Operator.3.py
+++ b/doc/python_api/examples/bpy.types.Operator.3.py
@@ -27,8 +27,14 @@ class DialogOperator(bpy.types.Operator):
wm = context.window_manager
return wm.invoke_props_dialog(self)
+# Only needed if you want to add into a dynamic menu
+def menu_func(self, context):
+ self.layout.operator(DialogOperator.bl_idname, text="Dialog Operator")
+
+# Register and add to the object menu (required to also use F3 search "Dialog Operator" for quick access)
bpy.utils.register_class(DialogOperator)
+bpy.types.VIEW3D_MT_object.append(menu_func)
# Test call.
bpy.ops.object.dialog_operator('INVOKE_DEFAULT')
diff --git a/doc/python_api/examples/bpy.types.Operator.4.py b/doc/python_api/examples/bpy.types.Operator.4.py
index 6b74a96eb2b..00c9cd250b1 100644
--- a/doc/python_api/examples/bpy.types.Operator.4.py
+++ b/doc/python_api/examples/bpy.types.Operator.4.py
@@ -41,8 +41,13 @@ class CustomDrawOperator(bpy.types.Operator):
col.prop(self, "my_string")
+# Only needed if you want to add into a dynamic menu
+def menu_func(self, context):
+ self.layout.operator(CustomDrawOperator.bl_idname, text="Custom Draw Operator")
+# Register and add to the object menu (required to also use F3 search "Custom Draw Operator" for quick access)
bpy.utils.register_class(CustomDrawOperator)
+bpy.types.VIEW3D_MT_object.append(menu_func)
# test call
bpy.ops.object.custom_draw('INVOKE_DEFAULT')
diff --git a/doc/python_api/examples/bpy.types.Operator.5.py b/doc/python_api/examples/bpy.types.Operator.5.py
index f1880a70018..a0b4a6d6841 100644
--- a/doc/python_api/examples/bpy.types.Operator.5.py
+++ b/doc/python_api/examples/bpy.types.Operator.5.py
@@ -55,8 +55,13 @@ class ModalOperator(bpy.types.Operator):
context.window_manager.modal_handler_add(self)
return {'RUNNING_MODAL'}
+# Only needed if you want to add into a dynamic menu
+def menu_func(self, context):
+ self.layout.operator(ModalOperator.bl_idname, text="Modal Operator")
+# Register and add to the object menu (required to also use F3 search "Modal Operator" for quick access)
bpy.utils.register_class(ModalOperator)
+bpy.types.VIEW3D_MT_object.append(menu_func)
# test call
bpy.ops.object.modal_operator('INVOKE_DEFAULT')
diff --git a/doc/python_api/examples/bpy.types.Operator.6.py b/doc/python_api/examples/bpy.types.Operator.6.py
index ff14bfa7197..20ee4c21446 100644
--- a/doc/python_api/examples/bpy.types.Operator.6.py
+++ b/doc/python_api/examples/bpy.types.Operator.6.py
@@ -31,8 +31,13 @@ class SearchEnumOperator(bpy.types.Operator):
context.window_manager.invoke_search_popup(self)
return {'RUNNING_MODAL'}
+# Only needed if you want to add into a dynamic menu
+def menu_func(self, context):
+ self.layout.operator(SearchEnumOperator.bl_idname, text="Search Enum Operator")
+# Register and add to the object menu (required to also use F3 search "Search Enum Operator" for quick access)
bpy.utils.register_class(SearchEnumOperator)
+bpy.types.VIEW3D_MT_object.append(menu_func)
# test call
bpy.ops.object.search_enum_operator('INVOKE_DEFAULT')
diff --git a/doc/python_api/examples/bpy.types.Operator.py b/doc/python_api/examples/bpy.types.Operator.py
index c9bf169f73e..5299b198774 100644
--- a/doc/python_api/examples/bpy.types.Operator.py
+++ b/doc/python_api/examples/bpy.types.Operator.py
@@ -22,8 +22,13 @@ class HelloWorldOperator(bpy.types.Operator):
print("Hello World")
return {'FINISHED'}
+# Only needed if you want to add into a dynamic menu
+def menu_func(self, context):
+ self.layout.operator(HelloWorldOperator.bl_idname, text="Hello World Operator")
+# Register and add to the view menu (required to also use F3 search "Hello World Operator" for quick access)
bpy.utils.register_class(HelloWorldOperator)
+bpy.types.VIEW3D_MT_view.append(menu_func)
# test call to the newly defined operator
bpy.ops.wm.hello_world()
diff --git a/release/scripts/templates_py/operator_file_export.py b/release/scripts/templates_py/operator_file_export.py
index 45910772dc7..b4d0dc8b698 100644
--- a/release/scripts/templates_py/operator_file_export.py
+++ b/release/scripts/templates_py/operator_file_export.py
@@ -57,7 +57,7 @@ class ExportSomeData(Operator, ExportHelper):
def menu_func_export(self, context):
self.layout.operator(ExportSomeData.bl_idname, text="Text Export Operator")
-
+# Register and add to the "file selector" menu (required to use F3 search "Text Export Operator" for quick access)
def register():
bpy.utils.register_class(ExportSomeData)
bpy.types.TOPBAR_MT_file_export.append(menu_func_export)
diff --git a/release/scripts/templates_py/operator_file_import.py b/release/scripts/templates_py/operator_file_import.py
index 5438a7a6f9d..83496fbe17b 100644
--- a/release/scripts/templates_py/operator_file_import.py
+++ b/release/scripts/templates_py/operator_file_import.py
@@ -60,7 +60,7 @@ class ImportSomeData(Operator, ImportHelper):
def menu_func_import(self, context):
self.layout.operator(ImportSomeData.bl_idname, text="Text Import Operator")
-
+# Register and add to the "file selector" menu (required to use F3 search "Text Import Operator" for quick access)
def register():
bpy.utils.register_class(ImportSomeData)
bpy.types.TOPBAR_MT_file_import.append(menu_func_import)
diff --git a/release/scripts/templates_py/operator_mesh_add.py b/release/scripts/templates_py/operator_mesh_add.py
index 3fc7636459b..5a6bed92c93 100644
--- a/release/scripts/templates_py/operator_mesh_add.py
+++ b/release/scripts/templates_py/operator_mesh_add.py
@@ -97,7 +97,7 @@ class AddBox(bpy.types.Operator, AddObjectHelper):
def menu_func(self, context):
self.layout.operator(AddBox.bl_idname, icon='MESH_CUBE')
-
+# Register and add to the "add mesh" menu (required to use F3 search "Add Box" for quick access)
def register():
bpy.utils.register_class(AddBox)
bpy.types.VIEW3D_MT_mesh_add.append(menu_func)
diff --git a/release/scripts/templates_py/operator_mesh_uv.py b/release/scripts/templates_py/operator_mesh_uv.py
index bf893480f2f..2d4f5b17ba8 100644
--- a/release/scripts/templates_py/operator_mesh_uv.py
+++ b/release/scripts/templates_py/operator_mesh_uv.py
@@ -33,13 +33,18 @@ class UvOperator(bpy.types.Operator):
main(context)
return {'FINISHED'}
+def menu_func(self, context):
+ self.layout.operator(UvOperator.bl_idname, text = "Simple UV Operator")
+# Register and add to the "UV" menu (required to also use F3 search "Simple UV Operator" for quick access)
def register():
bpy.utils.register_class(UvOperator)
+ bpy.types.IMAGE_MT_uvs.append(menu_func)
def unregister():
bpy.utils.unregister_class(UvOperator)
+ bpy.types.IMAGE_MT_uvs.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/templates_py/operator_modal.py b/release/scripts/templates_py/operator_modal.py
index c242e3b67b9..41b01e22f78 100644
--- a/release/scripts/templates_py/operator_modal.py
+++ b/release/scripts/templates_py/operator_modal.py
@@ -35,13 +35,18 @@ class ModalOperator(bpy.types.Operator):
self.report({'WARNING'}, "No active object, could not finish")
return {'CANCELLED'}
+def menu_func(self, context):
+ self.layout.operator(ModalOperator.bl_idname, text=ModalOperator.bl_label)
+# Register and add to the "view" menu (required to also use F3 search "Simple Modal Operator" for quick access)
def register():
bpy.utils.register_class(ModalOperator)
+ bpy.types.VIEW3D_MT_object.append(menu_func)
def unregister():
bpy.utils.unregister_class(ModalOperator)
+ bpy.types.VIEW3D_MT_object.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/templates_py/operator_modal_draw.py b/release/scripts/templates_py/operator_modal_draw.py
index 16c6f6dbe22..a3f46586cf5 100644
--- a/release/scripts/templates_py/operator_modal_draw.py
+++ b/release/scripts/templates_py/operator_modal_draw.py
@@ -30,7 +30,7 @@ def draw_callback_px(self, context):
class ModalDrawOperator(bpy.types.Operator):
"""Draw a line with the mouse"""
- bl_idname = "view3d.modal_operator"
+ bl_idname = "view3d.modal_draw_operator"
bl_label = "Simple Modal View3D Operator"
def modal(self, context, event):
@@ -65,13 +65,18 @@ class ModalDrawOperator(bpy.types.Operator):
self.report({'WARNING'}, "View3D not found, cannot run operator")
return {'CANCELLED'}
+def menu_func(self, context):
+ self.layout.operator(ModalDrawOperator.bl_idname, text = "Modal Draw Operator")
+# Register and add to the "view" menu (required to also use F3 search "Modal Draw Operator" for quick access)
def register():
bpy.utils.register_class(ModalDrawOperator)
+ bpy.types.VIEW3D_MT_view.append(menu_func)
def unregister():
bpy.utils.unregister_class(ModalDrawOperator)
+ bpy.types.VIEW3D_MT_view.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/templates_py/operator_modal_timer.py b/release/scripts/templates_py/operator_modal_timer.py
index 808f1a1299c..11530f18829 100644
--- a/release/scripts/templates_py/operator_modal_timer.py
+++ b/release/scripts/templates_py/operator_modal_timer.py
@@ -31,13 +31,17 @@ class ModalTimerOperator(bpy.types.Operator):
wm = context.window_manager
wm.event_timer_remove(self._timer)
+def menu_func(self, context):
+ self.layout.operator(ModalTimerOperator.bl_idname, text=ModalTimerOperator.bl_label)
def register():
bpy.utils.register_class(ModalTimerOperator)
+ bpy.types.VIEW3D_MT_view.append(menu_func)
-
+# Register and add to the "view" menu (required to also use F3 search "Modal Timer Operator" for quick access)
def unregister():
bpy.utils.unregister_class(ModalTimerOperator)
+ bpy.types.VIEW3D_MT_view.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/templates_py/operator_modal_view3d.py b/release/scripts/templates_py/operator_modal_view3d.py
index 93c5ae84e2c..5fd47731d0b 100644
--- a/release/scripts/templates_py/operator_modal_view3d.py
+++ b/release/scripts/templates_py/operator_modal_view3d.py
@@ -57,13 +57,18 @@ class ViewOperator(bpy.types.Operator):
self.report({'WARNING'}, "Active space must be a View3d")
return {'CANCELLED'}
+def menu_func(self, context):
+ self.layout.operator(ViewOperator.bl_idname, text = "Simple View Modal Operator")
+# Register and add to the "view" menu (required to also use F3 search "Simple View Modal Operator" for quick access)
def register():
bpy.utils.register_class(ViewOperator)
+ bpy.types.VIEW3D_MT_view.append(menu_func)
def unregister():
bpy.utils.unregister_class(ViewOperator)
+ bpy.types.VIEW3D_MT_view.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/templates_py/operator_modal_view3d_raycast.py b/release/scripts/templates_py/operator_modal_view3d_raycast.py
index 9130f47843a..022acc25e14 100644
--- a/release/scripts/templates_py/operator_modal_view3d_raycast.py
+++ b/release/scripts/templates_py/operator_modal_view3d_raycast.py
@@ -95,13 +95,18 @@ class ViewOperatorRayCast(bpy.types.Operator):
self.report({'WARNING'}, "Active space must be a View3d")
return {'CANCELLED'}
+def menu_func(self, context):
+ self.layout.operator(ViewOperatorRayCast.bl_idname, text="Raycast View Modal Operator")
+# Register and add to the "view" menu (required to also use F3 search "Raycast View Modal Operator" for quick access)
def register():
bpy.utils.register_class(ViewOperatorRayCast)
+ bpy.types.VIEW3D_MT_view.append(menu_func)
def unregister():
bpy.utils.unregister_class(ViewOperatorRayCast)
+ bpy.types.VIEW3D_MT_view.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/templates_py/operator_node.py b/release/scripts/templates_py/operator_node.py
index 764e50d1697..b5ca491a0fe 100644
--- a/release/scripts/templates_py/operator_node.py
+++ b/release/scripts/templates_py/operator_node.py
@@ -46,13 +46,18 @@ class NodeOperator(bpy.types.Operator):
main(self, context)
return {'FINISHED'}
+def menu_func(self, context):
+ self.layout.operator(NodeOperator.bl_idname, text=NodeOperator.bl_label)
+# Register and add to the "Node" menu (required to also use F3 search "Simple Node Operator" for quick access)
def register():
bpy.utils.register_class(NodeOperator)
+ bpy.types.NODE_MT_node.append(menu_func)
def unregister():
bpy.utils.unregister_class(NodeOperator)
+ bpy.types.NODE_MT_node.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/templates_py/operator_simple.py b/release/scripts/templates_py/operator_simple.py
index 715daa3a8b4..9edb07996c0 100644
--- a/release/scripts/templates_py/operator_simple.py
+++ b/release/scripts/templates_py/operator_simple.py
@@ -19,13 +19,18 @@ class SimpleOperator(bpy.types.Operator):
main(context)
return {'FINISHED'}
+def menu_func(self, context):
+ self.layout.operator(SimpleOperator.bl_idname, text=SimpleOperator.bl_label)
+# Register and add to the "object" menu (required to also use F3 search "Simple Object Operator" for quick access)
def register():
bpy.utils.register_class(SimpleOperator)
+ bpy.types.VIEW3D_MT_object.append(menu_func)
def unregister():
bpy.utils.unregister_class(SimpleOperator)
+ bpy.types.VIEW3D_MT_object.remove(menu_func)
if __name__ == "__main__":