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