Cleanup: remove blockscale & handler
[blender.git] / source / blender / makesdna / DNA_space_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27 /** \file DNA_space_types.h
28  *  \ingroup DNA
29  *  \since mar-2001
30  *  \author nzc
31  *
32  * Structs for each of space type in the user interface.
33  */
34
35 #ifndef __DNA_SPACE_TYPES_H__
36 #define __DNA_SPACE_TYPES_H__
37
38 #include "DNA_defs.h"
39 #include "DNA_listBase.h"
40 #include "DNA_color_types.h"        /* for Histogram */
41 #include "DNA_vec_types.h"
42 #include "DNA_outliner_types.h"     /* for TreeStoreElem */
43 #include "DNA_image_types.h"        /* ImageUser */
44 #include "DNA_movieclip_types.h"    /* MovieClipUser */
45 #include "DNA_sequence_types.h"     /* SequencerScopes */
46 #include "DNA_node_types.h"         /* for bNodeInstanceKey */
47 /* Hum ... Not really nice... but needed for spacebuts. */
48 #include "DNA_view2d_types.h"
49
50 struct ID;
51 struct Text;
52 struct Script;
53 struct Image;
54 struct Scopes;
55 struct Histogram;
56 struct SpaceIpo;
57 struct bNodeTree;
58 struct FileList;
59 struct bGPdata;
60 struct bDopeSheet;
61 struct FileSelectParams;
62 struct FileLayout;
63 struct wmOperator;
64 struct wmTimer;
65 struct MovieClip;
66 struct MovieClipScopes;
67 struct Mask;
68 struct BLI_mempool;
69
70 /* -------------------------------------------------------------------- */
71 /** \name SpaceLink (Base)
72  * \{ */
73
74 /**
75  * The base structure all the other spaces
76  * are derived (implicitly) from. Would be
77  * good to make this explicit.
78  */
79 typedef struct SpaceLink {
80         struct SpaceLink *next, *prev;
81         ListBase regionbase;        /* storage of regions for inactive spaces */
82         char spacetype;
83         char link_flag;
84         char _pad0[6];
85 } SpaceLink;
86
87 /* -------------------------------------------------------------------- */
88 /** \name Space Info
89  * \{ */
90
91 /* Info Header */
92 typedef struct SpaceInfo {
93         SpaceLink *next, *prev;
94         ListBase regionbase;        /* storage of regions for inactive spaces */
95         char spacetype;
96         char link_flag;
97         char _pad0[6];
98         /* End 'SpaceLink' header. */
99
100         char rpt_mask;
101         char pad[7];
102 } SpaceInfo;
103
104 /* SpaceInfo.rpt_mask */
105 typedef enum eSpaceInfo_RptMask {
106         INFO_RPT_DEBUG  = (1 << 0),
107         INFO_RPT_INFO   = (1 << 1),
108         INFO_RPT_OP     = (1 << 2),
109         INFO_RPT_WARN   = (1 << 3),
110         INFO_RPT_ERR    = (1 << 4),
111 } eSpaceInfo_RptMask;
112
113 /** \} */
114
115 /* -------------------------------------------------------------------- */
116 /** \name Properties Editor
117  * \{ */
118
119 /* Properties Editor */
120 typedef struct SpaceButs {
121         SpaceLink *next, *prev;
122         ListBase regionbase;        /* storage of regions for inactive spaces */
123         char spacetype;
124         char link_flag;
125         char _pad0[6];
126         /* End 'SpaceLink' header. */
127
128         View2D v2d DNA_DEPRECATED;                      /* deprecated, copied to region */
129
130         short mainb, mainbo, mainbuser; /* context tabs */
131         short re_align, align;          /* align for panels */
132         short preview;                  /* preview is signal to refresh */
133         /* texture context selector (material, lamp, particles, world, other) */
134         short texture_context, texture_context_prev;
135         char flag, pad[7];
136
137         void *path;                     /* runtime */
138         int pathflag, dataicon;         /* runtime */
139         ID *pinid;
140
141         void *texuser;
142 } SpaceButs;
143
144 /* button defines (deprecated) */
145 #ifdef DNA_DEPRECATED_ALLOW
146 /* warning: the values of these defines are used in SpaceButs.tabs[8] */
147 /* SpaceButs.mainb new */
148 #define CONTEXT_SCENE   0
149 #define CONTEXT_OBJECT  1
150 // #define CONTEXT_TYPES   2
151 #define CONTEXT_SHADING 3
152 #define CONTEXT_EDITING 4
153 // #define CONTEXT_SCRIPT  5
154 #define CONTEXT_LOGIC   6
155
156 /* SpaceButs.mainb old (deprecated) */
157 // #define BUTS_VIEW           0
158 #define BUTS_LAMP           1
159 #define BUTS_MAT            2
160 #define BUTS_TEX            3
161 #define BUTS_ANIM           4
162 #define BUTS_WORLD          5
163 #define BUTS_RENDER         6
164 #define BUTS_EDIT           7
165 #define BUTS_GAME           8
166 #define BUTS_FPAINT         9
167 #define BUTS_RADIO          10
168 #define BUTS_SCRIPT         11
169 // #define BUTS_SOUND          12
170 #define BUTS_CONSTRAINT     13
171 // #define BUTS_EFFECTS        14
172 #endif /* DNA_DEPRECATED_ALLOW */
173
174 /* SpaceButs.mainb new */
175 typedef enum eSpaceButtons_Context {
176         BCONTEXT_RENDER = 0,
177         BCONTEXT_SCENE = 1,
178         BCONTEXT_WORLD = 2,
179         BCONTEXT_OBJECT = 3,
180         BCONTEXT_DATA = 4,
181         BCONTEXT_MATERIAL = 5,
182         BCONTEXT_TEXTURE = 6,
183         BCONTEXT_PARTICLE = 7,
184         BCONTEXT_PHYSICS = 8,
185         BCONTEXT_BONE = 9,
186         BCONTEXT_MODIFIER = 10,
187         BCONTEXT_CONSTRAINT = 11,
188         BCONTEXT_BONE_CONSTRAINT = 12,
189         BCONTEXT_RENDER_LAYER = 13,
190
191         /* always as last... */
192         BCONTEXT_TOT
193 } eSpaceButtons_Context;
194
195 /* SpaceButs.flag */
196 typedef enum eSpaceButtons_Flag {
197         SB_PRV_OSA = (1 << 0),
198         SB_PIN_CONTEXT = (1 << 1),
199         /* SB_WORLD_TEX = (1 << 2), */ /* not used anymore */
200         /* SB_BRUSH_TEX = (1 << 3), */ /* not used anymore */
201         SB_TEX_USER_LIMITED = (1 << 3), /* Do not add materials, particles, etc. in TemplateTextureUser list. */
202         SB_SHADING_CONTEXT = (1 << 4),
203 } eSpaceButtons_Flag;
204
205 /* SpaceButs.texture_context */
206 typedef enum eSpaceButtons_Texture_Context {
207         SB_TEXC_MATERIAL = 0,
208         SB_TEXC_WORLD = 1,
209         SB_TEXC_LAMP = 2,
210         SB_TEXC_PARTICLES = 3,
211         SB_TEXC_OTHER = 4,
212         SB_TEXC_LINESTYLE = 5,
213 } eSpaceButtons_Texture_Context;
214
215 /* SpaceButs.align */
216 typedef enum eSpaceButtons_Align {
217         BUT_FREE = 0,
218         BUT_HORIZONTAL = 1,
219         BUT_VERTICAL = 2,
220         BUT_AUTO = 3,
221 } eSpaceButtons_Align;
222
223 /* SpaceButs.scaflag */
224 #define BUTS_SENS_SEL           1
225 #define BUTS_SENS_ACT           2
226 #define BUTS_SENS_LINK          4
227 #define BUTS_CONT_SEL           8
228 #define BUTS_CONT_ACT           16
229 #define BUTS_CONT_LINK          32
230 #define BUTS_ACT_SEL            64
231 #define BUTS_ACT_ACT            128
232 #define BUTS_ACT_LINK           256
233 #define BUTS_SENS_STATE         512
234 #define BUTS_ACT_STATE          1024
235 #define BUTS_CONT_INIT_STATE    2048
236
237
238 /** \} */
239
240 /* -------------------------------------------------------------------- */
241 /** \name Outliner
242  * \{ */
243
244 /* Outliner */
245 typedef struct SpaceOops {
246         SpaceLink *next, *prev;
247         ListBase regionbase;        /* storage of regions for inactive spaces */
248         char spacetype;
249         char link_flag;
250         char _pad0[6];
251         /* End 'SpaceLink' header. */
252
253         View2D v2d DNA_DEPRECATED;  /* deprecated, copied to region */
254
255         ListBase tree;
256
257         /* treestore is an ordered list of TreeStoreElem's from outliner tree;
258          * Note that treestore may contain duplicate elements if element
259          * is used multiple times in outliner tree (e. g. linked objects)
260          * Also note that BLI_mempool can not be read/written in DNA directly,
261          * therefore readfile.c/writefile.c linearize treestore into TreeStore structure
262          */
263         struct BLI_mempool *treestore;
264
265         /* search stuff */
266         char search_string[64];
267         struct TreeStoreElem search_tse;
268
269         short flag, outlinevis, storeflag, search_flags;
270
271         /* pointers to treestore elements, grouped by (id, type, nr) in hashtable for faster searching */
272         void *treehash;
273 } SpaceOops;
274
275
276 /* SpaceOops.flag */
277 typedef enum eSpaceOutliner_Flag {
278         SO_TESTBLOCKS           = (1 << 0),
279         SO_NEWSELECTED          = (1 << 1),
280         SO_HIDE_RESTRICTCOLS    = (1 << 2),
281         SO_HIDE_KEYINGSETINFO   = (1 << 3),
282         SO_SKIP_SORT_ALPHA      = (1 << 4),
283 } eSpaceOutliner_Flag;
284
285 /* SpaceOops.outlinevis */
286 typedef enum eSpaceOutliner_Mode {
287         SO_ALL_SCENES = 0,
288         SO_CUR_SCENE = 1,
289         SO_VISIBLE = 2,
290         SO_SELECTED = 3,
291         SO_ACTIVE = 4,
292         SO_SAME_TYPE = 5,
293         SO_GROUPS = 6,
294         SO_LIBRARIES = 7,
295         /* SO_VERSE_SESSION = 8, */  /* deprecated! */
296         /* SO_VERSE_MS = 9, */       /* deprecated! */
297         SO_SEQUENCE = 10,
298         SO_DATABLOCKS = 11,
299         SO_USERDEF = 12,
300         /* SO_KEYMAP = 13, */        /* deprecated! */
301         SO_ID_ORPHANS = 14,
302 } eSpaceOutliner_Mode;
303
304 /* SpaceOops.storeflag */
305 typedef enum eSpaceOutliner_StoreFlag {
306         /* cleanup tree */
307         SO_TREESTORE_CLEANUP    = (1 << 0),
308         /* if set, it allows redraws. gets set for some allqueue events */
309         SO_TREESTORE_REDRAW     = (1 << 1),
310         /* rebuild the tree, similar to cleanup,
311          * but defer a call to BKE_outliner_treehash_rebuild_from_treestore instead */
312         SO_TREESTORE_REBUILD    = (1 << 2),
313 } eSpaceOutliner_StoreFlag;
314
315 /* outliner search flags (SpaceOops.search_flags) */
316 typedef enum eSpaceOutliner_Search_Flags {
317         SO_FIND_CASE_SENSITIVE  = (1 << 0),
318         SO_FIND_COMPLETE        = (1 << 1),
319         SO_SEARCH_RECURSIVE     = (1 << 2),
320 } eSpaceOutliner_Search_Flags;
321
322 /** \} */
323
324 /* -------------------------------------------------------------------- */
325 /** \name Graph Editor
326  * \{ */
327
328 /* 'Graph' Editor (formerly known as the IPO Editor) */
329 typedef struct SpaceIpo {
330         SpaceLink *next, *prev;
331         ListBase regionbase;        /* storage of regions for inactive spaces */
332         char spacetype;
333         char link_flag;
334         char _pad0[6];
335         /* End 'SpaceLink' header. */
336
337         View2D v2d DNA_DEPRECATED;  /* deprecated, copied to region */
338
339         struct bDopeSheet *ads; /* settings for filtering animation data (NOTE: we use a pointer due to code-linking issues) */
340
341         ListBase ghostCurves;   /* sampled snapshots of F-Curves used as in-session guides */
342
343         short mode;             /* mode for the Graph editor (eGraphEdit_Mode) */
344         short autosnap;         /* time-transform autosnapping settings for Graph editor (eAnimEdit_AutoSnap in DNA_action_types.h) */
345         int flag;               /* settings for Graph editor (eGraphEdit_Flag) */
346
347         float cursorTime;       /* time value for cursor (when in drivers mode; animation uses current frame) */
348         float cursorVal;        /* cursor value (y-value, x-value is current frame) */
349         int around;             /* pivot point for transforms */
350         int pad;
351 } SpaceIpo;
352
353
354 /* SpaceIpo.flag (Graph Editor Settings) */
355 typedef enum eGraphEdit_Flag {
356         /* OLD DEPRECEATED SETTING */
357         /* SIPO_LOCK_VIEW            = (1 << 0), */
358
359         /* don't merge keyframes on the same frame after a transform */
360         SIPO_NOTRANSKEYCULL       = (1 << 1),
361         /* don't show any keyframe handles at all */
362         SIPO_NOHANDLES            = (1 << 2),
363         /* don't show current frame number beside indicator line */
364         SIPO_NODRAWCFRANUM        = (1 << 3),
365         /* show timing in seconds instead of frames */
366         SIPO_DRAWTIME             = (1 << 4),
367         /* only show keyframes for selected F-Curves */
368         SIPO_SELCUVERTSONLY       = (1 << 5),
369         /* draw names of F-Curves beside the respective curves */
370         /* NOTE: currently not used */
371         SIPO_DRAWNAMES            = (1 << 6),
372         /* show sliders in channels list */
373         SIPO_SLIDERS              = (1 << 7),
374         /* don't show the horizontal component of the cursor */
375         SIPO_NODRAWCURSOR         = (1 << 8),
376         /* only show handles of selected keyframes */
377         SIPO_SELVHANDLESONLY      = (1 << 9),
378         /* temporary flag to force channel selections to be synced with main */
379         SIPO_TEMP_NEEDCHANSYNC    = (1 << 10),
380         /* don't perform realtime updates */
381         SIPO_NOREALTIMEUPDATES    = (1 << 11),
382         /* don't draw curves with AA ("beauty-draw") for performance */
383         SIPO_BEAUTYDRAW_OFF       = (1 << 12),
384         /* draw grouped channels with colors set in group */
385         SIPO_NODRAWGCOLORS        = (1 << 13),
386         /* normalize curves on display */
387         SIPO_NORMALIZE            = (1 << 14),
388         SIPO_NORMALIZE_FREEZE     = (1 << 15),
389 } eGraphEdit_Flag;
390
391 /* SpaceIpo.mode (Graph Editor Mode) */
392 typedef enum eGraphEdit_Mode {
393         /* all animation curves (from all over Blender) */
394         SIPO_MODE_ANIMATION = 0,
395         /* drivers only */
396         SIPO_MODE_DRIVERS = 1,
397 } eGraphEdit_Mode;
398
399 /** \} */
400
401 /* -------------------------------------------------------------------- */
402 /** \name NLA Editor
403  * \{ */
404
405 /* NLA Editor */
406 typedef struct SpaceNla {
407         struct SpaceLink *next, *prev;
408         ListBase regionbase;        /* storage of regions for inactive spaces */
409         char spacetype;
410         char link_flag;
411         char _pad0[6];
412         /* End 'SpaceLink' header. */
413
414         short autosnap;         /* this uses the same settings as autosnap for Action Editor */
415         short flag;
416         int pad;
417
418         struct bDopeSheet *ads;
419         View2D v2d DNA_DEPRECATED;   /* deprecated, copied to region */
420 } SpaceNla;
421
422 /* SpaceNla.flag */
423 typedef enum eSpaceNla_Flag {
424         /* flags (1<<0), (1<<1), and (1<<3) are deprecated flags from old verisons */
425
426         /* draw timing in seconds instead of frames */
427         SNLA_DRAWTIME          = (1 << 2),
428         /* don't draw frame number beside frame indicator */
429         SNLA_NODRAWCFRANUM     = (1 << 4),
430         /* don't draw influence curves on strips */
431         SNLA_NOSTRIPCURVES     = (1 << 5),
432         /* don't perform realtime updates */
433         SNLA_NOREALTIMEUPDATES = (1 << 6),
434         /* don't show local strip marker indications */
435         SNLA_NOLOCALMARKERS    = (1 << 7),
436 } eSpaceNla_Flag;
437
438 /** \} */
439
440 /* -------------------------------------------------------------------- */
441 /** \name Timeline
442  * \{ */
443
444 /* Pointcache drawing data */
445 # /* Only store the data array in the cache to avoid constant reallocation. */
446 # /* No need to store when saved. */
447 typedef struct SpaceTimeCache {
448         struct SpaceTimeCache *next, *prev;
449         float *array;
450 } SpaceTimeCache;
451
452 /* Timeline View */
453 typedef struct SpaceTime {
454         SpaceLink *next, *prev;
455         ListBase regionbase;        /* storage of regions for inactive spaces */
456         char spacetype;
457         char link_flag;
458         char _pad0[6];
459         /* End 'SpaceLink' header. */
460
461
462         View2D v2d DNA_DEPRECATED;  /* deprecated, copied to region */
463
464         ListBase caches;
465
466         int cache_display;
467         int flag;
468 } SpaceTime;
469
470
471 /* SpaceTime.flag */
472 typedef enum eTimeline_Flag {
473         /* show timing in frames instead of in seconds */
474         TIME_DRAWFRAMES    = (1 << 0),
475         /* show time indicator box beside the frame number */
476         TIME_CFRA_NUM      = (1 << 1),
477         /* only keyframes from active/selected channels get shown */
478         TIME_ONLYACTSEL    = (1 << 2),
479 } eTimeline_Flag;
480
481 /* SpaceTime.redraws (now bScreen.redraws_flag) */
482 typedef enum eScreen_Redraws_Flag {
483         TIME_REGION            = (1 << 0),
484         TIME_ALL_3D_WIN        = (1 << 1),
485         TIME_ALL_ANIM_WIN      = (1 << 2),
486         TIME_ALL_BUTS_WIN      = (1 << 3),
487         // TIME_WITH_SEQ_AUDIO    = (1 << 4), /* DEPRECATED */
488         TIME_SEQ               = (1 << 5),
489         TIME_ALL_IMAGE_WIN     = (1 << 6),
490         // TIME_CONTINUE_PHYSICS  = (1 << 7), /* UNUSED */
491         TIME_NODES             = (1 << 8),
492         TIME_CLIPS             = (1 << 9),
493
494         TIME_FOLLOW            = (1 << 15),
495 } eScreen_Redraws_Flag;
496
497 /* SpaceTime.cache */
498 typedef enum eTimeline_Cache_Flag {
499         TIME_CACHE_DISPLAY       = (1 << 0),
500         TIME_CACHE_SOFTBODY      = (1 << 1),
501         TIME_CACHE_PARTICLES     = (1 << 2),
502         TIME_CACHE_CLOTH         = (1 << 3),
503         TIME_CACHE_SMOKE         = (1 << 4),
504         TIME_CACHE_DYNAMICPAINT  = (1 << 5),
505         TIME_CACHE_RIGIDBODY     = (1 << 6),
506 } eTimeline_Cache_Flag;
507
508 /** \} */
509
510 /* -------------------------------------------------------------------- */
511 /** \name Sequence Editor
512  * \{ */
513
514 /* Sequencer */
515 typedef struct SpaceSeq {
516         SpaceLink *next, *prev;
517         ListBase regionbase;        /* storage of regions for inactive spaces */
518         char spacetype;
519         char link_flag;
520         char _pad0[6];
521         /* End 'SpaceLink' header. */
522
523         View2D v2d DNA_DEPRECATED;  /* deprecated, copied to region */
524
525         float xof DNA_DEPRECATED, yof DNA_DEPRECATED;   /* deprecated: offset for drawing the image preview */
526         short mainb;    /* weird name for the sequencer subtype (seq, image, luma... etc) */
527         short render_size;  /* eSpaceSeq_Proxy_RenderSize */
528         short chanshown;
529         short zebra;
530         int flag;
531         float zoom DNA_DEPRECATED;  /* deprecated, handled by View2D now */
532         int view; /* see SEQ_VIEW_* below */
533         int overlay_type;
534         int draw_flag; /* overlay an image of the editing on below the strips */
535         int pad;
536
537         struct bGPdata *gpd;        /* grease-pencil data */
538
539         struct SequencerScopes scopes;  /* different scoped displayed in space */
540
541         char multiview_eye;                             /* multiview current eye - for internal use */
542         char pad2[7];
543
544         struct GPUFX *compositor;
545         void *pad3;
546 } SpaceSeq;
547
548
549 /* SpaceSeq.mainb */
550 typedef enum eSpaceSeq_RegionType {
551         SEQ_DRAW_SEQUENCE = 0,
552         SEQ_DRAW_IMG_IMBUF = 1,
553         SEQ_DRAW_IMG_WAVEFORM = 2,
554         SEQ_DRAW_IMG_VECTORSCOPE = 3,
555         SEQ_DRAW_IMG_HISTOGRAM = 4,
556 } eSpaceSeq_RegionType;
557
558 /* SpaceSeq.draw_flag */
559 typedef enum eSpaceSeq_DrawFlag {
560         SEQ_DRAW_BACKDROP              = (1 << 0),
561         SEQ_DRAW_OFFSET_EXT            = (1 << 1),
562 } eSpaceSeq_DrawFlag;
563
564
565 /* SpaceSeq.flag */
566 typedef enum eSpaceSeq_Flag {
567         SEQ_DRAWFRAMES              = (1 << 0),
568         SEQ_MARKER_TRANS            = (1 << 1),
569         SEQ_DRAW_COLOR_SEPARATED    = (1 << 2),
570         SEQ_SHOW_SAFE_MARGINS       = (1 << 3),
571         SEQ_SHOW_GPENCIL            = (1 << 4),
572         SEQ_NO_DRAW_CFRANUM         = (1 << 5),
573         SEQ_USE_ALPHA               = (1 << 6), /* use RGBA display mode for preview */
574         SEQ_ALL_WAVEFORMS           = (1 << 7), /* draw all waveforms */
575         SEQ_NO_WAVEFORMS            = (1 << 8), /* draw no waveforms */
576         SEQ_SHOW_SAFE_CENTER        = (1 << 9),
577         SEQ_SHOW_METADATA           = (1 << 10),
578 } eSpaceSeq_Flag;
579
580 /* SpaceSeq.view */
581 typedef enum eSpaceSeq_Displays {
582         SEQ_VIEW_SEQUENCE = 1,
583         SEQ_VIEW_PREVIEW = 2,
584         SEQ_VIEW_SEQUENCE_PREVIEW = 3,
585 } eSpaceSeq_Dispays;
586
587 /* SpaceSeq.render_size */
588 typedef enum eSpaceSeq_Proxy_RenderSize {
589         SEQ_PROXY_RENDER_SIZE_NONE      =  -1,
590         SEQ_PROXY_RENDER_SIZE_SCENE     =   0,
591         SEQ_PROXY_RENDER_SIZE_25        =  25,
592         SEQ_PROXY_RENDER_SIZE_50        =  50,
593         SEQ_PROXY_RENDER_SIZE_75        =  75,
594         SEQ_PROXY_RENDER_SIZE_100       =  99,
595         SEQ_PROXY_RENDER_SIZE_FULL      = 100
596 } eSpaceSeq_Proxy_RenderSize;
597
598 typedef struct MaskSpaceInfo {
599         /* **** mask editing **** */
600         struct Mask *mask;
601         /* draw options */
602         char draw_flag;
603         char draw_type;
604         char overlay_mode;
605         char pad3[5];
606 } MaskSpaceInfo;
607
608 /* SpaceSeq.mainb */
609 typedef enum eSpaceSeq_OverlayType {
610         SEQ_DRAW_OVERLAY_RECT = 0,
611         SEQ_DRAW_OVERLAY_REFERENCE = 1,
612         SEQ_DRAW_OVERLAY_CURRENT = 2
613 } eSpaceSeq_OverlayType;
614
615 /** \} */
616
617 /* -------------------------------------------------------------------- */
618 /** \name File Selector
619  * \{ */
620
621 /* Config and Input for File Selector */
622 typedef struct FileSelectParams {
623         char title[96]; /* title, also used for the text of the execute button */
624         char dir[1090]; /* directory, FILE_MAX_LIBEXTRA, 1024 + 66, this is for extreme case when 1023 length path
625                          * needs to be linked in, where foo.blend/Armature need adding  */
626         char pad_c1[2];
627         char file[256]; /* file */
628         char renamefile[256];
629         char renameedit[256]; /* annoying but the first is only used for initialization */
630
631         char filter_glob[256]; /* list of filetypes to filter */
632
633         char filter_search[64];  /* text items' name must match to be shown. */
634         int filter_id;  /* same as filter, but for ID types (aka library groups). */
635
636         int active_file;    /* active file used for keyboard navigation */
637         int highlight_file; /* file under cursor */
638         int sel_first;
639         int sel_last;
640         unsigned short thumbnail_size;
641         short pad;
642
643         /* short */
644         short type; /* XXXXX for now store type here, should be moved to the operator */
645         short flag; /* settings for filter, hiding dots files,...  */
646         short sort; /* sort order */
647         short display; /* display mode flag */
648         int filter; /* filter when (flags & FILE_FILTER) is true */
649
650         short recursion_level;  /* max number of levels in dirtree to show at once, 0 to disable recursion. */
651
652         /* XXX --- still unused -- */
653         short f_fp; /* show font preview */
654         char fp_str[8]; /* string to use for font preview */
655
656         /* XXX --- end unused -- */
657 } FileSelectParams;
658
659 /* File Browser */
660 typedef struct SpaceFile {
661         SpaceLink *next, *prev;
662         ListBase regionbase;        /* storage of regions for inactive spaces */
663         char spacetype;
664         char link_flag;
665         char _pad0[6];
666         /* End 'SpaceLink' header. */
667
668         char _pad1[4];
669         int scroll_offset;
670
671         struct FileSelectParams *params; /* config and input for file select */
672
673         struct FileList *files; /* holds the list of files to show */
674
675         ListBase *folders_prev; /* holds the list of previous directories to show */
676         ListBase *folders_next; /* holds the list of next directories (pushed from previous) to show */
677
678         /* operator that is invoking fileselect
679          * op->exec() will be called on the 'Load' button.
680          * if operator provides op->cancel(), then this will be invoked
681          * on the cancel button.
682          */
683         struct wmOperator *op;
684
685         struct wmTimer *smoothscroll_timer;
686         struct wmTimer *previews_timer;
687
688         struct FileLayout *layout;
689
690         short recentnr, bookmarknr;
691         short systemnr, system_bookmarknr;
692 } SpaceFile;
693
694 /* FSMenuEntry's without paths indicate separators */
695 typedef struct FSMenuEntry {
696         struct FSMenuEntry *next;
697
698         char *path;
699         char name[256];  /* FILE_MAXFILE */
700         short save;
701         short valid;
702         short pad[2];
703 } FSMenuEntry;
704
705 /* FileSelectParams.display */
706 enum eFileDisplayType {
707         FILE_DEFAULTDISPLAY = 0,
708         FILE_SHORTDISPLAY = 1,
709         FILE_LONGDISPLAY = 2,
710         FILE_IMGDISPLAY = 3
711 };
712
713 /* FileSelectParams.sort */
714 enum eFileSortType {
715         FILE_SORT_NONE = 0,
716         FILE_SORT_ALPHA = 1,
717         FILE_SORT_EXTENSION = 2,
718         FILE_SORT_TIME = 3,
719         FILE_SORT_SIZE = 4
720 };
721
722 /* these values need to be hardcoded in structs, dna does not recognize defines */
723 /* also defined in BKE */
724 #define FILE_MAXDIR         768
725 #define FILE_MAXFILE        256
726 #define FILE_MAX            1024
727
728 #define FILE_MAX_LIBEXTRA   (FILE_MAX + MAX_ID_NAME)
729
730 /* filesel types */
731 #define FILE_UNIX           8
732 #define FILE_BLENDER        8 /* don't display relative paths */
733 #define FILE_SPECIAL        9
734
735 #define FILE_LOADLIB        1
736 #define FILE_MAIN           2
737 #define FILE_LOADFONT       3
738
739 /* filesel op property -> action */
740 typedef enum eFileSel_Action {
741         FILE_OPENFILE = 0,
742         FILE_SAVE = 1,
743 } eFileSel_Action;
744
745 /* sfile->params->flag and simasel->flag */
746 /* Note: short flag, also used as 16 lower bits of flags in link/append code
747  *       (WM and BLO code area, see BLO_LibLinkFlags in BLO_readfile.h). */
748 typedef enum eFileSel_Params_Flag {
749         FILE_SHOWSHORT      = (1 << 0),
750         FILE_RELPATH        = (1 << 1), /* was FILE_STRINGCODE */
751         FILE_LINK           = (1 << 2),
752         FILE_HIDE_DOT       = (1 << 3),
753         FILE_AUTOSELECT     = (1 << 4),
754         FILE_ACTIVELAY      = (1 << 5),
755 /*  FILE_ATCURSOR       = (1 << 6), */ /* deprecated */
756         FILE_DIRSEL_ONLY    = (1 << 7),
757         FILE_FILTER         = (1 << 8),
758         FILE_BOOKMARKS      = (1 << 9),
759         FILE_GROUP_INSTANCE = (1 << 10),
760 } eFileSel_Params_Flag;
761
762
763 /* files in filesel list: file types
764  * Note we could use mere values (instead of bitflags) for file types themselves,
765  * but since we do not lack of bytes currently...
766  */
767 typedef enum eFileSel_File_Types {
768         FILE_TYPE_BLENDER           = (1 << 2),
769         FILE_TYPE_BLENDER_BACKUP    = (1 << 3),
770         FILE_TYPE_IMAGE             = (1 << 4),
771         FILE_TYPE_MOVIE             = (1 << 5),
772         FILE_TYPE_PYSCRIPT          = (1 << 6),
773         FILE_TYPE_FTFONT            = (1 << 7),
774         FILE_TYPE_SOUND             = (1 << 8),
775         FILE_TYPE_TEXT              = (1 << 9),
776         /* 1 << 10 was FILE_TYPE_MOVIE_ICON, got rid of this so free slot for future type... */
777         FILE_TYPE_FOLDER            = (1 << 11), /* represents folders for filtering */
778         FILE_TYPE_BTX               = (1 << 12),
779         FILE_TYPE_COLLADA           = (1 << 13),
780         FILE_TYPE_OPERATOR          = (1 << 14), /* from filter_glob operator property */
781         FILE_TYPE_APPLICATIONBUNDLE = (1 << 15),
782         FILE_TYPE_ALEMBIC           = (1 << 16),
783
784         FILE_TYPE_DIR               = (1 << 30),  /* An FS directory (i.e. S_ISDIR on its path is true). */
785         FILE_TYPE_BLENDERLIB        = (1u << 31),
786 } eFileSel_File_Types;
787
788 /* Selection Flags in filesel: struct direntry, unsigned char selflag */
789 typedef enum eDirEntry_SelectFlag {
790 /*      FILE_SEL_ACTIVE         = (1 << 1), */ /* UNUSED */
791         FILE_SEL_HIGHLIGHTED    = (1 << 2),
792         FILE_SEL_SELECTED       = (1 << 3),
793         FILE_SEL_EDITING        = (1 << 4),
794 } eDirEntry_SelectFlag;
795
796 #define FILE_LIST_MAX_RECURSION 4
797
798 /* ***** Related to file browser, but never saved in DNA, only here to help with RNA. ***** */
799
800 /* About Unique identifier.
801  * Stored in a CustomProps once imported.
802  * Each engine is free to use it as it likes - it will be the only thing passed to it by blender to identify
803  * asset/variant/version (concatenating the three into a single 48 bytes one).
804  * Assumed to be 128bits, handled as four integers due to lack of real bytes proptype in RNA :|.
805  */
806 #define ASSET_UUID_LENGTH     16
807
808 /* Used to communicate with asset engines outside of 'import' context. */
809 typedef struct AssetUUID {
810         int uuid_asset[4];
811         int uuid_variant[4];
812         int uuid_revision[4];
813 } AssetUUID;
814
815 typedef struct AssetUUIDList {
816         AssetUUID *uuids;
817         int nbr_uuids, pad;
818 } AssetUUIDList;
819
820 /* Container for a revision, only relevant in asset context. */
821 typedef struct FileDirEntryRevision {
822         struct FileDirEntryRevision *next, *prev;
823
824         char *comment;
825         void *pad;
826
827         int uuid[4];
828
829         uint64_t size;
830         int64_t time;
831         /* Temp caching of UI-generated strings... */
832         char    size_str[16];
833         char    time_str[8];
834         char    date_str[16];
835 } FileDirEntryRevision;
836
837 /* Container for a variant, only relevant in asset context.
838  * In case there are no variants, a single one shall exist, with NULL name/description. */
839 typedef struct FileDirEntryVariant {
840         struct FileDirEntryVariant *next, *prev;
841
842         int uuid[4];
843         char *name;
844         char *description;
845
846         ListBase revisions;
847         int nbr_revisions;
848         int act_revision;
849 } FileDirEntryVariant;
850
851 /* Container for mere direntry, with additional asset-related data. */
852 typedef struct FileDirEntry {
853         struct FileDirEntry *next, *prev;
854
855         int uuid[4];
856         char *name;
857         char *description;
858
859         /* Either point to active variant/revision if available, or own entry (in mere filebrowser case). */
860         FileDirEntryRevision *entry;
861
862         int typeflag;  /* eFileSel_File_Types */
863         int blentype;  /* ID type, in case typeflag has FILE_TYPE_BLENDERLIB set. */
864
865         char *relpath;
866
867         void *poin;  /* TODO: make this a real ID pointer? */
868         struct ImBuf *image;
869
870         /* Tags are for info only, most of filtering is done in asset engine. */
871         char **tags;
872         int nbr_tags;
873
874         short status;
875         short flags;
876
877         ListBase variants;
878         int nbr_variants;
879         int act_variant;
880 } FileDirEntry;
881
882 /* Array of direntries. */
883 /* This struct is used in various, different contexts.
884  * In Filebrowser UI, it stores the total number of available entries, the number of visible (filtered) entries,
885  *                    and a subset of those in 'entries' ListBase, from idx_start (included) to idx_end (excluded).
886  * In AssetEngine context (i.e. outside of 'browsing' context), entries contain all needed data, there is no filtering,
887  *                        so nbr_entries_filtered, entry_idx_start and entry_idx_end should all be set to -1.
888  */
889 typedef struct FileDirEntryArr {
890         ListBase entries;
891         int nbr_entries;
892         int nbr_entries_filtered;
893         int entry_idx_start, entry_idx_end;
894
895         char root[1024];         /* FILE_MAX */
896 } FileDirEntryArr;
897
898 /* FileDirEntry.status */
899 enum {
900         ASSET_STATUS_LOCAL  = 1 << 0,  /* If active uuid is available locally/immediately. */
901         ASSET_STATUS_LATEST = 1 << 1,  /* If active uuid is latest available version. */
902 };
903
904 /* FileDirEntry.flags */
905 enum {
906         FILE_ENTRY_INVALID_PREVIEW = 1 << 0,  /* The preview for this entry could not be generated. */
907 };
908
909 /** \} */
910
911 /* -------------------------------------------------------------------- */
912 /** \name Image/UV Editor
913  * \{ */
914
915 /* Image/UV Editor */
916 typedef struct SpaceImage {
917         SpaceLink *next, *prev;
918         ListBase regionbase;        /* storage of regions for inactive spaces */
919         char spacetype;
920         char link_flag;
921         char _pad0[6];
922         /* End 'SpaceLink' header. */
923
924         struct Image *image;
925         struct ImageUser iuser;
926
927         struct Scopes scopes;           /* histogram waveform and vectorscope */
928         struct Histogram sample_line_hist;  /* sample line histogram */
929
930         struct bGPdata *gpd;            /* grease pencil data */
931
932         float cursor[2];                /* UV editor 2d cursor */
933         float xof, yof;                 /* user defined offset, image is centered */
934         float zoom;                     /* user defined zoom level */
935         float centx, centy;             /* storage for offset while render drawing */
936
937         char  mode;                     /* view/paint/mask */
938         char  pin;
939         short pad;
940         short curtile; /* the currently active tile of the image when tile is enabled, is kept in sync with the active faces tile */
941         short lock;
942         char dt_uv; /* UV draw type */
943         char sticky; /* sticky selection type */
944         char dt_uvstretch;
945         char around;
946
947         /* Filter settings when editor shows other object's UVs. */
948         int other_uv_filter;
949
950         int flag;
951
952         MaskSpaceInfo mask_info;
953 } SpaceImage;
954
955
956 /* SpaceImage.dt_uv */
957 typedef enum eSpaceImage_UVDT {
958         SI_UVDT_OUTLINE = 0,
959         SI_UVDT_DASH = 1,
960         SI_UVDT_BLACK = 2,
961         SI_UVDT_WHITE = 3,
962 } eSpaceImage_UVDT;
963
964 /* SpaceImage.dt_uvstretch */
965 typedef enum eSpaceImage_UVDT_Stretch {
966         SI_UVDT_STRETCH_ANGLE = 0,
967         SI_UVDT_STRETCH_AREA = 1,
968 } eSpaceImage_UVDT_Stretch;
969
970 /* SpaceImage.mode */
971 typedef enum eSpaceImage_Mode {
972         SI_MODE_VIEW  = 0,
973         SI_MODE_PAINT = 1,
974         SI_MODE_MASK  = 2   /* note: mesh edit mode overrides mask */
975 } eSpaceImage_Mode;
976
977 /* SpaceImage.sticky
978  * Note DISABLE should be 0, however would also need to re-arrange icon order,
979  * also, sticky loc is the default mode so this means we don't need to 'do_versions' */
980 typedef enum eSpaceImage_Sticky {
981         SI_STICKY_LOC      = 0,
982         SI_STICKY_DISABLE  = 1,
983         SI_STICKY_VERTEX   = 2,
984 } eSpaceImage_Sticky;
985
986 /* SpaceImage.flag */
987 typedef enum eSpaceImage_Flag {
988 /*      SI_BE_SQUARE          = (1 << 0), */  /* deprecated */
989         SI_EDITTILE           = (1 << 1),     /* XXX - not used but should be? */
990         SI_CLIP_UV            = (1 << 2),
991 /*      SI_DRAWTOOL           = (1 << 3), */  /* deprecated */
992         SI_NO_DRAWFACES       = (1 << 4),
993         SI_DRAWSHADOW         = (1 << 5),
994 /*      SI_SELACTFACE         = (1 << 6), */  /* deprecated */
995 /*      SI_DEPRECATED2        = (1 << 7), */  /* deprecated */
996 /*      SI_DEPRECATED3        = (1 << 8), */  /* deprecated */
997         SI_COORDFLOATS        = (1 << 9),
998         SI_PIXELSNAP          = (1 << 10),
999         SI_LIVE_UNWRAP        = (1 << 11),
1000         SI_USE_ALPHA          = (1 << 12),
1001         SI_SHOW_ALPHA         = (1 << 13),
1002         SI_SHOW_ZBUF          = (1 << 14),
1003
1004         /* next two for render window display */
1005         SI_PREVSPACE          = (1 << 15),
1006         SI_FULLWINDOW         = (1 << 16),
1007
1008 /*      SI_DEPRECATED4        = (1 << 17), */  /* deprecated */
1009 /*      SI_DEPRECATED5        = (1 << 18), */  /* deprecated */
1010
1011         /* this means that the image is drawn until it reaches the view edge,
1012          * in the image view, it's unrelated to the 'tile' mode for texface
1013          */
1014         SI_DRAW_TILE          = (1 << 19),
1015         SI_SMOOTH_UV          = (1 << 20),
1016         SI_DRAW_STRETCH       = (1 << 21),
1017         SI_SHOW_GPENCIL       = (1 << 22),
1018         SI_DRAW_OTHER         = (1 << 23),
1019
1020         SI_COLOR_CORRECTION   = (1 << 24),
1021
1022         SI_NO_DRAW_TEXPAINT   = (1 << 25),
1023         SI_DRAW_METADATA      = (1 << 26),
1024
1025         SI_SHOW_R             = (1 << 27),
1026         SI_SHOW_G             = (1 << 28),
1027         SI_SHOW_B             = (1 << 29),
1028 } eSpaceImage_Flag;
1029
1030 /* SpaceImage.other_uv_filter */
1031 typedef enum eSpaceImage_OtherUVFilter {
1032         SI_FILTER_SAME_IMAGE    = 0,
1033         SI_FILTER_ALL           = 1,
1034 } eSpaceImage_OtherUVFilter;
1035
1036 /** \} */
1037
1038 /* -------------------------------------------------------------------- */
1039 /** \name Text Editor
1040  * \{ */
1041
1042 /* Text Editor */
1043 typedef struct SpaceText {
1044         SpaceLink *next, *prev;
1045         ListBase regionbase;        /* storage of regions for inactive spaces */
1046         char spacetype;
1047         char link_flag;
1048         char _pad0[6];
1049         /* End 'SpaceLink' header. */
1050
1051         struct Text *text;
1052
1053         int top, viewlines;
1054         short flags, menunr;
1055
1056         short lheight;      /* user preference, is font_size! */
1057         char cwidth, linenrs_tot;       /* runtime computed, character width and the number of chars to use when showing line numbers */
1058         int left;
1059         int showlinenrs;
1060         int tabnumber;
1061
1062         short showsyntax;
1063         short line_hlight;
1064         short overwrite;
1065         short live_edit; /* run python while editing, evil */
1066         float pix_per_line;
1067
1068         struct rcti txtscroll, txtbar;
1069
1070         int wordwrap, doplugins;
1071
1072         char findstr[256];      /* ST_MAX_FIND_STR */
1073         char replacestr[256];   /* ST_MAX_FIND_STR */
1074
1075         short margin_column;    /* column number to show right margin at */
1076         short lheight_dpi;              /* actual lineheight, dpi controlled */
1077         char pad[4];
1078
1079         void *drawcache; /* cache for faster drawing */
1080
1081         float scroll_accum[2]; /* runtime, for scroll increments smaller than a line */
1082 } SpaceText;
1083
1084
1085 /* SpaceText flags (moved from DNA_text_types.h) */
1086 typedef enum eSpaceText_Flags {
1087         /* scrollable */
1088         ST_SCROLL_SELECT        = (1 << 0),
1089         /* clear namespace after script execution (BPY_main.c) */
1090         ST_CLEAR_NAMESPACE      = (1 << 4),
1091
1092         ST_FIND_WRAP            = (1 << 5),
1093         ST_FIND_ALL             = (1 << 6),
1094         ST_SHOW_MARGIN          = (1 << 7),
1095         ST_MATCH_CASE           = (1 << 8),
1096
1097         ST_FIND_ACTIVATE                = (1 << 9),
1098 } eSpaceText_Flags;
1099
1100 /* SpaceText.findstr/replacestr */
1101 #define ST_MAX_FIND_STR     256
1102
1103 /** \} */
1104
1105 /* -------------------------------------------------------------------- */
1106 /** \name Script View (Obsolete)
1107  * \{ */
1108
1109 /* Script Runtime Data - Obsolete (pre 2.5) */
1110 typedef struct Script {
1111         ID id;
1112
1113         void *py_draw;
1114         void *py_event;
1115         void *py_button;
1116         void *py_browsercallback;
1117         void *py_globaldict;
1118
1119         int flags, lastspace;
1120         /* store the script file here so we can re-run it on loading blender, if "Enable Scripts" is on */
1121         char scriptname[1024]; /* 1024 = FILE_MAX */
1122         char scriptarg[256]; /* 1024 = FILE_MAX */
1123 } Script;
1124 #define SCRIPT_SET_NULL(_script) _script->py_draw = _script->py_event = _script->py_button = _script->py_browsercallback = _script->py_globaldict = NULL; _script->flags = 0
1125
1126 /* Script View - Obsolete (pre 2.5) */
1127 typedef struct SpaceScript {
1128         SpaceLink *next, *prev;
1129         ListBase regionbase;        /* storage of regions for inactive spaces */
1130         char spacetype;
1131         char link_flag;
1132         char _pad0[6];
1133         /* End 'SpaceLink' header. */
1134
1135         struct Script *script;
1136
1137         short flags, menunr;
1138         int pad1;
1139
1140         void *but_refs;
1141 } SpaceScript;
1142
1143 /** \} */
1144
1145 /* -------------------------------------------------------------------- */
1146 /** \name Nodes Editor
1147  * \{ */
1148
1149 typedef struct bNodeTreePath {
1150         struct bNodeTreePath *next, *prev;
1151
1152         struct bNodeTree *nodetree;
1153         bNodeInstanceKey parent_key;    /* base key for nodes in this tree instance */
1154         int pad;
1155         float view_center[2];                   /* v2d center point, so node trees can have different offsets in editors */
1156
1157         char node_name[64];             /* MAX_NAME */
1158 } bNodeTreePath;
1159
1160 typedef struct SpaceNode {
1161         SpaceLink *next, *prev;
1162         ListBase regionbase;        /* storage of regions for inactive spaces */
1163         char spacetype;
1164         char link_flag;
1165         char _pad0[6];
1166         /* End 'SpaceLink' header. */
1167
1168         View2D v2d DNA_DEPRECATED;  /* deprecated, copied to region */
1169
1170         struct ID *id, *from;       /* context, no need to save in file? well... pinning... */
1171         short flag, pad1;           /* menunr: browse id block in header */
1172         float aspect, pad2;     /* internal state variables */
1173
1174         float xof, yof;     /* offset for drawing the backdrop */
1175         float zoom;   /* zoom for backdrop */
1176         float cursor[2];    /* mouse pos for drawing socketless link and adding nodes */
1177
1178         /* XXX nodetree pointer info is all in the path stack now,
1179          * remove later on and use bNodeTreePath instead. For now these variables are set when pushing/popping
1180          * from path stack, to avoid having to update all the functions and operators. Can be done when
1181          * design is accepted and everything is properly tested.
1182          */
1183         ListBase treepath;
1184
1185         struct bNodeTree *nodetree, *edittree;
1186
1187         /* tree type for the current node tree */
1188         char tree_idname[64];
1189         int treetype DNA_DEPRECATED; /* treetype: as same nodetree->type */
1190         int pad3;
1191
1192         short texfrom;       /* texfrom object, world or brush */
1193         short shaderfrom;    /* shader from object or world */
1194         short recalc;        /* currently on 0/1, for auto compo */
1195
1196         char insert_ofs_dir; /* direction for offsetting nodes on insertion */
1197         char pad4;
1198
1199         ListBase linkdrag;   /* temporary data for modal linking operator */
1200         /* XXX hack for translate_attach op-macros to pass data from transform op to insert_offset op */
1201         struct NodeInsertOfsData *iofsd; /* temporary data for node insert offset (in UI called Auto-offset) */
1202
1203         struct bGPdata *gpd;        /* grease-pencil data */
1204 } SpaceNode;
1205
1206 /* SpaceNode.flag */
1207 typedef enum eSpaceNode_Flag {
1208         SNODE_BACKDRAW       = (1 << 1),
1209         SNODE_SHOW_GPENCIL   = (1 << 2),
1210         SNODE_USE_ALPHA      = (1 << 3),
1211         SNODE_SHOW_ALPHA     = (1 << 4),
1212         SNODE_SHOW_R         = (1 << 7),
1213         SNODE_SHOW_G         = (1 << 8),
1214         SNODE_SHOW_B         = (1 << 9),
1215         SNODE_AUTO_RENDER    = (1 << 5),
1216 //      SNODE_SHOW_HIGHLIGHT = (1 << 6), DNA_DEPRECATED
1217 //      SNODE_USE_HIDDEN_PREVIEW = (1 << 10), DNA_DEPRECATED December2013
1218         SNODE_NEW_SHADERS    = (1 << 11),
1219         SNODE_PIN            = (1 << 12),
1220         SNODE_SKIP_INSOFFSET = (1 << 13), /* automatically offset following nodes in a chain on insertion */
1221 } eSpaceNode_Flag;
1222
1223 /* SpaceNode.texfrom */
1224 typedef enum eSpaceNode_TexFrom {
1225         SNODE_TEX_OBJECT   = 0,
1226         SNODE_TEX_WORLD    = 1,
1227         SNODE_TEX_BRUSH    = 2,
1228         SNODE_TEX_LINESTYLE = 3,
1229 } eSpaceNode_TexFrom;
1230
1231 /* SpaceNode.shaderfrom */
1232 typedef enum eSpaceNode_ShaderFrom {
1233         SNODE_SHADER_OBJECT = 0,
1234         SNODE_SHADER_WORLD = 1,
1235         SNODE_SHADER_LINESTYLE = 2,
1236 } eSpaceNode_ShaderFrom;
1237
1238 /* SpaceNode.insert_ofs_dir */
1239 enum {
1240         SNODE_INSERTOFS_DIR_RIGHT = 0,
1241         SNODE_INSERTOFS_DIR_LEFT  = 1,
1242 };
1243
1244 /** \} */
1245
1246 /* -------------------------------------------------------------------- */
1247 /** \name Game Logic Editor
1248  * \{ */
1249
1250 /* Logic Editor */
1251 typedef struct SpaceLogic {
1252         SpaceLink *next, *prev;
1253         ListBase regionbase;        /* storage of regions for inactive spaces */
1254         char spacetype;
1255         char link_flag;
1256         char _pad0[6];
1257         /* End 'SpaceLink' header. */
1258
1259         short flag, scaflag;
1260         int pad;
1261
1262         struct bGPdata *gpd;        /* grease-pencil data */
1263 } SpaceLogic;
1264
1265 /** \} */
1266
1267 /* -------------------------------------------------------------------- */
1268 /** \name Console
1269  * \{ */
1270
1271 /* Console content */
1272 typedef struct ConsoleLine {
1273         struct ConsoleLine *next, *prev;
1274
1275         /* keep these 3 vars so as to share free, realloc funcs */
1276         int len_alloc;  /* allocated length */
1277         int len;    /* real len - strlen() */
1278         char *line;
1279
1280         int cursor;
1281         int type; /* only for use when in the 'scrollback' listbase */
1282 } ConsoleLine;
1283
1284 /* ConsoleLine.type */
1285 typedef enum eConsoleLine_Type {
1286         CONSOLE_LINE_OUTPUT = 0,
1287         CONSOLE_LINE_INPUT = 1,
1288         CONSOLE_LINE_INFO = 2, /* autocomp feedback */
1289         CONSOLE_LINE_ERROR = 3
1290 } eConsoleLine_Type;
1291
1292
1293 /* Console View */
1294 typedef struct SpaceConsole {
1295         SpaceLink *next, *prev;
1296         ListBase regionbase;        /* storage of regions for inactive spaces */
1297         char spacetype;
1298         char link_flag;
1299         char _pad0[6];
1300         /* End 'SpaceLink' header. */
1301
1302         /* space vars */
1303         int lheight, pad;
1304
1305         ListBase scrollback; /* ConsoleLine; output */
1306         ListBase history; /* ConsoleLine; command history, current edited line is the first */
1307         char prompt[256];
1308         char language[32]; /* multiple consoles are possible, not just python */
1309
1310         int sel_start;
1311         int sel_end;
1312 } SpaceConsole;
1313
1314 /** \} */
1315
1316 /* -------------------------------------------------------------------- */
1317 /** \name User Preferences
1318  * \{ */
1319
1320 typedef struct SpaceUserPref {
1321         SpaceLink *next, *prev;
1322         ListBase regionbase;        /* storage of regions for inactive spaces */
1323         char spacetype;
1324         char link_flag;
1325         char _pad0[6];
1326         /* End 'SpaceLink' header. */
1327
1328         char _pad1[7];
1329         char filter_type;
1330         char filter[64];        /* search term for filtering in the UI */
1331 } SpaceUserPref;
1332
1333 /** \} */
1334
1335 /* -------------------------------------------------------------------- */
1336 /** \name Motion Tracking
1337  * \{ */
1338
1339 /* Clip Editor */
1340 typedef struct SpaceClip {
1341         SpaceLink *next, *prev;
1342         ListBase regionbase;        /* storage of regions for inactive spaces */
1343         char spacetype;
1344         char link_flag;
1345         char _pad0[6];
1346         /* End 'SpaceLink' header. */
1347
1348         char _pad1[4];
1349
1350         float xof, yof;             /* user defined offset, image is centered */
1351         float xlockof, ylockof;     /* user defined offset from locked position */
1352         float zoom;                 /* user defined zoom level */
1353
1354         struct MovieClipUser user;      /* user of clip */
1355         struct MovieClip *clip;         /* clip data */
1356         struct MovieClipScopes scopes;  /* different scoped displayed in space panels */
1357
1358         int flag;                   /* flags */
1359         short mode;                 /* editor mode (editing context being displayed) */
1360         short view;                 /* type of the clip editor view */
1361
1362         int path_length;            /* length of displaying path, in frames */
1363
1364         /* current stabilization data */
1365         float loc[2], scale, angle; /* pre-composed stabilization data */
1366         int pad;
1367         float stabmat[4][4], unistabmat[4][4];  /* current stabilization matrix and the same matrix in unified space,
1368                                                  * defined when drawing and used for mouse position calculation */
1369
1370         /* movie postprocessing */
1371         int postproc_flag;
1372
1373         /* grease pencil */
1374         short gpencil_src, pad2;
1375
1376         int around, pad4;             /* pivot point for transforms */
1377
1378         float cursor[2];              /* Mask editor 2d cursor */
1379
1380         MaskSpaceInfo mask_info;
1381 } SpaceClip;
1382
1383 /* SpaceClip.flag */
1384 typedef enum eSpaceClip_Flag {
1385         SC_SHOW_MARKER_PATTERN      = (1 << 0),
1386         SC_SHOW_MARKER_SEARCH       = (1 << 1),
1387         SC_LOCK_SELECTION           = (1 << 2),
1388         SC_SHOW_TINY_MARKER         = (1 << 3),
1389         SC_SHOW_TRACK_PATH          = (1 << 4),
1390         SC_SHOW_BUNDLES             = (1 << 5),
1391         SC_MUTE_FOOTAGE             = (1 << 6),
1392         SC_HIDE_DISABLED            = (1 << 7),
1393         SC_SHOW_NAMES               = (1 << 8),
1394         SC_SHOW_GRID                = (1 << 9),
1395         SC_SHOW_STABLE              = (1 << 10),
1396         SC_MANUAL_CALIBRATION       = (1 << 11),
1397         SC_SHOW_GPENCIL             = (1 << 12),
1398         SC_SHOW_FILTERS             = (1 << 13),
1399         SC_SHOW_GRAPH_FRAMES        = (1 << 14),
1400         SC_SHOW_GRAPH_TRACKS_MOTION = (1 << 15),
1401 /*      SC_SHOW_PYRAMID_LEVELS      = (1 << 16), */     /* UNUSED */
1402         SC_LOCK_TIMECURSOR          = (1 << 17),
1403         SC_SHOW_SECONDS             = (1 << 18),
1404         SC_SHOW_GRAPH_SEL_ONLY      = (1 << 19),
1405         SC_SHOW_GRAPH_HIDDEN        = (1 << 20),
1406         SC_SHOW_GRAPH_TRACKS_ERROR  = (1 << 21),
1407         SC_SHOW_METADATA            = (1 << 22),
1408 } eSpaceClip_Flag;
1409
1410 /* SpaceClip.mode */
1411 typedef enum eSpaceClip_Mode {
1412         SC_MODE_TRACKING = 0,
1413         /*SC_MODE_RECONSTRUCTION = 1,*/  /* DEPRECATED */
1414         /*SC_MODE_DISTORTION = 2,*/  /* DEPRECATED */
1415         SC_MODE_MASKEDIT = 3,
1416 } eSpaceClip_Mode;
1417
1418 /* SpaceClip.view */
1419 typedef enum eSpaceClip_View {
1420         SC_VIEW_CLIP = 0,
1421         SC_VIEW_GRAPH = 1,
1422         SC_VIEW_DOPESHEET = 2,
1423 } eSpaceClip_View;
1424
1425 /* SpaceClip.gpencil_src */
1426 typedef enum eSpaceClip_GPencil_Source {
1427         SC_GPENCIL_SRC_CLIP = 0,
1428         SC_GPENCIL_SRC_TRACK = 1,
1429 } eSpaceClip_GPencil_Source;
1430
1431 /* **************** SPACE DEFINES ********************* */
1432
1433 /* space types, moved from DNA_screen_types.h */
1434 /* Do NOT change order, append on end. types are hardcoded needed */
1435 typedef enum eSpace_Type {
1436         SPACE_EMPTY    = 0,
1437         SPACE_VIEW3D   = 1,
1438         SPACE_IPO      = 2,
1439         SPACE_OUTLINER = 3,
1440         SPACE_BUTS     = 4,
1441         SPACE_FILE     = 5,
1442         SPACE_IMAGE    = 6,
1443         SPACE_INFO     = 7,
1444         SPACE_SEQ      = 8,
1445         SPACE_TEXT     = 9,
1446 #ifdef DNA_DEPRECATED
1447         SPACE_IMASEL   = 10, /* deprecated */
1448         SPACE_SOUND    = 11, /* Deprecated */
1449 #endif
1450         SPACE_ACTION   = 12,
1451         SPACE_NLA      = 13,
1452         /* TODO: fully deprecate */
1453         SPACE_SCRIPT   = 14, /* Deprecated */
1454         SPACE_TIME     = 15,
1455         SPACE_NODE     = 16,
1456         SPACE_LOGIC    = 17,
1457         SPACE_CONSOLE  = 18,
1458         SPACE_USERPREF = 19,
1459         SPACE_CLIP     = 20,
1460
1461         SPACE_TYPE_LAST = SPACE_CLIP
1462 } eSpace_Type;
1463
1464 /* use for function args */
1465 #define SPACE_TYPE_ANY -1
1466
1467
1468 #define IMG_SIZE_FALLBACK 256
1469
1470 #endif  /* __DNA_SPACE_TYPES_H__ */