Skip to content
Snippets Groups Projects
space_view3d_toolshelf_menu.py 126 KiB
Newer Older
  • Learn to ignore specific revisions
  • # ##### BEGIN GPL LICENSE BLOCK #####
    #
    #  This program is free software; you can redistribute it and/or
    #  modify it under the terms of the GNU General Public License
    #  as published by the Free Software Foundation; either version 2
    #  of the License, or (at your option) any later version.
    #
    #  This program is distributed in the hope that it will be useful,
    #  but WITHOUT ANY WARRANTY; without even the implied warranty of
    #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    #  GNU General Public License for more details.
    #
    #  You should have received a copy of the GNU General Public License
    #  along with this program; if not, write to the Free Software Foundation,
    #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
    #
    # ##### END GPL LICENSE BLOCK #####
    
    # some parts based on 3d_cursor_menu.py by Jonathan Smith (JayDez) & work by sim88 & sam.
    # view3d_advanced_dynamic_toolshelf_menu by Brendon Murphy (meta-androcto)
    
    
    bl_info = {
        "name": "Dynamic Toolshelf Menu",
        "author": "meta-androcto",
    
        "version": (3, 0, 2),
    
        "blender": (2, 77, 0),
    
        "location": "View3D > Spacebar Key, Dynamic Tab",
        "description": "Context Sensitive Toolshelf Menu",
        "warning": "",
    
        "wiki_url": "https://wiki.blender.org/index.php/Extensions:2.6/Py/"
    
                    "Scripts/3D_interaction/Dynamic_Spacebar_Menu",
    
        "tracker_url": "https://developer.blender.org/maniphest/task/edit/form/2/",
    
    from bpy.types import (
            Menu,
            Operator,
            Panel,
            AddonPreferences,
            )
    
    
    from bl_ui.properties_paint_common import UnifiedPaintPanel
    
    
    class View3DPanel():
        bl_space_type = 'VIEW_3D'
        bl_region_type = 'TOOLS'
    
    
    
    class VIEW3D_PT_Toolshelf_menu(View3DPanel, Panel):
    
        bl_label = "Dynamic Toolshelf"
        bl_category = "Dynamic"
    
        def draw(self, context):
            layout = self.layout
            settings = context.tool_settings
            layout.operator_context = 'INVOKE_REGION_WIN'
    
    # No Object Selected #
            if not context.active_object:
    
                layout.operator_context = 'INVOKE_REGION_WIN'
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.menu("VIEW3D_MT_AddMenu2", icon='OBJECT_DATAMODE')
                layout.menu("VIEW3D_MT_View_Directions2", icon='ZOOM_ALL')
    
                layout.menu("VIEW3D_MT_View_Navigation2", icon='PIVOT_BOUNDBOX')
                layout.menu("VIEW3D_MT_View_Toggle2", icon='WORKSPACE')
    
                layout.operator("view3d.snap_cursor_to_center",
                                text="Cursor to Center")
                layout.operator("view3d.snap_cursor_to_grid",
                                text="Cursor to Grid")
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
                if context.gpencil_data and context.gpencil_data.use_stroke_edit_mode:
    
                    layout.menu("VIEW3D_MT_Edit_Gpencil2", icon='GREASEPENCIL')
    
    # Mesh Object Mode #
            if obj and obj.type == 'MESH' and obj.mode in {'OBJECT'}:
    
                layout.operator_context = 'INVOKE_REGION_WIN'
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Object2", icon='RESTRICT_SELECT_OFF')
    
                layout.menu("VIEW3D_MT_AddMenu2", icon='OBJECT_DATAMODE')
                layout.menu("VIEW3D_MT_Object2", icon='VIEW3D')
    
                layout.menu("VIEW3D_MT_TransformMenu2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenu2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_ParentMenu2", icon='PIVOT_ACTIVE')
    
                layout.menu("VIEW3D_MT_GroupMenu2", icon='GROUP')
    
                UseSeparator(self, context)
                layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
                if context.gpencil_data and context.gpencil_data.use_stroke_edit_mode:
    
                    layout.menu("VIEW3D_MT_Edit_Gpencil2", icon='GREASEPENCIL')
                layout.menu("VIEW3D_MT_Camera_Options2", icon='OUTLINER_OB_CAMERA')
    
                layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
                layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
                UseSeparator(self, context)
                layout.operator("object.delete", text="Delete Object", icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Mode2", icon='EDIT')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
    
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    
    
    # Mesh Edit Mode #
            if obj and obj.type == 'MESH' and obj.mode in {'EDIT'}:
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Edit_Mesh2", icon='RESTRICT_SELECT_OFF')
                layout.menu("VIEW3D_MT_Edit_Multi2", icon='VERTEXSEL')
    
                layout.menu("VIEW3D_MT_mesh_add", text="Add Mesh", icon='OUTLINER_OB_MESH')
    
                layout.menu("VIEW3D_MT_Edit_Mesh2", text="Mesh", icon='MESH_DATA')
    
                layout.menu("VIEW3D_MT_TransformMenuEdit2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_EditCursorMenu2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_UV_Map2", icon='MOD_UVPROJECT')
    
                layout.menu("VIEW3D_MT_edit_mesh_specials", icon='SOLO_OFF')
    
                layout.menu("VIEW3D_MT_edit_mesh_extrude", icon='XRAY')
    
                UseSeparator(self, context)
                layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
                layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
                UseSeparator(self, context)
                layout.menu("VIEW3D_MT_edit_mesh_delete", icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Mode2", icon='EDIT')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    # Sculpt Mode #
            if obj and obj.type == 'MESH' and obj.mode in {'SCULPT'}:
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
    
                layout.menu("VIEW3D_MT_Sculpts2", icon='SCULPTMODE_HLT')
                layout.menu("VIEW3D_MT_Brush_Selection2", text="Sculpt Tool", icon='BRUSH_SCULPT_DRAW')
                layout.menu("VIEW3D_MT_Brush_Settings2", icon='BRUSH_DATA')
                layout.menu("VIEW3D_MT_Hide_Masks2", icon='RESTRICT_VIEW_OFF')
    
                layout.menu("VIEW3D_MT_Sculpt_Specials2", icon='SOLO_OFF')
    
                layout.menu("VIEW3D_MT_TransformMenu2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenu2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Mode2", icon='EDIT')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    # Vertex Paint #
            if obj and obj.type == 'MESH' and obj.mode in {'VERTEX_PAINT'}:
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
    
                layout.menu("VIEW3D_MT_Brush_Settings2", icon='BRUSH_DATA')
                layout.menu("VIEW3D_MT_Brush_Selection2", text="Vertex Paint Tool", icon='BRUSH_VERTEXDRAW')
                layout.menu("VIEW3D_MT_Vertex_Colors2", icon='GROUP_VCOL')
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Mode2", icon='EDIT')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    # Weight Paint Menu #
            if obj and obj.type == 'MESH' and obj.mode in {'WEIGHT_PAINT'}:
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
    
                layout.menu("VIEW3D_MT_Paint_Weights2", icon='WPAINT_HLT')
                layout.menu("VIEW3D_MT_Brush_Settings2", icon='BRUSH_DATA')
                layout.menu("VIEW3D_MT_Brush_Selection2", text="Weight Paint Tool", icon='BRUSH_TEXMASK')
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Mode2", icon='EDIT')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    # Texture Paint #
            if obj and obj.type == 'MESH' and obj.mode in {'TEXTURE_PAINT'}:
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Brush_Settings2", icon='BRUSH_DATA')
                layout.menu("VIEW3D_MT_Brush_Selection2", text="Texture Paint Tool", icon='SCULPTMODE_HLT')
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Mode2", icon='EDIT')
    
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    
    # Curve Object Mode #
            if obj and obj.type == 'CURVE' and obj.mode in {'OBJECT'}:
    
                layout.operator_context = 'INVOKE_REGION_WIN'
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Object2", icon='RESTRICT_SELECT_OFF')
    
                layout.menu("VIEW3D_MT_AddMenu2", icon='OBJECT_DATAMODE')
                layout.menu("VIEW3D_MT_Object2", icon='VIEW3D')
    
                layout.menu("VIEW3D_MT_TransformMenu2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenu2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_ParentMenu2", icon='PIVOT_ACTIVE')
    
                layout.menu("VIEW3D_MT_GroupMenu2", icon='GROUP')
    
                UseSeparator(self, context)
                layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
    
                layout.menu("VIEW3D_MT_Camera_Options2", icon='OUTLINER_OB_CAMERA')
    
                UseSeparator(self, context)
                layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
                layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
                UseSeparator(self, context)
                layout.operator("object.delete", text="Delete Object", icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Other2", icon='OBJECT_DATA')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    # Edit Curve #
            if obj and obj.type == 'CURVE' and obj.mode in {'EDIT'}:
    
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Edit_Curve2",
    
                            icon='RESTRICT_SELECT_OFF')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_curve_add", text="Add Curve",
    
                layout.menu("VIEW3D_MT_Edit_Curve2", icon='CURVE_DATA')
    
                layout.menu("VIEW3D_MT_TransformMenu2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenu2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_EditCurveCtrlpoints2",
    
                layout.menu("VIEW3D_MT_EditCurveSpecials2",
    
                            icon='SOLO_OFF')
                UseSeparator(self, context)
                layout.operator("curve.delete", text="Delete Object",
                                icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Other2", icon='OBJECT_DATA')
    
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    
    # Surface Object Mode #
            if obj and obj.type == 'SURFACE' and obj.mode in {'OBJECT'}:
    
                layout.operator_context = 'INVOKE_REGION_WIN'
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Object2", icon='RESTRICT_SELECT_OFF')
    
                layout.menu("VIEW3D_MT_AddMenu2", icon='OBJECT_DATAMODE')
                layout.menu("VIEW3D_MT_Object2", icon='VIEW3D')
    
                layout.menu("VIEW3D_MT_TransformMenu2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenu2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_ParentMenu2", icon='PIVOT_ACTIVE')
    
                layout.menu("VIEW3D_MT_GroupMenu2", icon='GROUP')
    
                UseSeparator(self, context)
                layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
    
                layout.menu("VIEW3D_MT_Camera_Options2", icon='OUTLINER_OB_CAMERA')
    
                layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
                layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
                UseSeparator(self, context)
                layout.operator("object.delete", text="Delete Object", icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Other2", icon='OBJECT_DATA')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    # Edit Surface #
            if obj and obj.type == 'SURFACE' and obj.mode in {'EDIT'}:
    
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Edit_Surface2", icon='RESTRICT_SELECT_OFF')
    
                layout.menu("VIEW3D_MT_surface_add", text="Add Surface",
    
                layout.menu("VIEW3D_MT_TransformMenu2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenu2", icon='PIVOT_CURSOR')
    
                layout.prop_menu_enum(settings, "proportional_edit",
                                      icon="PROP_CON")
                layout.prop_menu_enum(settings, "proportional_edit_falloff",
                                      icon="SMOOTHCURVE")
    
                layout.menu("VIEW3D_MT_EditCurveSpecials2",
    
                            icon='SOLO_OFF')
                UseSeparator(self, context)
                layout.operator("curve.delete", text="Delete Object",
                                icon='CANCEL')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Other2", icon='OBJECT_DATA')
    
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    
    # Metaball Object Mode #
            if obj and obj.type == 'META' and obj.mode in {'OBJECT'}:
    
                layout.operator_context = 'INVOKE_REGION_WIN'
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Object2", icon='RESTRICT_SELECT_OFF')
    
                layout.menu("VIEW3D_MT_AddMenu2", icon='OBJECT_DATAMODE')
                layout.menu("VIEW3D_MT_Object2", icon='VIEW3D')
    
                layout.menu("VIEW3D_MT_TransformMenu2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenu2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_ParentMenu2", icon='PIVOT_ACTIVE')
    
                layout.menu("VIEW3D_MT_GroupMenu2", icon='GROUP')
    
                UseSeparator(self, context)
                layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
    
                layout.menu("VIEW3D_MT_Camera_Options2", icon='OUTLINER_OB_CAMERA')
    
                UseSeparator(self, context)
                layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
                layout.operator("object.delete", text="Delete Object", icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Other2", icon='OBJECT_DATA')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    # Edit Metaball #
            if obj and obj.type == 'META' and obj.mode in {'EDIT'}:
    
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_SelectMetaball2", icon='RESTRICT_SELECT_OFF')
    
                layout.operator_menu_enum("object.metaball_add", "type",
                                          text="Add Metaball",
                                          icon='OUTLINER_OB_META')
    
                layout.menu("VIEW3D_MT_TransformMenu2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenu2", icon='PIVOT_CURSOR')
    
                layout.prop_menu_enum(settings, "proportional_edit",
                                      icon="PROP_CON")
                layout.prop_menu_enum(settings, "proportional_edit_falloff",
                                      icon="SMOOTHCURVE")
    
                layout.operator("mball.delete_metaelems", text="Delete Object",
                                icon='CANCEL')
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Other2", icon='OBJECT_DATA')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    # Text Object Mode #
            if obj and obj.type == 'FONT' and obj.mode in {'OBJECT'}:
    
                layout.operator_context = 'INVOKE_REGION_WIN'
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Object2", icon='RESTRICT_SELECT_OFF')
    
                layout.menu("VIEW3D_MT_AddMenu2", icon='OBJECT_DATAMODE')
                layout.menu("VIEW3D_MT_Object2", icon='VIEW3D')
    
                layout.menu("VIEW3D_MT_TransformMenu2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenu2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_ParentMenu2", icon='PIVOT_ACTIVE')
    
                layout.menu("VIEW3D_MT_GroupMenu2", icon='GROUP')
    
                UseSeparator(self, context)
                layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
    
                layout.menu("VIEW3D_MT_Camera_Options2", icon='OUTLINER_OB_CAMERA')
    
                UseSeparator(self, context)
                layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
                layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
                UseSeparator(self, context)
                layout.operator("object.delete", text="Delete Object", icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
    
                # New Entry For Switching to Editmode
    
                layout.operator("view3d.interactive_mode_text2", icon='VIEW3D')
    
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    
    # Text Edit Mode #
            # To Do: Space is already reserved for the typing tool
            if obj and obj.type == 'FONT' and obj.mode in {'EDIT'}:
    
                layout.operator_context = 'INVOKE_REGION_WIN'
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
    
                layout.menu("VIEW3D_MT_select_edit_text", icon='VIEW3D')
                layout.menu("VIEW3D_MT_edit_font", icon='RESTRICT_SELECT_OFF')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
    
                layout.operator("object.editmode_toggle", text="Enter Object Mode",
                                icon='OBJECT_DATA')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    # Camera Object Mode #
            if obj and obj.type == 'CAMERA' and obj.mode in {'OBJECT'}:
    
                layout.operator_context = 'INVOKE_REGION_WIN'
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Object2", icon='RESTRICT_SELECT_OFF')
    
                layout.menu("VIEW3D_MT_AddMenu2", icon='OBJECT_DATAMODE')
                layout.menu("VIEW3D_MT_Object2", icon='VIEW3D')
    
                layout.menu("VIEW3D_MT_TransformMenu2", icon='MANIPUL')
    
                layout.menu("VIEW3D_MT_CursorMenuLite2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_ParentMenu2", icon='PIVOT_ACTIVE')
    
                layout.menu("VIEW3D_MT_GroupMenu2", icon='GROUP')
    
                UseSeparator(self, context)
                layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
    
                layout.menu("VIEW3D_MT_Camera_Options2", icon='OUTLINER_OB_CAMERA')
    
                UseSeparator(self, context)
                layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
                UseSeparator(self, context)
                layout.operator("object.delete", text="Delete Object", icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    # Lamp Object Mode #
            if obj and obj.type == 'LAMP' and obj.mode in {'OBJECT'}:
    
                layout.operator_context = 'INVOKE_REGION_WIN'
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Object2", icon='RESTRICT_SELECT_OFF')
    
                layout.menu("VIEW3D_MT_AddMenu2", icon='OBJECT_DATAMODE')
                layout.menu("VIEW3D_MT_Object2", icon='VIEW3D')
    
                layout.menu("VIEW3D_MT_TransformMenuLite2", icon='MANIPUL')
    
                layout.menu("VIEW3D_MT_CursorMenuLite2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_ParentMenu2", icon='PIVOT_ACTIVE')
    
                layout.menu("VIEW3D_MT_GroupMenu2", icon='GROUP')
    
                UseSeparator(self, context)
                layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
    
                layout.menu("VIEW3D_MT_Camera_Options2", icon='OUTLINER_OB_CAMERA')
    
                UseSeparator(self, context)
                layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
                UseSeparator(self, context)
                layout.operator("object.delete", text="Delete Object", icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
    
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    
    # Armature Object Mode #
            if obj and obj.type == 'ARMATURE' and obj.mode in {'OBJECT'}:
    
                layout.operator_context = 'INVOKE_REGION_WIN'
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Object2", icon='RESTRICT_SELECT_OFF')
    
                layout.menu("VIEW3D_MT_AddMenu2", icon='OBJECT_DATAMODE')
                layout.menu("VIEW3D_MT_Object2", icon='VIEW3D')
    
                layout.menu("VIEW3D_MT_TransformMenuArmature2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenuLite2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_ParentMenu2", icon='PIVOT_ACTIVE')
    
                layout.menu("VIEW3D_MT_GroupMenu2", icon='GROUP')
    
                UseSeparator(self, context)
                layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
    
                layout.menu("VIEW3D_MT_Camera_Options2", icon='OUTLINER_OB_CAMERA')
    
                UseSeparator(self, context)
                layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
                UseSeparator(self, context)
                layout.operator("object.delete", text="Delete Object", icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Armature2", icon='VIEW3D')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    # Armature Edit #
            if obj and obj.type == 'ARMATURE' and obj.mode in {'EDIT'}:
    
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Edit_Armature2",
    
                            icon='RESTRICT_SELECT_OFF')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_armature_add", text="Add Armature",
    
                            icon='OUTLINER_OB_ARMATURE')
    
                layout.menu("VIEW3D_MT_Edit_Armature2", text="Armature",
    
                            icon='OUTLINER_DATA_ARMATURE')
    
                layout.menu("VIEW3D_MT_EditArmatureTK2",
    
                            icon='ARMATURE_DATA')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_TransformMenuArmatureEdit2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenuLite2", icon='PIVOT_CURSOR')
                layout.menu("VIEW3D_MT_ParentMenu2", icon='PIVOT_ACTIVE')
    
                layout.menu("VIEW3D_MT_armature_specials", icon='SOLO_OFF')
                layout.menu("VIEW3D_MT_edit_armature_roll",
                            icon='BONE_DATA')
                UseSeparator(self, context)
                layout.operator("armature.delete", text="Delete Object",
                                icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Armature2", icon='VIEW3D')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    # Armature Pose #
            if obj and obj.type == 'ARMATURE' and obj.mode in {'POSE'}:
    
                arm = context.active_object.data
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Pose2", icon='RESTRICT_SELECT_OFF')
    
                layout.menu("VIEW3D_MT_Pose2", icon='OUTLINER_DATA_POSE')
                layout.menu("VIEW3D_MT_TransformMenuArmaturePose2", icon='MANIPUL')
    
                layout.menu("VIEW3D_MT_pose_transform", icon='EMPTY_DATA')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_CursorMenuLite2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_PoseCopy2", icon='FILE')
    
                if arm.display_type in {'BBONE', 'ENVELOPE'}:
    
                    layout.operator("transform.transform",
                                    text="Scale Envelope Distance").mode = 'BONE_SIZE'
    
                layout.menu("VIEW3D_MT_pose_apply", icon='AUTO')
                layout.operator("pose.relax", icon='ARMATURE_DATA')
    
                layout.menu("VIEW3D_MT_KeyframeMenu2", icon='KEY_HLT')
    
                layout.menu("VIEW3D_MT_pose_specials", icon='SOLO_OFF')
                layout.menu("VIEW3D_MT_pose_group", icon='GROUP_BONE')
                UseSeparator(self, context)
                layout.operator_menu_enum("pose.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT_BONE')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Armature2", icon='VIEW3D')
    
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    
    # Lattice Object Mode #
            if obj and obj.type == 'LATTICE' and obj.mode in {'OBJECT'}:
    
                layout.operator_context = 'INVOKE_REGION_WIN'
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Object2", icon='RESTRICT_SELECT_OFF')
    
                layout.menu("VIEW3D_MT_AddMenu2", icon='OBJECT_DATAMODE')
                layout.menu("VIEW3D_MT_Object2", icon='VIEW3D')
    
                layout.menu("VIEW3D_MT_TransformMenu2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenu2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_ParentMenu2", icon='PIVOT_ACTIVE')
    
                layout.menu("VIEW3D_MT_GroupMenu2", icon='GROUP')
    
                UseSeparator(self, context)
                layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
    
                layout.menu("VIEW3D_MT_Camera_Options2", icon='OUTLINER_OB_CAMERA')
    
                UseSeparator(self, context)
                layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
                layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
                UseSeparator(self, context)
                layout.operator("object.delete", text="Delete Object", icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Other2", icon='OBJECT_DATA')
    
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    
    # Edit Lattice #
            if obj and obj.type == 'LATTICE' and obj.mode in {'EDIT'}:
    
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Edit_Lattice2",
    
                            icon='RESTRICT_SELECT_OFF')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_TransformMenu2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenu2", icon='PIVOT_CURSOR')
    
                UseSeparator(self, context)
                layout.prop_menu_enum(settings, "proportional_edit",
                                      icon="PROP_CON")
                layout.prop_menu_enum(settings, "proportional_edit_falloff",
                                      icon="SMOOTHCURVE")
                UseSeparator(self, context)
                layout.operator("lattice.make_regular")
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Other2", icon='OBJECT_DATA')
    
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    
    # Empty Object Mode #
            if obj and obj.type == 'EMPTY' and obj.mode in {'OBJECT'}:
    
                layout.operator_context = 'INVOKE_REGION_WIN'
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Object2", icon='RESTRICT_SELECT_OFF')
    
                layout.menu("VIEW3D_MT_AddMenu2", icon='OBJECT_DATAMODE')
                layout.menu("VIEW3D_MT_Object2", icon='VIEW3D')
    
                layout.menu("VIEW3D_MT_TransformMenuLite2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenuLite2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_ParentMenu2", icon='PIVOT_ACTIVE')
    
                layout.menu("VIEW3D_MT_GroupMenu2", icon='GROUP')
    
                UseSeparator(self, context)
                layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
    
                layout.menu("VIEW3D_MT_Camera_Options2", icon='OUTLINER_OB_CAMERA')
    
                UseSeparator(self, context)
                layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
                UseSeparator(self, context)
                layout.operator("object.delete", text="Delete Object", icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    # Speaker Object Mode #
            if obj and obj.type == 'SPEAKER' and obj.mode in {'OBJECT'}:
    
                layout.operator_context = 'INVOKE_REGION_WIN'
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Object2", icon='RESTRICT_SELECT_OFF')
    
                layout.menu("VIEW3D_MT_AddMenu2", icon='OBJECT_DATAMODE')
                layout.menu("VIEW3D_MT_Object2", icon='VIEW3D')
    
                layout.menu("VIEW3D_MT_TransformMenuLite2", icon='MANIPUL')
    
                layout.menu("VIEW3D_MT_CursorMenuLite2", icon='PIVOT_CURSOR')
    
                layout.menu("VIEW3D_MT_ParentMenu2", icon='PIVOT_ACTIVE')
    
                layout.menu("VIEW3D_MT_GroupMenu2", icon='GROUP')
    
                UseSeparator(self, context)
                layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
                UseSeparator(self, context)
                layout.operator("object.delete", text="Delete Object", icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
    
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    
    # Particle Menu #
            if obj and context.mode == 'PARTICLE':
    
    
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.menu("VIEW3D_MT_View_Menu2", icon='ZOOM_ALL')
                layout.menu("VIEW3D_MT_Select_Particle2",
    
                layout.menu("VIEW3D_MT_Selection_Mode_Particle2",
    
                            text="Select and Display Mode", icon='PARTICLE_PATH')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_TransformMenu2", icon='MANIPUL')
                layout.menu("VIEW3D_MT_MirrorMenu2", icon='MOD_MIRROR')
    
                layout.menu("VIEW3D_MT_CursorMenuLite2", icon='PIVOT_CURSOR')
    
                layout.prop_menu_enum(settings, "proportional_edit",
                                      icon="PROP_CON")
                layout.prop_menu_enum(settings, "proportional_edit_falloff",
                                      icon="SMOOTHCURVE")
    
                UseSeparator(self, context)
                layout.menu("VIEW3D_MT_particle", icon='PARTICLEMODE')
                layout.menu("VIEW3D_MT_particle_specials", text="Hair Specials", icon='HAIR')
                UseSeparator(self, context)
                layout.operator("object.delete", text="Delete Object", icon='X')
                UseSeparator(self, context)
    
                layout.menu("VIEW3D_MT_UndoS2", icon='ARROW_LEFTRIGHT')
                layout.menu("VIEW3D_MT_Object_Interactive_Mode2", icon='VIEW3D')
    
                UseSeparator(self, context)
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
    # ********** Object Menu **********
    class VIEW3D_MT_Object2(Menu):
        bl_context = "objectmode"
        bl_label = "Object"
    
        def draw(self, context):
            layout = self.layout
            view = context.space_data
            is_local_view = (view.local_view is not None)
    
            layout.operator("object.delete", text="Delete...").use_global = False
            UseSeparator(self, context)
            layout.menu("VIEW3D_MT_object_parent")
    
            layout.menu("VIEW3D_MT_Duplicate2")
    
            layout.operator("object.join")
    
            if is_local_view:
                layout.operator_context = 'EXEC_REGION_WIN'
                layout.operator("object.move_to_layer", text="Move out of Local View")
                layout.operator_context = 'INVOKE_REGION_WIN'
            else:
                layout.operator("object.move_to_layer", text="Move to Layer...")
    
            layout.menu("VIEW3D_MT_make_links", text="Make Links...")
    
            layout.menu("VIEW3D_MT_Object_Data_Link2")
    
            layout.menu("VIEW3D_MT_AutoSmooth2", icon='ALIASED')
    
            UseSeparator(self, context)
            layout.menu("VIEW3D_MT_object_constraints")
            layout.menu("VIEW3D_MT_object_track")
            layout.menu("VIEW3D_MT_object_animation")
            UseSeparator(self, context)
            layout.menu("VIEW3D_MT_object_game")
            layout.menu("VIEW3D_MT_object_showhide")
            UseSeparator(self, context)
            layout.operator_menu_enum("object.convert", "target")
    
    
    # ********** Object Add **********
    class VIEW3D_MT_AddMenu2(Menu):
        bl_label = "Add Object"
    
        def draw(self, context):
            layout = self.layout
            layout.operator_context = 'INVOKE_REGION_WIN'
    
            layout.menu("VIEW3D_MT_mesh_add", text="Add Mesh",
    
            layout.menu("VIEW3D_MT_curve_add", text="Add Curve",
    
            layout.menu("VIEW3D_MT_surface_add", text="Add Surface",
    
                        icon='OUTLINER_OB_SURFACE')
            layout.operator_menu_enum("object.metaball_add", "type",
                                      icon='OUTLINER_OB_META')
            layout.operator("object.text_add", text="Add Text",
                            icon='OUTLINER_OB_FONT')
            UseSeparator(self, context)
    
            layout.menu("VIEW3D_MT_armature_add", text="Add Armature",
    
                        icon='OUTLINER_OB_ARMATURE')
            layout.operator("object.add", text="Lattice",
                            icon='OUTLINER_OB_LATTICE').type = 'LATTICE'
            layout.operator_menu_enum("object.empty_add", "type", text="Empty", icon='OUTLINER_OB_EMPTY')
            UseSeparator(self, context)
            layout.operator("object.speaker_add", text="Speaker", icon='OUTLINER_OB_SPEAKER')
            UseSeparator(self, context)
            layout.operator("object.camera_add", text="Camera",
                            icon='OUTLINER_OB_CAMERA')
            layout.operator_menu_enum("object.lamp_add", "type",
                                      icon="OUTLINER_OB_LAMP")
            UseSeparator(self, context)
            layout.operator_menu_enum("object.effector_add", "type",
                                      text="Force Field",
                                      icon='FORCE_FORCE')
            layout.menu("VIEW3D_MT_object_quick_effects", text="Quick Effects", icon='PARTICLES')
            UseSeparator(self, context)
            layout.operator_menu_enum("object.group_instance_add", "group",
                                      text="Group Instance",
                                      icon='GROUP_VERTEX')
    
    # ********** Object Manipulator **********
    class VIEW3D_MT_ManipulatorMenu12(Menu):
        bl_label = "Manipulator"
    
        def draw(self, context):
            layout = self.layout
            layout.operator_context = 'INVOKE_REGION_WIN'
            props = layout.operator("view3d.enable_manipulator", text='Translate', icon='MAN_TRANS')
            props.translate = True
            props = layout.operator("view3d.enable_manipulator", text='Rotate', icon='MAN_ROT')
            props.rotate = True
            props = layout.operator("view3d.enable_manipulator", text='Scale', icon='MAN_SCALE')
            props.scale = True
            UseSeparator(self, context)
            props = layout.operator("view3d.enable_manipulator", text='Combo', icon='MAN_SCALE')
            props.scale = True
            props.rotate = True
            props.translate = True
            props = layout.operator("view3d.enable_manipulator", text='Hide', icon='MAN_SCALE')
            props.scale = False
            props.rotate = False
            props.translate = False
    
    
    # ********** Object Mirror **********
    class VIEW3D_MT_MirrorMenu2(Menu):
        bl_label = "Mirror"
    
        def draw(self, context):
            layout = self.layout
            layout.operator("transform.mirror", text="Interactive Mirror")
            UseSeparator(self, context)
            layout.operator_context = 'INVOKE_REGION_WIN'
            props = layout.operator("transform.mirror", text="X Global")
            props.constraint_axis = (True, False, False)
            props.constraint_orientation = 'GLOBAL'
            props = layout.operator("transform.mirror", text="Y Global")
            props.constraint_axis = (False, True, False)
            props.constraint_orientation = 'GLOBAL'
            props = layout.operator("transform.mirror", text="Z Global")
            props.constraint_axis = (False, False, True)
            props.constraint_orientation = 'GLOBAL'
    
                UseSeparator(self, context)
                props = layout.operator("transform.mirror", text="X Local")
                props.constraint_axis = (True, False, False)
                props.constraint_orientation = 'LOCAL'
                props = layout.operator("transform.mirror", text="Y Local")
                props.constraint_axis = (False, True, False)
                props.constraint_orientation = 'LOCAL'
                props = layout.operator("transform.mirror", text="Z Local")
                props.constraint_axis = (False, False, True)
                props.constraint_orientation = 'LOCAL'
                UseSeparator(self, context)
                layout.operator("object.vertex_group_mirror")
    
    # ********** Object Snap Cursor **********
    class VIEW3D_MT_Pivot2(Menu):
        bl_label = "Pivot"
    
        def draw(self, context):
            layout = self.layout
            layout.prop(context.space_data, "pivot_point", expand=True)
            if context.active_object.mode == 'OBJECT':
                UseSeparator(self, context)
                layout.prop(context.space_data, "use_pivot_point_align", text="Center Points")
    
    class VIEW3D_Snap_Context2(Menu):
        bl_label = "Snapping"
    
        def draw(self, context):
            layout = self.layout
            toolsettings = context.tool_settings
            layout.prop(toolsettings, "snap_element", expand=True)
            layout.prop(toolsettings, "use_snap")
    
    class VIEW3D_Snap_Origin2(Menu):
        bl_label = "Snap  "
    
        def draw(self, context):
            layout = self.layout
            layout.operator_context = 'EXEC_AREA'
            layout.operator("object.origin_set",
                            text="Geometry to Origin").type = 'GEOMETRY_ORIGIN'
            UseSeparator(self, context)
            layout.operator("object.origin_set",
                            text="Origin to Geometry").type = 'ORIGIN_GEOMETRY'
            layout.operator("object.origin_set",
                            text="Origin to 3D Cursor").type = 'ORIGIN_CURSOR'
            layout.operator("object.origin_set",
                            text="Origin to Center of Mass").type = 'ORIGIN_CENTER_OF_MASS'
    
    class VIEW3D_MT_CursorMenu2(Menu):
        bl_label = "Snap Cursor"
    
    
        def draw(self, context):
            layout = self.layout
            layout.operator_context = 'INVOKE_REGION_WIN'
    
            layout.menu("VIEW3D_Snap_Origin2")
            layout.menu("VIEW3D_Snap_Context2")
    
            UseSeparator(self, context)
            layout.operator("view3d.snap_cursor_to_selected",
                            text="Cursor to Selected")
            layout.operator("view3d.snap_cursor_to_center",
                            text="Cursor to Center")
            layout.operator("view3d.snap_cursor_to_grid",
                            text="Cursor to Grid")
            layout.operator("view3d.snap_cursor_to_active",
                            text="Cursor to Active")
            UseSeparator(self, context)
    
            layout.operator("view3d.snap_selected_to_cursor",
                            text="Selection to Cursor").use_offset = False
            layout.operator("view3d.snap_selected_to_cursor",
                            text="Selection to Cursor (Keep Offset)").use_offset = True
    
            layout.operator("view3d.snap_selected_to_grid",
                            text="Selection to Grid")
    
            layout.operator("view3d.snap_cursor_selected_to_center2",
    
                            text="Selection and Cursor to Center")
            UseSeparator(self, context)
    
            layout.menu("VIEW3D_MT_Pivot2")
    
            layout.operator("view3d.pivot_cursor2",
    
                            text="Set Cursor as Pivot Point")
    
            layout.operator("view3d.revert_pivot2",
    
                            text="Revert Pivot Point")
    
    
    class VIEW3D_MT_CursorMenuLite2(Menu):
        bl_label = "Snap Cursor"
    
        def draw(self, context):
            layout = self.layout
            layout.operator_context = 'INVOKE_REGION_WIN'
    
            layout.menu("VIEW3D_Snap_Origin2")
    
            UseSeparator(self, context)
            layout.operator("view3d.snap_cursor_to_selected",
                            text="Cursor to Selected")
            layout.operator("view3d.snap_cursor_to_center",
                            text="Cursor to Center")
            layout.operator("view3d.snap_cursor_to_grid",
                            text="Cursor to Grid")
            layout.operator("view3d.snap_cursor_to_active",
                            text="Cursor to Active")
            UseSeparator(self, context)
    
            layout.operator("view3d.snap_selected_to_cursor",
                            text="Selection to Cursor").use_offset = False
            layout.operator("view3d.snap_selected_to_cursor",
                            text="Selection to Cursor (Keep Offset)").use_offset = True
    
            layout.operator("view3d.snap_selected_to_grid",
                            text="Selection to Grid")