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