2d33ee098de6a45f3203af45162b2f03bcbac190
[blender-staging.git] / source / blender / src / header_nla.c
1 /**
2  * header_nla.c oct-2003
3  *
4  * Functions to draw the "NLA Editor" window header
5  * and handle user events sent to it.
6  * 
7  * $Id$
8  *
9  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
10  *
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License
13  * as published by the Free Software Foundation; either version 2
14  * of the License, or (at your option) any later version. The Blender
15  * Foundation also sells licenses for use in proprietary software under
16  * the Blender License.  See http://www.blender.org/BL/ for information
17  * about this.
18  *
19  * This program is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  * GNU General Public License for more details.
23  *
24  * You should have received a copy of the GNU General Public License
25  * along with this program; if not, write to the Free Software Foundation,
26  * Inc., 59 Temple Place - Suite 330, Boston, MA        02111-1307, USA.
27  *
28  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
29  * All rights reserved.
30  *
31  * The Original Code is: all of this file.
32  *
33  * Contributor(s): none yet.
34  *
35  * ***** END GPL/BL DUAL LICENSE BLOCK *****
36  */
37
38 #include <stdlib.h>
39 #include <string.h>
40 #include <stdio.h>
41
42 #ifdef HAVE_CONFIG_H
43 #include <config.h>
44 #endif
45
46 #include "DNA_ID.h"
47 #include "DNA_nla_types.h"
48 #include "DNA_scene_types.h"
49 #include "DNA_screen_types.h"
50 #include "DNA_space_types.h"
51
52 #include "BKE_global.h"
53 #include "BKE_main.h"
54 #include "BKE_utildefines.h"
55
56 #include "BIF_interface.h"
57 #include "BIF_resources.h"
58 #include "BIF_screen.h"
59 #include "BIF_space.h"
60 #include "BIF_editnla.h"
61 #include "BIF_editaction.h"
62 #include "BIF_toolbox.h"
63
64 #include "BSE_drawipo.h"
65 #include "BSE_headerbuttons.h"
66 #include "BSE_time.h"
67
68 //#include "nla.h"
69
70 #include "blendef.h"
71 #include "mydevice.h"
72
73 void do_nla_buttons(unsigned short event)
74 {
75         View2D *v2d;
76
77         switch(event){
78         case B_NLAHOME:
79                 //      Find X extents
80                 v2d= &(G.snla->v2d);
81                 
82                 /* i tried to understand nla/action drawing to reveil a 'tot' rect, impossible code! (ton) */
83                 v2d->cur.xmin = G.scene->r.sfra-5;
84                 v2d->cur.xmax = G.scene->r.efra+5;
85                 v2d->cur.ymin= -SCROLLB;
86                 v2d->cur.ymax= 5; // at least stuff is visiable then?
87                 
88                 test_view2d(G.v2d, curarea->winx, curarea->winy);
89                 view2d_do_locks(curarea, V2D_LOCK_COPY);
90                 addqueue (curarea->win, REDRAW, 1);
91                 break;
92         }
93 }
94
95
96 static void do_nla_viewmenu(void *arg, int event)
97 {
98         extern int play_anim(int mode);
99         
100         switch(event) {
101         case 0: /* Update Automatically */
102                 if(BTST(G.snla->lock, 0)) G.snla->lock = BCLR(G.snla->lock, 0);
103                 else G.snla->lock = BSET(G.snla->lock, 0);
104                 break;
105         case 1: /* Play Back Animation */
106                 play_anim(0);
107                 break;
108         case 2: /* Play Back Animation in 3D View */
109                 play_anim(1);
110                 break;
111         case 3: /* View All */
112                 do_nla_buttons(B_NLAHOME);
113                 break;
114         case 4: /* Maximize Window */
115                 /* using event B_FULL */
116                 break;
117         case 5:
118                 G.v2d->flag ^= V2D_VIEWLOCK;
119                 if(G.v2d->flag & V2D_VIEWLOCK)
120                         view2d_do_locks(curarea, 0);
121                 break;                  
122         }
123 }
124
125 static uiBlock *nla_viewmenu(void *arg_unused)
126 {
127 /*      static short tog=0; */
128         uiBlock *block;
129         short yco= 0, menuwidth=120;
130         
131         block= uiNewBlock(&curarea->uiblocks, "nla_viewmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
132         uiBlockSetButmFunc(block, do_nla_viewmenu, NULL);
133                 
134         if(BTST(G.snla->lock, 0)) {
135                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Update Automatically|", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
136         } else {
137                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Update Automatically|", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
138         }
139
140         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
141         
142         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation|Alt A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
143         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation in 3D View|Alt Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
144         
145         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
146         
147         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
148         uiDefIconTextBut(block, BUTM, 1, (G.v2d->flag & V2D_VIEWLOCK)?ICON_CHECKBOX_HLT:ICON_CHECKBOX_DEHLT, 
149                                          "Lock Time to Other Windows|", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
150         
151         if(!curarea->full) uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Maximize Window|Ctrl UpArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
152         else uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
153         
154         if(curarea->headertype==HEADERTOP) {
155                 uiBlockSetDirection(block, UI_DOWN);
156         }
157         else {
158                 uiBlockSetDirection(block, UI_TOP);
159                 uiBlockFlipOrder(block);
160         }
161
162         uiTextBoundsBlock(block, 50);
163         
164         return block;
165 }
166
167 static void do_nla_selectmenu(void *arg, int event)
168 {       
169
170         switch(event)
171         {
172         case 0: /* Border Select */
173                 borderselect_nla();
174                 break;
175         case 1: /* Select/Deselect All Keys */
176                 deselect_nlachannel_keys(1);
177                 allqueue (REDRAWNLA, 0);
178                 allqueue (REDRAWIPO, 0);
179                 break;
180         case 2: /* Select/Deselect All Channel */
181                 deselect_nlachannels(1);
182                 allqueue (REDRAWVIEW3D, 0);
183                 allqueue (REDRAWNLA, 0);
184                 allqueue (REDRAWIPO, 0);
185                 break;
186         case 3: /* Select/Deselect All Markers */
187                 deselect_markers(1, 0);
188                 allqueue(REDRAWTIME, 0);
189                 allqueue(REDRAWIPO, 0);
190                 allqueue(REDRAWACTION, 0);
191                 allqueue(REDRAWNLA, 0);
192                 allqueue(REDRAWSOUND, 0);
193                 break;
194         case 4: /* Borderselect markers */
195                 borderselect_markers();
196                 break;
197         }
198 }
199
200 static uiBlock *nla_selectmenu(void *arg_unused)
201 {
202         uiBlock *block;
203         short yco= 0, menuwidth=120;
204
205         block= uiNewBlock(&curarea->uiblocks, "nla_selectmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
206         uiBlockSetButmFunc(block, do_nla_selectmenu, NULL);
207
208         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
209         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select Markers|Ctrl B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
210         
211         uiDefBut(block, SEPR, 0, "",        0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
212         
213         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All Keys|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
214         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All Channels", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
215         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All Markers|Ctrl A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
216
217         if(curarea->headertype==HEADERTOP) {
218                 uiBlockSetDirection(block, UI_DOWN);
219         }
220         else {
221                 uiBlockSetDirection(block, UI_TOP);
222                 uiBlockFlipOrder(block);
223         }
224
225         uiTextBoundsBlock(block, 50);
226
227         return block;
228 }
229
230 static void do_nla_strip_snapmenu(void *arg, int event)
231 {
232         snap_action_strips(event);
233         
234         allqueue(REDRAWIPO, 0);
235         allqueue(REDRAWACTION, 0);
236         allqueue(REDRAWNLA, 0); 
237 }
238
239 static uiBlock *nla_strip_snapmenu(void *arg_unused)
240 {
241         uiBlock *block;
242         short yco = 20, menuwidth = 120;
243
244         block= uiNewBlock(&curarea->uiblocks, "nla_strip_snapmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
245         uiBlockSetButmFunc(block, do_nla_strip_snapmenu, NULL);
246         
247         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Nearest Frame|Shift S, 1",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
248         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Current Frame|Shift S, 2",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
249
250         uiBlockSetDirection(block, UI_RIGHT);
251         uiTextBoundsBlock(block, 60);
252         return block;
253 }
254
255 static void do_nla_strip_transformmenu(void *arg, int event)
256 {
257         switch(event) {
258         case 0: /* grab/move */
259                 transform_nlachannel_keys ('g', 0);
260                         update_for_newframe_muted();
261                 break;
262         case 1: /* scale */
263                 transform_nlachannel_keys ('s', 0);
264                         update_for_newframe_muted();
265                 break;
266         }
267         allqueue(REDRAWVIEW3D, 0);
268 }
269
270 static uiBlock *nla_strip_transformmenu(void *arg_unused)
271 {
272         uiBlock *block;
273         short yco = 20, menuwidth = 120;
274
275         block= uiNewBlock(&curarea->uiblocks, "nla_strip_transformmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
276         uiBlockSetButmFunc(block, do_nla_strip_transformmenu, NULL);
277         
278         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
279         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
280
281         uiBlockSetDirection(block, UI_RIGHT);
282         uiTextBoundsBlock(block, 60);
283         return block;
284 }
285
286 static void do_nla_stripmenu(void *arg, int event)
287 {       
288         switch(event)
289         {
290         case 0: /* Strip Properties */
291                 add_blockhandler(curarea, NLA_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
292                 break;
293         case 1: /* Add Action Strip */
294                 add_nlablock();
295                 break;
296         case 2: /* Duplicate */
297                 duplicate_nlachannel_keys();
298                 update_for_newframe_muted();
299                 break;
300         case 3: /* Delete Strips */
301                 if (okee("Erase selected strips and/or keys")) {
302                         delete_nlachannel_keys ();
303                         update_for_newframe_muted();
304                 }
305                 break;
306         case 5: /* Convert Action to NLA Strip */
307                 convert_nla();
308                 break;
309         case 6: /* Move Up */
310                 shift_nlastrips_up();
311                 break;
312         case 7: /* Move Down */
313                 shift_nlastrips_down();
314                 break;
315         case 8: /* size */
316                 reset_action_strips(1);
317                 break;
318         case 9: /* reset start/end of action */
319                 reset_action_strips(2);
320                 break;
321         case 10: /* add new action as new action strip */
322                 add_empty_nlablock();
323                 break;
324         }
325 }
326
327 static uiBlock *nla_stripmenu(void *arg_unused)
328 {
329         uiBlock *block;
330         short yco= 0, menuwidth=120;
331
332         block= uiNewBlock(&curarea->uiblocks, "nla_stripmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
333         uiBlockSetButmFunc(block, do_nla_stripmenu, NULL);
334
335         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Strip Properties...|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
336         uiDefIconTextBlockBut(block, nla_strip_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 20, "");
337         uiDefIconTextBlockBut(block, nla_strip_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap To Frame", 0, yco-=20, 120, 20, "");
338         
339         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Strip Size|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
340         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Action Start/End|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
341         
342         uiDefBut(block, SEPR, 0, "",        0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
343         
344         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Action Strip|Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
345         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Blank Action Strip|Shift N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, "");
346         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Action to NLA Strip|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
347         
348         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
349         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
350         
351         uiDefBut(block, SEPR, 0, "",        0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
352
353         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move Down|Ctrl Page Down", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
354         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move Up|Ctrl Page Up", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
355         
356
357         if(curarea->headertype==HEADERTOP) {
358                 uiBlockSetDirection(block, UI_DOWN);
359         }
360         else {
361                 uiBlockSetDirection(block, UI_TOP);
362                 uiBlockFlipOrder(block);
363         }
364
365         uiTextBoundsBlock(block, 50);
366
367         return block;
368 }
369
370 static void do_nla_markermenu(void *arg, int event)
371 {       
372         switch(event)
373         {
374                 case 1:
375                         add_marker(CFRA);
376                         break;
377                 case 2:
378                         duplicate_marker();
379                         break;
380                 case 3:
381                         remove_marker();
382                         break;
383                 case 4:
384                         rename_marker();
385                         break;
386                 case 5:
387                         transform_markers('g', 0);
388                         break;
389         }
390         
391         allqueue(REDRAWTIME, 0);
392         allqueue(REDRAWIPO, 0);
393         allqueue(REDRAWACTION, 0);
394         allqueue(REDRAWNLA, 0);
395         allqueue(REDRAWSOUND, 0);
396 }
397
398 static uiBlock *nla_markermenu(void *arg_unused)
399 {
400         uiBlock *block;
401         short yco= 0, menuwidth=120;
402
403         block= uiNewBlock(&curarea->uiblocks, "nla_markermenu", 
404                                           UI_EMBOSSP, UI_HELV, curarea->headwin);
405         uiBlockSetButmFunc(block, do_nla_markermenu, NULL);
406
407         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Marker|M", 0, yco-=20, 
408                                          menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
409         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Marker|Ctrl Shift D", 0, yco-=20, 
410                                          menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
411         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Marker|X", 0, yco-=20,
412                                          menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
413                                          
414         uiDefBut(block, SEPR, 0, "",        0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
415
416         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "(Re)Name Marker|Ctrl M", 0, yco-=20,
417                                          menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
418         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move Marker|Ctrl G", 0, yco-=20,
419                                          menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
420         
421         if(curarea->headertype==HEADERTOP) {
422                 uiBlockSetDirection(block, UI_DOWN);
423         }
424         else {
425                 uiBlockSetDirection(block, UI_TOP);
426                 uiBlockFlipOrder(block);
427         }
428
429         uiTextBoundsBlock(block, 50);
430
431         return block;
432 }
433
434 void nla_buttons(void)
435 {
436         SpaceNla *snla;
437         short xco, xmax;
438         char naam[20];
439         uiBlock *block;
440         
441         snla= curarea->spacedata.first;
442         
443         sprintf(naam, "header %d", curarea->headwin);
444         block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSS, UI_HELV, curarea->headwin);
445
446         if(area_is_active_area(curarea)) uiBlockSetCol(block, TH_HEADER);
447         else uiBlockSetCol(block, TH_HEADERDESEL);
448
449         curarea->butspacetype= SPACE_NLA;
450         
451         xco = 8;
452         
453         uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), xco,0,XIC+10,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types.");
454
455         xco+= XIC+14;
456
457         uiBlockSetEmboss(block, UI_EMBOSSN);
458         if(curarea->flag & HEADER_NO_PULLDOWN) {
459                 uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, B_FLIPINFOMENU, ICON_DISCLOSURE_TRI_RIGHT,
460                                 xco,2,XIC,YIC-2,
461                                 &(curarea->flag), 0, 0, 0, 0, "Show pulldown menus");
462         } else {
463                 uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, B_FLIPINFOMENU, ICON_DISCLOSURE_TRI_DOWN,
464                                 xco,2,XIC,YIC-2,
465                                 &(curarea->flag), 0, 0, 0, 0, "Hide pulldown menus");
466         }
467         uiBlockSetEmboss(block, UI_EMBOSS);
468         xco+=XIC;
469
470         if((curarea->flag & HEADER_NO_PULLDOWN)==0) {
471                 /* pull down menus */
472                 uiBlockSetEmboss(block, UI_EMBOSSP);
473         
474                 xmax= GetButStringLength("View");
475                 uiDefPulldownBut(block, nla_viewmenu, NULL, "View", xco, -2, xmax-3, 24, "");
476                 xco+= xmax;
477                 
478                 xmax= GetButStringLength("Select");
479                 uiDefPulldownBut(block, nla_selectmenu, NULL, "Select", xco, -2, xmax-3, 24, "");
480                 xco+= xmax;
481         
482                 xmax= GetButStringLength("Marker");
483                 uiDefPulldownBut(block, nla_markermenu, NULL, "Marker", xco, -2, xmax-3, 24, "");
484                 xco+= xmax;
485                 
486                 xmax= GetButStringLength("Strip");
487                 uiDefPulldownBut(block, nla_stripmenu, NULL, "Strip", xco, -2, xmax-3, 24, "");
488                 xco+= xmax;
489         
490                 
491         }
492
493         uiBlockSetEmboss(block, UI_EMBOSS);
494
495
496         /* FULL WINDOW */
497         
498         
499 //      xco = 8;
500         
501 //      uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), xco,0,XIC+10,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types.");
502
503 //      xco+= XIC+22;
504         
505         /* FULL WINDOW */
506 //      if(curarea->full) uiDefIconBut(block, BUT,B_FULL, ICON_SPLITSCREEN,     xco,0,XIC,YIC, 0, 0, 0, 0, 0, "Returns to multiple views window (CTRL+Up arrow)");
507 //      else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN,   xco,0,XIC,YIC, 0, 0, 0, 0, 0, "Makes current window full screen (CTRL+Down arrow)");
508         
509         /* HOME */
510 //      uiDefIconBut(block, BUT, B_NLAHOME, ICON_HOME,  xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms window to home view showing all items (HOMEKEY)");    
511 //      xco+= XIC;
512         
513         /* IMAGE */
514 //      uiDefIconButS(block, TOG, B_REDR, ICON_IMAGE_COL,       xco+=XIC,0,XIC,YIC, &sseq->mainb, 0, 0, 0, 0, "Toggles image display");
515
516         /* ZOOM en BORDER */
517 //      xco+= XIC;
518 //      uiDefIconButI(block, TOG, B_VIEW2DZOOM, ICON_VIEWZOOM,  xco+=XIC,0,XIC,YIC, &viewmovetemp, 0, 0, 0, 0, "Zoom view (CTRL+MiddleMouse)");
519 //      uiDefIconBut(block, BUT, B_NLABORDER, ICON_BORDERMOVE,  xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zoom view to area");
520
521         /* draw LOCK */
522 //      xco+= XIC/2;
523
524         xco += 8;
525
526         uiDefIconButS(block, ICONTOG, 1, ICON_UNLOCKED, xco,0,XIC,YIC, &(snla->lock), 0, 0, 0, 0, "Toggles forced redraw of other windows to reflect changes in real time");
527
528         uiDrawBlock(block);
529 }