Merging r38898 through r38940 from trunk into soc-2011-tomato
[blender.git] / source / blender / makesdna / DNA_userdef_types.h
1 /*
2  *      $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28 */
29
30 #ifndef DNA_USERDEF_TYPES_H
31 #define DNA_USERDEF_TYPES_H
32 /** \file DNA_userdef_types.h
33  *  \ingroup DNA
34  *  \since mar-2001
35  *  \author nzc
36  *
37  */
38
39 #include "DNA_listBase.h"
40 #include "DNA_texture_types.h" /* ColorBand */
41
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45
46 /* themes; defines in BIF_resource.h */
47 struct ColorBand;
48
49 /* ************************ style definitions ******************** */
50
51 #define MAX_STYLE_NAME  64
52 #define MAX_FONT_NAME   256
53
54 /* default uifont_id offered by Blender */
55 #define UIFONT_DEFAULT  0
56 /*#define UIFONT_BITMAP 1*/ /*UNUSED*/
57 /* free slots */
58 #define UIFONT_CUSTOM1  2
59 #define UIFONT_CUSTOM2  3
60
61 /* default fonts to load/initalize */
62 /* first font is the default (index 0), others optional */
63 typedef struct uiFont {
64         struct uiFont *next, *prev;
65         char filename[256];
66         short blf_id;           /* from blfont lib */
67         short uifont_id;        /* own id */
68         short r_to_l;           /* fonts that read from left to right */
69         short pad;
70         
71 } uiFont;
72
73 /* this state defines appearance of text */
74 typedef struct uiFontStyle {
75         short uifont_id;                /* saved in file, 0 is default */
76         short points;                   /* actual size depends on 'global' dpi */
77         short kerning;                  /* unfitted or default kerning value. */
78         char pad[6];
79         short italic, bold;             /* style hint */
80         short shadow;                   /* value is amount of pixels blur */
81         short shadx, shady;             /* shadow offset in pixels */
82         short align;                    /* text align hint */
83         float shadowalpha;              /* total alpha */
84         float shadowcolor;              /* 1 value, typically white or black anyway */
85         
86 } uiFontStyle;
87
88 /* uiFontStyle->align */
89 #define UI_STYLE_TEXT_LEFT              0
90 #define UI_STYLE_TEXT_CENTER    1
91 #define UI_STYLE_TEXT_RIGHT             2
92
93
94 /* this is fed to the layout engine and widget code */
95
96 typedef struct uiStyle {
97         struct uiStyle *next, *prev;
98         
99         char name[64];                  /* MAX_STYLE_NAME */
100         
101         uiFontStyle paneltitle;
102         uiFontStyle grouplabel;
103         uiFontStyle widgetlabel;
104         uiFontStyle widget;
105         
106         float panelzoom;
107         
108         short minlabelchars;    /* in characters */
109         short minwidgetchars;   /* in characters */
110
111         short columnspace;
112         short templatespace;
113         short boxspace;
114         short buttonspacex;
115         short buttonspacey;
116         short panelspace;
117         short panelouter;
118
119         short pad[1];
120 } uiStyle;
121
122 typedef struct uiWidgetColors {
123         char outline[4];
124         char inner[4];
125         char inner_sel[4];
126         char item[4];
127         char text[4];
128         char text_sel[4];
129         short shaded;
130         short shadetop, shadedown;
131         short alpha_check;
132 } uiWidgetColors;
133
134 typedef struct uiWidgetStateColors {
135         char inner_anim[4];
136         char inner_anim_sel[4];
137         char inner_key[4];
138         char inner_key_sel[4];
139         char inner_driven[4];
140         char inner_driven_sel[4];
141         float blend, pad;
142 } uiWidgetStateColors;
143
144 typedef struct ThemeUI {
145         
146         /* Interface Elements (buttons, menus, icons) */
147         uiWidgetColors wcol_regular, wcol_tool, wcol_text;
148         uiWidgetColors wcol_radio, wcol_option, wcol_toggle;
149         uiWidgetColors wcol_num, wcol_numslider;
150         uiWidgetColors wcol_menu, wcol_pulldown, wcol_menu_back, wcol_menu_item;
151         uiWidgetColors wcol_box, wcol_scroll, wcol_progress, wcol_list_item;
152         
153         uiWidgetStateColors wcol_state;
154         
155         char iconfile[80];      // FILE_MAXFILE length
156         
157 } ThemeUI;
158
159 /* try to put them all in one, if needed a special struct can be created as well
160  * for example later on, when we introduce wire colors for ob types or so...
161  */
162 typedef struct ThemeSpace {
163         /* main window colors */
164         char back[4];
165         char title[4];
166         char text[4];
167         char text_hi[4];
168         
169         /* header colors */
170         char header[4];
171         char header_title[4];
172         char header_text[4];
173         char header_text_hi[4];
174
175         /* button/tool regions */
176         char button[4];
177         char button_title[4];
178         char button_text[4];    
179         char button_text_hi[4];
180         
181         /* listview regions */
182         char list[4];
183         char list_title[4];
184         char list_text[4];
185         char list_text_hi[4];
186         
187         /* float panel */
188         char panel[4];
189         char panel_title[4];    
190         char panel_text[4];     
191         char panel_text_hi[4];
192         
193         char shade1[4];
194         char shade2[4];
195         
196         char hilite[4];
197         char grid[4]; 
198         
199         char wire[4], select[4];
200         char lamp[4];
201         char active[4], group[4], group_active[4], transform[4];
202         char vertex[4], vertex_select[4];
203         char edge[4], edge_select[4];
204         char edge_seam[4], edge_sharp[4], edge_facesel[4], edge_crease[4];
205         char face[4], face_select[4];   // solid faces
206         char face_dot[4];                               // selected color
207         char extra_edge_len[4], extra_face_angle[4], extra_face_area[4], pad3[4];
208         char normal[4];
209         char vertex_normal[4];
210         char bone_solid[4], bone_pose[4];
211         char strip[4], strip_select[4];
212         char cframe[4];
213         char nurb_uline[4], nurb_vline[4];
214         char act_spline[4], nurb_sel_uline[4], nurb_sel_vline[4], lastsel_point[4];
215         char handle_free[4], handle_auto[4], handle_vect[4], handle_align[4];
216         char handle_sel_free[4], handle_sel_auto[4], handle_sel_vect[4], handle_sel_align[4];
217         char ds_channel[4], ds_subchannel[4]; // dopesheet
218         
219         char console_output[4], console_input[4], console_info[4], console_error[4];
220         char console_cursor[4];
221         
222         char vertex_size, outline_width, facedot_size;
223         char bpad;
224
225         char syntaxl[4], syntaxn[4], syntaxb[4]; // syntax for textwindow and nodes
226         char syntaxv[4], syntaxc[4];
227         
228         char movie[4], image[4], scene[4], audio[4];            // for sequence editor
229         char effect[4], plugin[4], transition[4], meta[4];
230         char editmesh_active[4]; 
231
232         char handle_vertex[4];
233         char handle_vertex_select[4];
234         
235         char handle_vertex_size;
236         
237         char marker_outline[4], marker[4], act_marker[4], sel_marker[4], dis_marker[4], lock_marker[4];
238         char bundle_solid[4];
239         char path_before[4], path_after[4];
240         char camera_path[4];
241         char hpad[7];
242         
243         char preview_back[4];
244         
245 } ThemeSpace;
246
247
248 /* set of colors for use as a custom color set for Objects/Bones wire drawing */
249 typedef struct ThemeWireColor {
250         char    solid[4];
251         char    select[4];
252         char    active[4];
253         
254         short   flag;
255         short   pad;
256 } ThemeWireColor; 
257
258 /* flags for ThemeWireColor */
259 #define TH_WIRECOLOR_CONSTCOLS  (1<<0)
260 #define TH_WIRECOLOR_TEXTCOLS   (1<<1)
261
262 /* A theme */
263 typedef struct bTheme {
264         struct bTheme *next, *prev;
265         char name[32];
266         
267         ThemeUI tui;
268         
269         /* Individual Spacetypes */
270         ThemeSpace tbuts;       
271         ThemeSpace tv3d;
272         ThemeSpace tfile;
273         ThemeSpace tipo;
274         ThemeSpace tinfo;       
275         ThemeSpace tsnd;
276         ThemeSpace tact;
277         ThemeSpace tnla;
278         ThemeSpace tseq;
279         ThemeSpace tima;
280         ThemeSpace timasel;
281         ThemeSpace text;
282         ThemeSpace toops;
283         ThemeSpace ttime;
284         ThemeSpace tnode;
285         ThemeSpace tlogic;
286         ThemeSpace tuserpref;   
287         ThemeSpace tconsole;
288         ThemeSpace tclip;
289         
290         /* 20 sets of bone colors for this theme */
291         ThemeWireColor tarm[20];
292         /*ThemeWireColor tobj[20];*/
293         
294         int active_theme_area, pad;
295         
296 } bTheme;
297
298 /* for the moment only the name. may want to store options with this later */
299 typedef struct bAddon {
300         struct bAddon *next, *prev;
301         char module[64];
302 } bAddon;
303
304 typedef struct SolidLight {
305         int flag, pad;
306         float col[4], spec[4], vec[4];
307 } SolidLight;
308
309 typedef struct UserDef {
310         int flag, dupflag;
311         int savetime;
312         char tempdir[160];      // FILE_MAXDIR length
313         char fontdir[160];
314         char renderdir[240]; // FILE_MAX length
315         char textudir[160];
316         char plugtexdir[160];
317         char plugseqdir[160];
318         char pythondir[160];
319         char sounddir[160];
320         char image_editor[240]; // FILE_MAX length
321         char anim_player[240];  // FILE_MAX length
322         int anim_player_preset;
323         
324         short v2d_min_gridsize;         /* minimum spacing between gridlines in View2D grids */
325         short timecode_style;           /* style of timecode display */
326         
327         short versions;
328         short dbl_click_time;
329         
330         int gameflags;
331         int wheellinescroll;
332         int uiflag, language;
333         short userpref, viewzoom;
334         
335         int mixbufsize;
336         int audiodevice;
337         int audiorate;
338         int audioformat;
339         int audiochannels;
340
341         int scrollback; /* console scrollback limit */
342         int dpi;                /* range 48-128? */
343         short encoding;
344         short transopts;
345         short menuthreshold1, menuthreshold2;
346         
347         struct ListBase themes;
348         struct ListBase uifonts;
349         struct ListBase uistyles;
350         struct ListBase keymaps;
351         struct ListBase addons;
352         char keyconfigstr[64];
353         
354         short undosteps;
355         short undomemory;
356         short gp_manhattendist, gp_euclideandist, gp_eraser;
357         short gp_settings;
358         short tb_leftmouse, tb_rightmouse;
359         struct SolidLight light[3];
360         short tw_hotspot, tw_flag, tw_handlesize, tw_size;
361         short textimeout,texcollectrate;
362         short wmdrawmethod; /* removed wmpad */
363         short dragthreshold;
364         int memcachelimit;
365         int prefetchframes;
366         short frameserverport;
367         short pad_rot_angle;    /*control the rotation step of the view when PAD2,PAD4,PAD6&PAD8 is use*/
368         short obcenter_dia;
369         short rvisize;                  /* rotating view icon size */
370         short rvibright;                /* rotating view icon brightness */
371         short recent_files;             /* maximum number of recently used files to remember  */
372         short smooth_viewtx;    /* miliseconds to spend spinning the view */
373         short glreslimit;
374         short curssize;
375         short color_picker_type;
376         short ipo_new;                  /* interpolation mode for newly added F-Curves */
377         short keyhandles_new;   /* handle types for newly added keyframes */
378
379         short scrcastfps;               /* frame rate for screencast to be played back */
380         short scrcastwait;              /* milliseconds between screencast snapshots */
381         
382         short widget_unit;              /* defaults to 20 for 72 DPI setting */
383         short anisotropic_filter;
384         /*short pad[3];                 */
385
386         float ndof_sensitivity; /* overall sensitivity of 3D mouse */
387         int ndof_flag;                  /* flags for 3D mouse */
388
389         char versemaster[160];
390         char verseuser[160];
391         float glalphaclip;
392         
393         short autokey_mode;             /* autokeying mode */
394         short autokey_flag;             /* flags for autokeying */
395         
396         short text_render, pad9[3];             /*options for text rendering*/
397
398         struct ColorBand coba_weight;   /* from texture.h */
399
400         float sculpt_paint_overlay_col[3];
401         int pad3;
402
403         char author[80];        /* author name for file formats supporting it */
404 } UserDef;
405
406 extern UserDef U; /* from blenkernel blender.c */
407
408 /* ***************** USERDEF ****************** */
409
410 /* userpref/section */
411 #define USER_SECTION_INTERFACE  0
412 #define USER_SECTION_EDIT               1
413 #define USER_SECTION_FILE               2
414 #define USER_SECTION_SYSTEM             3
415 #define USER_SECTION_THEME              4
416 #define USER_SECTION_INPUT              5
417 #define USER_SECTION_ADDONS     6
418
419 /* flag */
420 #define USER_AUTOSAVE                   (1 << 0)
421 /*#define USER_AUTOGRABGRID             (1 << 1)        deprecated */
422 /*#define USER_AUTOROTGRID              (1 << 2)        deprecated */
423 /*#define USER_AUTOSIZEGRID             (1 << 3)        deprecated */
424 #define USER_SCENEGLOBAL                (1 << 4)
425 #define USER_TRACKBALL                  (1 << 5)
426 /*#define USER_DUPLILINK                (1 << 6)        deprecated */
427 /*#define USER_FSCOLLUM                 (1 << 7)        deprecated */
428 #define USER_MAT_ON_OB                  (1 << 8)
429 /*#define USER_NO_CAPSLOCK              (1 << 9)*/ /* not used anywhere */
430 /*#define USER_VIEWMOVE                 (1 << 10)*/ /* not used anywhere */
431 #define USER_TOOLTIPS                   (1 << 11)
432 #define USER_TWOBUTTONMOUSE             (1 << 12)
433 #define USER_NONUMPAD                   (1 << 13)
434 #define USER_LMOUSESELECT               (1 << 14)
435 #define USER_FILECOMPRESS               (1 << 15)
436 #define USER_SAVE_PREVIEWS              (1 << 16)
437 #define USER_CUSTOM_RANGE               (1 << 17)
438 #define USER_ADD_EDITMODE               (1 << 18)
439 #define USER_ADD_VIEWALIGNED    (1 << 19)
440 #define USER_RELPATHS                   (1 << 20)
441 #define USER_RELEASECONFIRM             (1 << 21)
442 #define USER_SCRIPT_AUTOEXEC_DISABLE    (1 << 22)
443 #define USER_FILENOUI                   (1 << 23)
444 #define USER_NONEGFRAMES                (1 << 24)
445 #define USER_TXT_TABSTOSPACES_DISABLE   (1 << 25)
446 #define USER_TOOLTIPS_PYTHON    (1 << 26)
447
448 /* helper macro for checking frame clamping */
449 #define FRAMENUMBER_MIN_CLAMP(cfra) \
450         { \
451                 if ((U.flag & USER_NONEGFRAMES) && (cfra < 0)) \
452                         cfra = 0; \
453         }
454
455 /* viewzom */
456 #define USER_ZOOM_CONT                  0
457 #define USER_ZOOM_SCALE                 1
458 #define USER_ZOOM_DOLLY                 2
459
460 /* uiflag */
461 // old flag for #define USER_KEYINSERTACT               (1 << 0)
462 // old flag for #define USER_KEYINSERTOBJ               (1 << 1)
463 #define USER_WHEELZOOMDIR               (1 << 2)
464 #define USER_FILTERFILEEXTS             (1 << 3)
465 #define USER_DRAWVIEWINFO               (1 << 4)
466 #define USER_PLAINMENUS                 (1 << 5)                // old EVTTOCONSOLE print ghost events, here for tuhopuu compat. --phase
467                                                                 // old flag for hide pulldown was here 
468 /*#define USER_FLIPFULLSCREEN           (1 << 7)*/ /* deprecated */
469 #define USER_ALLWINCODECS               (1 << 8)
470 #define USER_MENUOPENAUTO               (1 << 9)
471 /*#define USER_PANELPINNED              (1 << 10)               deprecated */
472 #define USER_AUTOPERSP                  (1 << 11)
473 #define USER_LOCKAROUND         (1 << 12)
474 #define USER_GLOBALUNDO         (1 << 13)
475 #define USER_ORBIT_SELECTION    (1 << 14)
476 // old flag for #define USER_KEYINSERTAVAI              (1 << 15)
477 #define USER_ORBIT_ZBUF                 (1 << 15)
478 #define USER_HIDE_DOT                   (1 << 16)
479 #define USER_SHOW_ROTVIEWICON   (1 << 17)
480 #define USER_SHOW_VIEWPORTNAME  (1 << 18)
481 #define USER_CAM_LOCK_NO_PARENT (1 << 19)
482 #define USER_ZOOM_TO_MOUSEPOS   (1 << 20)
483 #define USER_SHOW_FPS                   (1 << 21)
484 #define USER_MMB_PASTE                  (1 << 22)
485 #define USER_MENUFIXEDORDER             (1 << 23)
486 #define USER_CONTINUOUS_MOUSE   (1 << 24)
487 #define USER_ZOOM_INVERT                (1 << 25)
488 #define USER_ZOOM_HORIZ         (1 << 26) /* for CONTINUE and DOLLY zoom */
489 #define USER_SPLASH_DISABLE             (1 << 27)
490 #define USER_HIDE_RECENT                (1 << 28)
491 #define USER_SHOW_THUMBNAILS    (1 << 29)
492
493 /* Auto-Keying mode */
494         /* AUTOKEY_ON is a bitflag */
495 #define         AUTOKEY_ON                              1
496         /* AUTOKEY_ON + 2**n...  (i.e. AUTOKEY_MODE_NORMAL = AUTOKEY_ON + 2) to preserve setting, even when autokey turned off  */
497 #define         AUTOKEY_MODE_NORMAL             3
498 #define         AUTOKEY_MODE_EDITKEYS   5
499
500 /* Auto-Keying flag
501  * U.autokey_flag (not strictly used when autokeying only - is also used when keyframing these days)
502  * note: AUTOKEY_FLAG_* is used with a macro, search for lines like IS_AUTOKEY_FLAG(INSERTAVAIL)
503  */
504 #define         AUTOKEY_FLAG_INSERTAVAIL        (1<<0)
505 #define         AUTOKEY_FLAG_INSERTNEEDED       (1<<1)
506 #define         AUTOKEY_FLAG_AUTOMATKEY         (1<<2)
507 #define         AUTOKEY_FLAG_XYZ2RGB            (1<<3)
508
509 /* toolsettings->autokey_flag */
510 #define         AUTOKEY_FLAG_ONLYKEYINGSET      (1<<6)
511 #define         ANIMRECORD_FLAG_WITHNLA         (1<<10)
512
513 /* transopts */
514 #define USER_TR_TOOLTIPS                (1 << 0)
515 #define USER_TR_BUTTONS                 (1 << 1)
516 #define USER_TR_MENUS                   (1 << 2)
517 /*#define USER_TR_FILESELECT    (1 << 3)        deprecated*/
518 /*#define USER_TR_TEXTEDIT              (1 << 4)        deprecated*/
519 #define USER_DOTRANSLATE                (1 << 5)
520 #define USER_USETEXTUREFONT             (1 << 6)
521 /*#define CONVERT_TO_UTF8                       (1 << 7)        deprecated*/
522
523 /* dupflag */
524 #define USER_DUP_MESH                   (1 << 0)
525 #define USER_DUP_CURVE                  (1 << 1)
526 #define USER_DUP_SURF                   (1 << 2)
527 #define USER_DUP_FONT                   (1 << 3)
528 #define USER_DUP_MBALL                  (1 << 4)
529 #define USER_DUP_LAMP                   (1 << 5)
530 #define USER_DUP_IPO                    (1 << 6)
531 #define USER_DUP_MAT                    (1 << 7)
532 #define USER_DUP_TEX                    (1 << 8)
533 #define USER_DUP_ARM                    (1 << 9)
534 #define USER_DUP_ACT                    (1 << 10)
535 #define USER_DUP_PSYS                   (1 << 11)
536
537 /* gameflags */
538 // #define USER_DEPRECATED_FLAG 1
539 // #define USER_DISABLE_SOUND           2 deprecated, don't use without checking for
540 // backwards compatibilty in do_versions!
541 #define USER_DISABLE_MIPMAP             4
542 #define USER_DISABLE_VBO                8
543 #define USER_DISABLE_AA                 16
544
545 /* wm draw method */
546 #define USER_DRAW_TRIPLE                0
547 #define USER_DRAW_OVERLAP               1
548 #define USER_DRAW_FULL                  2
549 #define USER_DRAW_AUTOMATIC             3
550 #define USER_DRAW_OVERLAP_FLIP  4
551
552 /* text draw options*/
553 #define USER_TEXT_DISABLE_AA    (1 << 0)
554
555 /* tw_flag (transform widget) */
556
557 /* gp_settings (Grease Pencil Settings) */
558 #define GP_PAINT_DOSMOOTH               (1<<0)
559 #define GP_PAINT_DOSIMPLIFY             (1<<1)
560
561 /* color picker types */
562 #define USER_CP_CIRCLE          0
563 #define USER_CP_SQUARE_SV       1
564 #define USER_CP_SQUARE_HS       2
565 #define USER_CP_SQUARE_HV       3
566
567 /* timecode display styles */
568         /* as little info as is necessary to show relevant info
569          * with '+' to denote the frames 
570          * i.e. HH:MM:SS+FF, MM:SS+FF, SS+FF, or MM:SS
571          */
572 #define USER_TIMECODE_MINIMAL           0
573         /* reduced SMPTE - (HH:)MM:SS:FF */
574 #define USER_TIMECODE_SMPTE_MSF         1
575         /* full SMPTE - HH:MM:SS:FF */
576 #define USER_TIMECODE_SMPTE_FULL        2
577         /* milliseconds for sub-frames - HH:MM:SS.sss */
578 #define USER_TIMECODE_MILLISECONDS      3
579         /* seconds only */
580 #define USER_TIMECODE_SECONDS_ONLY      4
581
582 /* theme drawtypes */
583 #define TH_MINIMAL      0
584 #define TH_ROUNDSHADED  1
585 #define TH_ROUNDED      2
586 #define TH_OLDSKOOL     3
587 #define TH_SHADED       4
588
589 /* ndof_flag (3D mouse options) */
590 #define NDOF_SHOW_GUIDE     (1 << 0)
591 #define NDOF_FLY_HELICOPTER (1 << 1)
592 #define NDOF_LOCK_HORIZON   (1 << 2)
593 /* the following might not need to be saved between sessions,
594    but they do need to live somewhere accessible... */
595 #define NDOF_SHOULD_PAN     (1 << 3)
596 #define NDOF_SHOULD_ZOOM    (1 << 4)
597 #define NDOF_SHOULD_ROTATE  (1 << 5)
598 /* orbit navigation modes
599    only two options, so it's sort of a hyrbrid bool/enum
600    if ((U.ndof_flag & NDOF_ORBIT_MODE) == NDOF_OM_OBJECT)... */
601 /*
602 #define NDOF_ORBIT_MODE     (1 << 6)
603 #define NDOF_OM_TARGETCAMERA 0
604 #define NDOF_OM_OBJECT      NDOF_ORBIT_MODE
605 */
606 /* actually... users probably don't care about what the mode
607    is called, just that it feels right */
608 #define NDOF_ORBIT_INVERT_AXES (1 << 6)
609
610
611 #ifdef __cplusplus
612 }
613 #endif
614
615 #endif