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:
Diffstat (limited to 'doc/python_api/examples/bpy.types.Menu.4.py')
-rw-r--r--doc/python_api/examples/bpy.types.Menu.4.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/doc/python_api/examples/bpy.types.Menu.4.py b/doc/python_api/examples/bpy.types.Menu.4.py
new file mode 100644
index 00000000000..04ceb6654da
--- /dev/null
+++ b/doc/python_api/examples/bpy.types.Menu.4.py
@@ -0,0 +1,81 @@
+"""
+Extending the Button Context Menu
++++++++++++++++++++++++++++++++++
+
+This example enables you to insert your own menu entry into the common
+right click menu that you get while hovering over a value field,
+color, string, etc.
+
+To make the example work, you have to first select an object
+then right click on an user interface element (maybe a color in the
+material properties) and choose *Execute Custom Action*.
+
+Executing the operator will then print all values.
+"""
+
+import bpy
+from bpy.types import Menu
+
+
+def dump(obj, text):
+ for attr in dir(obj):
+ print("%r.%s = %s" % (obj, attr, getattr(obj, attr)))
+
+
+class WM_OT_button_context_test(bpy.types.Operator):
+ """Right click entry test"""
+ bl_idname = "wm.button_context_test"
+ bl_label = "Run Context Test"
+
+ @classmethod
+ def poll(cls, context):
+ return context.active_object is not None
+
+ def execute(self, context):
+ value = getattr(context, "button_pointer", None)
+ if value is not None:
+ dump(value, "button_pointer")
+
+ value = getattr(context, "button_prop", None)
+ if value is not None:
+ dump(value, "button_prop")
+
+ value = getattr(context, "button_operator", None)
+ if value is not None:
+ dump(value, "button_operator")
+
+ return {'FINISHED'}
+
+
+# This class has to be exactly named like that to insert an entry in the right click menu
+class WM_MT_button_context(Menu):
+ bl_label = "Unused"
+
+ def draw(self, context):
+ pass
+
+
+def menu_func(self, context):
+ layout = self.layout
+ layout.separator()
+ layout.operator(WM_OT_button_context_test.bl_idname)
+
+classes = (
+ WM_OT_button_context_test,
+ WM_MT_button_context,
+)
+
+
+def register():
+ for cls in classes:
+ bpy.utils.register_class(cls)
+ bpy.types.WM_MT_button_context.append(menu_func)
+
+
+def unregister():
+ for cls in classes:
+ bpy.utils.unregister_class(cls)
+ bpy.types.WM_MT_button_context.remove(menu_func)
+
+if __name__ == "__main__":
+ register()