[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34872] trunk/blender/release/scripts/op/ wm.py: menu to select an enum from an RNA path:

Campbell Barton ideasman42 at gmail.com
Tue Feb 15 19:12:42 CET 2011


Revision: 34872
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34872
Author:   campbellbarton
Date:     2011-02-15 18:12:41 +0000 (Tue, 15 Feb 2011)
Log Message:
-----------
menu to select an enum from an RNA path:
eg,
   bpy.ops.wm.context_menu_enum(data_path="scene.tool_settings.vertex_paint.brush.stroke_method")

This saves us defining operators only for menus.

Modified Paths:
--------------
    trunk/blender/release/scripts/op/wm.py

Modified: trunk/blender/release/scripts/op/wm.py
===================================================================
--- trunk/blender/release/scripts/op/wm.py	2011-02-15 16:37:44 UTC (rev 34871)
+++ trunk/blender/release/scripts/op/wm.py	2011-02-15 18:12:41 UTC (rev 34872)
@@ -384,6 +384,38 @@
         return {'FINISHED'}
 
 
+class WM_MT_context_menu_enum(bpy.types.Menu):
+    bl_label = ""
+    data_path = ""  # BAD DESIGN, set from operator below.
+    def draw(self, context):
+        data_path = self.data_path
+        value = context_path_validate(bpy.context, data_path)
+        if value is Ellipsis:
+            return {'PASS_THROUGH'}
+        base_path, prop_string = data_path.rsplit(".", 1)
+        value_base = context_path_validate(context, base_path)
+        
+        values = [(i.name, i.identifier) for i in value_base.bl_rna.properties[prop_string].items]
+
+        for name, identifier in values:
+            prop = self.layout.operator("wm.context_set_enum", text=name)
+            prop.data_path = data_path
+            prop.value = identifier
+
+
+class WM_OT_context_menu_enum(bpy.types.Operator):
+    bl_idname = "wm.context_menu_enum"
+    bl_label = "Context Enum Menu"
+    bl_options = {'UNDO'}
+    data_path = rna_path_prop
+    
+    def execute(self, context):
+        data_path = self.data_path
+        WM_MT_context_menu_enum.data_path = data_path
+        bpy.ops.wm.call_menu(name="WM_MT_context_menu_enum")
+        return {'PASS_THROUGH'}
+
+
 class WM_OT_context_set_id(bpy.types.Operator):
     '''Toggle a context value.'''
     bl_idname = "wm.context_set_id"




More information about the Bf-blender-cvs mailing list