f96a4fea8911d7a881728fa56f98d8e1dd38e086
[blender-staging.git] / source / blender / makesdna / DNA_space_types.h
1 /**
2  * blenlib/DNA_space_types.h (mar-2001 nzc)
3  *      
4  * $Id$ 
5  *
6  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version. The Blender
12  * Foundation also sells licenses for use in proprietary software under
13  * the Blender License.  See http://www.blender.org/BL/ for information
14  * about this.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software Foundation,
23  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24  *
25  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
26  * All rights reserved.
27  *
28  * The Original Code is: all of this file.
29  *
30  * Contributor(s): none yet.
31  *
32  * ***** END GPL/BL DUAL LICENSE BLOCK *****
33  */
34 #ifndef DNA_SPACE_TYPES_H
35 #define DNA_SPACE_TYPES_H
36
37 #include "DNA_listBase.h"
38 #include "DNA_vec_types.h"
39 #include "DNA_oops_types.h"             /* for TreeStoreElem */
40 #include "DNA_image_types.h"    /* ImageUser */
41 /* Hum ... Not really nice... but needed for spacebuts. */
42 #include "DNA_view2d_types.h"
43
44 struct Ipo;
45 struct ID;
46 struct Text;
47 struct Script;
48 struct ImBuf;
49 struct Image;
50 struct SpaceIpo;
51 struct BlendHandle;
52 struct RenderInfo;
53 struct bNodeTree;
54 struct uiBlock;
55 struct FileList;
56
57         /**
58          * The base structure all the other spaces
59          * are derived (implicitly) from. Would be
60          * good to make this explicit.
61          */
62 typedef struct SpaceLink SpaceLink;
63 struct SpaceLink {
64         SpaceLink *next, *prev;
65         int spacetype;
66         float blockscale;
67         struct ScrArea *area;
68         short blockhandler[8];
69 };
70
71 typedef struct SpaceInfo {
72         SpaceLink *next, *prev;
73         int spacetype;
74         float blockscale;
75         struct ScrArea *area;
76
77         short blockhandler[8];
78 } SpaceInfo;
79
80 typedef struct SpaceIpo {
81         SpaceLink *next, *prev;
82         int spacetype;
83         float blockscale;
84         struct ScrArea *area;
85
86         short blockhandler[8];
87         
88         unsigned int rowbut, pad2; 
89         View2D v2d;
90         
91         void *editipo;
92         ListBase ipokey;
93         
94         /* the ipo context we need to store */
95         struct Ipo *ipo;
96         struct ID *from;
97         char actname[32], constname[32], bonename[32];
98
99         short totipo, pin;
100         short butofs, channel;
101         short showkey, blocktype;
102         short menunr, lock;
103         int flag;
104         float median[3];
105         rctf tot;
106 } SpaceIpo;
107
108 typedef struct SpaceButs {
109         SpaceLink *next, *prev;
110         int spacetype;
111         float blockscale;
112         struct ScrArea *area;
113         struct RenderInfo *ri;
114
115         short blockhandler[8];
116
117         short cursens, curact;
118         short align, tabo;              /* align for panels, tab is old tab */
119         View2D v2d;
120         
121         short mainb, menunr;    /* texnr and menunr have to remain shorts */
122         short pin, mainbo;      
123         void *lockpoin;
124         
125         short texnr;
126         char texfrom, showgroup;
127         
128         short modeltype;
129         short scriptblock;
130         short scaflag;
131         short re_align;
132         
133         short oldkeypress;              /* for keeping track of the sub tab key cycling */
134         char pad, flag;
135         
136         char texact, tab[7];    /* storing tabs for each context */
137                 
138 } SpaceButs;
139
140 typedef struct SpaceSeq {
141         SpaceLink *next, *prev;
142         int spacetype;
143         float blockscale;
144         struct ScrArea *area;
145
146         short blockhandler[8];
147
148         View2D v2d;
149         
150         float xof, yof; /* offset for drawing the image preview */
151         short mainb, pad;
152         short chanshown;
153         short zebra;
154         int flag;
155         float zoom;
156 } SpaceSeq;
157
158 typedef struct SpaceFile {
159         SpaceLink *next, *prev;
160         int spacetype;
161         float blockscale;
162         struct ScrArea *area;
163         
164         short blockhandler[8];
165
166         struct direntry *filelist;
167         int totfile;
168         
169         char title[24];
170         char dir[240];
171         char file[80];
172         
173         short type, ofs, flag, sort;
174         short maxnamelen, collums, f_fp, pad1;
175         int pad2;
176         char fp_str[8];
177
178         struct BlendHandle *libfiledata;
179         
180         unsigned short retval;          /* event */
181         short menu, act, ipotype;
182         
183         /* one day we'll add unions to dna */
184         void (*returnfunc)(char *);
185         void (*returnfunc_event)(unsigned short);
186         void (*returnfunc_args)(char *, void *, void *);
187         
188         void *arg1, *arg2;
189         short *menup;   /* pointer to menu result or ID browsing */
190         char *pupmenu;  /* optional menu in header */
191 } SpaceFile;
192
193 typedef struct SpaceOops {
194         SpaceLink *next, *prev;
195         int spacetype;
196         float blockscale;
197         struct ScrArea *area;
198
199         short blockhandler[8];
200
201         View2D v2d;
202         
203         ListBase oops;
204         short pin, visiflag, flag, rt;
205         void *lockpoin;
206         
207         ListBase tree;
208         struct TreeStore *treestore;
209         
210         /* search stuff */
211         char search_string[32];
212         struct TreeStoreElem search_tse;
213         int search_flags, do_;
214         
215         short type, outlinevis, storeflag;
216         short deps_flags;
217         
218 } SpaceOops;
219
220 typedef struct SpaceImage {
221         SpaceLink *next, *prev;
222         int spacetype;
223         float blockscale;
224         struct ScrArea *area;
225
226         short blockhandler[8];
227
228         View2D v2d;
229         
230         struct Image *image;
231         struct ImageUser iuser;
232         
233         struct CurveMapping *cumap;
234         short mode, menunr;
235         short imanr;
236         short curtile; /* the currently active tile of the image when tile is enabled, is kept in sync with the active faces tile */
237         int flag;
238         short imtypenr, lock;
239         short pin, pad2;
240         float zoom;
241         char dt_uv; /* UV draw type */
242         char sticky; /* sticky selection type */
243         char dt_uvstretch;
244         char pad[5];
245         
246         float xof, yof;                                 /* user defined offset, image is centered */
247         float centx, centy;                             /* storage for offset while render drawing */
248         
249 } SpaceImage;
250
251 typedef struct SpaceNla {
252         struct SpaceLink *next, *prev;
253         int spacetype;
254         float blockscale;
255         struct ScrArea *area;
256
257         short blockhandler[8];
258
259         short menunr, lock;
260         short autosnap;                 /* this uses the same settings as autosnap for Action Editor */
261         short flag;
262         
263         View2D v2d;     
264 } SpaceNla;
265
266 typedef struct SpaceText {
267         SpaceLink *next, *prev;
268         int spacetype;
269         float blockscale;
270         struct ScrArea *area;
271
272         short blockhandler[8];
273
274         struct Text *text;      
275
276         int top, viewlines;
277         short flags, menunr;
278         
279         int font_id;    
280         int lheight;
281         int left;
282         int showlinenrs;
283         
284         int tabnumber;
285         int currtab_set; 
286         int showsyntax;
287         int unused_padd;
288         
289         float pix_per_line;
290
291         struct rcti txtscroll, txtbar;
292
293 } SpaceText;
294
295 typedef struct Script {
296         ID id;
297
298         void *py_draw;
299         void *py_event;
300         void *py_button;
301         void *py_browsercallback;
302         void *py_globaldict;
303
304         int flags, lastspace;
305         char scriptname[256]; /* store the script file here so we can re-run it on loading blender, if "Enable Scripts" is on */
306         char scriptarg[256];
307 } Script;
308 #define SCRIPT_SET_NULL(_script) _script->py_draw = _script->py_event = _script->py_button = _script->py_browsercallback = _script->py_globaldict = NULL; _script->flags = 0;
309 #define SCRIPT_RUNNING  0x01
310 #define SCRIPT_GUI              0x02
311 #define SCRIPT_FILESEL  0x04
312
313 typedef struct SpaceScript {
314         SpaceLink *next, *prev;
315         int spacetype;
316         float blockscale;
317         struct ScrArea *area;
318         struct Script *script;
319
320         short flags, menunr;
321         int pad1;
322         
323         void *but_refs;
324 } SpaceScript;
325
326 typedef struct SpaceTime {
327         SpaceLink *next, *prev;
328         int spacetype;
329         float blockscale;
330         struct ScrArea *area;
331         
332         View2D v2d;
333         
334         int flag, redraws;
335         
336 } SpaceTime;
337
338 typedef struct SpaceNode {
339         SpaceLink *next, *prev;
340         int spacetype;
341         float blockscale;
342         struct ScrArea *area;
343         
344         View2D v2d;
345         
346         struct ID *id, *from;           /* context, no need to save in file? well... pinning... */
347         short flag, menunr;                     /* menunr: browse id block in header */
348         float aspect;
349         void *curfont;
350         
351         float xof, yof; /* offset for drawing the backdrop */
352         
353         struct bNodeTree *nodetree, *edittree;
354         int treetype, pad;                      /* treetype: as same nodetree->type */
355         
356 } SpaceNode;
357
358 /* snode->flag */
359 #define SNODE_DO_PREVIEW        1
360 #define SNODE_BACKDRAW          2
361
362 typedef struct SpaceImaSel {
363         SpaceLink *next, *prev;
364         int spacetype;
365         float blockscale;
366         struct ScrArea *area;
367         
368         short blockhandler[8];
369
370         View2D v2d;
371
372         struct FileList *files;
373
374         /* specific stuff for drawing */
375         char title[24];
376         char dir[240];
377         char file[80];
378
379         short type, menu, flag, sort;
380
381         void *curfont;
382         int     active_file;
383
384         int numtilesx;
385         int numtilesy;
386
387         int selstate;
388
389         struct rcti viewrect;
390         struct rcti bookmarkrect;
391
392         float scrollpos; /* current position of scrollhandle */
393         float scrollheight; /* height of the scrollhandle */
394         float scrollarea; /* scroll region, scrollpos is from 0 to scrollarea */
395
396         float aspect;
397         unsigned short retval;          /* event */
398
399         short ipotype;
400         
401         short filter;
402         short active_bookmark;
403         short pad, pad1;
404
405         /* view settings */
406         short prv_w;
407         short prv_h;
408
409         /* one day we'll add unions to dna */
410         void (*returnfunc)(char *);
411         void (*returnfunc_event)(unsigned short);
412         void (*returnfunc_args)(char *, void *, void *);
413         
414         void *arg1, *arg2;
415         short *menup;   /* pointer to menu result or ID browsing */
416         char *pupmenu;  /* optional menu in header */
417
418         struct ImBuf *img;
419 } SpaceImaSel;
420
421
422 /* **************** SPACE ********************* */
423
424
425 /* view3d  Now in DNA_view3d_types.h */
426
427 /* button defines in BIF_butspace.h */
428
429 /* sbuts->flag */
430 #define SB_PRV_OSA                      1
431
432 /* these values need to be hardcoded in structs, dna does not recognize defines */
433 /* also defined in BKE */
434 #define FILE_MAXDIR                     160
435 #define FILE_MAXFILE            80
436 #define FILE_MAX                        240
437
438 /* filesel types */
439 #define FILE_UNIX                       8
440 #define FILE_BLENDER            8 /* dont display relative paths */
441 #define FILE_SPECIAL            9
442
443 #define FILE_LOADLIB            1
444 #define FILE_MAIN                       2
445 #define FILE_LOADFONT           3
446
447 /* sfile->flag and simasel->flag */
448 #define FILE_SHOWSHORT          1
449 #define FILE_STRINGCODE         2
450 #define FILE_LINK                       4
451 #define FILE_HIDE_DOT           8
452 #define FILE_AUTOSELECT         16
453 #define FILE_ACTIVELAY          32
454 #define FILE_ATCURSOR           64
455 #define FILE_SYNCPOSE           128
456 #define FILE_FILTER                     256
457 #define FILE_BOOKMARKS          512
458
459 /* sfile->sort */
460 #define FILE_SORTALPHA          0
461 #define FILE_SORTDATE           1
462 #define FILE_SORTSIZE           2
463 #define FILE_SORTEXTENS         3
464
465 /* files in filesel list: 2=ACTIVE  */
466 #define HILITE                          1
467 #define BLENDERFILE                     4
468 #define PSXFILE                         8
469 #define IMAGEFILE                       16
470 #define MOVIEFILE                       32
471 #define PYSCRIPTFILE            64
472 #define FTFONTFILE                      128
473 #define SOUNDFILE                       256
474 #define TEXTFILE                        512
475 #define MOVIEFILE_ICON          1024 /* movie file that preview can't load */
476 #define FOLDERFILE                      2048 /* represents folders for filtering */
477
478 #define SCROLLH 16                      /* height scrollbar */
479 #define SCROLLB 16                      /* width scrollbar */
480
481 /* SpaceImage->mode */
482 #define SI_TEXTURE              0
483 #define SI_SHOW                 1
484
485 /* SpaceImage->dt_uv */
486 #define SI_UVDT_DASH    0
487 #define SI_UVDT_BLACK   1
488 #define SI_UVDT_WHITE   2
489 #define SI_UVDT_OUTLINE 3
490
491 /* SpaceImage->dt_uvstretch */
492 #define SI_UVDT_STRETCH_ANGLE   0
493 #define SI_UVDT_STRETCH_AREA    1
494
495 /* SpaceImage->sticky
496  * Note DISABLE should be 0, however would also need to re-arrange icon order,
497  * also, sticky loc is the default mode so this means we dont need to 'do_versons' */
498 #define SI_STICKY_LOC           0
499 #define SI_STICKY_DISABLE       1
500 #define SI_STICKY_VERTEX        2
501
502 /* SpaceImage->flag */
503 #define SI_BE_SQUARE    1<<0
504 #define SI_EDITTILE             1<<1
505 #define SI_CLIP_UV              1<<2
506 #define SI_DRAWTOOL             1<<3
507 #define SI_DEPRECATED1  1<<4    /* stick UVs to others in the same location */
508 #define SI_DRAWSHADOW   1<<5
509 #define SI_SELACTFACE   1<<6
510 #define SI_DEPRECATED2  1<<7
511 #define SI_DEPRECATED3  1<<8    /* stick UV selection to mesh vertex (UVs wont always be touching) */
512 #define SI_COORDFLOATS  1<<9
513 #define SI_PIXELSNAP    1<<10
514 #define SI_LIVE_UNWRAP  1<<11
515 #define SI_USE_ALPHA    1<<12
516 #define SI_SHOW_ALPHA   1<<13
517 #define SI_SHOW_ZBUF    1<<14
518                 /* next two for render window dislay */
519 #define SI_PREVSPACE    1<<15
520 #define SI_FULLWINDOW   1<<16
521 #define SI_SYNC_UVSEL   1<<17
522 #define SI_LOCAL_UV             1<<18
523                 /* this means that the image is drawn until it reaches the view edge,
524                  * in the image view, its unrelated to the 'tile' mode for texface */
525 #define SI_DRAW_TILE    1<<19 
526 #define SI_SMOOTH_UV    1<<20
527 #define SI_DRAW_STRETCH 1<<21
528
529 /* SpaceText flags (moved from DNA_text_types.h) */
530
531 #define ST_SCROLL_SELECT        0x0001 // scrollable
532 #define ST_CLEAR_NAMESPACE      0x0010 // clear namespace after script
533                                        // execution (see BPY_main.c)
534
535 /* SpaceOops->type */
536 #define SO_OOPS                 0
537 #define SO_OUTLINER             1
538 #define SO_DEPSGRAPH    2
539
540 /* SpaceOops->flag */
541 #define SO_TESTBLOCKS   1
542 #define SO_NEWSELECTED  2
543 #define SO_HIDE_RESTRICTCOLS            4
544
545 /* SpaceOops->visiflag */
546 #define OOPS_SCE        1
547 #define OOPS_OB         2
548 #define OOPS_ME         4
549 #define OOPS_CU         8
550 #define OOPS_MB         16
551 #define OOPS_LT         32
552 #define OOPS_LA         64
553 #define OOPS_MA         128
554 #define OOPS_TE         256
555 #define OOPS_IP         512
556 #define OOPS_LAY        1024
557 #define OOPS_LI         2048
558 #define OOPS_IM         4096
559 #define OOPS_AR         8192
560 #define OOPS_GR         16384
561
562 /* SpaceOops->outlinevis */
563 #define SO_ALL_SCENES   0
564 #define SO_CUR_SCENE    1
565 #define SO_VISIBLE              2
566 #define SO_SELECTED             3
567 #define SO_ACTIVE               4
568 #define SO_SAME_TYPE    5
569 #define SO_GROUPS               6
570 #define SO_LIBRARIES    7
571 #define SO_VERSE_SESSION        8
572 #define SO_VERSE_MS             9
573
574 /* SpaceOops->storeflag */
575 #define SO_TREESTORE_CLEANUP    1
576                 /* if set, it allows redraws. gets set for some allqueue events */
577 #define SO_TREESTORE_REDRAW             2
578
579 /* headerbuttons: 450-499 */
580
581 #define B_IMASELHOME            451
582 #define B_IMASELREMOVEBIP       452
583
584 #define C_BACK  0xBAAAAA
585 #define C_DARK  0x665656
586 #define C_DERK  0x766666
587 #define C_HI    0xCBBBBB
588 #define C_LO    0x544444
589
590 /* queue settings */
591 #define IMS_KNOW_WIN        1
592 #define IMS_KNOW_BIP        2
593 #define IMS_KNOW_DIR        4
594 #define IMS_DOTHE_INF           8
595 #define IMS_KNOW_INF       16
596 #define IMS_DOTHE_IMA      32
597 #define IMS_KNOW_IMA       64
598 #define IMS_FOUND_BIP     128
599 #define IMS_DOTHE_BIP     256
600 #define IMS_WRITE_NO_BIP  512
601
602 /* imasel->mode */
603 #define IMS_NOIMA                       0
604 #define IMS_IMA                         1
605 #define IMS_ANIM                        2
606 #define IMS_DIR                         4
607 #define IMS_FILE                        8
608 #define IMS_STRINGCODE          16
609
610 #define IMS_INDIR                       1
611 #define IMS_INDIRSLI            2
612 #define IMS_INFILE                      3
613 #define IMS_INFILESLI           4
614
615 /* nla->flag */
616 #define SNLA_ALLKEYED           1
617 #define SNLA_ACTIVELAYERS       2
618 #define SNLA_DRAWTIME           4
619
620 /* time->flag */
621         /* show timing in frames instead of in seconds */
622 #define TIME_DRAWFRAMES         1
623         /* temporary flag set when scrubbing time */
624 #define TIME_CFRA_NUM           2
625         /* only keyframes from active/selected channels get shown */
626 #define TIME_ONLYACTSEL         4
627
628 /* time->redraws */
629 #define TIME_LEFTMOST_3D_WIN    1
630 #define TIME_ALL_3D_WIN                 2
631 #define TIME_ALL_ANIM_WIN               4
632 #define TIME_ALL_BUTS_WIN               8
633 #define TIME_WITH_SEQ_AUDIO             16
634 #define TIME_SEQ                                32
635 #define TIME_ALL_IMAGE_WIN              64
636
637 /* sseq->mainb */
638 #define SEQ_DRAW_SEQUENCE         0
639 #define SEQ_DRAW_IMG_IMBUF        1
640 #define SEQ_DRAW_IMG_WAVEFORM     2
641 #define SEQ_DRAW_IMG_VECTORSCOPE  3
642 #define SEQ_DRAW_IMG_HISTOGRAM    4
643
644 /* sseq->flag */
645 #define SEQ_DRAWFRAMES   1
646 #define SEQ_MARKER_TRANS 2
647 #define SEQ_DRAW_COLOR_SEPERATED     4
648 #define SEQ_DRAW_SAFE_MARGINS        8
649
650 /* space types, moved from DNA_screen_types.h */
651 enum {
652         SPACE_EMPTY,
653         SPACE_VIEW3D,
654         SPACE_IPO,
655         SPACE_OOPS,
656         SPACE_BUTS,
657         SPACE_FILE,
658         SPACE_IMAGE,            
659         SPACE_INFO,
660         SPACE_SEQ,
661         SPACE_TEXT,
662         SPACE_IMASEL,
663         SPACE_SOUND,
664         SPACE_ACTION,
665         SPACE_NLA,
666         SPACE_SCRIPT,
667         SPACE_TIME,
668         SPACE_NODE,
669         SPACEICONMAX = SPACE_NODE
670 /*      SPACE_LOGIC     */
671 };
672
673 #endif