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