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