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