From 1cf2c099f7a88338b278304b08036dba71a0b522 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 6 May 2012 06:37:07 +0000 Subject: Bugfix [#31297] Transform menu often showed operators which didn't make sense for the contexts they appeared in The VIEW3D_MT_transform menu was being used everywhere, although not all the operators there applied to the current mode (e.g. the pivot point, animated transforms to deltas, and a few others were Object-mode only). Split off the offending parts into separate menus for the specific modes, and made these extend the basic menu type. --- release/scripts/startup/bl_ui/space_view3d.py | 63 +++++++++++++++++++++------ 1 file changed, 50 insertions(+), 13 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 8070b60126a..4e044eb243f 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -135,7 +135,9 @@ class ShowHideMenu(): layout.operator("%s.hide" % self._operator_name, text="Hide Unselected").unselected = True -class VIEW3D_MT_transform(Menu): +# Standard transforms which apply to all cases +# NOTE: this doesn't seem to be able to be used directly +class VIEW3D_MT_transform_base(Menu): bl_label = "Transform" # TODO: get rid of the custom text strings? @@ -156,22 +158,38 @@ class VIEW3D_MT_transform(Menu): layout.operator("transform.warp", text="Warp") layout.operator("transform.push_pull", text="Push/Pull") + +# Generic transform menu - geometry types +class VIEW3D_MT_transform(VIEW3D_MT_transform_base): + def draw(self, context): + # base menu + VIEW3D_MT_transform_base.draw(self, context) + + # generic... + layout = self.layout layout.separator() layout.operator("transform.translate", text="Move Texture Space").texture_space = True layout.operator("transform.resize", text="Scale Texture Space").texture_space = True - layout.separator() - obj = context.object - if obj.type == 'ARMATURE' and obj.mode in {'EDIT', 'POSE'} and obj.data.draw_type in {'BBONE', 'ENVELOPE'}: - layout.operator("transform.transform", text="Scale Envelope/BBone").mode = 'BONE_SIZE' +# Object-specific extensions to Transform menu +class VIEW3D_MT_transform_object(VIEW3D_MT_transform_base): + def draw(self, context): + # base menu + VIEW3D_MT_transform_base.draw(self, context) + + # object-specific option follow... + layout = self.layout + layout.separator() - if context.edit_object and context.edit_object.type == 'ARMATURE': - layout.operator("armature.align") - else: - layout.operator_context = 'EXEC_REGION_WIN' - layout.operator("transform.transform", text="Align to Transform Orientation").mode = 'ALIGN' # XXX see alignmenu() in edit.c of b2.4x to get this working + layout.operator("transform.translate", text="Move Texture Space").texture_space = True + layout.operator("transform.resize", text="Scale Texture Space").texture_space = True + + layout.separator() + + layout.operator_context = 'EXEC_REGION_WIN' + layout.operator("transform.transform", text="Align to Transform Orientation").mode = 'ALIGN' # XXX see alignmenu() in edit.c of b2.4x to get this working layout.separator() @@ -191,6 +209,25 @@ class VIEW3D_MT_transform(Menu): layout.operator("object.anim_transforms_to_deltas") +# Armature EditMode extensions to Transform menu +class VIEW3D_MT_transform_armature(VIEW3D_MT_transform_base): + def draw(self, context): + # base menu + VIEW3D_MT_transform_base.draw(self, context) + + # armature specific extensions follow... + layout = self.layout + layout.separator() + + obj = context.object + if (obj.type == 'ARMATURE' and obj.mode in {'EDIT', 'POSE'} and + obj.data.draw_type in {'BBONE', 'ENVELOPE'}): + layout.operator("transform.transform", text="Scale Envelope/BBone").mode = 'BONE_SIZE' + + if context.edit_object and context.edit_object.type == 'ARMATURE': + layout.operator("armature.align") + + class VIEW3D_MT_mirror(Menu): bl_label = "Mirror" @@ -704,7 +741,7 @@ class VIEW3D_MT_object(Menu): layout.separator() - layout.menu("VIEW3D_MT_transform") + layout.menu("VIEW3D_MT_transform_object") layout.menu("VIEW3D_MT_mirror") layout.menu("VIEW3D_MT_object_clear") layout.menu("VIEW3D_MT_object_apply") @@ -1322,7 +1359,7 @@ class VIEW3D_MT_pose(Menu): layout.separator() - layout.menu("VIEW3D_MT_transform") + layout.menu("VIEW3D_MT_transform_armature") layout.menu("VIEW3D_MT_pose_transform") layout.menu("VIEW3D_MT_pose_apply") @@ -2077,7 +2114,7 @@ class VIEW3D_MT_edit_armature(Menu): edit_object = context.edit_object arm = edit_object.data - layout.menu("VIEW3D_MT_transform") + layout.menu("VIEW3D_MT_transform_armature") layout.menu("VIEW3D_MT_mirror") layout.menu("VIEW3D_MT_snap") layout.menu("VIEW3D_MT_edit_armature_roll") -- cgit v1.2.3