diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-08-14 01:29:38 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-08-14 01:40:19 +0400 |
commit | 14d9e469779ef63ed395b3e3339d416a3192b820 (patch) | |
tree | 69f6e929b77b3c48b5ac2c0bf5631d74a17ea308 /release | |
parent | e05567ef3e72830abb2cd23c26b0bbc6139f0e1e (diff) |
UI: edits to pie-menu-enum
- avoid eval
- report if operator is missing
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/startup/bl_operators/wm.py | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py index c4086c5eac0..c1a0edec65c 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) |