[Bf-blender-cvs] [14d9e46] master: UI: edits to pie-menu-enum

Campbell Barton noreply at git.blender.org
Wed Aug 13 23:41:11 CEST 2014


Commit: 14d9e469779ef63ed395b3e3339d416a3192b820
Author: Campbell Barton
Date:   Thu Aug 14 07:29:38 2014 +1000
Branches: master
https://developer.blender.org/rB14d9e469779ef63ed395b3e3339d416a3192b820

UI: edits to pie-menu-enum

- avoid eval
- report if operator is missing

===================================================================

M	release/scripts/startup/bl_operators/wm.py

===================================================================

diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index c4086c5e..c1a0ede 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -537,6 +537,7 @@ class WM_OT_context_pie_enum(Operator):
     data_path = rna_path_prop
 
     def invoke(self, context, event):
+        wm = context.window_manager
         data_path = self.data_path
         value = context_path_validate(context, data_path)
 
@@ -551,7 +552,7 @@ class WM_OT_context_pie_enum(Operator):
             layout = self.layout
             layout.prop(value_base, prop_string, expand=True)
 
-        context.window_manager.popup_menu_pie(draw_func=draw_cb, title=prop.name, icon=prop.icon, event=event)
+        wm.popup_menu_pie(draw_func=draw_cb, title=prop.name, icon=prop.icon, event=event)
 
         return {'FINISHED'}
 
@@ -572,21 +573,28 @@ class WM_OT_operator_pie_enum(Operator):
             )
 
     def invoke(self, context, event):
-        op = eval("bpy.ops.%s" % self.data_path)
+        wm = context.window_manager
 
-        if not op:
-            return {'PASS_THROUGH'}
+        data_path = self.data_path
+        prop_string = self.prop_string
 
-        title = op.get_rna().bl_rna.name
-        op_name = self.data_path
-        prop_name = self.prop_string
+        # same as eval("bpy.ops." + data_path)
+        op_mod_str, ob_id_str = data_path.split(".", 1)
+        op = getattr(getattr(bpy.ops, op_mod_str), ob_id_str)
+        del op_mod_str, ob_id_str
+
+        try:
+            op_rna = op.get_rna()
+        except KeyError:
+            self.report({'ERROR'}, "Operator not found: bpy.ops.%s" % data_path)
+            return {'CANCELLED'}
 
         def draw_cb(self, context):
             layout = self.layout
             pie = layout.menu_pie()
-            pie.operator_enum(op_name, prop_name)
+            pie.operator_enum(data_path, prop_string)
 
-        context.window_manager.popup_menu_pie(draw_func=draw_cb, title=title, event=event)
+        wm.popup_menu_pie(draw_func=draw_cb, title=op_rna.bl_rna.name, event=event)
 
         return {'FINISHED'}
 
@@ -1944,7 +1952,7 @@ class WM_OT_addon_install(Operator):
 
         addons_old = {mod.__name__ for mod in addon_utils.modules()}
 
-        #check to see if the file is in compressed format (.zip)
+        # check to see if the file is in compressed format (.zip)
         if zipfile.is_zipfile(pyfile):
             try:
                 file_to_extract = zipfile.ZipFile(pyfile, 'r')
@@ -1977,7 +1985,7 @@ class WM_OT_addon_install(Operator):
                 self.report({'WARNING'}, "File already installed to %r\n" % path_dest)
                 return {'CANCELLED'}
 
-            #if not compressed file just copy into the addon path
+            # if not compressed file just copy into the addon path
             try:
                 shutil.copyfile(pyfile, path_dest)




More information about the Bf-blender-cvs mailing list