Related to #23861: addons now modify keyconfigs.default instead of
[blender-addons-contrib.git] / space_view3d_manipulator_Menu.py
1 #re creating the functionality of the manipulator menu from 2.49
2 #
3 #ported by Michael Williamson
4 #
5 # ##### BEGIN GPL LICENSE BLOCK #####
6 #
7 #  This program is free software; you can redistribute it and/or
8 #  modify it under the terms of the GNU General Public License
9 #  as published by the Free Software Foundation; either version 2
10 #  of the License, or (at your option) any later version.
11 #
12 #  This program is distributed in the hope that it will be useful,
13 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 #  GNU General Public License for more details.
16 #
17 #  You should have received a copy of the GNU General Public License
18 #  along with this program; if not, write to the Free Software Foundation,
19 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 #
21 # ##### END GPL LICENSE BLOCK #####
22
23 bl_addon_info = {
24     'name': 'Manipulator Menu',
25     'author': 'MichaelW',
26     'version': (1,),
27     'blender': (2, 5, 3),
28     'api': 31667,
29     'location': 'View3D > Ctrl Space ',
30     'description': 'Menu to change the manipulator type and/or disable it',
31     'wiki_url': 'http://wiki.blender.org/index.php/Extensions:2.5/Py/'\
32         'Scripts/3D_interaction/Manipulator_Menu',
33     'tracker_url': 'https://projects.blender.org/tracker/index.php?'\
34         'func=detail&aid=22092&group_id=153&atid=468',
35     'category': '3D View'}
36
37 "Add manipulator menu  (Ctrl-space in 3d view)"
38
39 """
40 This adds a the Dynamic Menu in the 3DView.
41
42 Usage:
43 * Ctrl Space in the 3d view
44
45 * Choose your function from the menu.
46
47 Version history:
48 V1(MichaelW) initial port form 2.49
49 """
50
51
52 import bpy
53
54 def main(context):
55     bpy.context.space_data.show_manipulator = False
56
57 class VIEW3D_OT_disable_manipulator(bpy.types.Operator):
58     ''''''
59     bl_idname = "VIEW3D_OT_disable_manipulator"
60     bl_label = "disable manipulator"
61
62     @classmethod
63     def poll(cls, context):
64         return context.active_object != None
65
66     def execute(self, context):
67         main(context)
68         return {'FINISHED'}
69
70
71
72 class VIEW3D_MT_ManipulatorMenu(bpy.types.Menu):
73     ''''''
74     bl_label = "ManipulatorType"
75
76     @classmethod
77     def poll(cls, context):
78         return context.space_data.type == 'VIEW_3D'
79         
80     def draw(self, context):
81         layout = self.layout
82         layout.operator_context = 'INVOKE_REGION_WIN'
83
84
85
86         prop = layout.operator("view3d.enable_manipulator",text ='Translate', icon='MAN_TRANS')
87         prop.translate = True
88
89         prop = layout.operator("view3d.enable_manipulator",text ='Rotate', icon='MAN_ROT')
90         prop.rotate = True
91
92         prop = layout.operator("view3d.enable_manipulator",text ='Scale', icon='MAN_SCALE')
93         prop.scale = True
94         layout.separator()
95
96         prop = layout.operator("view3d.enable_manipulator",text ='Combo', icon='MAN_SCALE')
97         prop.scale = True
98         prop.rotate = True
99         prop.translate = True
100
101         layout.separator()
102         if not bpy.context.space_data.show_manipulator:
103             bpy.context.space_data.show_manipulator = True
104         layout.operator("view3d.disable_manipulator",text ='Disable', icon='MANIPUL')
105         layout.separator()
106
107
108
109 def register():
110     km = bpy.context.window_manager.keyconfigs.default.keymaps['3D View']
111     for kmi in km.items:
112         if kmi.idname == 'wm.context_toggle':
113             if kmi.ctrl and not kmi.shift and not kmi.alt and kmi.value =="PRESS":
114                 if kmi.type =="SPACE":
115                     km.items.remove(kmi)
116                     break
117     kmi = km.items.new('wm.call_menu', 'SPACE', 'PRESS' , ctrl=True)
118     kmi.properties.name = "VIEW3D_MT_ManipulatorMenu"
119
120
121 def unregister():
122     km = bpy.context.window_manager.keyconfigs.default.keymaps['3D View']
123     for kmi in km.items:
124         if kmi.idname == 'wm.call_menu':
125             if kmi.properties.name == "VIEW3D_MT_ManipulatorMenu":
126                 km.items.remove(kmi)
127                 break
128
129 if __name__ == "__main__":
130     register()