This commit was manufactured by cvs2svn to create branch 'orange'.
[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__ = "10/04/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 # $Id$
30 #------------------------
31 #  Hotkeys script
32 #         jm soler (2003-->10/2004)
33 # -----------------------
34 # Page officielle :
35 #   http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_hotkeyscript.htm
36 # Communiquer les problemes et les erreurs sur:
37 #   http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender
38 #--------------------------------------------- 
39 # ce script est proposé sous licence GPL pour etre associe
40 # a la distribution de Blender 2.33 et suivant
41 # --------------------------------------------------------------------------
42 # this script is released under GPL licence
43 # for the Blender 2.33 scripts package
44 # --------------------------------------------------------------------------
45 # ***** BEGIN GPL LICENSE BLOCK *****
46 #
47 # Script copyright (C) 2003, 2004: Jean-Michel Soler 
48 # Additionnal entries in the original data base (c) 2004 by Bart (bart@neeneenee.de)
49 #
50 # This program is free software; you can redistribute it and/or
51 # modify it under the terms of the GNU General Public License
52 # as published by the Free Software Foundation; either version 2
53 # of the License, or (at your option) any later version.
54 #
55 # This program is distributed in the hope that it will be useful,
56 # but WITHOUT ANY WARRANTY; without even the implied warranty of
57 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
58 # GNU General Public License for more details.
59 #
60 # You should have received a copy of the GNU General Public License
61 # along with this program; if not, write to the Free Software Foundation,
62 # Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
63 #
64 # ***** END GPL LICENCE BLOCK *****
65 # --------------------------------------------------------------------------
66
67 import Blender
68 from Blender.Draw import *
69 from Blender.BGL import *
70
71 hotkeys={
72 'Search ':[['', '']],
73 'Specials 1 ':[
74 [',', 'Set Bounding Box rotation scaling pivot'],
75 ['Ctrl-,', 'Set Median Point rotation scaling pivot'],
76 ['.', 'Set 3D cursor as rotation scaling pivot'],
77 ['Ctrl-.', 'Set Individual Object Centers as rotation scaling pivot'],
78 ['~', 'Display all layers (German keys: ö)'],
79 ['Shift-~', 'Display all/previous layers (German keys: Shift-ö)'],
80 ['Space', 'Popup menu'],
81 ['Space', '3D View: camera selected + fly mode, accept'],
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', 'Enter/exit Pose Mode'],
87 ['Shift-TAB', '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 ['MMB', 'Rotate'],
101 ['Ctrl-MMB', 'Zoom view'],
102 ['Shift-MMB', 'Move view'],
103 ['RMB', 'Select'],
104 ['RMB drag', 'Border select circle: subtract from selection'],
105 ['RMB hold down', 'Popup menu'],
106 ['Alt+Ctrl-RMB', 'Edit Mode: Select edge'],
107 ['Alt+Ctrl-RMB', 'UV Image Editor: Select face'],
108 ['Shift-RMB', 'Add/subtract to/from selection'],
109 ['Wheel', 'Zoom view'],
110 ['Transformations:', ''],
111 ['Drag+Ctrl', 'Step adjustment'],
112 ['Drag+Ctrl+Shift', 'Small step adjustment'],
113 ['Drag+Shift', 'Fine adjustment'],
114 ['LMB', 'Confirm transformation'],
115 ['MMB', 'Toggle optional transform feature'],
116 ['RMB', 'Abort transformation']
117 ],
118
119 'F-Keys ':[
120 ['F1', 'Open File'],
121 ['F2', 'Save File'],
122 ['F3', 'Save image'],
123 ['F4', 'Logic Window (may change)'],
124 ['F5', 'Material Window'],
125 ['F6', 'Texture Window'],
126 ['F7', 'Object Window'],
127 ['F8', 'World Window'],
128 ['F9', 'Edit Mode Window'],
129 ['F10', 'Render Window'],
130 ['F11', 'Recall the last rendered image'],
131 ['F12', 'Render current Scene'],
132 ['Ctrl-Shift-F12', 'NLA Editor'],
133 ['Shift-F1', 'Library Data Select'],
134 ['Shift-F2', 'Export DXF'],
135 ['Shift-F4', 'Object manager Data Select '],
136 ['Shift-F5', '3D Window'],
137 ['Shift-F6', 'IPO Window'],
138 ['Shift-F7', 'Buttons Window'],
139 ['Shift-F8', 'Video Sequencer Window'],
140 ['Shift-F9', 'OOP Window'],
141 ['Alt-Shift-F9', 'OutLiner Window'],
142 ['Shift-F10', 'UV Image Editor'],
143 ['Shift-F11', 'Text Editor'],
144 ['Shift-F12', 'Action Editor'],
145 ['Ctrl-F2', 'Save/export in vrml 1.0 format' ],
146 ['Ctrl-F3', 'Save image : dump 3d view'],
147 ['Ctrl-Shift-F3', 'Save image : dump screen']
148 ],
149
150 'Numbers ':[
151 ['1..2..0-=', 'Show layer 1..2..12'],
152 ['1..2..0-=', 'Edit Mode with Size, Grab, rotate tools : enter value'],
153 ['Alt-1..2..0', 'Show layer 11..12..20'],
154 ['Shift-1..2..0-=', 'Toggle layer 1..2..12'],
155 ['Shift-ALT-...', 'Toggle layer 11..12..20']
156 ],
157
158 'Numpad ':[
159 ['Numpad DEL', 'Zoom on object'],
160 ['Numpad /', 'Local view on object (hide others)'],
161 ['Numpad *', 'Rotate view to objects local axes'],
162 ['Numpad +', 'Zoom in (works everywhere)'],
163 ['Numpad +', 'In OutLiner window, Collapse one level of the  hierarchy'],
164 ['Alt-Numpad +', 'Proportional vertex Edit Mode: Increase range of influence'],
165 ['Ctrl-Numpad +', 'Edit Mode: Select More vertices'],
166 ['Numpad -', 'Zoom out (works everywhere)'],
167 ['Numpad +', 'In OutLiner window, Expand one level of the  hierarchy'],
168 ['Alt-Numpad -', 'Proportional vertex Edit Mode: Decrease range of influence'],
169 ['Ctrl-Numpad +', 'Edit Mode: Select Less vertices'],
170 ['Numpad INS', 'Set Camera view'],
171 ['Ctrl-Numpad INS', 'Set active object as camera'],
172 ['Alt-Numbad INS', 'Restore old camera'],
173 ['Numpad 1', 'Front view'],
174 ['Ctrl-Numpad 1', 'Back view'],
175 ['Numpad 3', 'Right view'],
176 ['Ctrl-Numpad 3', 'Left view'],
177 ['Numpad 7', 'Top view'],
178 ['Ctrl-Numpad 7', 'Bottom view '],
179 ['Numpad 5', 'Toggle orthogonal/perspective view'],
180 ['Numpad 9', 'Redraw view'],
181 ['Numpad 4', 'Rotate view left'],
182 ['Numpad 6', 'Rotate view right'],
183 ['Numpad 8', 'Rotate view up'],
184 ['Numpad 2', 'Rotate view down']
185 ],
186
187 'Arrows ':[
188 ['Home/Pos1', 'View all'],
189 ['Home', 'In OutLiner Windows, Show hierarchy'],
190 ['PgUp', 'Edit Mode and Proportionnal Editing Tools, increase influence'],
191 ['PgUp', 'Strip Editor, Move Down'],
192 ['PgUn', 'TimeLine: Jump to next marker'],
193 ['PgUp', 'IPO: Select next keyframe'],
194 ['Ctrl-PgUp', 'IPO: Select and jump to next keyframe'],
195 ['Ctrl-PgUn', 'TimeLine: Jump to next key'],    
196 ['PgDn', 'Edit Mode and Proportionnal Editing Tools, decrease influence'],
197 ['PgDn', 'Strip Editor, Move Up'],
198 ['PgDn', 'TimeLine: Jump to prev marker'],
199 ['PgDn', 'IPO: Select previous keyframe'],
200 ['Ctrl-PgDn', 'IPO: Select and jump to previous keyframe'],
201 ['Ctrl-PgDn', 'TimeLine: Jump to prev key'],            
202 ['Left', 'One frame backwards'],
203 ['Right', 'One frame forwards'],
204 ['Down', '10 frames backwards'],
205 ['Up', '10 frames forwards'],
206 ['Alt-Down', 'Blender in Window mode'],
207 ['Alt-Up', 'Blender in Fullscreen mode'],
208 ['Ctrl-Left', 'Previous screen'],
209 ['Ctrl-Right', 'Next screen'],
210 ['Ctrl-Down', 'Maximize window toggle'],
211 ['Ctrl-Up', 'Maximize window toggle'],
212 ['Shift-Arrow', 'Toggle first frame/ last frame']
213 ],
214
215 'Letters ':[ 
216 {
217 "A":[ 
218 ['A', 'Select all/Deselect all'],
219 ['Alt-A', 'Play animation in current window'],
220 ['Ctrl-A', 'Apply objects size/rotation to object data'],
221 ['Ctrl-A', 'Text Editor: Select all'],
222 ['Shift-A', 'Sequencer: Add menu'],
223 ['Shift-A', '3D-View: Add menu'],
224 ['Shift-ALT-A', 'Play animation in all windows'],
225 ['Shift-CTRL-A', 'Apply lattice / Make dupliverts real'],
226 ['Shift-CTRL-A', 'Apply Deform ']
227 ],
228
229 "B":[ 
230 ['B', 'Border select'],
231 ['BB', 'Circle select'],
232 ['Alt+B', 'Edit Mode: Select Vertex Loop'],
233 ['Shift-B', 'Set render border (in active camera view)']
234 ],
235
236 "C":[ 
237 ['C', 'Center view on cursor'],
238 ['C', 'UV Image Editor: Active Face Select toggle'],
239 ['C', 'Sequencer: Change images'],
240 ['C', 'IPO: Snap current frame to selected key'],
241 ['C', 'TimeLine: Center View'], 
242 ['Alt-C', 'Object Mode: Convert menu'],
243 ['Alt-C', 'Text Editor: Copy selection to clipboard'],
244 ['Ctrl-C', 'Copy menu (Copy properties of active to selected objects)'],
245 ['Ctrl-C', 'UV Image Editor: Stick UVs to mesh vertex'],
246 ['Shift-C', 'Center and zoom view on selected objects'],
247 ['Shift-C', 'UV Image Editor: Stick local UVs to mesh vertex']
248 ],
249
250 "D":[  
251 ['D', 'Set 3d draw mode'],
252 ['Alt-D', 'Object Mode: Create new instance of object'],
253 ['Ctrl-D', 'Display alpha of image texture as wire'],
254 ['Shift-D', 'Create full copy of object']
255 ],
256
257 "E":[ 
258 ['E', 'Edit Mode: Extrude'],
259 ['E', 'UV Image Editor: LSCM Unwrap'],
260 ['E', 'TimeLine: Set End'],     
261 ['ER', 'Edit Mode: Extrude Rotate'],
262 ['ES', 'Edit Mode: Extrude Scale'],
263 ['ESX', 'Edit Mode: Extrude Scale X axis'],
264 ['ESY', 'Edit Mode: Extrude Scale Y axis'],
265 ['ESZ', 'Edit Mode: Extrude Scale Z axis'],
266 ['EX', 'Edit Mode: Extrude along X axis'],
267 ['EY', 'Edit Mode: Extrude along Y axis'],
268 ['EZ', 'Edit Mode: Extrude along Z axis'],
269 ['Alt-E', 'Edit Mode: exit Edit Mode'],
270 ['Ctrl-E', 'Edit Mode: Edge Specials menu'],
271 ['Shift-E', 'Edit Mode: SubSurf Edge Sharpness']
272 ],
273
274 "F":[ 
275 ['F', 'Edit mode: Make edge/face'],
276 ['F', 'Sequencer: Set Filter Y'],
277 ['F', 'Object Mode: UV/Face Select mode'],
278 ['Alt-F', 'Edit Mode: Beautify fill'],
279 ['Ctrl-F', 'Object Mode: Sort faces in Z direction'],
280 ['Ctrl-F', 'Edit Mode: Flip triangle edges'],
281 ['Shift-F', 'Edit Mode: Fill with triangles'],
282 ['Shift-F', 'Object Mode: active camera in fly mode (use LMB, RMB, Alt, Ctrl and Space too)']
283 ],
284
285 "G":[ 
286 ['G', 'Grab (move)'],
287 ['Alt-G', 'Clear location'],
288 ['Shift-ALT-G', 'Remove selected objects from group'],
289 ['Ctrl-G', 'Add selected objects to group'],
290 ['Shift-G', 'Selected Group menu']
291 ],
292
293 "H":[ 
294 ['H', 'Hide selected vertices/faces'],
295 ['H', 'Curves: Set handle type'],
296 ['H', 'Action editor: Handle type aligned'],
297 ['H', 'Action editor: Handle type free'],               
298 ['Alt-H', 'Show Hidden vertices/faces'],
299 ['Shift-H', 'Curves: Automatic handle calculation'],
300 ['Shift-H', 'Action editor: Handle type auto'], 
301 ['Shift-H', 'Edit Mode, Hide deselected  vertices/faces'],
302 ['Ctrl-H', 'Edit Mode, Add a hook on selected points or show the hook menu .']
303 ],
304
305 "I":[ 
306 ['I', 'Keyframe menu']
307 ],
308
309 "J":[ 
310 ['J', 'IPO: Join menu'],
311 ['J', 'Mesh: Join all adjacent triangles to quads'],    
312 ['J', 'Render Window: Swap render buffer'],
313 ['Ctrl-J', 'Join selected objects'],
314 ['Ctrl-J', 'Nurbs: Add segment'],
315 ['Ctrl-J', 'IPO: Join keyframes menu'],
316 ],
317
318 "K":[  
319 ['K', '3d Window: Show keyframe positions'],
320 ['K', 'Edit Mode: Loop/Cut menu'],
321 ['K', 'IPO: Show keyframe positions'],
322 ['K', 'Nurbs: Print knots'],
323 ['Ctrl-K', 'Make skeleton from armature'],
324 ['Shift-K', 'Show and select all keyframes for object'],
325 ['Shift-K', 'Edit Mode: Knife Mode select'],
326 ['Shift-K', 'UV Face Select: Clear vertex colours'],
327 ['Shift-K', 'Vertex Paint: Fill with vertex colours']
328 ],
329
330 "L":[ 
331 ['L', 'Make local menu'],
332 ['L', 'Edit mode: Select linked vertices (near mouse pointer)'],
333 ['L', 'OOPS window: Select linked objects'],
334 ['L', 'UV Face Select: Select linked faces'],
335 ['Ctrl-L', 'Make links menu (for instance : to scene...)'],
336 ['Shift-L', 'Select links menu']
337 ],
338
339 "M":[ 
340 ['M', 'Move object to different layer'],
341 ['M', 'Sequencer: Make meta strip (group) from selected strips'],
342 ['M', 'Edit Mode: Mirros Axis menu'],
343 ['M', 'Video Sequence Editor : Make Meta strip...'],            
344 ['M', 'TimeLine: Add marker'],
345 ['Alt-M', 'Edit Mode: Merge vertices menu'],
346 ['Alt-M', 'Video Sequence Editor : Separate Meta strip...'],    
347 ['Ctrl-M', 'Object Mode: Mirros Axis menu'],
348 ['Ctrl-M', 'TimeLine: Name marker']     
349 ],
350
351 "N":[ 
352 ['N', 'Transform Properties panel'] ,
353 ['N', 'OOPS window: Rename object/linked objects'] ,
354 ['Ctrl-N', 'Armature: Recalculate bone roll angles'] ,
355 ['Ctrl-N', 'Edit Mode: Recalculate normals to outside'] ,
356 ['Ctrl-ALT-N', 'Edit Mode: Recalculate normals to inside'] ],
357
358 "O":[ 
359 ['O', 'Edit Mode/UV Image Editor: Toggle proportional vertex editing'],
360 ['Alt-O', 'Clear object origin'],
361 ['Ctrl-O', 'Revert current file to last saved'],
362 ['Shift-O', 'Proportional vertex Edit Mode: Toggle smooth/steep falloff']
363 ],
364
365 "P":[ 
366 ['P', 'Object Mode: Start realtime engine'],
367 ['P', 'Edit mode: Seperate vertices to new object'],
368 ['P', 'UV Image Editor: Pin UVs'],
369 ['Alt-P', 'Clear parent relationship'],
370 ['Alt-P', 'UV Image Editor: Unpin UVs'],
371 ['Ctrl-P', 'Make active object parent of selected object'],
372 ['Ctrl-SHIFT-P', 'Make active object parent of selected object without inverse'],
373 ['Ctrl-P', 'Edit mode: Make active vertex parent of selected object']
374 ],
375
376 "Q":[['Q', 'Quit'] ],
377
378 "R":[ 
379 ['R', 'Rotate'],
380 ['R', 'IPO: Record mouse movement as IPO curve'],
381 ['R', 'UV Face Select: Rotate menu uv coords or vertex colour'],
382 ['RX', 'Rotate around X axis'],
383 ['RXX', "Rotate around object's local X axis"],
384 ['RY', 'Rotate around Y axis'],
385 ['RYY', "Rotate around object's local Y axis"],
386 ['RZ', 'Rotate around Z axis'],
387 ['RZZ', "Rotate around object's local Z axis"],
388 ['Alt-R', 'Clear object rotation'],
389 ['Ctrl-R', 'Edit Mode: Knife, cut selected edges, accept left mouse/ cancel right mouse'],
390 ['Shift-R', 'Edit Mode: select Face Loop'],
391 ['Shift-R', 'Nurbs: Select row'] ],
392
393 "S":[ 
394 ['S', 'Scale'] ,
395 ['S', 'TimeLine: Set Start'],
396 ['SX', 'Flip around X axis'] ,
397 ['SY', 'Flip around Y axis'] ,
398 ['SZ', 'Flip around Z axis'] ,
399 ['SXX', 'Flip around X axis and show axis'] ,
400 ['SYY', 'Flip around Y axis and show axis'] ,
401 ['SZZ', 'Flip around Z axis and show axis'] ,
402 ['Alt-S', 'Edit mode: Shrink/fatten (Scale along vertex normals)'] ,
403 ['Alt-S', 'Clear object size'] ,
404 ['Ctrl-S', 'Edit mode: Shear'] ,
405 ['Shift-S', 'Cursor/Grid snap menu'] ],
406
407 "T":[ 
408 ['T', 'Sequencer: Touch and print selected movies'] ,
409 ['T', 'Adjust texture space'] ,
410 ['T', 'Edit mode: Flip 3d curve'] ,
411 ['T', 'IPO: Change IPO type'] ,
412 ['T', 'TimeLine: Show second'], 
413 ['Alt-T', 'Clear tracking of object'] ,
414 ['Ctrl-T', 'Make selected object track active object'] ,
415 ['Ctrl-T', 'Edit Mode: Convert to triangles'] ,
416 ['Ctrl-ALT-T', 'Benchmark'] ],
417
418 "U":[ 
419 ['U', 'Make single user menu (for import completly linked object to another scene  for instance) '] ,
420 ['U', '3D View: Make Single user Menu'] ,
421 ['U', 'Edit Mode: Reload object data from before entering Edit Mode'] ,
422 ['U', 'UV Face Select: Automatic UV calculation menu'] ,
423 ['U', 'Vertex-/Weightpaint mode: Undo'] ,
424 ['Ctrl-U', 'Save current state as user default'],
425 ['Shift-U', 'Edit Mode: Redo Menu'],
426 ['Alt-U', 'Edit Mode: Undo Menu'] ],
427
428 "V":[ 
429 ['V', 'Curves/Nurbs: Vector handle'],
430 ['V', 'Vertexpaint mode'],
431 ['V', 'UV Image Editor: Stitch UVs'],
432 ['V', 'Action editor: Vector'], 
433 ['Alt-V', "Scale object to match image texture's aspect ratio"],
434 ['Shift-V', 'Edit mode: Align view to selected vertices'],
435 ['Shift-V', 'UV Image Editor: Limited Stitch UVs popup'],
436         
437 ],
438
439 "W":[ 
440 ['W', 'Object Mode: Boolean operations menu'],
441 ['W', 'Edit mode: Specials menu'],
442 ['W', 'UV Image Editor: Weld/Align'],
443 ['WX', 'UV Image Editor: Weld/Align X axis'],
444 ['WY', 'UV Image Editor: Weld/Align Y axis'],
445 ['Ctrl-W', 'Save current file'] ,
446 ['Ctrl-W', 'Nurbs: Switch direction'] ,
447 ['Shift-W', 'Warp/bend selected vertices around cursor'],
448 ['alt-W', 'Export in videoscape format']
449  ],
450
451 "X":[ 
452 ['X', 'Delete menu'] ,
453 ['X', 'TimeLine: Remove marker'],
454 ['Ctrl-X', 'Restore default state (Erase all)']
455         
456  ],
457
458 "Y":[ 
459 ['Y', 'Mesh: Split selected vertices/faces from the rest'] ],
460
461 "Z":[ 
462 ['Z', 'Render Window: 200% zoom from mouse position'],
463 ['Z', 'Switch 3d draw type : solide/ wireframe (see also D)'],
464 ['Alt-Z', 'Switch 3d draw type : solid / textured (see also D)'],
465 ['Ctrl-Z', 'Switch 3d draw type : shaded (see also D)'],
466 ['Shift-Z', 'Switch 3d draw type : shaded / wireframe (see also D)'],
467
468 ]}]}
469
470 up=128
471 down=129
472 UP=0
473 SEARCH=131
474 OLDSEARCHLINE=''
475 SEARCHLINE=Create('')
476 LINE=130
477 FINDED=[]
478 LEN=0
479
480 for k in hotkeys.keys():
481    hotkeys[k].append(Create(0))
482
483 for k in hotkeys['Letters '][0]:
484    hotkeys['Letters '][0][k].append(Create(0))
485
486 hotL=hotkeys['Letters '][0].keys()
487 hotL.sort()
488
489 hot=hotkeys.keys()
490 hot.sort()
491
492 def searchfor(SEARCHLINE):
493         global hotkeys, hot
494         FINDLIST=[]
495         for k in hot:
496                 if k not in ['Letters ', 'Search '] :
497                         for l in hotkeys[k][:-1]:
498                                 #print 'k, l : ', k,  l, l[1] 
499                                 if  l[1].upper().find(SEARCHLINE.upper())!=-1:
500                                         FINDLIST.append(l)
501                 elif k == 'Letters ':
502                         for l in hotL :
503                                 for l0 in hotkeys['Letters '][0][l][:-1]:
504                                         #print 'k, l : ',l,  k,  l0
505                                         if l0[1].upper().find(SEARCHLINE.upper())!=-1:
506                                                 FINDLIST.append(l0)
507         return FINDLIST                 
508                         
509         
510 glCr=glRasterPos2d
511 glCl3=glColor3f
512 glCl4=glColor4f
513 glRct=glRectf
514
515 cf=[0.95,0.95,0.9,0.0]
516 c1=[0.95,0.95,0.9,0.0]
517 c=cf
518 r=[0,0,0,0]
519
520 def trace_rectangle4(r,c):
521     glCl4(c[0],c[1],c[2],c[3])
522     glRct(r[0],r[1],r[2],r[3])
523
524 def trace_rectangle3(r,c,c1):
525     glCl3(c[0],c[1],c[2])
526     glRct(r[0],r[1],r[2],r[3])
527     glCl3(c1[0],c1[1],c1[2])
528
529 def draw():
530     global r,c,c1,hotkeys, hot, hotL, up, down, UP, SEARCH, SEARCHLINE,LINE
531     global OLDSEARCHLINE, FINDED, SCROLL, LEN
532     size=Buffer(GL_FLOAT, 4)
533     glGetFloatv(GL_SCISSOR_BOX, size)
534     size= size.list
535
536     for s in [0,1,2,3]: size[s]=int(size[s])
537
538     c=[0.75,0.75,0.75,0]
539     c1=[0.6,0.6,0.6,0]
540
541     r=[0,size[3],size[2],0]
542     trace_rectangle4(r,c)
543
544     c=[0.64,0.64,0.64,0]
545     c1=[0.95,0.95,0.9,0.0]
546     
547     r=[0,size[3],size[2],size[3]-40]
548     trace_rectangle4(r,c)
549
550     c1=[0.7,0.7,0.9,0.0]
551     c=[0.2,0.2,0.4,0.0]
552     c2=[0.71,0.71,0.71,0.0]     
553
554     glColor3f(1, 1, 1)
555     glRasterPos2f(42, size[3]-25)
556
557     Text("HotKey and MouseAction Reference")
558    
559     l=0
560     listed=0
561     Llisted=0
562     size[3]=size[3]-18
563
564     for k in hot:             
565        #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 )
566        hotkeys[k][-1]=Toggle(k, hot.index(k)+10, 78*hot.index(k), size[3]-(47), 78, 24, hotkeys[k][-1].val )
567        l+=len(k)
568        if hotkeys[k][-1].val==1.0:
569            listed=hot.index(k)
570     l=0
571     size[3]=size[3]-4
572     if hot[listed]!='Letters ' and hot[listed]!='Search ' :
573        size[3]=size[3]-8
574        SCROLL=size[3]/21
575        END=-1
576        if SCROLL < len(hotkeys[hot[listed]][:-1]):
577           Button('/\\',up,4,size[3]+8,20,14,'Scroll up') 
578           Button('\\/',down,4,size[3]-8,20,14,'Scroll down')            
579           if (SCROLL+UP)<len(hotkeys[hot[listed]][:-1]):
580              END=(UP+SCROLL)
581           else:
582              END=-1
583              UP=len(hotkeys[hot[listed]][:-1])-SCROLL         
584        else :
585          UP=0
586        for n in  hotkeys[hot[listed]][:-1][UP:END]:
587           if l%2==0:
588              r=[0,size[3]-(21*l+66),
589                      size[2], size[3]-(21*l+43)]
590              trace_rectangle4(r,c2)
591           glColor3f(0,0,0)
592           glRasterPos2f(4+8, size[3]-(58+21*l))
593           Text(n[0])
594           glRasterPos2f(4+8*15, size[3]-(58+21*l))
595           Text('  : '+n[1]) 
596           l+=1
597     elif hot[listed]=='Search ' :
598        r=[0,size[3]-70,
599           size[2], size[3]-44]
600        trace_rectangle4(r,c2)
601        SEARCHLINE=String(' ', LINE, 42, size[3]-68,200,18,SEARCHLINE.val, 256,'')
602        if len(FINDED)>0:
603          LEN=len(FINDED)           
604          size[3]=size[3]-8
605          SCROLL=size[3]/21
606          END=-1
607          if SCROLL < len(FINDED):
608             Button('/\\',up,4,size[3]+8,20,14,'Scroll up') 
609             Button('\\/',down,4,size[3]-8,20,14,'Scroll down')            
610             if (SCROLL+UP)<len(FINDED):
611                END=(UP+SCROLL-1)
612             else:
613                END=-1
614                #UP=len(FINDED)-SCROLL
615          else:
616                UP=0         
617          for n in FINDED[UP:END]:
618              if l%2==0:
619                  r=[0,size[3]-(21*l+66+24),
620                      size[2], size[3]-(21*l+43+24)]
621                  trace_rectangle4(r,c2)
622              glColor3f(0,0,0)
623              glRasterPos2f(4+8, size[3]-(58+24+21*l))
624              Text(n[0])
625              glRasterPos2f(4+8*15, size[3]-(58+24+21*l))
626              Text('  : '+n[1]) 
627              l+=1
628     else:
629        for k in hotL:
630             pos=hotL.index(k)
631             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 )
632             if hotkeys['Letters '][0][k][-1].val==1.0:
633                Llisted=pos
634        size[3]=size[3]-8
635        SCROLL=(size[3]-88)/21
636        END=-1
637        if SCROLL < len(hotkeys['Letters '][0][hotL[Llisted]]):
638           LEN=len(hotkeys['Letters '][0][hotL[Llisted]])
639           Button('/\\',up,4,size[3]+8,20,14,'Scroll up, you can use arrow or page keys too ') 
640           Button('\\/',down,4,size[3]-8,20,14,'Scroll down,  you can use arrow or page keys too ')            
641           if (UP+SCROLL)<len(hotkeys['Letters '][0][hotL[Llisted]]):
642              END=(UP+SCROLL)
643           else:
644              END=-1
645              UP=len(hotkeys['Letters '][0][hotL[Llisted]])-SCROLL         
646        else :
647          UP=0
648
649        for n in hotkeys['Letters '][0][hotL[Llisted]][UP:END]:
650           if l%2==0:
651              r=[4,size[3]-(21*l+92),
652                      size[2], size[3]-(69+21*l+1)]
653              trace_rectangle4(r,c2)
654
655           glColor3f(0.1, 0.1, 0.15)  
656           glRasterPos2f(4+8, (size[3]-(88+21*l))+3)
657           Text(n[0])
658           glRasterPos2f(4+8*15, (size[3]-(88+21*l))+3)
659           Text('  : '+n[1]) 
660           l+=1
661
662 def event(evt, val):
663     global hotkeys, UP,  SCROLL  , LEN   
664     if (evt== QKEY or evt== ESCKEY): 
665         Exit()
666     elif val:
667       if (evt== PAGEUPKEY):
668          if (UP+SCROLL)<LEN-5: 
669              UP+=5 
670       elif (evt== PAGEDOWNKEY):
671           if UP>4: 
672              UP-=5 
673       elif (evt== UPARROWKEY):
674           if (UP+SCROLL)<LEN-1: 
675              UP+=1
676       elif (evt== DOWNARROWKEY):
677           if UP>0: 
678               UP-=1
679       Redraw()
680
681 def bevent(evt):
682     global hotkeysmhot, hotL, up,down,UP, FINDED
683     global SEARCH, SEARCHLINE,LINE, OLDSEARCHLINE
684
685     if   (evt== 1):
686         Exit()
687
688     elif (evt in range(10,20,1)):
689         for k in hot:
690            if hot.index(k)+10!=evt:
691                  hotkeys[k][-1].val=0
692                  UP=0 
693         Blender.Window.Redraw()
694
695     elif (evt in range(20,46,1)):
696         for k in hotL:
697            if hotL.index(k)+20!=evt:
698                  hotkeys['Letters '][0][k][-1].val=0
699                  UP=0 
700         Blender.Window.Redraw()
701
702     elif (evt==up):
703        UP+=1
704        Blender.Window.Redraw()
705
706     elif (evt==down):
707        if UP>0: UP-=1
708        Blender.Window.Redraw()
709
710     elif (evt==LINE):
711        if SEARCHLINE.val!='' and SEARCHLINE.val!=OLDSEARCHLINE:
712           OLDSEARCHLINE=SEARCHLINE.val  
713           FINDED=searchfor(OLDSEARCHLINE)
714           Blender.Window.Redraw()
715
716
717 Register(draw, event, bevent)