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