add assert for hashes if an existing element is ever inserted into a ghash/edgehash.
[blender-staging.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 bSound;
54 struct ImBuf;
55 struct Image;
56 struct Scopes;
57 struct Histogram;
58 struct SpaceIpo;
59 struct BlendHandle;
60 struct RenderInfo;
61 struct bNodeTree;
62 struct uiBlock;
63 struct FileList;
64 struct bGPdata;
65 struct bDopeSheet;
66 struct FileSelectParams;
67 struct FileLayout;
68 struct bScreen;
69 struct Scene;
70 struct wmOperator;
71 struct wmTimer;
72 struct MovieClip;
73 struct MovieClipScopes;
74 struct Mask;
75 struct GHash;
76 struct BLI_mempool;
77
78
79 /* SpaceLink (Base) ==================================== */
80
81 /**
82  * The base structure all the other spaces
83  * are derived (implicitly) from. Would be
84  * good to make this explicit.
85  */
86 typedef struct SpaceLink {
87         struct SpaceLink *next, *prev;
88         ListBase regionbase;        /* storage of regions for inactive spaces */
89         int spacetype;
90         float blockscale DNA_DEPRECATED;        /* XXX make deprecated */
91         short blockhandler[8]  DNA_DEPRECATED;  /* XXX make deprecated */
92 } SpaceLink;
93
94
95 /* Space Info ========================================== */
96
97 /* Info Header */
98 typedef struct SpaceInfo {
99         SpaceLink *next, *prev;
100         ListBase regionbase;        /* storage of regions for inactive spaces */
101         int spacetype;
102         float blockscale DNA_DEPRECATED;
103         short blockhandler[8]  DNA_DEPRECATED;      /* XXX make deprecated */
104         
105         char rpt_mask;
106         char pad[7];
107 } SpaceInfo;
108
109 /* SpaceInfo.rpt_mask */
110 typedef enum eSpaceInfo_RptMask {
111         INFO_RPT_DEBUG  = (1 << 0),
112         INFO_RPT_INFO   = (1 << 1),
113         INFO_RPT_OP     = (1 << 2),
114         INFO_RPT_WARN   = (1 << 3),
115         INFO_RPT_ERR    = (1 << 4),
116 } eSpaceInfo_RptMask;
117
118
119 /* Properties Editor ==================================== */
120
121 /* Properties Editor */
122 typedef struct SpaceButs {
123         SpaceLink *next, *prev;
124         ListBase regionbase;        /* storage of regions for inactive spaces */
125         int spacetype;
126         float blockscale DNA_DEPRECATED;
127         
128         short blockhandler[8]  DNA_DEPRECATED;
129
130         View2D v2d DNA_DEPRECATED;                      /* deprecated, copied to region */
131         
132         short mainb, mainbo, mainbuser; /* context tabs */
133         short re_align, align;          /* align for panels */
134         short preview;                  /* preview is signal to refresh */
135         short texture_context;          /* texture context selector (material, world, brush)*/
136         char flag, pad;
137         
138         void *path;                     /* runtime */
139         int pathflag, dataicon;         /* runtime */
140         ID *pinid;
141
142         void *texuser;
143 } SpaceButs;
144
145 /* button defines (deprecated) */
146 /* warning: the values of these defines are used in sbuts->tabs[8] */
147 /* sbuts->mainb new */
148 #define CONTEXT_SCENE   0
149 #define CONTEXT_OBJECT  1
150 #define CONTEXT_TYPES   2
151 #define CONTEXT_SHADING 3
152 #define CONTEXT_EDITING 4
153 #define CONTEXT_SCRIPT  5
154 #define CONTEXT_LOGIC   6
155
156 /* sbuts->mainb old (deprecated) */
157 #define BUTS_VIEW           0
158 #define BUTS_LAMP           1
159 #define BUTS_MAT            2
160 #define BUTS_TEX            3
161 #define BUTS_ANIM           4
162 #define BUTS_WORLD          5
163 #define BUTS_RENDER         6
164 #define BUTS_EDIT           7
165 #define BUTS_GAME           8
166 #define BUTS_FPAINT         9
167 #define BUTS_RADIO          10
168 #define BUTS_SCRIPT         11
169 #define BUTS_SOUND          12
170 #define BUTS_CONSTRAINT     13
171 #define BUTS_EFFECTS        14
172
173 /* buts->mainb new */
174 typedef enum eSpaceButtons_Context {
175         BCONTEXT_RENDER = 0,
176         BCONTEXT_SCENE = 1,
177         BCONTEXT_WORLD = 2,
178         BCONTEXT_OBJECT = 3,
179         BCONTEXT_DATA = 4,
180         BCONTEXT_MATERIAL = 5,
181         BCONTEXT_TEXTURE = 6,
182         BCONTEXT_PARTICLE = 7,
183         BCONTEXT_PHYSICS = 8,
184         BCONTEXT_BONE = 9,
185         BCONTEXT_MODIFIER = 10,
186         BCONTEXT_CONSTRAINT = 11,
187         BCONTEXT_BONE_CONSTRAINT = 12,
188         BCONTEXT_RENDER_LAYER = 13,
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->texture_context */
205 typedef enum eSpaceButtons_Texture_Context {
206         SB_TEXC_MATERIAL = 0,
207         SB_TEXC_WORLD = 1,
208         SB_TEXC_LAMP = 2,
209         SB_TEXC_PARTICLES = 3,
210         SB_TEXC_OTHER = 4,
211 } eSpaceButtons_Texture_Context;
212
213 /* sbuts->align */
214 typedef enum eSpaceButtons_Align {
215         BUT_FREE = 0,
216         BUT_HORIZONTAL = 1,
217         BUT_VERTICAL = 2,
218         BUT_AUTO = 3,
219 } eSpaceButtons_Align;
220
221 /* sbuts->scaflag */
222 #define BUTS_SENS_SEL           1
223 #define BUTS_SENS_ACT           2
224 #define BUTS_SENS_LINK          4
225 #define BUTS_CONT_SEL           8
226 #define BUTS_CONT_ACT           16
227 #define BUTS_CONT_LINK          32
228 #define BUTS_ACT_SEL            64
229 #define BUTS_ACT_ACT            128
230 #define BUTS_ACT_LINK           256
231 #define BUTS_SENS_STATE         512
232 #define BUTS_ACT_STATE          1024
233 #define BUTS_CONT_INIT_STATE    2048
234
235
236 /* Outliner =============================================== */
237
238 /* Outliner */
239 typedef struct SpaceOops {
240         SpaceLink *next, *prev;
241         ListBase regionbase;        /* storage of regions for inactive spaces */
242         int spacetype;
243         float blockscale DNA_DEPRECATED;
244         short blockhandler[8]  DNA_DEPRECATED;
245
246         View2D v2d DNA_DEPRECATED;  /* deprecated, copied to region */
247         
248         ListBase tree;
249         struct BLI_mempool *treestore;
250         
251         /* search stuff */
252         char search_string[32];
253         struct TreeStoreElem search_tse;
254
255         short flag, outlinevis, storeflag, search_flags;
256         struct GHash *treehash;  /* note, allows duplicates */
257 } SpaceOops;
258
259
260 /* SpaceOops->flag */
261 typedef enum eSpaceOutliner_Flag {
262         SO_TESTBLOCKS           = (1 << 0),
263         SO_NEWSELECTED          = (1 << 1),
264         SO_HIDE_RESTRICTCOLS    = (1 << 2),
265         SO_HIDE_KEYINGSETINFO   = (1 << 3),
266 } eSpaceOutliner_Flag;
267
268 /* SpaceOops->outlinevis */
269 typedef enum eSpaceOutliner_Mode {
270         SO_ALL_SCENES = 0,
271         SO_CUR_SCENE = 1,
272         SO_VISIBLE = 2,
273         SO_SELECTED = 3,
274         SO_ACTIVE = 4,
275         SO_SAME_TYPE = 5,
276         SO_GROUPS = 6,
277         SO_LIBRARIES = 7,
278         /* SO_VERSE_SESSION = 8, */  /* deprecated! */
279         /* SO_VERSE_MS = 9, */       /* deprecated!*/
280         SO_SEQUENCE = 10,
281         SO_DATABLOCKS = 11,
282         SO_USERDEF = 12,
283         SO_KEYMAP = 13,
284 } eSpaceOutliner_Mode;
285
286 /* SpaceOops->storeflag */
287 typedef enum eSpaceOutliner_StoreFlag {
288         /* rebuild tree */
289         SO_TREESTORE_CLEANUP    = (1 << 0),
290         /* if set, it allows redraws. gets set for some allqueue events */
291         SO_TREESTORE_REDRAW     = (1 << 1),
292 } eSpaceOutliner_StoreFlag;
293
294 /* outliner search flags (SpaceOops->search_flags) */
295 typedef enum eSpaceOutliner_Search_Flags {
296         SO_FIND_CASE_SENSITIVE  = (1 << 0),
297         SO_FIND_COMPLETE        = (1 << 1),
298         SO_SEARCH_RECURSIVE     = (1 << 2),
299 } eSpaceOutliner_Search_Flags;
300
301
302 /* Graph Editor ========================================= */
303
304 /* 'Graph' Editor (formerly known as the IPO Editor) */
305 typedef struct SpaceIpo {
306         SpaceLink *next, *prev;
307         ListBase regionbase;        /* storage of regions for inactive spaces */
308         int spacetype;
309         float blockscale DNA_DEPRECATED;
310         short blockhandler[8]  DNA_DEPRECATED;
311         
312         View2D v2d DNA_DEPRECATED;  /* deprecated, copied to region */
313         
314         struct bDopeSheet *ads; /* settings for filtering animation data (NOTE: we use a pointer due to code-linking issues) */
315         
316         ListBase ghostCurves;   /* sampled snapshots of F-Curves used as in-session guides */
317         
318         short mode;             /* mode for the Graph editor (eGraphEdit_Mode) */
319         short autosnap;         /* time-transform autosnapping settings for Graph editor (eAnimEdit_AutoSnap in DNA_action_types.h) */
320         int flag;               /* settings for Graph editor (eGraphEdit_Flag) */
321         
322         float cursorVal;        /* cursor value (y-value, x-value is current frame) */
323         int around;             /* pivot point for transforms */
324 } SpaceIpo;
325
326
327 /* SpaceIpo->flag (Graph Editor Settings) */
328 typedef enum eGraphEdit_Flag {
329         /* OLD DEPRECEATED SETTING */
330         /* SIPO_LOCK_VIEW            = (1 << 0), */
331         
332         /* don't merge keyframes on the same frame after a transform */
333         SIPO_NOTRANSKEYCULL       = (1 << 1),
334         /* don't show any keyframe handles at all */
335         SIPO_NOHANDLES            = (1 << 2),
336         /* don't show current frame number beside indicator line */
337         SIPO_NODRAWCFRANUM        = (1 << 3),
338         /* show timing in seconds instead of frames */
339         SIPO_DRAWTIME             = (1 << 4),
340         /* only show keyframes for selected F-Curves */
341         SIPO_SELCUVERTSONLY       = (1 << 5),
342         /* draw names of F-Curves beside the respective curves */
343         /* NOTE: currently not used */
344         SIPO_DRAWNAMES            = (1 << 6),
345         /* show sliders in channels list */
346         SIPO_SLIDERS              = (1 << 7),
347         /* don't show the horizontal component of the cursor */
348         SIPO_NODRAWCURSOR         = (1 << 8),
349         /* only show handles of selected keyframes */
350         SIPO_SELVHANDLESONLY      = (1 << 9),
351         /* temporary flag to force channel selections to be synced with main */
352         SIPO_TEMP_NEEDCHANSYNC    = (1 << 10),
353         /* don't perform realtime updates */
354         SIPO_NOREALTIMEUPDATES    = (1 << 11),
355         /* don't draw curves with AA ("beauty-draw") for performance */
356         SIPO_BEAUTYDRAW_OFF       = (1 << 12),
357         /* draw grouped channels with colors set in group */
358         SIPO_NODRAWGCOLORS        = (1 << 13),
359 } eGraphEdit_Flag;
360
361 /* SpaceIpo->mode (Graph Editor Mode) */
362 typedef enum eGraphEdit_Mode {
363         /* all animation curves (from all over Blender) */
364         SIPO_MODE_ANIMATION = 0,
365         /* drivers only */
366         SIPO_MODE_DRIVERS = 1,
367 } eGraphEdit_Mode;
368
369
370 /* NLA Editor ============================================= */
371
372 /* NLA Editor */
373 typedef struct SpaceNla {
374         struct SpaceLink *next, *prev;
375         ListBase regionbase;        /* storage of regions for inactive spaces */
376         int spacetype;
377         float blockscale DNA_DEPRECATED;
378         short blockhandler[8]  DNA_DEPRECATED;
379
380         short autosnap;         /* this uses the same settings as autosnap for Action Editor */
381         short flag;
382         int pad;
383         
384         struct bDopeSheet *ads;
385         View2D v2d DNA_DEPRECATED;   /* deprecated, copied to region */
386 } SpaceNla;
387
388 /* nla->flag */
389 typedef enum eSpaceNla_Flag {
390         /* flags (1<<0), (1<<1), and (1<<3) are deprecated flags from old verisons */
391
392         /* draw timing in seconds instead of frames */
393         SNLA_DRAWTIME          = (1 << 2),
394         /* don't draw frame number beside frame indicator */
395         SNLA_NODRAWCFRANUM     = (1 << 4),
396         /* don't draw influence curves on strips */
397         SNLA_NOSTRIPCURVES     = (1 << 5),
398         /* don't perform realtime updates */
399         SNLA_NOREALTIMEUPDATES = (1 << 6),
400 } eSpaceNla_Flag;
401
402
403 /* Timeline =============================================== */
404
405 /* Pointcache drawing data */
406 # /* Only store the data array in the cache to avoid constant reallocation. */
407 # /* No need to store when saved. */
408 typedef struct SpaceTimeCache {
409         struct SpaceTimeCache *next, *prev;
410         float *array;
411 } SpaceTimeCache;
412
413 /* Timeline View */
414 typedef struct SpaceTime {
415         SpaceLink *next, *prev;
416         ListBase regionbase;        /* storage of regions for inactive spaces */
417         int spacetype;
418         float blockscale DNA_DEPRECATED;
419         
420         View2D v2d DNA_DEPRECATED;  /* deprecated, copied to region */
421
422         ListBase caches;
423
424         int cache_display;
425         int flag;
426 } SpaceTime;
427
428
429 /* time->flag */
430 typedef enum eTimeline_Flag {
431         /* show timing in frames instead of in seconds */
432         TIME_DRAWFRAMES    = (1 << 0),
433         /* show time indicator box beside the frame number */
434         TIME_CFRA_NUM      = (1 << 1),
435         /* only keyframes from active/selected channels get shown */
436         TIME_ONLYACTSEL    = (1 << 2),
437 } eTimeline_Flag;
438
439 /* time->redraws (now screen->redraws_flag) */
440 typedef enum eScreen_Redraws_Flag {
441         TIME_REGION            = (1 << 0),
442         TIME_ALL_3D_WIN        = (1 << 1),
443         TIME_ALL_ANIM_WIN      = (1 << 2),
444         TIME_ALL_BUTS_WIN      = (1 << 3),
445         TIME_WITH_SEQ_AUDIO    = (1 << 4), /* DEPRECATED */
446         TIME_SEQ               = (1 << 5),
447         TIME_ALL_IMAGE_WIN     = (1 << 6),
448         TIME_CONTINUE_PHYSICS  = (1 << 7), /* UNUSED */
449         TIME_NODES             = (1 << 8),
450         TIME_CLIPS             = (1 << 9),
451 } eScreen_Redraws_Flag;
452
453 /* time->cache */
454 typedef enum eTimeline_Cache_Flag {
455         TIME_CACHE_DISPLAY       = (1 << 0),
456         TIME_CACHE_SOFTBODY      = (1 << 1),
457         TIME_CACHE_PARTICLES     = (1 << 2),
458         TIME_CACHE_CLOTH         = (1 << 3),
459         TIME_CACHE_SMOKE         = (1 << 4),
460         TIME_CACHE_DYNAMICPAINT  = (1 << 5),
461         TIME_CACHE_RIGIDBODY     = (1 << 6),
462 } eTimeline_Cache_Flag;
463
464
465 /* Sequence Editor ======================================= */
466
467 /* Sequencer */
468 typedef struct SpaceSeq {
469         SpaceLink *next, *prev;
470         ListBase regionbase;        /* storage of regions for inactive spaces */
471         int spacetype;
472         float blockscale DNA_DEPRECATED;
473
474         short blockhandler[8]  DNA_DEPRECATED;
475
476         View2D v2d DNA_DEPRECATED;  /* deprecated, copied to region */
477         
478         float xof DNA_DEPRECATED, yof DNA_DEPRECATED;   /* deprecated: offset for drawing the image preview */
479         short mainb;    /* weird name for the sequencer subtype (seq, image, luma... etc) */
480         short render_size;
481         short chanshown;
482         short zebra;
483         int flag;
484         float zoom DNA_DEPRECATED;  /* deprecated, handled by View2D now */
485         int view; /* see SEQ_VIEW_* below */
486         int overlay_type;
487
488         struct bGPdata *gpd;        /* grease-pencil data */
489
490         struct SequencerScopes scopes;  /* different scoped displayed in space */
491 } SpaceSeq;
492
493
494 /* sseq->mainb */
495 typedef enum eSpaceSeq_RegionType {
496         SEQ_DRAW_SEQUENCE = 0,
497         SEQ_DRAW_IMG_IMBUF = 1,
498         SEQ_DRAW_IMG_WAVEFORM = 2,
499         SEQ_DRAW_IMG_VECTORSCOPE = 3,
500         SEQ_DRAW_IMG_HISTOGRAM = 4,
501 } eSpaceSeq_RegionType;
502
503 /* sseq->flag */
504 typedef enum eSpaceSeq_Flag {
505         SEQ_DRAWFRAMES              = (1 << 0),
506         SEQ_MARKER_TRANS            = (1 << 1),
507         SEQ_DRAW_COLOR_SEPARATED    = (1 << 2),
508         SEQ_DRAW_SAFE_MARGINS       = (1 << 3),
509         SEQ_SHOW_GPENCIL            = (1 << 4),
510         SEQ_NO_DRAW_CFRANUM         = (1 << 5),
511         SEQ_USE_ALPHA               = (1 << 6), /* use RGBA display mode for preview */
512 } eSpaceSeq_Flag;
513
514 /* sseq->view */
515 typedef enum eSpaceSeq_Displays {
516         SEQ_VIEW_SEQUENCE = 1,
517         SEQ_VIEW_PREVIEW = 2,
518         SEQ_VIEW_SEQUENCE_PREVIEW = 3,
519 } eSpaceSeq_Dispays;
520
521 /* sseq->render_size */
522 typedef enum eSpaceSeq_Proxy_RenderSize {
523         SEQ_PROXY_RENDER_SIZE_NONE      =  -1,
524         SEQ_PROXY_RENDER_SIZE_SCENE     =   0,
525         SEQ_PROXY_RENDER_SIZE_25        =  25,
526         SEQ_PROXY_RENDER_SIZE_50        =  50,
527         SEQ_PROXY_RENDER_SIZE_75        =  75,
528         SEQ_PROXY_RENDER_SIZE_100       =  99,
529         SEQ_PROXY_RENDER_SIZE_FULL      = 100
530 } eSpaceSeq_Proxy_RenderSize;
531
532 typedef struct MaskSpaceInfo
533 {
534         /* **** mask editing **** */
535         struct Mask *mask;
536         /* draw options */
537         char draw_flag;
538         char draw_type;
539         char pad3[6];
540 } MaskSpaceInfo;
541
542 /* sseq->mainb */
543 typedef enum eSpaceSeq_OverlayType {
544         SEQ_DRAW_OVERLAY_RECT = 0,
545         SEQ_DRAW_OVERLAY_REFERENCE = 1,
546         SEQ_DRAW_OVERLAY_CURRENT = 2
547 } eSpaceSeq_OverlayType;
548
549 /* File Selector ========================================== */
550
551 /* Config and Input for File Selector */
552 typedef struct FileSelectParams {
553         char title[96]; /* title, also used for the text of the execute button */
554         char dir[1056]; /* directory, FILE_MAX_LIBEXTRA, 1024 + 32, this is for extreme case when 1023 length path
555                          * needs to be linked in, where foo.blend/Armature need adding  */
556         char file[256]; /* file */
557         char renamefile[256];
558         char renameedit[256]; /* annoying but the first is only used for initialization */
559
560         char filter_glob[64]; /* list of filetypes to filter */
561
562         int active_file;
563         int sel_first;
564         int sel_last;
565
566         /* short */
567         short type; /* XXXXX for now store type here, should be moved to the operator */
568         short flag; /* settings for filter, hiding dots files,...  */
569         short sort; /* sort order */
570         short display; /* display mode flag */
571         short filter; /* filter when (flags & FILE_FILTER) is true */
572
573         /* XXX --- still unused -- */
574         short f_fp; /* show font preview */
575         char fp_str[8]; /* string to use for font preview */
576
577         /* XXX --- end unused -- */
578 } FileSelectParams;
579
580 /* File Browser */
581 typedef struct SpaceFile {
582         SpaceLink *next, *prev;
583         ListBase regionbase;        /* storage of regions for inactive spaces */
584         int spacetype;
585         
586         int scroll_offset;
587
588         struct FileSelectParams *params; /* config and input for file select */
589         
590         struct FileList *files; /* holds the list of files to show */
591
592         ListBase *folders_prev; /* holds the list of previous directories to show */
593         ListBase *folders_next; /* holds the list of next directories (pushed from previous) to show */
594
595         /* operator that is invoking fileselect 
596          * op->exec() will be called on the 'Load' button.
597          * if operator provides op->cancel(), then this will be invoked
598          * on the cancel button.
599          */
600         struct wmOperator *op; 
601
602         struct wmTimer *smoothscroll_timer;
603
604         struct FileLayout *layout;
605         
606         short recentnr, bookmarknr;
607         short systemnr, pad2;
608 } SpaceFile;
609
610
611 /* FileSelectParams.display */
612 enum FileDisplayTypeE {
613         FILE_DEFAULTDISPLAY = 0,
614         FILE_SHORTDISPLAY = 1,
615         FILE_LONGDISPLAY = 2,
616         FILE_IMGDISPLAY = 3
617 };
618
619 /* FileSelectParams.sort */
620 enum FileSortTypeE {
621         FILE_SORT_NONE = 0,
622         FILE_SORT_ALPHA = 1,
623         FILE_SORT_EXTENSION = 2,
624         FILE_SORT_TIME = 3,
625         FILE_SORT_SIZE = 4
626 };
627
628 /* these values need to be hardcoded in structs, dna does not recognize defines */
629 /* also defined in BKE */
630 #define FILE_MAXDIR         768
631 #define FILE_MAXFILE        256
632 #define FILE_MAX            1024
633
634 #define FILE_MAX_LIBEXTRA   (FILE_MAX + MAX_ID_NAME)
635
636 /* filesel types */
637 #define FILE_UNIX           8
638 #define FILE_BLENDER        8 /* don't display relative paths */
639 #define FILE_SPECIAL        9
640
641 #define FILE_LOADLIB        1
642 #define FILE_MAIN           2
643 #define FILE_LOADFONT       3
644
645 /* filesel op property -> action */
646 typedef enum eFileSel_Action {
647         FILE_OPENFILE = 0,
648         FILE_SAVE = 1,
649 } eFileSel_Action;
650
651 /* sfile->params->flag and simasel->flag */
652 typedef enum eFileSel_Params_Flag {
653         FILE_SHOWSHORT      = (1 << 0),
654         FILE_RELPATH        = (1 << 1), /* was FILE_STRINGCODE */
655         FILE_LINK           = (1 << 2),
656         FILE_HIDE_DOT       = (1 << 3),
657         FILE_AUTOSELECT     = (1 << 4),
658         FILE_ACTIVELAY      = (1 << 5),
659 /*  FILE_ATCURSOR       = (1 << 6), */ /* deprecated */
660         FILE_DIRSEL_ONLY    = (1 << 7),
661         FILE_FILTER         = (1 << 8),
662         FILE_BOOKMARKS      = (1 << 9),
663         FILE_GROUP_INSTANCE = (1 << 10),
664 } eFileSel_Params_Flag;
665
666
667 /* files in filesel list: file types */
668 typedef enum eFileSel_File_Types {
669         BLENDERFILE         = (1 << 2),
670         BLENDERFILE_BACKUP  = (1 << 3),
671         IMAGEFILE           = (1 << 4),
672         MOVIEFILE           = (1 << 5),
673         PYSCRIPTFILE        = (1 << 6),
674         FTFONTFILE          = (1 << 7),
675         SOUNDFILE           = (1 << 8),
676         TEXTFILE            = (1 << 9),
677         MOVIEFILE_ICON      = (1 << 10), /* movie file that preview can't load */
678         FOLDERFILE          = (1 << 11), /* represents folders for filtering */
679         BTXFILE             = (1 << 12),
680         COLLADAFILE         = (1 << 13),
681         OPERATORFILE        = (1 << 14), /* from filter_glob operator property */
682 } eFileSel_File_Types;
683
684 /* Selection Flags in filesel: struct direntry, unsigned char selflag */
685 typedef enum eDirEntry_SelectFlag {
686 /*  ACTIVE_FILE         = (1 << 1), */ /* UNUSED */
687         HILITED_FILE        = (1 << 2),
688         SELECTED_FILE       = (1 << 3),
689         EDITING_FILE        = (1 << 4),
690 } eDirEntry_SelectFlag;
691
692 /* Image/UV Editor ======================================== */
693
694 /* Image/UV Editor */
695 typedef struct SpaceImage {
696         SpaceLink *next, *prev;
697         ListBase regionbase;        /* storage of regions for inactive spaces */
698         int spacetype;
699
700         int flag;
701
702         struct Image *image;
703         struct ImageUser iuser;
704
705         struct CurveMapping *cumap DNA_DEPRECATED;  /* was switched to scene's color management settings */
706
707         struct Scopes scopes;           /* histogram waveform and vectorscope */
708         struct Histogram sample_line_hist;  /* sample line histogram */
709
710         struct bGPdata *gpd;            /* grease pencil data */
711
712         float cursor[2];                /* UV editor 2d cursor */
713         float xof, yof;                 /* user defined offset, image is centered */
714         float zoom;                     /* user defined zoom level */
715         float centx, centy;             /* storage for offset while render drawing */
716
717         char  mode;                     /* view/paint/mask */
718         char  pin;
719         short pad;
720         short curtile; /* the currently active tile of the image when tile is enabled, is kept in sync with the active faces tile */
721         short lock;
722         char dt_uv; /* UV draw type */
723         char sticky; /* sticky selection type */
724         char dt_uvstretch;
725         char around;
726
727         MaskSpaceInfo mask_info;
728 } SpaceImage;
729
730
731 /* SpaceImage->dt_uv */
732 typedef enum eSpaceImage_UVDT {
733         SI_UVDT_OUTLINE = 0,
734         SI_UVDT_DASH = 1,
735         SI_UVDT_BLACK = 2,
736         SI_UVDT_WHITE = 3,
737 } eSpaceImage_UVDT;
738
739 /* SpaceImage->dt_uvstretch */
740 typedef enum eSpaceImage_UVDT_Stretch {
741         SI_UVDT_STRETCH_ANGLE = 0,
742         SI_UVDT_STRETCH_AREA = 1,
743 } eSpaceImage_UVDT_Stretch;
744
745 /* SpaceImage->mode */
746 typedef enum eSpaceImage_Mode {
747         SI_MODE_VIEW  = 0,
748         SI_MODE_PAINT = 1,
749         SI_MODE_MASK  = 2   /* note: mesh edit mode overrides mask */
750 } eSpaceImage_Mode;
751
752 /* SpaceImage->sticky
753  * Note DISABLE should be 0, however would also need to re-arrange icon order,
754  * also, sticky loc is the default mode so this means we don't need to 'do_versons' */
755 typedef enum eSpaceImage_Sticky {
756         SI_STICKY_LOC      = 0,
757         SI_STICKY_DISABLE  = 1,
758         SI_STICKY_VERTEX   = 2,
759 } eSpaceImage_Sticky;
760
761 /* SpaceImage->flag */
762 typedef enum eSpaceImage_Flag {
763 /*      SI_BE_SQUARE          = (1 << 0), */  /* deprecated */
764         SI_EDITTILE           = (1 << 1),     /* XXX - not used but should be? */
765         SI_CLIP_UV            = (1 << 2),
766 /*      SI_DRAWTOOL           = (1 << 3), */  /* deprecated */
767         SI_NO_DRAWFACES       = (1 << 4),
768         SI_DRAWSHADOW         = (1 << 5),
769 /*      SI_SELACTFACE         = (1 << 6), */  /* deprecated */
770 /*      SI_DEPRECATED2        = (1 << 7), */  /* deprecated */
771 /*      SI_DEPRECATED3        = (1 << 8), */  /* deprecated */
772         SI_COORDFLOATS        = (1 << 9),
773         SI_PIXELSNAP          = (1 << 10),
774         SI_LIVE_UNWRAP        = (1 << 11),
775         SI_USE_ALPHA          = (1 << 12),
776         SI_SHOW_ALPHA         = (1 << 13),
777         SI_SHOW_ZBUF          = (1 << 14),
778         
779         /* next two for render window display */
780         SI_PREVSPACE          = (1 << 15),
781         SI_FULLWINDOW         = (1 << 16),
782         
783 /*      SI_DEPRECATED4        = (1 << 17), */  /* deprecated */
784 /*      SI_DEPRECATED5        = (1 << 18), */  /* deprecated */
785         
786         /* this means that the image is drawn until it reaches the view edge,
787          * in the image view, its unrelated to the 'tile' mode for texface
788          */
789         SI_DRAW_TILE          = (1 << 19),
790         SI_SMOOTH_UV          = (1 << 20),
791         SI_DRAW_STRETCH       = (1 << 21),
792         SI_SHOW_GPENCIL       = (1 << 22),
793         SI_DRAW_OTHER         = (1 << 23),
794
795         SI_COLOR_CORRECTION   = (1 << 24),
796 } eSpaceImage_Flag;
797
798 /* Text Editor ============================================ */
799
800 /* Text Editor */
801 typedef struct SpaceText {
802         SpaceLink *next, *prev;
803         ListBase regionbase;        /* storage of regions for inactive spaces */
804         int spacetype;
805         float blockscale DNA_DEPRECATED;
806         short blockhandler[8]  DNA_DEPRECATED;
807
808         struct Text *text;
809
810         int top, viewlines;
811         short flags, menunr;
812
813         short lheight;      /* user preference, is font_size! */
814         char cwidth, linenrs_tot;       /* runtime computed, character width and the number of chars to use when showing line numbers */
815         int left;
816         int showlinenrs;
817         int tabnumber;
818
819         short showsyntax;
820         short line_hlight;
821         short overwrite;
822         short live_edit; /* run python while editing, evil */
823         float pix_per_line;
824
825         struct rcti txtscroll, txtbar;
826
827         int wordwrap, doplugins;
828
829         char findstr[256];      /* ST_MAX_FIND_STR */
830         char replacestr[256];   /* ST_MAX_FIND_STR */
831
832         short margin_column;    /* column number to show right margin at */
833         short lheight_dpi;              /* actual lineheight, dpi controlled */
834         char pad[4];
835
836         void *drawcache; /* cache for faster drawing */
837 } SpaceText;
838
839
840 /* SpaceText flags (moved from DNA_text_types.h) */
841 typedef enum eSpaceText_Flags {
842         /* scrollable */
843         ST_SCROLL_SELECT        = (1 << 0),
844         /* clear namespace after script execution (BPY_main.c) */
845         ST_CLEAR_NAMESPACE      = (1 << 4), 
846         
847         ST_FIND_WRAP            = (1 << 5),
848         ST_FIND_ALL             = (1 << 6),
849         ST_SHOW_MARGIN          = (1 << 7),
850         ST_MATCH_CASE           = (1 << 8),
851         
852         ST_FIND_ACTIVATE                = (1 << 9),
853 } eSpaceText_Flags;
854
855 /* stext->findstr/replacestr */
856 #define ST_MAX_FIND_STR     256
857
858 /* Script View (Obsolete) ================================== */
859
860 /* Script Runtime Data - Obsolete (pre 2.5) */
861 typedef struct Script {
862         ID id;
863
864         void *py_draw;
865         void *py_event;
866         void *py_button;
867         void *py_browsercallback;
868         void *py_globaldict;
869
870         int flags, lastspace;
871         /* store the script file here so we can re-run it on loading blender, if "Enable Scripts" is on */
872         char scriptname[1024]; /* 1024 = FILE_MAX */
873         char scriptarg[256]; /* 1024 = FILE_MAX */
874 } Script;
875 #define SCRIPT_SET_NULL(_script) _script->py_draw = _script->py_event = _script->py_button = _script->py_browsercallback = _script->py_globaldict = NULL; _script->flags = 0
876
877 /* Script View - Obsolete (pre 2.5) */
878 typedef struct SpaceScript {
879         SpaceLink *next, *prev;
880         ListBase regionbase;        /* storage of regions for inactive spaces */
881         int spacetype;
882         float blockscale DNA_DEPRECATED;
883         struct Script *script;
884
885         short flags, menunr;
886         int pad1;
887         
888         void *but_refs;
889 } SpaceScript;
890
891 /* Nodes Editor =========================================== */
892
893 /* Node Editor */
894
895 typedef struct bNodeTreePath {
896         struct bNodeTreePath *next, *prev;
897         
898         struct bNodeTree *nodetree;
899         bNodeInstanceKey parent_key;    /* base key for nodes in this tree instance */
900         int pad;
901         float view_center[2];                   /* v2d center point, so node trees can have different offsets in editors */
902         /* XXX this is not automatically updated when node names are changed! */
903         char node_name[64];             /* MAX_NAME */
904 } bNodeTreePath;
905
906 typedef struct SpaceNode {
907         SpaceLink *next, *prev;
908         ListBase regionbase;        /* storage of regions for inactive spaces */
909         int spacetype;
910         float blockscale DNA_DEPRECATED;
911         short blockhandler[8]  DNA_DEPRECATED;
912         
913         View2D v2d DNA_DEPRECATED;  /* deprecated, copied to region */
914         
915         struct ID *id, *from;       /* context, no need to save in file? well... pinning... */
916         short flag, pad1;           /* menunr: browse id block in header */
917         float aspect, pad2;     /* internal state variables */
918         
919         float xof, yof;     /* offset for drawing the backdrop */
920         float zoom;   /* zoom for backdrop */
921         float cursor[2];    /* mouse pos for drawing socketless link and adding nodes */
922         
923         /* XXX nodetree pointer info is all in the path stack now,
924          * remove later on and use bNodeTreePath instead. For now these variables are set when pushing/popping
925          * from path stack, to avoid having to update all the functions and operators. Can be done when
926          * design is accepted and everything is properly tested.
927          */
928         ListBase treepath;
929         
930         struct bNodeTree *nodetree, *edittree;
931         
932         /* tree type for the current node tree */
933         char tree_idname[64];
934         int treetype DNA_DEPRECATED; /* treetype: as same nodetree->type */
935         int pad3;
936         
937         short texfrom;      /* texfrom object, world or brush */
938         short shaderfrom;   /* shader from object or world */
939         short recalc;       /* currently on 0/1, for auto compo */
940         short pad4;
941         ListBase linkdrag;  /* temporary data for modal linking operator */
942         
943         struct bGPdata *gpd;        /* grease-pencil data */
944 } SpaceNode;
945
946 /* snode->flag */
947 typedef enum eSpaceNode_Flag {
948         SNODE_BACKDRAW       = (1 << 1),
949         SNODE_SHOW_GPENCIL   = (1 << 2),
950         SNODE_USE_ALPHA      = (1 << 3),
951         SNODE_SHOW_ALPHA     = (1 << 4),
952         SNODE_SHOW_R         = (1 << 7),
953         SNODE_SHOW_G         = (1 << 8),
954         SNODE_SHOW_B         = (1 << 9),
955         SNODE_AUTO_RENDER    = (1 << 5),
956         SNODE_SHOW_HIGHLIGHT = (1 << 6),
957         SNODE_USE_HIDDEN_PREVIEW = (1 << 10),
958         SNODE_NEW_SHADERS = (1 << 11),
959         SNODE_PIN            = (1 << 12),
960 } eSpaceNode_Flag;
961
962 /* snode->texfrom */
963 typedef enum eSpaceNode_TexFrom {
964         SNODE_TEX_OBJECT   = 0,
965         SNODE_TEX_WORLD    = 1,
966         SNODE_TEX_BRUSH    = 2,
967 } eSpaceNode_TexFrom;
968
969 /* snode->shaderfrom */
970 typedef enum eSpaceNode_ShaderFrom {
971         SNODE_SHADER_OBJECT = 0,
972         SNODE_SHADER_WORLD = 1,
973 } eSpaceNode_ShaderFrom;
974
975 /* Game Logic Editor ===================================== */
976
977 /* Logic Editor */
978 typedef struct SpaceLogic {
979         SpaceLink *next, *prev;
980         ListBase regionbase;        /* storage of regions for inactive spaces */
981         int spacetype;
982         float blockscale DNA_DEPRECATED;
983         
984         short blockhandler[8]  DNA_DEPRECATED;
985         
986         short flag, scaflag;
987         int pad;
988         
989         struct bGPdata *gpd;        /* grease-pencil data */
990 } SpaceLogic;
991
992 /* Console ================================================ */
993
994 /* Console content */
995 typedef struct ConsoleLine {
996         struct ConsoleLine *next, *prev;
997         
998         /* keep these 3 vars so as to share free, realloc funcs */
999         int len_alloc;  /* allocated length */
1000         int len;    /* real len - strlen() */
1001         char *line; 
1002         
1003         int cursor;
1004         int type; /* only for use when in the 'scrollback' listbase */
1005 } ConsoleLine;
1006
1007 /* ConsoleLine.type */
1008 typedef enum eConsoleLine_Type {
1009         CONSOLE_LINE_OUTPUT = 0,
1010         CONSOLE_LINE_INPUT = 1,
1011         CONSOLE_LINE_INFO = 2, /* autocomp feedback */
1012         CONSOLE_LINE_ERROR = 3
1013 } eConsoleLine_Type;
1014
1015
1016 /* Console View */
1017 typedef struct SpaceConsole {
1018         SpaceLink *next, *prev;
1019         ListBase regionbase;        /* storage of regions for inactive spaces */
1020         int spacetype;
1021         float blockscale DNA_DEPRECATED;            // XXX are these needed?
1022         short blockhandler[8]  DNA_DEPRECATED;      // XXX are these needed?
1023         
1024         /* space vars */
1025         int lheight, pad;
1026
1027         ListBase scrollback; /* ConsoleLine; output */
1028         ListBase history; /* ConsoleLine; command history, current edited line is the first */
1029         char prompt[256];
1030         char language[32]; /* multiple consoles are possible, not just python */
1031         
1032         int sel_start;
1033         int sel_end;
1034 } SpaceConsole;
1035
1036
1037 /* User Preferences ======================================= */
1038
1039 /* User Preferences View */
1040 typedef struct SpaceUserPref {
1041         SpaceLink *next, *prev;
1042         ListBase regionbase;        /* storage of regions for inactive spaces */
1043         int spacetype;
1044         
1045         char pad[3];
1046         char filter_type;
1047         char filter[64];        /* search term for filtering in the UI */
1048 } SpaceUserPref;
1049
1050 /* Motion Tracking ======================================== */
1051
1052 /* Clip Editor */
1053 typedef struct SpaceClip {
1054         SpaceLink *next, *prev;
1055         ListBase regionbase;        /* storage of regions for inactive spaces */
1056         int spacetype;
1057
1058         float xof, yof;             /* user defined offset, image is centered */
1059         float xlockof, ylockof;     /* user defined offset from locked position */
1060         float zoom;                 /* user defined zoom level */
1061
1062         struct MovieClipUser user;      /* user of clip */
1063         struct MovieClip *clip;         /* clip data */
1064         struct MovieClipScopes scopes;  /* different scoped displayed in space panels */
1065
1066         int flag;                   /* flags */
1067         short mode;                 /* editor mode (editing context being displayed) */
1068         short view;                 /* type of the clip editor view */
1069
1070         int path_length;            /* length of displaying path, in frames */
1071
1072         /* current stabilization data */
1073         float loc[2], scale, angle; /* pre-composed stabilization data */
1074         int pad;
1075         float stabmat[4][4], unistabmat[4][4];  /* current stabilization matrix and the same matrix in unified space,
1076                                                  * defined when drawing and used for mouse position calculation */
1077
1078         /* movie postprocessing */
1079         int postproc_flag;
1080
1081         /* grease pencil */
1082         short gpencil_src, pad2;
1083
1084         int around, pad4;             /* pivot point for transforms */
1085
1086         MaskSpaceInfo mask_info;
1087 } SpaceClip;
1088
1089 /* SpaceClip->flag */
1090 typedef enum eSpaceClip_Flag {
1091         SC_SHOW_MARKER_PATTERN = (1 << 0),
1092         SC_SHOW_MARKER_SEARCH  = (1 << 1),
1093         SC_LOCK_SELECTION      = (1 << 2),
1094         SC_SHOW_TINY_MARKER    = (1 << 3),
1095         SC_SHOW_TRACK_PATH     = (1 << 4),
1096         SC_SHOW_BUNDLES        = (1 << 5),
1097         SC_MUTE_FOOTAGE        = (1 << 6),
1098         SC_HIDE_DISABLED       = (1 << 7),
1099         SC_SHOW_NAMES          = (1 << 8),
1100         SC_SHOW_GRID           = (1 << 9),
1101         SC_SHOW_STABLE         = (1 << 10),
1102         SC_MANUAL_CALIBRATION  = (1 << 11),
1103         SC_SHOW_GPENCIL        = (1 << 12),
1104         SC_SHOW_FILTERS        = (1 << 13),
1105         SC_SHOW_GRAPH_FRAMES   = (1 << 14),
1106         SC_SHOW_GRAPH_TRACKS   = (1 << 15),
1107 /*      SC_SHOW_PYRAMID_LEVELS = (1 << 16), */  /* UNUSED */
1108         SC_LOCK_TIMECURSOR     = (1 << 17),
1109         SC_SHOW_SECONDS        = (1 << 18),
1110         SC_SHOW_GRAPH_SEL_ONLY = (1 << 19),
1111         SC_SHOW_GRAPH_HIDDEN   = (1 << 20),
1112 } eSpaceClip_Flag;
1113
1114 /* SpaceClip->mode */
1115 typedef enum eSpaceClip_Mode {
1116         SC_MODE_TRACKING = 0,
1117         SC_MODE_RECONSTRUCTION = 1,
1118         SC_MODE_DISTORTION = 2,
1119         SC_MODE_MASKEDIT = 3,
1120 } eSpaceClip_Mode;
1121
1122 /* SpaceClip->view */
1123 typedef enum eSpaceClip_View {
1124         SC_VIEW_CLIP = 0,
1125         SC_VIEW_GRAPH = 1,
1126         SC_VIEW_DOPESHEET = 2,
1127 } eSpaceClip_View;
1128
1129 /* SpaceClip->gpencil_src */
1130 typedef enum eSpaceClip_GPencil_Source {
1131         SC_GPENCIL_SRC_CLIP = 0,
1132         SC_GPENCIL_SRC_TRACK = 1,
1133 } eSpaceClip_GPencil_Source;
1134
1135 /* **************** SPACE DEFINES ********************* */
1136
1137 /* space types, moved from DNA_screen_types.h */
1138 /* Do NOT change order, append on end. types are hardcoded needed */
1139 typedef enum eSpace_Type {
1140         SPACE_EMPTY    = 0,
1141         SPACE_VIEW3D   = 1,
1142         SPACE_IPO      = 2,
1143         SPACE_OUTLINER = 3,
1144         SPACE_BUTS     = 4,
1145         SPACE_FILE     = 5,
1146         SPACE_IMAGE    = 6,
1147         SPACE_INFO     = 7,
1148         SPACE_SEQ      = 8,
1149         SPACE_TEXT     = 9,
1150         SPACE_IMASEL   = 10, /* deprecated */
1151         SPACE_SOUND    = 11, /* Deprecated */
1152         SPACE_ACTION   = 12,
1153         SPACE_NLA      = 13,
1154         SPACE_SCRIPT   = 14, /* Deprecated */
1155         SPACE_TIME     = 15,
1156         SPACE_NODE     = 16,
1157         SPACE_LOGIC    = 17,
1158         SPACE_CONSOLE  = 18,
1159         SPACE_USERPREF = 19,
1160         SPACE_CLIP     = 20,
1161         
1162         SPACEICONMAX = SPACE_CLIP
1163 } eSpace_Type;
1164
1165 #define IMG_SIZE_FALLBACK 256
1166
1167 #endif  /* __DNA_SPACE_TYPES_H__ */