Updates to hotkeys.py with some hotkeys I've added/changed over past few releases...
[blender.git] / release / scripts / hotkeys.py
1 #!BPY
2 # coding: utf-8
3 """ Registration info for Blender menus:
4 Name: 'HotKey and MouseAction Reference'
5 Blender: 242
6 Group: 'Help'
7 Tip: 'All the hotkeys/short keys'
8 """ 
9
10 __author__ = "Jean-Michel Soler (jms)"
11 __url__ = ("blender", "blenderartist",
12 "Script's homepage, http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_hotkeyscript.htm",
13 "Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
14 __version__ = "21/01/2007"
15
16 __bpydoc__ = """\
17 This script is a reference about all hotkeys and mouse actions in Blender.
18
19 Usage:
20
21 Open the script from the Help menu and select group of keys to browse.
22
23 Notes:<br>
24     Additional entries in the database (c) 2004 by Bart.
25     Additional entries in the database for blender 2.37 --> 2.43 (c) 2003-2007/01 by jms.
26     
27 """
28
29 #------------------------
30 #  Hotkeys script
31 #        (c) jm soler (2003-->01/2007)
32 # -----------------------
33 # Page officielle :
34 #   http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_hotkeyscript.htm
35 # Communiquer les problemes et les erreurs sur:
36 #   http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender
37 #--------------------------------------------- 
38 # ce script est proposé sous licence GPL pour etre associe
39 # a la distribution de Blender 2.33 et suivant
40 # --------------------------------------------------------------------------
41 # this script is released under GPL licence
42 # for the Blender 2.33 scripts package
43 # --------------------------------------------------------------------------
44 # ***** BEGIN GPL LICENSE BLOCK *****
45 #
46 # Script copyright (C) 2003, 2004: Jean-Michel Soler 
47 # Additionnal entries in the original data base (c) 2004 by Bart (bart@neeneenee.de)
48 #
49 # This program is free software; you can redistribute it and/or
50 # modify it under the terms of the GNU General Public License
51 # as published by the Free Software Foundation; either version 2
52 # of the License, or (at your option) any later version.
53 #
54 # This program is distributed in the hope that it will be useful,
55 # but WITHOUT ANY WARRANTY; without even the implied warranty of
56 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
57 # GNU General Public License for more details.
58 #
59 # You should have received a copy of the GNU General Public License
60 # along with this program; if not, write to the Free Software Foundation,
61 # Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
62 #
63 # ***** END GPL LICENCE BLOCK *****  
64 # --------------------------------------------------------------------------
65
66 import Blender
67 from Blender.Draw import *
68 from Blender.BGL import *
69
70 # INTERNATIONAL={0:'English','1':'French'}
71 # LANGUAGE=0
72
73 hotkeys={
74 'Search ':[['', '']],
75 'Specials 1 ':[
76 [',', 'Set Bounding Box rotation scaling pivot'],
77 ['Ctrl-,', 'Set Median Point rotation scaling pivot'],
78 ['.', 'Set 3D cursor as rotation scaling pivot'],
79 ['.', 'Outliner : to get the current active data in center of view'],
80 ['Ctrl-.', 'Set Individual Object Centers as rotation scaling pivot'],
81 ['~', 'Display all layers (German keys: ö,french keyboard: ù)'],
82 ['Shift-~', 'Display all/previous layers (German keys: Shift-ö, french keyboard: shift-ù)'],
83 ['ENTER', 'Outliner : to open a subtree, works on entire item line. '], 
84 ['HOME', 'Outliner :  to show the entire Object hierarchy. '],
85 ['SHIFT+BACKSPACE',' Text edit mode: Clear text '],
86 ['SPACE', 'Popup menu'],
87 ['SPACE', '3D View: camera selected'],
88 ['Ctrl-SPACE', 'Manipulator (transform widget) Menu'],
89 ['TAB', 'Enter/exit Edit Mode'],
90 ['TAB', 'Edit Mode and Numerical Edit (see N key) : move to next input value'],
91 ['TAB', 'Sequencer: Edit meta strip'],
92 ['TAB', 'IPO: Edit selected'],
93 ['TAB', 'Text Editor : indent'],
94 ['TAB', 'NODE window : Edit group'], #243       
95 ['Shift-TAB', 'Text Editor : unindent'],
96 ['Shift-TAB', 'Edit Mode: Toggle snaping'],
97 ['Ctrl-TAB', 'ARMATURE : Enter/exit Pose Mode'],
98 ['Ctrl-TAB','MESH : all views, enter exit weight paint mode.'],
99 ['Shift-TAB', 'Edit Mode : Enter Object Mode'],
100 ['Ctrl-Open menu /', ''],
101 ['Ctrl-Load Image', 'Opens a thumbnail browser instead of file browser for images'],
102 ['.', '...']
103 ],
104
105 'Mouse ':[
106 ['Actions:', ''],
107 ['LMB', '3D View: Set 3D Cursor'],
108 ['LMB', '3D View: camera selected'],
109 ['LMB drag', 'Border select circle: add to selection'],
110 ['LMB hold down', 'Popup menu'],
111 ['LMB hold down drag', 'Gesture'],
112 ['Ctrl-LMB', 'IPO: Add key'],
113 ['Ctrl-LMB', '3D View: OBJECT or EDIT mode, select with the Lasso tool'],
114 ['Ctrl-LMB', '3D View: ARMATURE EDIT mode, add a new bone to the selected end '],
115 ['Shift-LMB','MANIPULATOR (transform widget): select the axe to remove in the current'],
116 ['Shift-LMB','MANIPULATOR      transformation ( if there is a problem with small step adjustment'], 
117 ['Shift-LMB','MANIPULATOR      first select the axe or axes with LBM alone)'],
118 ['Shift-LMB', 'Outliner : Hold Shift while clicking on a triangle arrow to open/close the subtree below'],
119 ['MMB', 'Rotate'],
120 ['Ctrl-MMB', 'Zoom view'],
121 ['Ctrl-LMB', 'Outliner : Hold CTRL while clicking on a name allows you to edit a name.'],
122 ['Ctrl-LMB', 'Outliner :         This works for all visualized data, including bones or vertex groups,'],
123 ['Ctrl-LMB', 'Outliner :         but not for \'nameless\' items that draw the links to Hooks, Deform '],
124 ['Ctrl-LMB', 'Outliner :   Groups or Constraints.'],
125 ['Shift-MMB', 'Move view'],
126 ['RMB', 'Select'],
127 ['RMB drag', 'Border select circle: subtract from selection'],
128 ['RMB hold down', 'Popup menu'],
129 ['Alt-RMB', 'Object Mode :Select but in a displayed list of objects located under the mouse cursor'],
130 ['Alt-RMB', 'Edit Mode: Select EDGES LOOP '],
131 ['Alt+Ctrl-RMB', 'Edit Mode: Select FACES LOOP'],       
132 ['Alt+Ctrl-RMB', 'UV Image Editor: Select face'],
133 ['Shift-RMB', 'Add/subtract to/from selection'],
134 ['Wheel', 'Zoom view'],
135 ['Transformations:', ''],
136 ['Drag+Ctrl', 'Step adjustment'],
137 ['Drag+Ctrl+Shift', 'Small step adjustment (Transform Widget : first select the axe or axes with LBM alone)'],
138 ['Drag+Shift', 'Fine adjustment (Transform Widget : first select the axe or axes with LBM alone)'],
139 ['LMB', 'Confirm transformation'],
140 ['MMB', 'Toggle optional transform feature'],
141 ['RMB', 'Abort transformation'],
142 ['LMB', 'Grease Pencil: when "Draw Mode On", draw new stroke'],
143 ['RMB', 'Grease Pencil: when "Draw Mode On", eraser tool for stroke segments'],
144 ['Shift-LMB', 'Grease Pencil: draw new stroke'],
145 ['Alt-RMB', 'Grease Pencil: eraser tool for stroke segments'],
146 ['.', '...']
147 ],
148
149 'F-Keys ':[
150 ['F1', 'Open File'],
151 ['Shift-F1', 'Library Data Select'],
152 ['F2', 'Save File'],
153 ['Shift-F2', 'Export DXF'],
154 ['Ctrl-F2', 'Save/export in vrml 1.0 format' ],
155 ['F3', 'Save image'],
156 ['Ctrl-F3', 'Save image : dump 3d view'],
157 ['Ctrl-Shift-F3', 'Save image : dump screen'],
158 ['F4', 'Logic Window (may change)'],
159 ['Shift-F4', 'Object manager Data Select '],
160 ['F5', 'Material Window'],
161 ['Shift-F5', '3D Window'],
162 ['F6', 'Texture Window'],
163 ['Shift-F6', 'IPO Window'],
164 ['F7', 'Object Window'],
165 ['Shift-F7', 'Buttons Window'],
166 ['F8', 'World Window'],
167 ['Shift-F8', 'Video Sequencer Window'],
168 ['F9', 'Edit Mode Window'],
169 ['Shift-F9', 'OOP Window'],
170 ['Alt-Shift-F9', 'OutLiner Window'],
171 ['F10', 'Render Window'],
172 ['Shift-F10', 'UV Image Editor'],
173 ['F11', 'Recall the last rendered image'],
174 ['Shift-F11', 'Text Editor'],
175 ['ctrl-F11', 'replay the last rendered animation'],
176 ['F12', 'Render current Scene'],
177 ['Ctrl-F12', 'Render animation'],
178 ['Ctrl-Shift-F12', 'NLA Editor'],
179 ['Shift-F12', 'Action Editor'],
180 ['Shift-F12', 'Action Editor'],
181 ['.', '...']
182 ],
183
184 'Numbers ':[
185 ['1..2..0-=', 'Show layer 1..2..12'],
186 ['1..2..0-=', 'Edit Mode with Size, Grab, rotate tools : enter value'],
187 ['Alt-1..2..0', 'Show layer 11..12..20'],
188 ['Shift-1..2..0', 'Toggle layer 1..2..12'],
189 ['Ctrl-1..4', 'Object/Edit Mode : change subsurf level to the selected value'],
190 ['Shift-ALT-...', 'Toggle layer 11..12..20'],
191 ['Crtl-Shift-ALT-3', 'Edit Mode & Face Mode : Triangle faces'],
192 ['Crtl-Shift-ALT-4', 'Edit Mode & Face Mode : Quad faces'],
193 ['Crtl-Shift-ALT-5', 'Edit Mode & Face Mode : Non quad or triangle faces'],
194 ['.', '...']
195 ],
196
197 'Numpad ':[
198 ['Numpad DEL', 'Zoom on object'],
199 ['Numpad /', 'Local view on object (hide others)'],
200 ['Numpad *', 'Rotate view to objects local axes'],
201 ['Numpad +', 'Zoom in (works everywhere)'],
202 ['Numpad -', 'OutLiner window, Collapse one level of the  hierarchy'],
203 ['Alt-Numpad +', 'Proportional vertex Edit Mode: Increase range of influence'],
204 ['Ctrl-Numpad +', 'Edit Mode: Select More vertices'],
205 ['Numpad -', 'Zoom out (works everywhere)'],
206 ['Numpad +', 'OutLiner window, Expand one level of the  hierarchy'],
207 ['Alt-Numpad -', 'Proportional vertex Edit Mode: Decrease range of influence'],
208 ['Ctrl-Numpad +', 'Edit Mode: Select Less vertices'],
209 ['Numpad 0', 'Set Camera view'],
210 ['Ctrl-Numpad 0', 'Set active object as camera'],
211 ['Alt-Numbad 0', 'Restore old camera'],
212 ['Ctrl-Alt-Numpad 0', 'Align active camera to view'],
213 ['Numpad 1', 'Front view'],
214 ['Ctrl-Numpad 1', 'Back view'],
215 ['Numpad 3', 'Right view'],
216 ['Ctrl-Numpad 3', 'Left view'],
217 ['Numpad 7', 'Top view'],
218 ['Ctrl-Numpad 7', 'Bottom view '],
219 ['Numpad 5', 'Toggle orthogonal/perspective view'],
220 ['Numpad 9', 'Redraw view'],
221 ['Numpad 4', 'Rotate view left'],
222 ['ctrl-Shift-Numpad 4', 'Previous Screen'],
223 ['Numpad 6', 'Rotate view right'],
224 ['ctrl-Shift-Numpad 6', 'Next Screen'],
225 ['Numpad 8', 'Rotate view up'],
226 ['Numpad 2', 'Rotate view down'],
227 ['.', '...']
228 ],
229
230 'Arrows ':[
231 ['Home/Pos1', 'View all',''],
232 ['Home', 'OutLiner Windows, Show hierarchy'],
233 ['PgUp', 'Edit Mode and Proportionnal Editing Tools, increase influence'],
234 ['PgUp', 'Strip Editor, Move Down'],
235 ['PgUn', 'TimeLine: Jump to next marker'],
236 ['PgUp', 'IPO: Select next keyframe'],
237 ['Ctrl-PgUp', 'IPO: Select and jump to next keyframe'],
238 ['Ctrl-PgUn', 'TimeLine: Jump to next key'],    
239 ['PgDn', 'Edit Mode and Proportionnal Editing Tools, decrease influence'],
240 ['PgDn', 'Strip Editor, Move Up'],
241 ['PgDn', 'TimeLine: Jump to prev marker'],
242 ['PgDn', 'IPO: Select previous keyframe'],
243 ['Ctrl-PgDn', 'IPO: Select and jump to previous keyframe'],
244 ['Ctrl-PgDn', 'TimeLine: Jump to prev key'],            
245 ['Left', 'One frame backwards'],
246 ['Right', 'One frame forwards'],
247 ['Down', '10 frames backwards'],
248 ['Up', '10 frames forwards'],
249 ['Alt-Down', 'Blender in Window mode'],
250 ['Alt-Up', 'Blender in Fullscreen mode'],
251 ['Ctrl-Left', 'Previous screen'],
252 ['Ctrl-Right', 'Next screen'],
253 ['Ctrl-Alt-C', 'Object Mode : Add  Constraint'],
254 ['Ctrl-Down', 'Maximize window toggle'],
255 ['Ctrl-Up', 'Maximize window toggle'],
256 ['Shift-Arrow', 'Toggle first frame/ last frame'],
257 ['.', '...']
258 ],
259
260 'Letters ':[ 
261 {
262 "A":[ 
263 ['A', 'Select all/Deselect all'],
264 ['A', 'Outliner : Select all/Deselect all'],
265 ['A', 'Ipo Editor : Object mode, Select all/Deselect all displayed Curves'],  #243
266 ['A', 'Ipo Editor : Edit mode, Select all/Deselect all vertices'], #243
267 ['A', 'Render window (F12) : Display alpha plane'],
268 ['Alt-A', 'Play animation in current window'],
269 ['Ctrl-A', 'Apply objects size/rotation to object data'],
270 ['Ctrl-A', 'Text Editor: Select all'],
271 ['Ctrl-ALT-A', '3D-View: Armature Edit mode, align selected bones to active bone'],
272 ['Shift-A', 'Sequencer: Add menu'],
273 ['Shift-A', '3D-View: Add menu'],
274 ['Shift-ALT-A', 'Play animation in all windows'],
275 ['Shift-CTRL-A', 'Apply lattice / Make dupliverts real'],
276 ['Shift-CTRL-A', 'Apply Deform '],
277 ['.', '...']
278 ],
279
280 "B":[ 
281 ['B', 'Border select'],
282 ['BB', 'Circle select'],
283 ['Alt+B', 'Object Mode: Select visible view section in 3D space'],
284 ['Shift-B', 'Set render border (in active camera view)'],
285 ['Ctrl-Alt+B', 'Object Mode: in 3D view, Bake (on an image in the uv editor window) the selected Meshes'], #243
286 ['Ctrl-Alt+B', 'Object Mode: in 3D view, Bake Full render of selected Meshes'],  #243
287 ['Ctrl-Alt+B', 'Object Mode: in 3D view, Bake Ambient Occlusion of selected Meshes'],  #243     
288 ['Ctrl-Alt+B', 'Object Mode: in 3D view, Bake Normals of the selected Meshes'],  #243
289 ['Ctrl-Alt+B', 'Object Mode: in 3D view, Bake Texture Only of selected Meshes'],        #243
290 ['.', '...']
291 ],
292
293 "C":[ 
294 ['C', 'Center view on cursor'],
295 ['C', 'UV Image Editor: Active Face Select toggle'],
296 ['C', 'Sequencer: Change content of the strip '], #243
297 ['C', 'IPO: Snap current frame to selected key'],
298 ['C', 'TimeLine: Center View'], 
299 ['C', 'File Selector : Copy file'],
300 ['C', 'NODE window : Show cyclic referencies'], #243                            
301 ['Alt-C', 'Object Mode: Convert menu'],
302 ['Alt-C', 'Text Editor: Copy '],
303 ['Ctrl-Shift-C', 'Text Editor: Copy selection to clipboard'],
304 ['Ctrl-C', 'Copy menu (Copy properties of active to selected objects)'],
305 ['Ctrl-C', 'UV Image Editor: Stick UVs to mesh vertex'],
306 ['Ctrl-C','ARMATURE : posemode, Copy pose attributes'],
307 ['Ctrl+Alt-C',' ARMATURE : posemode, add constraint to new empty object.'],
308 ['Shift-C', 'Center and zoom view on selected objects'],
309 ['Shift-C', 'UV Image Editor: Stick local UVs to mesh vertex'],
310 ['.', '...']
311 ],
312
313 "D":[  
314 ['D', 'Set 3d draw mode'],
315 ['Alt-D', 'Object Mode: Create new instance of object'],
316 ['Ctrl-D', 'Display alpha of image texture as wire'],
317 ['Ctrl-D', 'Text Editor : uncomment'],
318 ['Shift-D', 'Create full copy of object'],
319 ['Shift-D', 'NODE window : duplicate'], #243    
320 ['CTRL-SHIFT-D', 'NLA editor : Duplicate markers'],
321 ['CTRL-SHIFT-D', 'Action editor : Duplicate markers'],  
322 ['CTRL-SHIFT-D', 'IPO editor : Duplicate markers'],             
323 ['.', '...']
324 ],
325
326 "E":[ 
327 ['E', 'Edit Mode: Extrude'],
328 ['E', 'UV Image Editor: LSCM Unwrap'],
329 ['E', 'TimeLine: Set current frame as End '],   
330 ['E', 'NODE window : Execute composite'], #243          
331 ['ER', 'Edit Mode: Extrude Rotate'],
332 ['ES', 'Edit Mode: Extrude Scale'],
333 ['ESX', 'Edit Mode: Extrude Scale X axis'],
334 ['ESY', 'Edit Mode: Extrude Scale Y axis'],
335 ['ESZ', 'Edit Mode: Extrude Scale Z axis'],
336 ['EX', 'Edit Mode: Extrude along X axis'],
337 ['EY', 'Edit Mode: Extrude along Y axis'],
338 ['EZ', 'Edit Mode: Extrude along Z axis'],
339 ['Alt-E', 'Edit Mode: exit Edit Mode'],
340 ['Ctrl-E', 'Edit Mode: Edge Specials menu'],
341 ['Ctrl-E', 'Edit Mode: Edge Specials menu, Mark seams'],
342 ['Ctrl-E', 'Edit Mode: Edge Specials menu, Clear seams'],
343 ['Ctrl-E', 'Edit Mode: Edge Specials menu, Rotate Edge CW'],
344 ['Ctrl-E', 'Edit Mode: Edge Specials menu, Rotate Edge CCW'],
345 ['Ctrl-E', 'Edit Mode: Edge Specials menu, Loop Cut'],
346 ['Ctrl-E', 'Edit Mode: Edge Specials menu, Edge Slide'],
347 ['Shift-E', 'Edit Mode: SubSurf Edge Sharpness'],
348 ['.', '...']
349 ],
350
351 "F":[ 
352 ['F', 'Edit mode: Make edge/face'],
353 ['F', 'Sequencer: Set Filter Y'],
354 ['F', 'Object Mode: UV/Face Select mode'],
355 ['Alt-F', 'Edit Mode: Beautify fill'],
356 ['Alt-F,','Text editor : find again '],
357 ['Alt-Ctrl-F,','Text editor : find '],
358 ['Ctrl-F', 'Object Mode: Sort faces in Z direction'],
359 ['Ctrl-F', 'Edit Mode: Flip triangle edges'],
360 ['Shift-F', 'Edit Mode: Fill with triangles'],
361 ['Shift-F', 'Object Mode: fly mode (see header for fly mode keys)'],
362 ['.', '...']
363 ],
364
365 "G":[ 
366 ['G', 'Grab (move)'],
367 ['G', 'Timeline : Grab (move) Marker'],
368 ['Alt-G', 'Clear location (this does only make sense in Object mode)'],
369 ['Alt-G', 'NODE window : ungroup'], #243
370 ['Shift-ALT-G', 'Object mode: Remove selected objects from group'],
371 ['Ctrl-G', 'NODE window : group'], #243 
372 ['Ctrl-G', 'Add selected objects to group'],
373 ['Ctrl-G', 'IPO editor, Grab/move marker'],
374 ['Ctrl-Alt-G', 'MANIPULATOR (transform widget): set in Grab Mode'],
375 ['Shift-G', 'Object mode: Selected Group menu'],
376 ['Shift-G', 'Object mode: Selected Group menu 1, Children'],
377 ['Shift-G', 'Object mode: Selected Group menu 2, Immediate Children'],
378 ['Shift-G', 'Object mode: Selected Group menu 3, Parent'],
379 ['Shift-G', 'Object mode: Selected Group menu 4, Sibling'],
380 ['Shift-G', 'Object mode: Selected Group menu 5, Object of same type'],
381 ['Shift-G', 'Object mode: Selected Group menu 6, Object in same shared layers'],
382 ['Shift-G', 'Object mode: Selected Group menu 7, Objects in same group'],
383 ['.', '...']
384 ],
385
386 "H":[ 
387 ['H', 'Hide selected vertices/faces'],
388 ['H', 'Curves: Set handle type'],
389 ['H', 'Action editor: Handle type aligned'],
390 ['H', 'Action editor: Handle type free'],               
391 ['H', 'NODE window : hide/unhide'], #243                
392 ['Alt-H', 'Edit Mode : Show Hidden vertices/faces'],
393 ['Shift-H', 'Curves: Automatic handle calculation'],
394 ['Shift-H', 'Action editor: Handle type auto'], 
395 ['Shift-H', 'Edit Mode : Hide deselected  vertices/faces'],
396 ['Ctrl-H', 'Edit Mode : Add a hook on selected points or show the hook menu .'],
397 ['.', '...']
398 ],
399
400 "I":[ 
401 ['I', 'Insert Keyframe menu'],
402 ['Alt-I','Delete Keyframe menu'],
403 ['Ctrl-I','Select Inverse'],
404 ['Shift-I','ARMATURE : add IK constraint'],
405 ['Ctrl-Alt-I','ARMATURE : posemode, remove IK constraints.'],
406 ['.', '...']
407 ],
408
409 "J":[ 
410 ['J', 'IPO: Join menu'],
411 ['J', 'Mesh: Join all adjacent triangles to quads'],  
412 ['J', 'Render Window: Swap render buffer'],
413 ['Alt-J,','Text editor : Jump '],
414 ['Ctrl-J', 'Join selected objects'],
415 ['Ctrl-J', 'Nurbs: Add segment'],
416 ['Ctrl-J', 'IPO: Join keyframes menu'],
417 ['.', '...']
418 ],
419
420 "K":[  
421 ['K', '3d Window: Show keyframe positions'],
422 ['K', 'Edit Mode: Loop/Cut menu'],
423 ['K', 'IPO: Show keyframe positions'],
424 ['K', 'Nurbs: Print knots'],
425 ['K', 'VIDEO editor : cut at current frame'], #243              
426 ['Ctrl-K', 'Make skeleton from armature'],
427 ['Shift-K', 'Show and select all keyframes for object'],
428 ['Shift-K', 'Edit Mode: Knife Mode select'],
429 ['Shift-K', 'UV Face Select: Clear vertex colours'],
430 ['Shift-K', 'Vertex Paint: All vertex colours are erased; they are changed to the current drawing colour.'],
431 ['.', '...']
432 ],
433
434 "L":[ 
435 ['L', 'Make local menu'],
436 ['L', 'Edit Mode: Select linked vertices (near mouse pointer)'],
437 ['L', 'NODE window: Select linked from '], #243 
438 ['L', 'OOPS window: Select linked objects'],
439 ['L', 'UV Face Select: Select linked faces'],
440 ['Ctrl-L', 'Make links menu (for instance : to scene...)'],
441 ['Shift-L', 'Select links menu'],
442 ['Shift-L', 'NODE window: Select linked to '], #243
443 ['Ctrl-L', 'POSELIB: browse poses'],
444 ['Shift-L', 'POSELIB: add/replace pose'],
445 ['Ctrl-Shift-L', 'POSELIB: rename pose'],
446 ['Alt-L', 'POSELIB: remove pose'],
447 ['.', '...']
448 ],
449
450 "M":[ 
451 ['M', 'Object mode : Move object to different layer'],
452 ['M', 'Sequencer: Make meta strip (group) from selected strips'],
453 ['M', 'Edit Mode: Mirros Axis menu'],
454 ['M', 'File Selector: rename file'],
455 ['M', 'Video Sequence Editor : Make Meta strip...'],            
456 ['M', 'NLA editor: Add marker'],        
457 ['M', 'Action editor: Add marker'],             
458 ['M', 'IPO editor: Add marker'],        
459 ['M', 'TimeLine: Add marker'],  
460 ['Alt-M', 'Edit Mode: Merge vertices menu'],
461 ['Alt-M', 'Video Sequence Editor : Separate Meta strip...'],    
462 ['Ctrl-M', 'Object Mode: Mirros Axis menu'],
463 ['Shift-M', 'TimeLine: Name marker'],
464 ['Shift-M', 'IPO editor : Name marker'],
465 ['Shift-M', 'NLA editor : Name marker'],
466 ['Shift-M', 'Actions editor : Name marker'],    
467 ['.', '...']
468 ],
469
470 "N":[ 
471 ['N', 'Transform Properties panel'] ,
472 ['N', 'OOPS window: Rename object'],
473 ['N', 'VIDEO SEQUENCE editor : display strip properties '], #243        
474 ['Alt-N', 'Text Editor : New text '],
475 ['Ctrl-N', 'Armature: Recalculate bone roll angles'] ,
476 ['Ctrl-N', 'Edit Mode: Recalculate normals to outside'] ,
477 ['Ctrl-Shift-N', 'Edit Mode: Recalculate normals to inside'],
478 ['.', '...']
479 ],
480
481 "O":[ 
482 ['O', 'Edit Mode/UV Image Editor: Toggle proportional vertex editing'],
483 ['O', 'IPO editor: Clean ipo curves (beware to the thresold needed value)'], #243
484 ['Alt-O', 'Clear object origin'],
485 ['Alt-O', 'Edit mode, 3dview with prop-edit-mode, enables/disables connected'],
486 ['Alt-O', 'Text Editor : Open file '],
487 ['Ctrl-O', 'Open a panel with the ten most recent projets files'], #243
488 ['Shift-O', 'Proportional vertex Edit Mode: Toggle smooth/steep falloff'],
489 ['Shift-O', 'Object Mode: Add a subsurf modifier to the selected mesh'],
490 ['Shift-O', 'IPO editor: Smooth ipo curves'],   #243
491 ['.', '...']
492 ],
493
494 "P":[ 
495 ['P', 'Object Mode: Start realtime engine'],
496 ['P', 'Edit mode: Seperate vertices to new object'],
497 ['shift-P', 'Edit mode: Push-Pull'],
498 ['shift-P', 'Object mode: Add a preview window in the D window'],
499 ['P', 'UV Image Editor:  Pin selected vertices. Pinned vertices will stay in place on the UV editor when executing an LSCM unwrap.'],
500 ['Alt-P', 'Clear parent relationship'],
501 ['Alt-P', 'UV Image Editor: Unpin UVs'],
502 ['Alt-P', 'Text Editor : Run current script '],
503 ['Ctrl-P', 'Make active object parent of selected object'],
504 ['Ctrl-Shift-P', 'Make active object parent of selected object without inverse'],
505 ['Ctrl-P', 'Edit mode: Make active vertex parent of selected object'],
506 ['Ctrl-P', 'ARMATURE : editmode, make bone parent.'],
507 ['Ctrl-Alt-P', 'ARMATURE: edimode, separate bones to new object'],
508 ['.', '...']
509 ],
510
511 "Q":[['Ctrl-Q', 'Quit'],
512      ['.', '...']
513      ],
514
515 "R":[ 
516 ['R', 'FileSelector : remove file'],    
517 ['R', 'Rotate'],
518 ['R', 'IPO: Record mouse movement as IPO curve'],
519 ['R', 'UV Face Select: Rotate menu uv coords or vertex colour'],
520 ['R', 'NODE window : read saved render result'], #243   
521 ['R', 'SEQUENCER window : re-assign entries to another strip '], #243                   
522 ['RX', 'Rotate around X axis'],
523 ['RXX', "Rotate around object's local X axis"],
524 ['RY', 'Rotate around Y axis'],
525 ['RYY', "Rotate around object's local Y axis"],
526 ['RZ', 'Rotate around Z axis'],
527 ['RZZ', "Rotate around object's local Z axis"],
528 ['Alt-R', 'Clear object rotation'],
529 ['Alt-R', 'Text editor : reopen text.'],
530 ['Ctrl-R', 'Edit Mode: Knife, cut selected edges, accept left mouse/ cancel right mouse'],
531 ['Ctrl-Alt-R', 'MANIPULATOR (transform widget): set in Rotate Mode'],
532 ['Shift-R', 'Edit Mode: select Face Loop'],
533 ['Shift-R', 'Nurbs: Select row'],
534 ['.', '...']
535 ],
536
537 "S":[ 
538 ['S', 'Scale'] ,
539 ['S', 'TimeLine: Set Start'],
540 ['SX', 'Flip around X axis'] ,
541 ['SY', 'Flip around Y axis'] ,
542 ['SZ', 'Flip around Z axis'] ,
543 ['SXX', 'Flip around X axis and show axis'] ,
544 ['SYY', 'Flip around Y axis and show axis'] ,
545 ['SZZ', 'Flip around Z axis and show axis'] ,
546 ['Alt-S', 'Edit mode: Shrink/fatten (Scale along vertex normals)'] ,
547 ['Alt-S', 'Text Editor : Save the current text to file '],
548 ['Alt-S',' ARMATURE : posemode editmode: Scale envalope.'],
549 ['Ctrl-Shift-S', 'Edit mode: To Sphere'] ,
550 ['Ctrl-Alt-Shift-S', 'Edit mode: Shear'] ,
551 ['Alt-S', 'Clear object size'] ,
552 ['Ctrl-S', 'Edit mode: Shear'] ,
553 ['Alt-Shift-S,','Text editor : Select the line '],
554 ['Ctrl-Alt-G', 'MANIPULATOR (transform widget): set in Size Mode'],
555 ['Shift-S', 'Cursor/Grid snap menu'],
556 ['Shift-S+1', 'VIDEO SEQUENCE editor : jump to the current frame '],
557 ['.', '...']
558 ],
559
560 "T":[ 
561 ['T', 'Adjust texture space'],
562 ['T', 'Edit mode: Flip 3d curve'],
563 ['T', 'IPO: Menu Change IPO type, 1 Constant'],
564 ['T', 'IPO: Menu Change IPO type, 2 Linear'],
565 ['T', 'IPO: Menu Change IPO type, 3 Bezier'],   
566 ['T', 'TimeLine: Show second'], 
567 ['T', 'VIDEO SEQUENCE editor : toggle between show second andd show frame'], #243       
568 ['Alt-T', 'Clear tracking of object'],
569 ['Ctrl-T', 'Make selected object track active object'],
570 ['Ctrl-T', 'Edit Mode: Convert to triangles'],
571 ['Ctrl-ALT-T', 'Benchmark'],
572 ['.', '...']
573 ],
574
575 "U":[ 
576 ['U', 'Make single user menu (for import completly linked object to another scene  for instance) '] ,
577 ['U', '3D View: Make Single user Menu'] ,
578 ['U', 'UV Face Select: Automatic UV calculation menu'] ,
579 ['U', 'Vertex-/Weightpaint mode: Undo'] ,
580 ['Ctrl-U', 'Save current state as user default'],
581 ['Shift-U', 'Edit Mode: Redo Menu'],
582 ['Alt-U', 'Edit Mode & Object Mode: Undo Menu'],
583 ['.', '...']
584 ],
585
586 "V":[ 
587 ['V', 'Curves/Nurbs: Vector handle'],
588 ['V', 'Edit Mode : Rip selected vertices'],
589 ['V', 'Vertexpaint mode'],
590 ['V', 'UV Image Editor: Stitch UVs'],
591 ['Ctrl-V',' UV Image Editor:  maximize stretch.'],
592 ['V', 'Action editor: Vector'],
593 ['Alt-V', "Scale object to match image texture's aspect ratio"],
594 ['Alt-V', 'Text Editor : Paste '],
595 ['Alt-Shift-V', 'Text Editor : View menu'],
596 ['Alt-Shift-V', 'Text Editor : View menu 1, Top of the file '],
597 ['Alt-Shift-V', 'Text Editor : View menu 2, Bottom of the file '],
598 ['Alt-Shift-V', 'Text Editor : View menu 3, PageUp'],
599 ['Alt-Shift-V', 'Text Editor : View menu 4, PageDown'],
600 ['Ctrl-Shift-V', 'Text Editor: Paste from clipboard'],
601 ['Shift-V', 'Edit mode: Align view to selected vertices'],
602 ['Shift-V', 'UV Image Editor: Limited Stitch UVs popup'],
603 ['.', '...']  
604 ],
605
606 "W":[ 
607 ['W', 'Edit Mode: Specials menu'],
608 ['W', 'Edit Mode: Specials menu, ARMATURE 1 Subdivide'],
609 ['W', 'Edit Mode: Specials menu, ARMATURE 2 Flip Left-Right Name'],
610 ['W', 'Edit Mode: Specials menu, CURVE 1 Subdivide'],
611 ['W', 'Edit Mode: Specials menu, CURVE 2 Swich Direction'],
612 ['W', 'Edit Mode: Specials menu, MESH 1 Subdivide'],
613 ['W', 'Edit Mode: Specials menu, MESH 2 Subdivide Multi'],
614 ['W', 'Edit Mode: Specials menu, MESH 3 Subdivide Multi Fractal'],
615 ['W', 'Edit Mode: Specials menu, MESH 4 Subdivide Smooth'],
616 ['W', 'Edit Mode: Specials menu, MESH 5 Merge'],
617 ['W', 'Edit Mode: Specials menu, MESH 6 Remove Double'],
618 ['W', 'Edit Mode: Specials menu, MESH 7 Hide'],
619 ['W', 'Edit Mode: Specials menu, MESH 8 Reveal'],
620 ['W', 'Edit Mode: Specials menu, MESH 9 Select Swap'],
621 ['W', 'Edit Mode: Specials menu, MESH 10 Flip Normal'],
622 ['W', 'Edit Mode: Specials menu, MESH 11 Smooth'],
623 ['W', 'Edit Mode: Specials menu, MESH 12 Bevel'],
624 ['W', 'Edit Mode: Specials menu, MESH 13 Set Smooth'],
625 ['W', 'Edit Mode : Specials menu, MESH 14 Set Solid'],
626 ['W', 'Object Mode : on MESH objects, Boolean Tools menu'],
627 ['W', 'Object Mode : on MESH objects, Boolean Tools 1 Intersect'],
628 ['W', 'Object Mode : on MESH objects, Boolean Tools 2 union'],
629 ['W', 'Object Mode : on MESH objects, Boolean Tools 3 difference'],
630 ['W', 'Object Mode : on MESH objects, Boolean Tools 4 Add an intersect Modifier'],
631 ['W', 'Object Mode : on MESH objects, Boolean Tools 5 Add an union Modifier'],
632 ['W', 'Object Mode : on MESH objects, Boolean Tools 6 Add a difference Modifier'],
633 ['W', 'Object mode : on TEXT object, Split characters, a new TEXT object by character in the selected string '],
634 ['W', 'UV Image Editor: Weld/Align'],
635 ['WX', 'UV Image Editor: Weld/Align X axis'],
636 ['WY', 'UV Image Editor: Weld/Align Y axis'],
637 ['Ctrl-W', 'Save current file'] ,
638 ['Shift-W', 'Warp/bend selected vertices around cursor'],
639 ['alt-W', 'Export in videoscape format'],
640 ['.', '...']
641  ],
642
643 "X":[ 
644 ['X', 'Delete menu'] ,
645 ['X', 'TimeLine : Remove marker'],
646 ['X', 'NLA : Remove marker'],
647 ['X', 'IPO : Remove marker'],   
648 ['X', 'NODE window : delete'], #243             
649 ['Alt-X', 'Text Editor : Cut '],
650 ['Alt-X', 'Grease Pencil: Delete menu'],
651 ['Ctrl-X', 'Restore default state (Erase all)'],
652 ['.', '...']
653  ],
654
655 "Y":[ 
656 ['Y', 'Edit Mode & Mesh : Split selected vertices/faces from the rest'],
657 ['Ctrl-Y', 'Object Mode : Redo'],
658 ['.', '...']
659 ],
660
661 "Z":[ 
662 ['Z', 'Render Window: 200% zoom from mouse position'],
663 ['Z', 'Switch 3d draw type : solide/ wireframe (see also D)'],
664 ['Alt-Z', 'Switch 3d draw type : solid / textured (see also D)'],
665 ['Alt-Z,','Text editor : undo '],
666 ['Ctrl-Z', 'Object Mode : Undo'],
667 ['Ctrl-Z,','Text editor : undo '],
668 ['Ctrl-Shift-Z,','Text editor : Redo '],
669 ['Shift-Z', 'Switch 3d draw type : shaded / wireframe (see also D)'],
670 ['.', '...']
671 ]}]}
672
673 up=128
674 down=129
675 UP=0
676 SEARCH=131
677 OLDSEARCHLINE=''
678 SEARCHLINE=Create('')
679 LINE=130
680 FINDED=[]
681 LEN=0
682
683 for k in hotkeys.keys():
684    hotkeys[k].append(Create(0))
685
686 for k in hotkeys['Letters '][0]:
687    hotkeys['Letters '][0][k].append(Create(0))
688
689 hotL=hotkeys['Letters '][0].keys()
690 hotL.sort()
691
692 hot=hotkeys.keys()
693 hot.sort()
694
695 def searchfor(SEARCHLINE):
696         global hotkeys, hot
697         FINDLIST=[]
698         for k in hot:
699                 if k not in ['Letters ', 'Search '] :
700                         for l in hotkeys[k][:-1]:
701                                 #print 'k, l : ', k,  l, l[1] 
702                                 if  l[1].upper().find(SEARCHLINE.upper())!=-1:
703                                         FINDLIST.append(l)
704                                         
705                 elif k == 'Letters ':
706                         for l in hotL :
707                                 for l0 in hotkeys['Letters '][0][l][:-1]:
708                                         #print 'k, l : ',l,  k,  l0
709                                         if l0[1].upper().find(SEARCHLINE.upper())!=-1:
710                                                 FINDLIST.append(l0)
711         #print 'FINDLIST',FINDLIST                                      
712         FINDLIST.append(['Find list','Entry'])
713         return FINDLIST                 
714                         
715         
716 glCr=glRasterPos2d
717 glCl3=glColor3f
718 glCl4=glColor4f
719 glRct=glRectf
720
721 cf=[0.95,0.95,0.9,0.0]
722 c1=[0.95,0.95,0.9,0.0]
723 c=cf
724 r=[0,0,0,0]
725
726 def trace_rectangle4(r,c):
727     glCl4(c[0],c[1],c[2],c[3])
728     glRct(r[0],r[1],r[2],r[3])
729
730 def trace_rectangle3(r,c,c1):
731     glCl3(c[0],c[1],c[2])
732     glRct(r[0],r[1],r[2],r[3])
733     glCl3(c1[0],c1[1],c1[2])
734
735 def draw():
736     global r,c,c1,hotkeys, hot, hotL, up, down, UP, SEARCH, SEARCHLINE,LINE
737     global OLDSEARCHLINE, FINDED, SCROLL, LEN
738     size=Buffer(GL_FLOAT, 4)
739     glGetFloatv(GL_SCISSOR_BOX, size)
740     size= size.list
741
742     for s in [0,1,2,3]: size[s]=int(size[s])
743
744     c=[0.75,0.75,0.75,0]
745     c1=[0.6,0.6,0.6,0]
746
747     r=[0,size[3],size[2],0]
748     trace_rectangle4(r,c)
749
750     c=[0.64,0.64,0.64,0]
751     c1=[0.95,0.95,0.9,0.0]
752     
753     r=[0,size[3],size[2],size[3]-40]
754     trace_rectangle4(r,c)
755
756     c1=[0.7,0.7,0.9,0.0]
757     c=[0.2,0.2,0.4,0.0]
758     c2=[0.71,0.71,0.71,0.0]     
759
760     glColor3f(1, 1, 1)
761     glRasterPos2f(42, size[3]-25)
762
763     Text("HotKey and MouseAction Reference")
764    
765     l=0
766     listed=0
767     Llisted=0
768     size[3]=size[3]-18
769
770     BeginAlign()
771     for i, k in enumerate(hot):
772        hotkeys[k][-1]=Toggle(k, i+10, 78*i, size[3]-(47), 78, 24, hotkeys[k][-1].val )
773        l+=len(k)
774        if hotkeys[k][-1].val==1.0:
775            listed= i
776     EndAlign()
777     l=0
778     size[3]=size[3]-4
779     
780     if hot[listed]!='Letters ' and hot[listed]!='Search ' :
781        size[3]=size[3]-8
782        SCROLL=size[3]/21
783        END=-1
784        if SCROLL < len(hotkeys[hot[listed]][:-1]):
785           BeginAlign()
786           Button('/\\',up,4,size[3]+8,20,14,'Scroll up') 
787           Button('\\/',down,4,size[3]-8,20,14,'Scroll down')            
788           EndAlign()
789           if (SCROLL+UP)<len(hotkeys[hot[listed]][:-1]):
790              END=(UP+SCROLL)
791           else:
792              END=-1
793              UP=len(hotkeys[hot[listed]][:-1])-SCROLL         
794        else :
795          UP=0
796        for n in  hotkeys[hot[listed]][:-1][UP:END]:
797           if l%2==0:
798              r=[0,size[3]-(21*l+66),
799                      size[2], size[3]-(21*l+43)]
800              trace_rectangle4(r,c2)
801           glColor3f(0,0,0)
802           glRasterPos2f(4+8, size[3]-(58+21*l))
803           Text(n[0])
804           glRasterPos2f(4+8*15, size[3]-(58+21*l))
805           Text('  : '+n[1]) 
806           l+=1
807           
808     elif hot[listed]=='Search ' :
809        r=[0,size[3]-70,
810           size[2], size[3]-44]
811        trace_rectangle4(r,c2)
812        SEARCHLINE=String(' ', LINE, 42, size[3]-68,200,18,SEARCHLINE.val, 256,'')
813        if len(FINDED)>0:
814         LEN=len(FINDED)    
815         size[3]=size[3]-8
816         SCROLL=size[3]/21
817         END=-1
818         
819         if SCROLL < len(FINDED):
820             BeginAlign()
821             Button('/\\',up,4,size[3]+8,20,14,'Scroll up') 
822             Button('\\/',down,4,size[3]-8,20,14,'Scroll down')            
823             EndAlign()
824             if (SCROLL+UP)<len(FINDED):
825                END=(UP+SCROLL-1)
826             else:
827                END=-1
828                #UP=len(FINDED)-SCROLL
829         else:
830             UP=0         
831         for n in FINDED[UP:END]:
832              if l%2==0:
833                  r=[0,size[3]-(21*l+66+24),
834                      size[2], size[3]-(21*l+43+24)]
835                  trace_rectangle4(r,c2)
836              glColor3f(0,0,0)
837              glRasterPos2f(4+8, size[3]-(58+24+21*l))
838              Text(n[0])
839              glRasterPos2f(4+8*15, size[3]-(58+24+21*l))
840              Text('  : '+n[1]) 
841              l+=1
842     else:
843        BeginAlign()
844        for pos, k in enumerate(hotL):
845             hotkeys['Letters '][0][k][-1]=Toggle(k,pos+20,pos*21, size[3]-(52+18), 21, 18, hotkeys['Letters '][0][k][-1].val )
846             if hotkeys['Letters '][0][k][-1].val==1.0:
847                Llisted=pos
848        EndAlign()
849        size[3]=size[3]-8
850        SCROLL=(size[3]-88)/21
851        END=-1
852        if SCROLL < len(hotkeys['Letters '][0][hotL[Llisted]]):
853           LEN=len(hotkeys['Letters '][0][hotL[Llisted]])
854           BeginAlign()
855           Button('/\\',up,4,size[3]+8,20,14,'Scroll up, you can use arrow or page keys too ') 
856           Button('\\/',down,4,size[3]-8,20,14,'Scroll down,  you can use arrow or page keys too ')            
857           EndAlign()
858           if (UP+SCROLL)<len(hotkeys['Letters '][0][hotL[Llisted]]):
859              END=(UP+SCROLL)
860           else:
861              END=-1
862              UP=len(hotkeys['Letters '][0][hotL[Llisted]])-SCROLL         
863        else :
864          UP=0
865
866        for n in hotkeys['Letters '][0][hotL[Llisted]][UP:END]:
867           if l%2==0:
868              r=[4,size[3]-(21*l+92),
869                      size[2], size[3]-(69+21*l+1)]
870              trace_rectangle4(r,c2)
871
872           glColor3f(0.1, 0.1, 0.15)  
873           glRasterPos2f(4+8, (size[3]-(88+21*l))+3)
874           Text(n[0])
875           glRasterPos2f(4+8*15, (size[3]-(88+21*l))+3)
876           Text('  : '+n[1]) 
877           l+=1
878
879 def event(evt, val):
880     global hotkeys, UP,  SCROLL  , LEN   
881     if (evt== QKEY or evt== ESCKEY): 
882         Exit()
883     elif val:
884       if (evt== PAGEUPKEY):
885          if (UP+SCROLL)<LEN-5: 
886              UP+=5 
887       elif (evt== PAGEDOWNKEY):
888           if UP>4: 
889              UP-=5 
890       elif (evt== UPARROWKEY):
891           if (UP+SCROLL)<LEN-1: 
892              UP+=1
893       elif (evt== DOWNARROWKEY):
894           if UP>0: 
895               UP-=1
896       Redraw()
897
898 def bevent(evt):
899     global hotkeysmhot, hotL, up,down,UP, FINDED
900     global SEARCH, SEARCHLINE,LINE, OLDSEARCHLINE
901
902     if   (evt== 1):
903         Exit()
904
905     elif 9 < evt < 20:
906         for i, k in enumerate(hot):
907            if i+10!=evt:
908                  hotkeys[k][-1].val=0
909                  UP=0 
910         Blender.Window.Redraw()
911
912     elif 19 < evt < 46:
913         for i, k in enumerate(hotL):
914            if i+20!=evt:
915                  hotkeys['Letters '][0][k][-1].val=0
916                  UP=0 
917         Blender.Window.Redraw()
918
919     elif (evt==up):
920        UP+=1
921        Blender.Window.Redraw()
922
923     elif (evt==down):
924        if UP>0: UP-=1
925        Blender.Window.Redraw()
926
927     elif (evt==LINE):
928        if SEARCHLINE.val!='' and SEARCHLINE.val!=OLDSEARCHLINE:
929           OLDSEARCHLINE=SEARCHLINE.val  
930           FINDED=searchfor(OLDSEARCHLINE)
931           Blender.Window.Redraw()
932
933 if __name__ == '__main__':
934         Register(draw, event, bevent)