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