86f6e4bcbe4ed151548b3d27dc4d7dc86143d99b
[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
54         /**
55          * The base structure all the other spaces
56          * are derived (implicitly) from. Would be
57          * good to make this explicit.
58          */
59 typedef struct SpaceLink SpaceLink;
60 struct SpaceLink {
61         SpaceLink *next, *prev;
62         int spacetype;
63         float blockscale;
64         struct ScrArea *area;
65         short blockhandler[8];
66 };
67
68 typedef struct SpaceInfo {
69         SpaceLink *next, *prev;
70         int spacetype;
71         float blockscale;
72         struct ScrArea *area;
73
74         short blockhandler[8];
75 } SpaceInfo;
76
77 typedef struct SpaceIpo {
78         SpaceLink *next, *prev;
79         int spacetype;
80         float blockscale;
81         struct ScrArea *area;
82
83         short blockhandler[8];
84         
85         unsigned int rowbut, pad2; 
86         View2D v2d;
87         
88         void *editipo;
89         ListBase ipokey;
90         
91         /* the ipo context we need to store */
92         struct Ipo *ipo;
93         struct ID *from;
94         char actname[32], constname[32], bonename[32];
95
96         short totipo, pin;
97         short butofs, channel;
98         short showkey, blocktype;
99         short menunr, lock;
100         int flag;
101         float median[3];
102         rctf tot;
103 } SpaceIpo;
104
105 typedef struct SpaceButs {
106         SpaceLink *next, *prev;
107         int spacetype;
108         float blockscale;
109         struct ScrArea *area;
110         struct RenderInfo *ri;
111
112         short blockhandler[8];
113
114         short cursens, curact;
115         short align, tabo;              /* align for panels, tab is old tab */
116         View2D v2d;
117         
118         short mainb, menunr;    /* texnr and menunr have to remain shorts */
119         short pin, mainbo;      
120         void *lockpoin;
121         
122         short texnr;
123         char texfrom, showgroup;
124         
125         short modeltype;
126         short scriptblock;
127         short scaflag;
128         short re_align;
129         
130         short oldkeypress;              /* for keeping track of the sub tab key cycling */
131         char pad, flag;
132         
133         char texact, tab[7];    /* storing tabs for each context */
134                 
135 } SpaceButs;
136
137 typedef struct SpaceSeq {
138         SpaceLink *next, *prev;
139         int spacetype;
140         float blockscale;
141         struct ScrArea *area;
142
143         short blockhandler[8];
144
145         View2D v2d;
146         
147         float xof, yof; /* offset for drawing the image preview */
148         short mainb, pad;
149         short chanshown;
150         short zebra;
151         int flag;
152         float zoom;
153 } SpaceSeq;
154
155 typedef struct SpaceFile {
156         SpaceLink *next, *prev;
157         int spacetype;
158         float blockscale;
159         struct ScrArea *area;
160         
161         short blockhandler[8];
162
163         struct direntry *filelist;
164         int totfile;
165         
166         char title[24];
167         char dir[240];
168         char file[80];
169         
170         short type, ofs, flag, sort;
171         short maxnamelen, collums, f_fp, pad1;
172         int pad2;
173         char fp_str[8];
174
175         struct BlendHandle *libfiledata;
176         
177         unsigned short retval;          /* event */
178         short menu, act, ipotype;
179         
180         /* one day we'll add unions to dna */
181         void (*returnfunc)(char *);
182         void (*returnfunc_event)(unsigned short);
183         void (*returnfunc_args)(char *, void *, void *);
184         
185         void *arg1, *arg2;
186         short *menup;   /* pointer to menu result or ID browsing */
187         char *pupmenu;  /* optional menu in header */
188 } SpaceFile;
189
190 typedef struct SpaceOops {
191         SpaceLink *next, *prev;
192         int spacetype;
193         float blockscale;
194         struct ScrArea *area;
195
196         short blockhandler[8];
197
198         View2D v2d;
199         
200         ListBase oops;
201         short pin, visiflag, flag, rt;
202         void *lockpoin;
203         
204         ListBase tree;
205         struct TreeStore *treestore;
206         
207         /* search stuff */
208         char search_string[32];
209         struct TreeStoreElem search_tse;
210         int search_flags, do_;
211         
212         short type, outlinevis, storeflag;
213         short deps_flags;
214         
215 } SpaceOops;
216
217 typedef struct SpaceImage {
218         SpaceLink *next, *prev;
219         int spacetype;
220         float blockscale;
221         struct ScrArea *area;
222
223         short blockhandler[8];
224
225         View2D v2d;
226         
227         struct Image *image;
228         struct ImageUser iuser;
229         
230         struct CurveMapping *cumap;
231         short mode, menunr;
232         short imanr;
233         short curtile; /* the currently active tile of the image when tile is enabled, is kept in sync with the active faces tile */
234         int flag;
235         short imtypenr, lock;
236         short pin, pad2;
237         float zoom;
238         char dt_uv; /* UV draw type */
239         char sticky; /* sticky selection type */
240         char dt_uvstretch;
241         char pad[5];
242         
243         float xof, yof;                                 /* user defined offset, image is centered */
244         float centx, centy;                             /* storage for offset while render drawing */
245         
246 } SpaceImage;
247
248 typedef struct SpaceNla {
249         struct SpaceLink *next, *prev;
250         int spacetype;
251         float blockscale;
252         struct ScrArea *area;
253
254         short blockhandler[8];
255
256         short menunr, lock;
257         short autosnap;                 /* this uses the same settings as autosnap for Action Editor */
258         short flag;
259         
260         View2D v2d;     
261 } SpaceNla;
262
263 typedef struct SpaceText {
264         SpaceLink *next, *prev;
265         int spacetype;
266         float blockscale;
267         struct ScrArea *area;
268
269         short blockhandler[8];
270
271         struct Text *text;      
272
273         int top, viewlines;
274         short flags, menunr;
275         
276         int font_id;    
277         int lheight;
278         int left;
279         int showlinenrs;
280         
281         int tabnumber;
282         int currtab_set; 
283         int showsyntax;
284         int unused_padd;
285         
286         float pix_per_line;
287
288         struct rcti txtscroll, txtbar;
289
290 } SpaceText;
291
292 typedef struct Script {
293         ID id;
294
295         void *py_draw;
296         void *py_event;
297         void *py_button;
298         void *py_browsercallback;
299         void *py_globaldict;
300
301         int flags, lastspace;
302         char scriptname[256]; /* store the script file here so we can re-run it on loading blender, if "Enable Scripts" is on */
303         char scriptarg[256];
304 } Script;
305 #define SCRIPT_SET_NULL(_script) _script->py_draw = _script->py_event = _script->py_button = _script->py_browsercallback = _script->py_globaldict = NULL; _script->flags = 0;
306 #define SCRIPT_RUNNING  0x01
307 #define SCRIPT_GUI              0x02
308 #define SCRIPT_FILESEL  0x04
309
310 typedef struct SpaceScript {
311         SpaceLink *next, *prev;
312         int spacetype;
313         float blockscale;
314         struct ScrArea *area;
315         struct Script *script;
316
317         short flags, menunr;
318         int pad1;
319         
320         void *but_refs;
321 } SpaceScript;
322
323 typedef struct SpaceTime {
324         SpaceLink *next, *prev;
325         int spacetype;
326         float blockscale;
327         struct ScrArea *area;
328         
329         View2D v2d;
330         
331         int flag, redraws;
332         
333 } SpaceTime;
334
335 typedef struct SpaceNode {
336         SpaceLink *next, *prev;
337         int spacetype;
338         float blockscale;
339         struct ScrArea *area;
340         
341         View2D v2d;
342         
343         struct ID *id, *from;           /* context, no need to save in file? well... pinning... */
344         short flag, menunr;                     /* menunr: browse id block in header */
345         float aspect;
346         void *curfont;
347         
348         float xof, yof; /* offset for drawing the backdrop */
349         
350         struct bNodeTree *nodetree, *edittree;
351         int treetype, pad;                      /* treetype: as same nodetree->type */
352         
353 } SpaceNode;
354
355 /* snode->flag */
356 #define SNODE_DO_PREVIEW        1
357 #define SNODE_BACKDRAW          2
358
359 typedef struct SpaceImaSel {
360         SpaceLink *next, *prev;
361         int spacetype;
362         float blockscale;
363         struct ScrArea *area;
364         
365         short blockhandler[8];
366
367         View2D v2d;
368
369         struct FileList *files;
370
371         /* specific stuff for drawing */
372         char title[24];
373         char dir[240];
374         char file[80];
375
376         short type, menu, flag, sort;
377
378         void *curfont;
379         int     active_file;
380
381         int numtilesx;
382         int numtilesy;
383
384         int selstate;
385
386         struct rcti viewrect;
387         struct rcti bookmarkrect;
388
389         float scrollpos; /* current position of scrollhandle */
390         float scrollheight; /* height of the scrollhandle */
391         float scrollarea; /* scroll region, scrollpos is from 0 to scrollarea */
392
393         float aspect;
394         unsigned short retval;          /* event */
395
396         short ipotype;
397         
398         short filter;
399         short active_bookmark;
400         short pad, pad1;
401
402         /* view settings */
403         short prv_w;
404         short prv_h;
405
406         /* one day we'll add unions to dna */
407         void (*returnfunc)(char *);
408         void (*returnfunc_event)(unsigned short);
409         void (*returnfunc_args)(char *, void *, void *);
410         
411         void *arg1, *arg2;
412         short *menup;   /* pointer to menu result or ID browsing */
413         char *pupmenu;  /* optional menu in header */
414
415         struct ImBuf *img;
416 } SpaceImaSel;
417
418
419 /* **************** SPACE ********************* */
420
421
422 /* view3d  Now in DNA_view3d_types.h */
423
424 /* button defines in BIF_butspace.h */
425
426 /* sbuts->flag */
427 #define SB_PRV_OSA                      1
428
429 /* these values need to be hardcoded in structs, dna does not recognize defines */
430 /* also defined in BKE */
431 #define FILE_MAXDIR                     160
432 #define FILE_MAXFILE            80
433 #define FILE_MAX                        240
434
435 /* filesel types */
436 #define FILE_UNIX                       8
437 #define FILE_BLENDER            8 /* dont display relative paths */
438 #define FILE_SPECIAL            9
439
440 #define FILE_LOADLIB            1
441 #define FILE_MAIN                       2
442 #define FILE_LOADFONT           3
443
444 /* sfile->flag and simasel->flag */
445 #define FILE_SHOWSHORT          1
446 #define FILE_STRINGCODE         2
447 #define FILE_LINK                       4
448 #define FILE_HIDE_DOT           8
449 #define FILE_AUTOSELECT         16
450 #define FILE_ACTIVELAY          32
451 #define FILE_ATCURSOR           64
452 #define FILE_SYNCPOSE           128
453 #define FILE_FILTER                     256
454 #define FILE_BOOKMARKS          512
455
456 /* sfile->sort */
457 #define FILE_SORTALPHA          0
458 #define FILE_SORTDATE           1
459 #define FILE_SORTSIZE           2
460 #define FILE_SORTEXTENS         3
461
462 /* files in filesel list: 2=ACTIVE  */
463 #define HILITE                          1
464 #define BLENDERFILE                     4
465 #define PSXFILE                         8
466 #define IMAGEFILE                       16
467 #define MOVIEFILE                       32
468 #define PYSCRIPTFILE            64
469 #define FTFONTFILE                      128
470 #define SOUNDFILE                       256
471 #define TEXTFILE                        512
472 #define MOVIEFILE_ICON          1024 /* movie file that preview can't load */
473 #define FOLDERFILE                      2048 /* represents folders for filtering */
474
475 #define SCROLLH 16                      /* height scrollbar */
476 #define SCROLLB 16                      /* width scrollbar */
477
478 /* SpaceImage->mode */
479 #define SI_TEXTURE              0
480 #define SI_SHOW                 1
481
482 /* SpaceImage->dt_uv */
483 #define SI_UVDT_OUTLINE 0
484 #define SI_UVDT_DASH    1
485 #define SI_UVDT_BLACK   2
486 #define SI_UVDT_WHITE   3
487
488 /* SpaceImage->dt_uvstretch */
489 #define SI_UVDT_STRETCH_ANGLE   0
490 #define SI_UVDT_STRETCH_AREA    1
491
492 /* SpaceImage->sticky
493  * Note DISABLE should be 0, however would also need to re-arrange icon order,
494  * also, sticky loc is the default mode so this means we dont need to 'do_versons' */
495 #define SI_STICKY_LOC           0
496 #define SI_STICKY_DISABLE       1
497 #define SI_STICKY_VERTEX        2
498
499 /* SpaceImage->flag */
500 #define SI_BE_SQUARE    1<<0
501 #define SI_EDITTILE             1<<1
502 #define SI_CLIP_UV              1<<2
503 #define SI_DRAWTOOL             1<<3
504 #define SI_DEPRECATED1  1<<4    /* stick UVs to others in the same location */
505 #define SI_DRAWSHADOW   1<<5
506 #define SI_SELACTFACE   1<<6
507 #define SI_DEPRECATED2  1<<7
508 #define SI_DEPRECATED3  1<<8    /* stick UV selection to mesh vertex (UVs wont always be touching) */
509 #define SI_COORDFLOATS  1<<9
510 #define SI_PIXELSNAP    1<<10
511 #define SI_LIVE_UNWRAP  1<<11
512 #define SI_USE_ALPHA    1<<12
513 #define SI_SHOW_ALPHA   1<<13
514 #define SI_SHOW_ZBUF    1<<14
515                 /* next two for render window dislay */
516 #define SI_PREVSPACE    1<<15
517 #define SI_FULLWINDOW   1<<16
518 #define SI_SYNC_UVSEL   1<<17
519 #define SI_LOCAL_UV             1<<18
520                 /* this means that the image is drawn until it reaches the view edge,
521                  * in the image view, its unrelated to the 'tile' mode for texface */
522 #define SI_DRAW_TILE    1<<19 
523 #define SI_SMOOTH_UV    1<<20
524 #define SI_DRAW_STRETCH 1<<21
525
526 /* SpaceIpo->flag */
527 #define SIPO_LOCK_VIEW  1<<0
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 #define TIME_CONTINUE_PHYSICS   128
637
638 /* sseq->mainb */
639 #define SEQ_DRAW_SEQUENCE         0
640 #define SEQ_DRAW_IMG_IMBUF        1
641 #define SEQ_DRAW_IMG_WAVEFORM     2
642 #define SEQ_DRAW_IMG_VECTORSCOPE  3
643 #define SEQ_DRAW_IMG_HISTOGRAM    4
644
645 /* sseq->flag */
646 #define SEQ_DRAWFRAMES   1
647 #define SEQ_MARKER_TRANS 2
648 #define SEQ_DRAW_COLOR_SEPERATED     4
649 #define SEQ_DRAW_SAFE_MARGINS        8
650
651 /* space types, moved from DNA_screen_types.h */
652 enum {
653         SPACE_EMPTY,
654         SPACE_VIEW3D,
655         SPACE_IPO,
656         SPACE_OOPS,
657         SPACE_BUTS,
658         SPACE_FILE,
659         SPACE_IMAGE,            
660         SPACE_INFO,
661         SPACE_SEQ,
662         SPACE_TEXT,
663         SPACE_IMASEL,
664         SPACE_SOUND,
665         SPACE_ACTION,
666         SPACE_NLA,
667         SPACE_SCRIPT,
668         SPACE_TIME,
669         SPACE_NODE,
670         SPACEICONMAX = SPACE_NODE
671 /*      SPACE_LOGIC     */
672 };
673
674 #endif