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