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