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