Markers: Make marker lines in sequencer and graph editor optional
[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         int pad;
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         int pad;
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 } eSpaceNla_Flag;
504
505 /** \} */
506
507 /* -------------------------------------------------------------------- */
508 /** \name Sequence Editor
509  * \{ */
510
511 /* Sequencer */
512 typedef struct SpaceSeq {
513         SpaceLink *next, *prev;
514         /** Storage of regions for inactive spaces. */
515         ListBase regionbase;
516         char spacetype;
517         char link_flag;
518         char _pad0[6];
519         /* End 'SpaceLink' header. */
520
521         /** Deprecated, copied to region. */
522         View2D v2d DNA_DEPRECATED;
523
524         /** Deprecated: offset for drawing the image preview. */
525         float xof DNA_DEPRECATED, yof DNA_DEPRECATED;
526         /** Weird name for the sequencer subtype (seq, image, luma... etc). */
527         short mainb;
528         /** ESpaceSeq_Proxy_RenderSize. */
529         short render_size;
530         short chanshown;
531         short zebra;
532         int flag;
533         /** Deprecated, handled by View2D now. */
534         float zoom DNA_DEPRECATED;
535         /** See SEQ_VIEW_* below. */
536         int view;
537         int overlay_type;
538         /** Overlay an image of the editing on below the strips. */
539         int draw_flag;
540         int pad;
541
542         /** Grease-pencil data. */
543         struct bGPdata *gpd;
544
545         /** Different scoped displayed in space. */
546         struct SequencerScopes scopes;
547
548         /** Multiview current eye - for internal use. */
549         char multiview_eye;
550         char pad2[7];
551
552         struct GPUFX *compositor;
553         void *pad3;
554 } SpaceSeq;
555
556
557 /* SpaceSeq.mainb */
558 typedef enum eSpaceSeq_RegionType {
559         SEQ_DRAW_SEQUENCE = 0,
560         SEQ_DRAW_IMG_IMBUF = 1,
561         SEQ_DRAW_IMG_WAVEFORM = 2,
562         SEQ_DRAW_IMG_VECTORSCOPE = 3,
563         SEQ_DRAW_IMG_HISTOGRAM = 4,
564 } eSpaceSeq_RegionType;
565
566 /* SpaceSeq.draw_flag */
567 typedef enum eSpaceSeq_DrawFlag {
568         SEQ_DRAW_BACKDROP              = (1 << 0),
569         SEQ_DRAW_OFFSET_EXT            = (1 << 1),
570 } eSpaceSeq_DrawFlag;
571
572
573 /* SpaceSeq.flag */
574 typedef enum eSpaceSeq_Flag {
575         SEQ_DRAWFRAMES              = (1 << 0),
576         SEQ_MARKER_TRANS            = (1 << 1),
577         SEQ_DRAW_COLOR_SEPARATED    = (1 << 2),
578         SEQ_SHOW_SAFE_MARGINS       = (1 << 3),
579         SEQ_SHOW_GPENCIL            = (1 << 4),
580         SEQ_NO_DRAW_CFRANUM         = (1 << 5),
581         SEQ_USE_ALPHA               = (1 << 6), /* use RGBA display mode for preview */
582         SEQ_ALL_WAVEFORMS           = (1 << 7), /* draw all waveforms */
583         SEQ_NO_WAVEFORMS            = (1 << 8), /* draw no waveforms */
584         SEQ_SHOW_SAFE_CENTER        = (1 << 9),
585         SEQ_SHOW_METADATA           = (1 << 10),
586         SEQ_SHOW_MARKER_LINES       = (1 << 11),
587 } eSpaceSeq_Flag;
588
589 /* SpaceSeq.view */
590 typedef enum eSpaceSeq_Displays {
591         SEQ_VIEW_SEQUENCE = 1,
592         SEQ_VIEW_PREVIEW = 2,
593         SEQ_VIEW_SEQUENCE_PREVIEW = 3,
594 } eSpaceSeq_Dispays;
595
596 /* SpaceSeq.render_size */
597 typedef enum eSpaceSeq_Proxy_RenderSize {
598         SEQ_PROXY_RENDER_SIZE_NONE      =  -1,
599         SEQ_PROXY_RENDER_SIZE_SCENE     =   0,
600         SEQ_PROXY_RENDER_SIZE_25        =  25,
601         SEQ_PROXY_RENDER_SIZE_50        =  50,
602         SEQ_PROXY_RENDER_SIZE_75        =  75,
603         SEQ_PROXY_RENDER_SIZE_100       =  99,
604         SEQ_PROXY_RENDER_SIZE_FULL      = 100,
605 } eSpaceSeq_Proxy_RenderSize;
606
607 typedef struct MaskSpaceInfo {
608         /* **** mask editing **** */
609         struct Mask *mask;
610         /* draw options */
611         char draw_flag;
612         char draw_type;
613         char overlay_mode;
614         char pad3[5];
615 } MaskSpaceInfo;
616
617 /* SpaceSeq.mainb */
618 typedef enum eSpaceSeq_OverlayType {
619         SEQ_DRAW_OVERLAY_RECT = 0,
620         SEQ_DRAW_OVERLAY_REFERENCE = 1,
621         SEQ_DRAW_OVERLAY_CURRENT = 2,
622 } eSpaceSeq_OverlayType;
623
624 /** \} */
625
626 /* -------------------------------------------------------------------- */
627 /** \name File Selector
628  * \{ */
629
630 /* Config and Input for File Selector */
631 typedef struct FileSelectParams {
632         /** Title, also used for the text of the execute button. */
633         char title[96];
634         /**
635          * Directory, FILE_MAX_LIBEXTRA, 1024 + 66, this is for extreme case when 1023 length path
636          * needs to be linked in, where foo.blend/Armature need adding
637          */
638         char dir[1090];
639         char pad_c1[2];
640         char file[256];
641         char renamefile[256];
642         /** Annoying but the first is only used for initialization. */
643         char renameedit[256];
644
645         /** List of filetypes to filter (FILE_MAXFILE). */
646         char filter_glob[256];
647
648         /** Text items name must match to be shown. */
649         char filter_search[64];
650         /** Same as filter, but for ID types (aka library groups). */
651         int filter_id;
652
653         /** Active file used for keyboard navigation. */
654         int active_file;
655         /** File under cursor. */
656         int highlight_file;
657         int sel_first;
658         int sel_last;
659         unsigned short thumbnail_size;
660         short pad;
661
662         /* short */
663         /** XXXXX for now store type here, should be moved to the operator. */
664         short type;
665         /** Settings for filter, hiding dots files. */
666         short flag;
667         /** Sort order. */
668         short sort;
669         /** Display mode flag. */
670         short display;
671         /** Filter when (flags & FILE_FILTER) is true. */
672         int filter;
673
674         /** Max number of levels in dirtree to show at once, 0 to disable recursion. */
675         short recursion_level;
676
677         /* XXX --- still unused -- */
678         /** Show font preview. */
679         short f_fp;
680         /** String to use for font preview. */
681         char fp_str[8];
682
683         /* XXX --- end unused -- */
684 } FileSelectParams;
685
686 /* File Browser */
687 typedef struct SpaceFile {
688         SpaceLink *next, *prev;
689         /** Storage of regions for inactive spaces. */
690         ListBase regionbase;
691         char spacetype;
692         char link_flag;
693         char _pad0[6];
694         /* End 'SpaceLink' header. */
695
696         char _pad1[4];
697         int scroll_offset;
698
699         /** Config and input for file select. */
700         struct FileSelectParams *params;
701
702         /** Holds the list of files to show. */
703         struct FileList *files;
704
705         /** Holds the list of previous directories to show. */
706         ListBase *folders_prev;
707         /** Holds the list of next directories (pushed from previous) to show. */
708         ListBase *folders_next;
709
710         /* operator that is invoking fileselect
711          * op->exec() will be called on the 'Load' button.
712          * if operator provides op->cancel(), then this will be invoked
713          * on the cancel button.
714          */
715         struct wmOperator *op;
716
717         struct wmTimer *smoothscroll_timer;
718         struct wmTimer *previews_timer;
719
720         struct FileLayout *layout;
721
722         short recentnr, bookmarknr;
723         short systemnr, system_bookmarknr;
724 } SpaceFile;
725
726 /* FileSelectParams.display */
727 enum eFileDisplayType {
728         FILE_DEFAULTDISPLAY = 0,
729         FILE_SHORTDISPLAY = 1,
730         FILE_LONGDISPLAY = 2,
731         FILE_IMGDISPLAY = 3,
732 };
733
734 /* FileSelectParams.sort */
735 enum eFileSortType {
736         FILE_SORT_NONE = 0,
737         FILE_SORT_ALPHA = 1,
738         FILE_SORT_EXTENSION = 2,
739         FILE_SORT_TIME = 3,
740         FILE_SORT_SIZE = 4,
741 };
742
743 /* these values need to be hardcoded in structs, dna does not recognize defines */
744 /* also defined in BKE */
745 #define FILE_MAXDIR         768
746 #define FILE_MAXFILE        256
747 #define FILE_MAX            1024
748
749 #define FILE_MAX_LIBEXTRA   (FILE_MAX + MAX_ID_NAME)
750
751 /* filesel types */
752 #define FILE_UNIX           8
753 #define FILE_BLENDER        8 /* don't display relative paths */
754 #define FILE_SPECIAL        9
755
756 #define FILE_LOADLIB        1
757 #define FILE_MAIN           2
758
759 /* filesel op property -> action */
760 typedef enum eFileSel_Action {
761         FILE_OPENFILE = 0,
762         FILE_SAVE = 1,
763 } eFileSel_Action;
764
765 /* sfile->params->flag */
766 /* Note: short flag, also used as 16 lower bits of flags in link/append code
767  *       (WM and BLO code area, see BLO_LibLinkFlags in BLO_readfile.h). */
768 typedef enum eFileSel_Params_Flag {
769         FILE_PARAMS_FLAG_DEPRECATED_1   = (1 << 0),  /* cleared */
770         FILE_RELPATH                    = (1 << 1),
771         FILE_LINK                       = (1 << 2),
772         FILE_HIDE_DOT                   = (1 << 3),
773         FILE_AUTOSELECT                 = (1 << 4),
774         FILE_ACTIVE_COLLECTION          = (1 << 5),
775         FILE_PARAMS_FLAG_DEPRECATED_6   = (1 << 6),  /* cleared */
776         FILE_DIRSEL_ONLY                = (1 << 7),
777         FILE_FILTER                     = (1 << 8),
778         FILE_PARAMS_FLAG_DEPRECATED_9   = (1 << 9),  /* cleared */
779         FILE_GROUP_INSTANCE             = (1 << 10),
780 } eFileSel_Params_Flag;
781
782 /* files in filesel list: file types
783  * Note we could use mere values (instead of bitflags) for file types themselves,
784  * but since we do not lack of bytes currently...
785  */
786 typedef enum eFileSel_File_Types {
787         FILE_TYPE_BLENDER           = (1 << 2),
788         FILE_TYPE_BLENDER_BACKUP    = (1 << 3),
789         FILE_TYPE_IMAGE             = (1 << 4),
790         FILE_TYPE_MOVIE             = (1 << 5),
791         FILE_TYPE_PYSCRIPT          = (1 << 6),
792         FILE_TYPE_FTFONT            = (1 << 7),
793         FILE_TYPE_SOUND             = (1 << 8),
794         FILE_TYPE_TEXT              = (1 << 9),
795         /* 1 << 10 was FILE_TYPE_MOVIE_ICON, got rid of this so free slot for future type... */
796         /** represents folders for filtering */
797         FILE_TYPE_FOLDER            = (1 << 11),
798         FILE_TYPE_BTX               = (1 << 12),
799         FILE_TYPE_COLLADA           = (1 << 13),
800         /** from filter_glob operator property */
801         FILE_TYPE_OPERATOR          = (1 << 14),
802         FILE_TYPE_APPLICATIONBUNDLE = (1 << 15),
803         FILE_TYPE_ALEMBIC           = (1 << 16),
804
805         /** An FS directory (i.e. S_ISDIR on its path is true). */
806         FILE_TYPE_DIR               = (1 << 30),
807         FILE_TYPE_BLENDERLIB        = (1u << 31),
808 } eFileSel_File_Types;
809
810 /* Selection Flags in filesel: struct direntry, unsigned char selflag */
811 typedef enum eDirEntry_SelectFlag {
812 /*      FILE_SEL_ACTIVE         = (1 << 1), */ /* UNUSED */
813         FILE_SEL_HIGHLIGHTED    = (1 << 2),
814         FILE_SEL_SELECTED       = (1 << 3),
815         FILE_SEL_EDITING        = (1 << 4),
816 } eDirEntry_SelectFlag;
817
818 /* ***** Related to file browser, but never saved in DNA, only here to help with RNA. ***** */
819
820 /* About Unique identifier.
821  * Stored in a CustomProps once imported.
822  * Each engine is free to use it as it likes - it will be the only thing passed to it by blender to identify
823  * asset/variant/version (concatenating the three into a single 48 bytes one).
824  * Assumed to be 128bits, handled as four integers due to lack of real bytes proptype in RNA :|.
825  */
826 #define ASSET_UUID_LENGTH     16
827
828 /* Used to communicate with asset engines outside of 'import' context. */
829 typedef struct AssetUUID {
830         int uuid_asset[4];
831         int uuid_variant[4];
832         int uuid_revision[4];
833 } AssetUUID;
834
835 typedef struct AssetUUIDList {
836         AssetUUID *uuids;
837         int nbr_uuids, pad;
838 } AssetUUIDList;
839
840 /* Container for a revision, only relevant in asset context. */
841 typedef struct FileDirEntryRevision {
842         struct FileDirEntryRevision *next, *prev;
843
844         char *comment;
845         void *pad;
846
847         int uuid[4];
848
849         uint64_t size;
850         int64_t time;
851         /* Temp caching of UI-generated strings... */
852         char    size_str[16];
853         char    time_str[8];
854         char    date_str[16];
855 } FileDirEntryRevision;
856
857 /* Container for a variant, only relevant in asset context.
858  * In case there are no variants, a single one shall exist, with NULL name/description. */
859 typedef struct FileDirEntryVariant {
860         struct FileDirEntryVariant *next, *prev;
861
862         int uuid[4];
863         char *name;
864         char *description;
865
866         ListBase revisions;
867         int nbr_revisions;
868         int act_revision;
869 } FileDirEntryVariant;
870
871 /* Container for mere direntry, with additional asset-related data. */
872 typedef struct FileDirEntry {
873         struct FileDirEntry *next, *prev;
874
875         int uuid[4];
876         char *name;
877         char *description;
878
879         /* Either point to active variant/revision if available, or own entry
880          * (in mere filebrowser case). */
881         FileDirEntryRevision *entry;
882
883         /** #eFileSel_File_Types. */
884         int typeflag;
885         /** ID type, in case typeflag has FILE_TYPE_BLENDERLIB set. */
886         int blentype;
887
888         char *relpath;
889
890         /** TODO: make this a real ID pointer? */
891         void *poin;
892         struct ImBuf *image;
893
894         /* Tags are for info only, most of filtering is done in asset engine. */
895         char **tags;
896         int nbr_tags;
897
898         short status;
899         short flags;
900
901         ListBase variants;
902         int nbr_variants;
903         int act_variant;
904 } FileDirEntry;
905
906 /* Array of direntries. */
907 /* This struct is used in various, different contexts.
908  * In Filebrowser UI, it stores the total number of available entries, the number of visible (filtered) entries,
909  *                    and a subset of those in 'entries' ListBase, from idx_start (included) to idx_end (excluded).
910  * In AssetEngine context (i.e. outside of 'browsing' context), entries contain all needed data, there is no filtering,
911  *                        so nbr_entries_filtered, entry_idx_start and entry_idx_end should all be set to -1.
912  */
913 typedef struct FileDirEntryArr {
914         ListBase entries;
915         int nbr_entries;
916         int nbr_entries_filtered;
917         int entry_idx_start, entry_idx_end;
918
919         /** FILE_MAX. */
920         char root[1024];
921 } FileDirEntryArr;
922
923 /* FileDirEntry.status */
924 enum {
925         ASSET_STATUS_LOCAL  = 1 << 0,  /* If active uuid is available locally/immediately. */
926         ASSET_STATUS_LATEST = 1 << 1,  /* If active uuid is latest available version. */
927 };
928
929 /* FileDirEntry.flags */
930 enum {
931         FILE_ENTRY_INVALID_PREVIEW = 1 << 0,  /* The preview for this entry could not be generated. */
932 };
933
934 /** \} */
935
936 /* -------------------------------------------------------------------- */
937 /** \name Image/UV Editor
938  * \{ */
939
940 /* Image/UV Editor */
941 typedef struct SpaceImage {
942         SpaceLink *next, *prev;
943         /** Storage of regions for inactive spaces. */
944         ListBase regionbase;
945         char spacetype;
946         char link_flag;
947         char _pad0[6];
948         /* End 'SpaceLink' header. */
949
950         struct Image *image;
951         struct ImageUser iuser;
952
953         /** Histogram waveform and vectorscope. */
954         struct Scopes scopes;
955         /** Sample line histogram. */
956         struct Histogram sample_line_hist;
957
958         /** Grease pencil data. */
959         struct bGPdata *gpd;
960
961         /** UV editor 2d cursor. */
962         float cursor[2];
963         /** User defined offset, image is centered. */
964         float xof, yof;
965         /** User defined zoom level. */
966         float zoom;
967         /** Storage for offset while render drawing. */
968         float centx, centy;
969
970         /** View/paint/mask. */
971         char  mode;
972         /* Storage for sub-space types. */
973         char mode_prev;
974
975         char  pin;
976         char _pad;
977         /**
978          * The currently active tile of the image when tile is enabled,
979          * is kept in sync with the active faces tile.
980          */
981         short curtile;
982         short lock;
983         /** UV draw type. */
984         char dt_uv;
985         /** Sticky selection type. */
986         char sticky;
987         char dt_uvstretch;
988         char around;
989
990         int flag;
991
992         char pixel_snap_mode;
993         char pad[3];
994
995         MaskSpaceInfo mask_info;
996 } SpaceImage;
997
998
999 /* SpaceImage.dt_uv */
1000 typedef enum eSpaceImage_UVDT {
1001         SI_UVDT_OUTLINE = 0,
1002         SI_UVDT_DASH = 1,
1003         SI_UVDT_BLACK = 2,
1004         SI_UVDT_WHITE = 3,
1005 } eSpaceImage_UVDT;
1006
1007 /* SpaceImage.dt_uvstretch */
1008 typedef enum eSpaceImage_UVDT_Stretch {
1009         SI_UVDT_STRETCH_ANGLE = 0,
1010         SI_UVDT_STRETCH_AREA = 1,
1011 } eSpaceImage_UVDT_Stretch;
1012
1013 /* SpaceImage.pixel_snap_mode */
1014 typedef enum eSpaceImage_PixelSnapMode {
1015         SI_PIXEL_SNAP_DISABLED = 0,
1016         SI_PIXEL_SNAP_CENTER = 1,
1017         SI_PIXEL_SNAP_CORNER = 2,
1018 } eSpaceImage_Snap_Mode;
1019
1020 /* SpaceImage.mode */
1021 typedef enum eSpaceImage_Mode {
1022         SI_MODE_VIEW  = 0,
1023         SI_MODE_PAINT = 1,
1024         SI_MODE_MASK  = 2,
1025         SI_MODE_UV    = 3,
1026 } eSpaceImage_Mode;
1027
1028 /* SpaceImage.sticky
1029  * Note DISABLE should be 0, however would also need to re-arrange icon order,
1030  * also, sticky loc is the default mode so this means we don't need to 'do_versions' */
1031 typedef enum eSpaceImage_Sticky {
1032         SI_STICKY_LOC      = 0,
1033         SI_STICKY_DISABLE  = 1,
1034         SI_STICKY_VERTEX   = 2,
1035 } eSpaceImage_Sticky;
1036
1037 /* SpaceImage.flag */
1038 typedef enum eSpaceImage_Flag {
1039         SI_FLAG_DEPRECATED_0  = (1 << 0),  /* cleared */
1040         SI_FLAG_DEPRECATED_1  = (1 << 1),  /* cleared */
1041         SI_CLIP_UV            = (1 << 2),
1042         SI_FLAG_DEPRECATED_3  = (1 << 3),  /* cleared */
1043         SI_NO_DRAWFACES       = (1 << 4),
1044         SI_DRAWSHADOW         = (1 << 5),
1045         SI_FLAG_DEPRECATED_6  = (1 << 6),  /* cleared */
1046         SI_FLAG_DEPRECATED_7  = (1 << 7),  /* cleared */
1047         SI_FLAG_DEPRECATED_8  = (1 << 8),  /* cleared */
1048         SI_COORDFLOATS        = (1 << 9),
1049         SI_FLAG_DEPRECATED_10 = (1 << 10),
1050         SI_LIVE_UNWRAP        = (1 << 11),
1051         SI_USE_ALPHA          = (1 << 12),
1052         SI_SHOW_ALPHA         = (1 << 13),
1053         SI_SHOW_ZBUF          = (1 << 14),
1054
1055         /* next two for render window display */
1056         SI_PREVSPACE          = (1 << 15),
1057         SI_FULLWINDOW         = (1 << 16),
1058
1059         SI_FLAG_DEPRECATED_17 = (1 << 17),  /* cleared */
1060         SI_FLAG_DEPRECATED_18 = (1 << 18),  /* cleared */
1061
1062         /* this means that the image is drawn until it reaches the view edge,
1063          * in the image view, it's unrelated to the 'tile' mode for texface
1064          */
1065         SI_DRAW_TILE          = (1 << 19),
1066         SI_SMOOTH_UV          = (1 << 20),
1067         SI_DRAW_STRETCH       = (1 << 21),
1068         SI_SHOW_GPENCIL       = (1 << 22),
1069         SI_FLAG_DEPRECATED_23 = (1 << 23),  /* cleared */
1070
1071         SI_FLAG_DEPRECATED_24 = (1 << 24),
1072
1073         SI_NO_DRAW_TEXPAINT   = (1 << 25),
1074         SI_DRAW_METADATA      = (1 << 26),
1075
1076         SI_SHOW_R             = (1 << 27),
1077         SI_SHOW_G             = (1 << 28),
1078         SI_SHOW_B             = (1 << 29),
1079
1080         SI_NO_DRAWEDGES         = (1 << 30),
1081 } eSpaceImage_Flag;
1082
1083 /* SpaceImage.other_uv_filter */
1084 typedef enum eSpaceImage_OtherUVFilter {
1085         SI_FILTER_SAME_IMAGE    = 0,
1086         SI_FILTER_ALL           = 1,
1087 } eSpaceImage_OtherUVFilter;
1088
1089 /** \} */
1090
1091 /* -------------------------------------------------------------------- */
1092 /** \name Text Editor
1093  * \{ */
1094
1095 /* Text Editor */
1096 typedef struct SpaceText {
1097         SpaceLink *next, *prev;
1098         /** Storage of regions for inactive spaces. */
1099         ListBase regionbase;
1100         char spacetype;
1101         char link_flag;
1102         char _pad0[6];
1103         /* End 'SpaceLink' header. */
1104
1105         struct Text *text;
1106
1107         int top, viewlines;
1108         short flags, menunr;
1109
1110         /** User preference, is font_size! */
1111         short lheight;
1112         /**
1113          * Runtime computed, character width
1114          * and the number of chars to use when showing line numbers.
1115          */
1116         char cwidth, linenrs_tot;
1117         int left;
1118         int showlinenrs;
1119         int tabnumber;
1120
1121         short showsyntax;
1122         short line_hlight;
1123         short overwrite;
1124         /** Run python while editing, evil. */
1125         short live_edit;
1126         float pix_per_line;
1127
1128         struct rcti txtscroll, txtbar;
1129
1130         int wordwrap, doplugins;
1131
1132         /** ST_MAX_FIND_STR. */
1133         char findstr[256];
1134         /** ST_MAX_FIND_STR. */
1135         char replacestr[256];
1136
1137         /** Column number to show right margin at. */
1138         short margin_column;
1139         /** Actual lineheight, dpi controlled. */
1140         short lheight_dpi;
1141         char pad[4];
1142
1143         /** Cache for faster drawing. */
1144         void *drawcache;
1145
1146         /** Runtime, for scroll increments smaller than a line. */
1147         float scroll_accum[2];
1148 } SpaceText;
1149
1150
1151 /* SpaceText flags (moved from DNA_text_types.h) */
1152 typedef enum eSpaceText_Flags {
1153         /* scrollable */
1154         ST_SCROLL_SELECT        = (1 << 0),
1155         /* clear namespace after script execution (BPY_main.c) */
1156         ST_CLEAR_NAMESPACE      = (1 << 4),
1157
1158         ST_FIND_WRAP            = (1 << 5),
1159         ST_FIND_ALL             = (1 << 6),
1160         ST_SHOW_MARGIN          = (1 << 7),
1161         ST_MATCH_CASE           = (1 << 8),
1162
1163         ST_FIND_ACTIVATE                = (1 << 9),
1164 } eSpaceText_Flags;
1165
1166 /* SpaceText.findstr/replacestr */
1167 #define ST_MAX_FIND_STR     256
1168
1169 /** \} */
1170
1171 /* -------------------------------------------------------------------- */
1172 /** \name Script View (Obsolete)
1173  * \{ */
1174
1175 /* Script Runtime Data - Obsolete (pre 2.5) */
1176 typedef struct Script {
1177         ID id;
1178
1179         void *py_draw;
1180         void *py_event;
1181         void *py_button;
1182         void *py_browsercallback;
1183         void *py_globaldict;
1184
1185         int flags, lastspace;
1186         /**
1187          * Store the script file here so we can re-run it on loading blender,
1188          * if "Enable Scripts" is on
1189          */
1190         /** 1024 = FILE_MAX. */
1191         char scriptname[1024];
1192         /** 1024 = FILE_MAX. */
1193         char scriptarg[256];
1194 } Script;
1195 #define SCRIPT_SET_NULL(_script) _script->py_draw = _script->py_event = _script->py_button = _script->py_browsercallback = _script->py_globaldict = NULL; _script->flags = 0
1196
1197 /* Script View - Obsolete (pre 2.5) */
1198 typedef struct SpaceScript {
1199         SpaceLink *next, *prev;
1200         /** Storage of regions for inactive spaces. */
1201         ListBase regionbase;
1202         char spacetype;
1203         char link_flag;
1204         char _pad0[6];
1205         /* End 'SpaceLink' header. */
1206
1207         struct Script *script;
1208
1209         short flags, menunr;
1210         int pad1;
1211
1212         void *but_refs;
1213 } SpaceScript;
1214
1215 /** \} */
1216
1217 /* -------------------------------------------------------------------- */
1218 /** \name Nodes Editor
1219  * \{ */
1220
1221 typedef struct bNodeTreePath {
1222         struct bNodeTreePath *next, *prev;
1223
1224         struct bNodeTree *nodetree;
1225         /** Base key for nodes in this tree instance. */
1226         bNodeInstanceKey parent_key;
1227         int pad;
1228         /** V2d center point, so node trees can have different offsets in editors. */
1229         float view_center[2];
1230
1231         /** MAX_NAME. */
1232         char node_name[64];
1233 } bNodeTreePath;
1234
1235 typedef struct SpaceNode {
1236         SpaceLink *next, *prev;
1237         /** Storage of regions for inactive spaces. */
1238         ListBase regionbase;
1239         char spacetype;
1240         char link_flag;
1241         char _pad0[6];
1242         /* End 'SpaceLink' header. */
1243
1244         /** Deprecated, copied to region. */
1245         View2D v2d DNA_DEPRECATED;
1246
1247         /** Context, no need to save in file? well... pinning... */
1248         struct ID *id, *from;
1249         /** Menunr: browse id block in header. */
1250         short flag, pad1;
1251         /** Internal state variables. */
1252         float aspect, pad2;
1253
1254         /** Offset for drawing the backdrop. */
1255         float xof, yof;
1256         /** Zoom for backdrop. */
1257         float zoom;
1258         /** Mouse pos for drawing socketless link and adding nodes. */
1259         float cursor[2];
1260
1261         /* XXX nodetree pointer info is all in the path stack now,
1262          * remove later on and use bNodeTreePath instead. For now these variables are set when pushing/popping
1263          * from path stack, to avoid having to update all the functions and operators. Can be done when
1264          * design is accepted and everything is properly tested.
1265          */
1266         ListBase treepath;
1267
1268         struct bNodeTree *nodetree, *edittree;
1269
1270         /* tree type for the current node tree */
1271         char tree_idname[64];
1272         /** Treetype: as same nodetree->type. */
1273         int treetype DNA_DEPRECATED;
1274         int pad3;
1275
1276         /** Texfrom object, world or brush. */
1277         short texfrom;
1278         /** Shader from object or world. */
1279         short shaderfrom;
1280         /** Currently on 0/1, for auto compo. */
1281         short recalc;
1282
1283         /** Direction for offsetting nodes on insertion. */
1284         char insert_ofs_dir;
1285         char pad4;
1286
1287         /** Temporary data for modal linking operator. */
1288         ListBase linkdrag;
1289         /* XXX hack for translate_attach op-macros to pass data from transform op to insert_offset op */
1290         /** Temporary data for node insert offset (in UI called Auto-offset). */
1291         struct NodeInsertOfsData *iofsd;
1292
1293         /** Grease-pencil data. */
1294         struct bGPdata *gpd;
1295 } SpaceNode;
1296
1297 /* SpaceNode.flag */
1298 typedef enum eSpaceNode_Flag {
1299         SNODE_BACKDRAW       = (1 << 1),
1300         SNODE_SHOW_GPENCIL   = (1 << 2),
1301         SNODE_USE_ALPHA      = (1 << 3),
1302         SNODE_SHOW_ALPHA     = (1 << 4),
1303         SNODE_SHOW_R         = (1 << 7),
1304         SNODE_SHOW_G         = (1 << 8),
1305         SNODE_SHOW_B         = (1 << 9),
1306         SNODE_AUTO_RENDER    = (1 << 5),
1307         SNODE_FLAG_DEPRECATED_6  = (1 << 6),   /* cleared */
1308         SNODE_FLAG_DEPRECATED_10 = (1 << 10),  /* cleared */
1309         SNODE_FLAG_DEPRECATED_11 = (1 << 11),  /* cleared */
1310         SNODE_PIN            = (1 << 12),
1311         /** automatically offset following nodes in a chain on insertion */
1312         SNODE_SKIP_INSOFFSET = (1 << 13),
1313 } eSpaceNode_Flag;
1314
1315 /* SpaceNode.texfrom */
1316 typedef enum eSpaceNode_TexFrom {
1317         /* SNODE_TEX_OBJECT   = 0, */
1318         SNODE_TEX_WORLD    = 1,
1319         SNODE_TEX_BRUSH    = 2,
1320         SNODE_TEX_LINESTYLE = 3,
1321 } eSpaceNode_TexFrom;
1322
1323 /* SpaceNode.shaderfrom */
1324 typedef enum eSpaceNode_ShaderFrom {
1325         SNODE_SHADER_OBJECT = 0,
1326         SNODE_SHADER_WORLD = 1,
1327         SNODE_SHADER_LINESTYLE = 2,
1328 } eSpaceNode_ShaderFrom;
1329
1330 /* SpaceNode.insert_ofs_dir */
1331 enum {
1332         SNODE_INSERTOFS_DIR_RIGHT = 0,
1333         SNODE_INSERTOFS_DIR_LEFT  = 1,
1334 };
1335
1336 /** \} */
1337
1338 /* -------------------------------------------------------------------- */
1339 /** \name Console
1340  * \{ */
1341
1342 /* Console content */
1343 typedef struct ConsoleLine {
1344         struct ConsoleLine *next, *prev;
1345
1346         /* keep these 3 vars so as to share free, realloc funcs */
1347         /** Allocated length. */
1348         int len_alloc;
1349         /** Real len - strlen(). */
1350         int len;
1351         char *line;
1352
1353         int cursor;
1354         /** Only for use when in the 'scrollback' listbase. */
1355         int type;
1356 } ConsoleLine;
1357
1358 /* ConsoleLine.type */
1359 typedef enum eConsoleLine_Type {
1360         CONSOLE_LINE_OUTPUT = 0,
1361         CONSOLE_LINE_INPUT = 1,
1362         CONSOLE_LINE_INFO = 2, /* autocomp feedback */
1363         CONSOLE_LINE_ERROR = 3,
1364 } eConsoleLine_Type;
1365
1366
1367 /* Console View */
1368 typedef struct SpaceConsole {
1369         SpaceLink *next, *prev;
1370         /** Storage of regions for inactive spaces. */
1371         ListBase regionbase;
1372         char spacetype;
1373         char link_flag;
1374         char _pad0[6];
1375         /* End 'SpaceLink' header. */
1376
1377         /* space vars */
1378         int lheight, pad;
1379
1380         /** ConsoleLine; output. */
1381         ListBase scrollback;
1382         /** ConsoleLine; command history, current edited line is the first. */
1383         ListBase history;
1384         char prompt[256];
1385         /** Multiple consoles are possible, not just python. */
1386         char language[32];
1387
1388         int sel_start;
1389         int sel_end;
1390 } SpaceConsole;
1391
1392 /** \} */
1393
1394 /* -------------------------------------------------------------------- */
1395 /** \name User Preferences
1396  * \{ */
1397
1398 typedef struct SpaceUserPref {
1399         SpaceLink *next, *prev;
1400         /** Storage of regions for inactive spaces. */
1401         ListBase regionbase;
1402         char spacetype;
1403         char link_flag;
1404         char _pad0[6];
1405         /* End 'SpaceLink' header. */
1406
1407         char _pad1[7];
1408         char filter_type;
1409         /** Search term for filtering in the UI. */
1410         char filter[64];
1411 } SpaceUserPref;
1412
1413 /** \} */
1414
1415 /* -------------------------------------------------------------------- */
1416 /** \name Motion Tracking
1417  * \{ */
1418
1419 /* Clip Editor */
1420 typedef struct SpaceClip {
1421         SpaceLink *next, *prev;
1422         /** Storage of regions for inactive spaces. */
1423         ListBase regionbase;
1424         char spacetype;
1425         char link_flag;
1426         char _pad0[6];
1427         /* End 'SpaceLink' header. */
1428
1429         char _pad1[4];
1430
1431         /** User defined offset, image is centered. */
1432         float xof, yof;
1433         /** User defined offset from locked position. */
1434         float xlockof, ylockof;
1435         /** User defined zoom level. */
1436         float zoom;
1437
1438         /** User of clip. */
1439         struct MovieClipUser user;
1440         /** Clip data. */
1441         struct MovieClip *clip;
1442         /** Different scoped displayed in space panels. */
1443         struct MovieClipScopes scopes;
1444
1445         /** Flags. */
1446         int flag;
1447         /** Editor mode (editing context being displayed). */
1448         short mode;
1449         /** Type of the clip editor view. */
1450         short view;
1451
1452         /** Length of displaying path, in frames. */
1453         int path_length;
1454
1455         /* current stabilization data */
1456         /** Pre-composed stabilization data. */
1457         float loc[2], scale, angle;
1458         int pad;
1459         /**
1460          * Current stabilization matrix and the same matrix in unified space,
1461          * defined when drawing and used for mouse position calculation.
1462          */
1463         float stabmat[4][4], unistabmat[4][4];
1464
1465         /* movie postprocessing */
1466         int postproc_flag;
1467
1468         /* grease pencil */
1469         short gpencil_src, pad2;
1470
1471         /** Pivot point for transforms. */
1472         int around, pad4;
1473
1474         /** Mask editor 2d cursor. */
1475         float cursor[2];
1476
1477         MaskSpaceInfo mask_info;
1478 } SpaceClip;
1479
1480 /* SpaceClip.flag */
1481 typedef enum eSpaceClip_Flag {
1482         SC_SHOW_MARKER_PATTERN      = (1 << 0),
1483         SC_SHOW_MARKER_SEARCH       = (1 << 1),
1484         SC_LOCK_SELECTION           = (1 << 2),
1485         SC_SHOW_TINY_MARKER         = (1 << 3),
1486         SC_SHOW_TRACK_PATH          = (1 << 4),
1487         SC_SHOW_BUNDLES             = (1 << 5),
1488         SC_MUTE_FOOTAGE             = (1 << 6),
1489         SC_HIDE_DISABLED            = (1 << 7),
1490         SC_SHOW_NAMES               = (1 << 8),
1491         SC_SHOW_GRID                = (1 << 9),
1492         SC_SHOW_STABLE              = (1 << 10),
1493         SC_MANUAL_CALIBRATION       = (1 << 11),
1494         SC_SHOW_ANNOTATION          = (1 << 12),
1495         SC_SHOW_FILTERS             = (1 << 13),
1496         SC_SHOW_GRAPH_FRAMES        = (1 << 14),
1497         SC_SHOW_GRAPH_TRACKS_MOTION = (1 << 15),
1498 /*      SC_SHOW_PYRAMID_LEVELS      = (1 << 16), */     /* UNUSED */
1499         SC_LOCK_TIMECURSOR          = (1 << 17),
1500         SC_SHOW_SECONDS             = (1 << 18),
1501         SC_SHOW_GRAPH_SEL_ONLY      = (1 << 19),
1502         SC_SHOW_GRAPH_HIDDEN        = (1 << 20),
1503         SC_SHOW_GRAPH_TRACKS_ERROR  = (1 << 21),
1504         SC_SHOW_METADATA            = (1 << 22),
1505 } eSpaceClip_Flag;
1506
1507 /* SpaceClip.mode */
1508 typedef enum eSpaceClip_Mode {
1509         SC_MODE_TRACKING = 0,
1510         /*SC_MODE_RECONSTRUCTION = 1,*/  /* DEPRECATED */
1511         /*SC_MODE_DISTORTION = 2,*/  /* DEPRECATED */
1512         SC_MODE_MASKEDIT = 3,
1513 } eSpaceClip_Mode;
1514
1515 /* SpaceClip.view */
1516 typedef enum eSpaceClip_View {
1517         SC_VIEW_CLIP = 0,
1518         SC_VIEW_GRAPH = 1,
1519         SC_VIEW_DOPESHEET = 2,
1520 } eSpaceClip_View;
1521
1522 /* SpaceClip.gpencil_src */
1523 typedef enum eSpaceClip_GPencil_Source {
1524         SC_GPENCIL_SRC_CLIP = 0,
1525         SC_GPENCIL_SRC_TRACK = 1,
1526 } eSpaceClip_GPencil_Source;
1527
1528
1529 /** \} */
1530
1531 /* -------------------------------------------------------------------- */
1532 /** \name Top Bar
1533  * \{ */
1534
1535 /* These two lines with # tell makesdna this struct can be excluded.
1536  * Should be: #ifndef WITH_GLOBAL_AREA_WRITING */
1537 #
1538 #
1539 typedef struct SpaceTopBar {
1540         SpaceLink *next, *prev;
1541         /** Storage of regions for inactive spaces. */
1542         ListBase regionbase;
1543         char spacetype;
1544         char link_flag;
1545         char _pad0[6];
1546         /* End 'SpaceLink' header. */
1547 } SpaceTopBar;
1548
1549 /** \} */
1550
1551 /* -------------------------------------------------------------------- */
1552 /** \name Status Bar
1553  * \{ */
1554
1555 /* These two lines with # tell makesdna this struct can be excluded.
1556  * Should be: #ifndef WITH_GLOBAL_AREA_WRITING */
1557 #
1558 #
1559 typedef struct SpaceStatusBar {
1560         SpaceLink *next, *prev;
1561         /** Storage of regions for inactive spaces. */
1562         ListBase regionbase;
1563         char spacetype;
1564         char link_flag;
1565         char _pad0[6];
1566         /* End 'SpaceLink' header. */
1567 } SpaceStatusBar;
1568
1569 /** \} */
1570
1571 /* -------------------------------------------------------------------- */
1572 /** \name Space Defines (eSpace_Type)
1573  * \{ */
1574
1575 /* space types, moved from DNA_screen_types.h */
1576 /* Do NOT change order, append on end. types are hardcoded needed */
1577 typedef enum eSpace_Type {
1578         SPACE_EMPTY    = 0,
1579         SPACE_VIEW3D   = 1,
1580         SPACE_GRAPH      = 2,
1581         SPACE_OUTLINER = 3,
1582         SPACE_PROPERTIES     = 4,
1583         SPACE_FILE     = 5,
1584         SPACE_IMAGE    = 6,
1585         SPACE_INFO     = 7,
1586         SPACE_SEQ      = 8,
1587         SPACE_TEXT     = 9,
1588 #ifdef DNA_DEPRECATED
1589         SPACE_IMASEL   = 10, /* deprecated */
1590         SPACE_SOUND    = 11, /* Deprecated */
1591 #endif
1592         SPACE_ACTION   = 12,
1593         SPACE_NLA      = 13,
1594         /* TODO: fully deprecate */
1595         SPACE_SCRIPT   = 14, /* Deprecated */
1596         SPACE_TIME     = 15, /* Deprecated */
1597         SPACE_NODE     = 16,
1598         SPACE_LOGIC    = 17, /* deprecated */
1599         SPACE_CONSOLE  = 18,
1600         SPACE_USERPREF = 19,
1601         SPACE_CLIP     = 20,
1602         SPACE_TOPBAR   = 21,
1603         SPACE_STATUSBAR = 22,
1604
1605         SPACE_TYPE_LAST = SPACE_STATUSBAR,
1606 } eSpace_Type;
1607
1608 /* use for function args */
1609 #define SPACE_TYPE_ANY -1
1610
1611 #define IMG_SIZE_FALLBACK 256
1612
1613 /** \} */
1614
1615 #endif  /* __DNA_SPACE_TYPES_H__ */