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