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