BGE: Add level mode to property actuator
[blender.git] / source / blender / makesdna / DNA_userdef_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
28 /** \file DNA_userdef_types.h
29  *  \ingroup DNA
30  *  \since mar-2001
31  *  \author nzc
32  */
33
34 #ifndef __DNA_USERDEF_TYPES_H__
35 #define __DNA_USERDEF_TYPES_H__
36
37 #include "DNA_listBase.h"
38 #include "DNA_texture_types.h" /* ColorBand */
39
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43
44 /* themes; defines in BIF_resource.h */
45 struct ColorBand;
46
47 /* ************************ style definitions ******************** */
48
49 #define MAX_STYLE_NAME  64
50
51 /* default uifont_id offered by Blender */
52 typedef enum eUIFont_ID {
53         UIFONT_DEFAULT  = 0,
54 /*      UIFONT_BITMAP   = 1 */ /* UNUSED */
55         
56         /* free slots */
57         UIFONT_CUSTOM1  = 2,
58         UIFONT_CUSTOM2  = 3
59 } eUIFont_ID;
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[1024];/* 1024 = FILE_MAX */
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 hinting;
70 } uiFont;
71
72 /* this state defines appearance of text */
73 typedef struct uiFontStyle {
74         short uifont_id;                /* saved in file, 0 is default */
75         short points;                   /* actual size depends on 'global' dpi */
76         short kerning;                  /* unfitted or default kerning value. */
77         char pad[6];
78         short italic, bold;             /* style hint */
79         short shadow;                   /* value is amount of pixels blur */
80         short shadx, shady;             /* shadow offset in pixels */
81         short align;                    /* text align hint */
82         float shadowalpha;              /* total alpha */
83         float shadowcolor;              /* 1 value, typically white or black anyway */
84 } uiFontStyle;
85
86 /* uiFontStyle->align */
87 typedef enum eFontStyle_Align {
88         UI_STYLE_TEXT_LEFT              = 0,
89         UI_STYLE_TEXT_CENTER    = 1,
90         UI_STYLE_TEXT_RIGHT             = 2
91 } eFontStyle_Align;
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;
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 uiPanelColors {
145         char header[4];
146         char back[4];
147         short show_header;
148         short show_back;
149         int pad;
150 } uiPanelColors;
151
152 typedef struct uiGradientColors {
153         char gradient[4];
154         char high_gradient[4];
155         int show_grad;
156         int pad2;
157
158 } uiGradientColors;
159
160 typedef struct ThemeUI {
161         /* Interface Elements (buttons, menus, icons) */
162         uiWidgetColors wcol_regular, wcol_tool, wcol_text;
163         uiWidgetColors wcol_radio, wcol_option, wcol_toggle;
164         uiWidgetColors wcol_num, wcol_numslider;
165         uiWidgetColors wcol_menu, wcol_pulldown, wcol_menu_back, wcol_menu_item, wcol_tooltip;
166         uiWidgetColors wcol_box, wcol_scroll, wcol_progress, wcol_list_item;
167         
168         uiWidgetStateColors wcol_state;
169
170         uiPanelColors panel; /* depricated, but we keep it for do_versions (2.66.1) */
171
172         /* fac: 0 - 1 for blend factor, width in pixels */
173         float menu_shadow_fac;
174         short menu_shadow_width;
175         
176         short pad;
177         
178         char iconfile[256];     // FILE_MAXFILE length
179         float icon_alpha;
180
181         /* Axis Colors */
182         char xaxis[4], yaxis[4], zaxis[4];
183 } ThemeUI;
184
185 /* try to put them all in one, if needed a special struct can be created as well
186  * for example later on, when we introduce wire colors for ob types or so...
187  */
188 typedef struct ThemeSpace {
189         /* main window colors */
190         char back[4];
191         char title[4];  /* panel title */
192         char text[4];
193         char text_hi[4];
194         
195         /* header colors */
196         char header[4];                 /* region background */
197         char header_title[4];   /* unused */
198         char header_text[4];
199         char header_text_hi[4];
200
201         /* region tabs */
202         char tab_active[4];
203         char tab_inactive[4];
204         char tab_back[4];
205         char tab_outline[4];
206
207         /* button/tool regions */
208         char button[4];                 /* region background */
209         char button_title[4];   /* panel title */
210         char button_text[4];
211         char button_text_hi[4];
212         
213         /* listview regions */
214         char list[4];                   /* region background */
215         char list_title[4];     /* panel title */
216         char list_text[4];
217         char list_text_hi[4];
218         
219         /* float panel */
220 /*      char panel[4];                  unused */
221 /*      char panel_title[4];    unused */
222 /*      char panel_text[4];             unused */
223 /*      char panel_text_hi[4];  unused */
224         
225         /* note, cannot use name 'panel' because of DNA mapping old files */
226         uiPanelColors panelcolors;
227
228         uiGradientColors gradients;
229
230         char shade1[4];
231         char shade2[4];
232         
233         char hilite[4];
234         char grid[4]; 
235         
236         char view_overlay[4];
237
238         char wire[4], wire_edit[4], select[4];
239         char lamp[4], speaker[4], empty[4], camera[4];
240         char active[4], group[4], group_active[4], transform[4];
241         char vertex[4], vertex_select[4], vertex_unreferenced[4];
242         char edge[4], edge_select[4];
243         char edge_seam[4], edge_sharp[4], edge_facesel[4], edge_crease[4];
244         char face[4], face_select[4];   /* solid faces */
245         char face_dot[4];                               /*  selected color */
246         char extra_edge_len[4], extra_edge_angle[4], extra_face_angle[4], extra_face_area[4];
247         char normal[4];
248         char vertex_normal[4];
249         char bone_solid[4], bone_pose[4], bone_pose_active[4];
250         char strip[4], strip_select[4];
251         char cframe[4];
252         char freestyle_edge_mark[4], freestyle_face_mark[4];
253         
254         char nurb_uline[4], nurb_vline[4];
255         char act_spline[4], nurb_sel_uline[4], nurb_sel_vline[4], lastsel_point[4];
256         
257         char handle_free[4], handle_auto[4], handle_vect[4], handle_align[4], handle_auto_clamped[4];
258         char handle_sel_free[4], handle_sel_auto[4], handle_sel_vect[4], handle_sel_align[4], handle_sel_auto_clamped[4];
259         
260         char ds_channel[4], ds_subchannel[4]; /* dopesheet */
261         char keytype_keyframe[4], keytype_extreme[4], keytype_breakdown[4], keytype_jitter[4]; /* keytypes */
262         char keytype_keyframe_select[4], keytype_extreme_select[4], keytype_breakdown_select[4], keytype_jitter_select[4]; /* keytypes */
263         char keyborder[4], keyborder_select[4];
264         
265         char console_output[4], console_input[4], console_info[4], console_error[4];
266         char console_cursor[4], console_select[4], pad1[4];
267         
268         char vertex_size, outline_width, facedot_size;
269         char noodle_curving;
270
271         /* syntax for textwindow and nodes */
272         char syntaxl[4], syntaxs[4]; // in nodespace used for backdrop matte 
273         char syntaxb[4], syntaxn[4]; // in nodespace used for color input
274         char syntaxv[4], syntaxc[4]; // in nodespace used for converter group
275         char syntaxd[4], syntaxr[4]; // in nodespace used for distort 
276
277         char nodeclass_output[4], nodeclass_filter[4];
278         char nodeclass_vector[4], nodeclass_texture[4];
279         char nodeclass_shader[4], nodeclass_script[4];
280         char nodeclass_pattern[4], nodeclass_layout[4];
281         
282         char movie[4], movieclip[4], mask[4], image[4], scene[4], audio[4];             /* for sequence editor */
283         char effect[4], transition[4], meta[4];
284         char editmesh_active[4]; 
285
286         char handle_vertex[4];
287         char handle_vertex_select[4];
288         char pad2[4];
289         
290         char handle_vertex_size;
291         
292         char marker_outline[4], marker[4], act_marker[4], sel_marker[4], dis_marker[4], lock_marker[4];
293         char bundle_solid[4];
294         char path_before[4], path_after[4];
295         char camera_path[4];
296         char hpad[3];
297         
298         char preview_back[4];
299         char preview_stitch_face[4];
300         char preview_stitch_edge[4];
301         char preview_stitch_vert[4];
302         char preview_stitch_stitchable[4];
303         char preview_stitch_unstitchable[4];
304         char preview_stitch_active[4];
305         
306         char uv_shadow[4]; /* two uses, for uvs with modifier applied on mesh and uvs during painting */
307         char uv_others[4]; /* uvs of other objects */
308
309         char match[4];                          /* outliner - filter match */
310         char selected_highlight[4];     /* outliner - selected item */
311
312         char skin_root[4]; /* Skin modifier root color */
313         
314         /* NLA */
315         char anim_active[4];     /* Active Action + Summary Channel */
316         char anim_non_active[4]; /* Active Action = NULL */
317         
318         char nla_tweaking[4];   /* NLA 'Tweaking' action/strip */
319         char nla_tweakdupli[4]; /* NLA - warning color for duplicate instances of tweaking strip */
320         
321         char nla_transition[4], nla_transition_sel[4]; /* NLA "Transition" strips */
322         char nla_meta[4], nla_meta_sel[4];             /* NLA "Meta" strips */
323         char nla_sound[4], nla_sound_sel[4];           /* NLA "Sound" strips */
324
325         /* info */
326         char info_selected[4], info_selected_text[4];
327         char info_error[4], info_error_text[4];
328         char info_warning[4], info_warning_text[4];
329         char info_info[4], info_info_text[4];
330         char info_debug[4], info_debug_text[4];
331 } ThemeSpace;
332
333
334 /* set of colors for use as a custom color set for Objects/Bones wire drawing */
335 typedef struct ThemeWireColor {
336         char    solid[4];
337         char    select[4];
338         char    active[4];
339         
340         short   flag;
341         short   pad;
342 } ThemeWireColor; 
343
344 /* flags for ThemeWireColor */
345 typedef enum eWireColor_Flags {
346         TH_WIRECOLOR_CONSTCOLS  = (1 << 0),
347         TH_WIRECOLOR_TEXTCOLS   = (1 << 1),
348 } eWireColor_Flags;
349
350 /* A theme */
351 typedef struct bTheme {
352         struct bTheme *next, *prev;
353         char name[32];
354         
355         ThemeUI tui;
356         
357         /* Individual Spacetypes */
358         /* note: ensure UI_THEMESPACE_END is updated when adding */
359         ThemeSpace tbuts;
360         ThemeSpace tv3d;
361         ThemeSpace tfile;
362         ThemeSpace tipo;
363         ThemeSpace tinfo;
364         ThemeSpace tact;
365         ThemeSpace tnla;
366         ThemeSpace tseq;
367         ThemeSpace tima;
368         ThemeSpace text;
369         ThemeSpace toops;
370         ThemeSpace ttime;
371         ThemeSpace tnode;
372         ThemeSpace tlogic;
373         ThemeSpace tuserpref;
374         ThemeSpace tconsole;
375         ThemeSpace tclip;
376         
377         /* 20 sets of bone colors for this theme */
378         ThemeWireColor tarm[20];
379         /*ThemeWireColor tobj[20];*/
380         
381         int active_theme_area, pad;
382 } bTheme;
383
384 #define UI_THEMESPACE_START(btheme)  (CHECK_TYPE_INLINE(btheme, bTheme *),  &((btheme)->tbuts))
385 #define UI_THEMESPACE_END(btheme)    (CHECK_TYPE_INLINE(btheme, bTheme *), (&((btheme)->tclip) + 1))
386
387 /* for the moment only the name. may want to store options with this later */
388 typedef struct bAddon {
389         struct bAddon *next, *prev;
390         char module[64];
391         IDProperty *prop;  /* User-Defined Properties on this  Addon (for storing preferences) */
392 } bAddon;
393
394 typedef struct bPathCompare {
395         struct bPathCompare *next, *prev;
396         char path[768];  /* FILE_MAXDIR */
397         char flag, pad[7];
398 } bPathCompare;
399
400 typedef struct SolidLight {
401         int flag, pad;
402         float col[4], spec[4], vec[4];
403 } SolidLight;
404
405 typedef struct WalkNavigation {
406         float mouse_speed;  /* speed factor for look around */
407         float walk_speed;
408         float walk_speed_factor;
409         float view_height;
410         float jump_height;
411         float teleport_time;  /* duration to use for teleporting */
412         short flag;
413         short pad[3];
414 } WalkNavigation;
415
416 typedef struct UserDef {
417         /* UserDef has separate do-version handling, and can be read from other files */
418         int versionfile, subversionfile;
419         
420         int flag, dupflag;
421         int savetime;
422         char tempdir[768];      /* FILE_MAXDIR length */
423         char fontdir[768];
424         char renderdir[1024]; /* FILE_MAX length */
425         /* EXR cache path */
426         char render_cachedir[768];  /* 768 = FILE_MAXDIR */
427         char textudir[768];
428         char pythondir[768];
429         char sounddir[768];
430         char i18ndir[768];
431         char image_editor[1024];    /* 1024 = FILE_MAX */
432         char anim_player[1024];     /* 1024 = FILE_MAX */
433         int anim_player_preset;
434         
435         short v2d_min_gridsize;         /* minimum spacing between gridlines in View2D grids */
436         short timecode_style;           /* style of timecode display */
437         
438         short versions;
439         short dbl_click_time;
440         
441         short gameflags;
442         short wheellinescroll;
443         int uiflag, uiflag2;
444         int language;
445         short userpref, viewzoom;
446         
447         int mixbufsize;
448         int audiodevice;
449         int audiorate;
450         int audioformat;
451         int audiochannels;
452
453         int scrollback; /* console scrollback limit */
454         int dpi;                /* range 48-128? */
455         short encoding;
456         short transopts;
457         short menuthreshold1, menuthreshold2;
458         
459         struct ListBase themes;
460         struct ListBase uifonts;
461         struct ListBase uistyles;
462         struct ListBase keymaps  DNA_DEPRECATED; /* deprecated in favor of user_keymaps */
463         struct ListBase user_keymaps;
464         struct ListBase addons;
465         struct ListBase autoexec_paths;
466         char keyconfigstr[64];
467         
468         short undosteps;
469         short undomemory;
470         short gp_manhattendist, gp_euclideandist, gp_eraser;
471         short gp_settings;
472         short tb_leftmouse, tb_rightmouse;
473         struct SolidLight light[3];
474         short tw_hotspot, tw_flag, tw_handlesize, tw_size;
475         short textimeout, texcollectrate;
476         short wmdrawmethod; /* removed wmpad */
477         short dragthreshold;
478         int memcachelimit;
479         int prefetchframes;
480         short frameserverport;
481         short pad_rot_angle;    /* control the rotation step of the view when PAD2, PAD4, PAD6&PAD8 is use */
482         short obcenter_dia;
483         short rvisize;                  /* rotating view icon size */
484         short rvibright;                /* rotating view icon brightness */
485         short recent_files;             /* maximum number of recently used files to remember  */
486         short smooth_viewtx;    /* miliseconds to spend spinning the view */
487         short glreslimit;
488         short curssize;
489         short color_picker_type;
490         char  ipo_new;                  /* interpolation mode for newly added F-Curves */
491         char  keyhandles_new;   /* handle types for newly added keyframes */
492         char  pad1[2];
493
494         short scrcastfps;               /* frame rate for screencast to be played back */
495         short scrcastwait;              /* milliseconds between screencast snapshots */
496         
497         short widget_unit;              /* private, defaults to 20 for 72 DPI setting */
498         short anisotropic_filter;
499         short use_16bit_textures, use_gpu_mipmap;
500
501         float ndof_sensitivity; /* overall sensitivity of 3D mouse */
502         float ndof_orbit_sensitivity;
503         int ndof_flag;                  /* flags for 3D mouse */
504
505         short ogl_multisamples; /* amount of samples for OpenGL FSA, if zero no FSA */
506
507         short image_draw_method; /* Method to be used to draw the images (AUTO, GLSL, Textures or DrawPixels) */
508         
509         float glalphaclip;
510         
511         short autokey_mode;             /* autokeying mode */
512         short autokey_flag;             /* flags for autokeying */
513         
514         short text_render, pad9;                /* options for text rendering */
515
516         struct ColorBand coba_weight;   /* from texture.h */
517
518         float sculpt_paint_overlay_col[3];
519         float gpencil_new_layer_col[4]; /* default color for newly created Grease Pencil layers */
520
521         short tweak_threshold;
522         char navigation_mode, pad;
523
524         char author[80];        /* author name for file formats supporting it */
525
526         char font_path_ui[1024];
527
528         int compute_device_type;
529         int compute_device_id;
530         
531         float fcu_inactive_alpha;       /* opacity of inactive F-Curves in F-Curve Editor */
532         float pixelsize;                        /* private, set by GHOST, to multiply DPI with */
533
534         struct WalkNavigation walk_navigation;
535 } UserDef;
536
537 extern UserDef U; /* from blenkernel blender.c */
538
539 /* ***************** USERDEF ****************** */
540
541 /* userpref/section */
542 typedef enum eUserPref_Section {
543         USER_SECTION_INTERFACE  = 0,
544         USER_SECTION_EDIT               = 1,
545         USER_SECTION_FILE               = 2,
546         USER_SECTION_SYSTEM             = 3,
547         USER_SECTION_THEME              = 4,
548         USER_SECTION_INPUT              = 5,
549         USER_SECTION_ADDONS     = 6,
550 } eUserPref_Section;
551
552 /* flag */
553 typedef enum eUserPref_Flag {
554         USER_AUTOSAVE                   = (1 << 0),
555 /*      USER_AUTOGRABGRID               = (1 << 1),     deprecated */
556 /*      USER_AUTOROTGRID                = (1 << 2),     deprecated */
557 /*      USER_AUTOSIZEGRID               = (1 << 3),     deprecated */
558         USER_SCENEGLOBAL                = (1 << 4),
559         USER_TRACKBALL                  = (1 << 5),
560 /*      USER_DUPLILINK          = (1 << 6),     deprecated */
561 /*      USER_FSCOLLUM                   = (1 << 7),     deprecated */
562         USER_MAT_ON_OB                  = (1 << 8),
563 /*      USER_NO_CAPSLOCK                = (1 << 9), */  /* not used anywhere */
564 /*      USER_VIEWMOVE                   = (1 << 10), */ /* not used anywhere */
565         USER_TOOLTIPS                   = (1 << 11),
566         USER_TWOBUTTONMOUSE             = (1 << 12),
567         USER_NONUMPAD                   = (1 << 13),
568         USER_LMOUSESELECT               = (1 << 14),
569         USER_FILECOMPRESS               = (1 << 15),
570         USER_SAVE_PREVIEWS              = (1 << 16),
571         USER_CUSTOM_RANGE               = (1 << 17),
572         USER_ADD_EDITMODE               = (1 << 18),
573         USER_ADD_VIEWALIGNED    = (1 << 19),
574         USER_RELPATHS                   = (1 << 20),
575         USER_RELEASECONFIRM             = (1 << 21),
576         USER_SCRIPT_AUTOEXEC_DISABLE    = (1 << 22),
577         USER_FILENOUI                   = (1 << 23),
578         USER_NONEGFRAMES                = (1 << 24),
579         USER_TXT_TABSTOSPACES_DISABLE   = (1 << 25),
580         USER_TOOLTIPS_PYTHON    = (1 << 26),
581 } eUserPref_Flag;
582
583 /* flag */
584 typedef enum ePathCompare_Flag {
585         USER_PATHCMP_GLOB               = (1 << 0),
586 } ePathCompare_Flag;
587
588 /* helper macro for checking frame clamping */
589 #define FRAMENUMBER_MIN_CLAMP(cfra)  {                                        \
590         if ((U.flag & USER_NONEGFRAMES) && (cfra < 0))                            \
591                 cfra = 0;                                                             \
592         } (void)0
593
594 /* viewzoom */
595 typedef enum eViewZoom_Style {
596         USER_ZOOM_CONT                  = 0,
597         USER_ZOOM_SCALE                 = 1,
598         USER_ZOOM_DOLLY                 = 2
599 } eViewZoom_Style;
600
601 /* navigation_mode */
602 typedef enum eViewNavigation_Method {
603         VIEW_NAVIGATION_WALK = 0,
604         VIEW_NAVIGATION_FLY  = 1,
605 } eViewNavigation_Method;
606
607 /* flag */
608 typedef enum eWalkNavigation_Flag {
609         USER_WALK_GRAVITY                       = (1 << 0),
610         USER_WALK_MOUSE_REVERSE         = (1 << 1),
611 } eWalkNavigation_Flag;
612
613 /* uiflag */
614 typedef enum eUserpref_UI_Flag {
615         /* flags 0 and 1 were old flags (for autokeying) that aren't used anymore */
616         USER_WHEELZOOMDIR               = (1 << 2),
617         USER_FILTERFILEEXTS             = (1 << 3),
618         USER_DRAWVIEWINFO               = (1 << 4),
619         USER_PLAINMENUS                 = (1 << 5),
620         /* flags 6 and 7 were old flags that are no-longer used */
621         USER_ALLWINCODECS               = (1 << 8),
622         USER_MENUOPENAUTO               = (1 << 9),
623         USER_ZBUF_CURSOR                = (1 << 10),
624         USER_AUTOPERSP                  = (1 << 11),
625         USER_LOCKAROUND         = (1 << 12),
626         USER_GLOBALUNDO         = (1 << 13),
627         USER_ORBIT_SELECTION    = (1 << 14),
628         USER_ZBUF_ORBIT                 = (1 << 15),
629         USER_HIDE_DOT                   = (1 << 16),
630         USER_SHOW_ROTVIEWICON   = (1 << 17),
631         USER_SHOW_VIEWPORTNAME  = (1 << 18),
632         USER_CAM_LOCK_NO_PARENT = (1 << 19),
633         USER_ZOOM_TO_MOUSEPOS   = (1 << 20),
634         USER_SHOW_FPS                   = (1 << 21),
635         USER_MMB_PASTE                  = (1 << 22),
636         USER_MENUFIXEDORDER             = (1 << 23),
637         USER_CONTINUOUS_MOUSE   = (1 << 24),
638         USER_ZOOM_INVERT                = (1 << 25),
639         USER_ZOOM_HORIZ                 = (1 << 26), /* for CONTINUE and DOLLY zoom */
640         USER_SPLASH_DISABLE             = (1 << 27),
641         USER_HIDE_RECENT                = (1 << 28),
642         USER_SHOW_THUMBNAILS    = (1 << 29),
643         USER_QUIT_PROMPT                = (1 << 30),
644         USER_HIDE_SYSTEM_BOOKMARKS = (1 << 31)
645 } eUserpref_UI_Flag;
646
647 /* uiflag2 */
648 typedef enum eUserpref_UI_Flag2 {
649         USER_KEEP_SESSION               = (1 << 0),
650         USER_REGION_OVERLAP             = (1 << 1),
651         USER_TRACKPAD_NATURAL   = (1 << 2)
652 } eUserpref_UI_Flag2;
653         
654 /* Auto-Keying mode */
655 typedef enum eAutokey_Mode {
656         /* AUTOKEY_ON is a bitflag */
657         AUTOKEY_ON             = 1,
658         
659         /* AUTOKEY_ON + 2**n...  (i.e. AUTOKEY_MODE_NORMAL = AUTOKEY_ON + 2) to preserve setting, even when autokey turned off  */
660         AUTOKEY_MODE_NORMAL    = 3,
661         AUTOKEY_MODE_EDITKEYS  = 5
662 } eAutokey_Mode;
663
664 /* Auto-Keying flag
665  * U.autokey_flag (not strictly used when autokeying only - is also used when keyframing these days)
666  * note: AUTOKEY_FLAG_* is used with a macro, search for lines like IS_AUTOKEY_FLAG(INSERTAVAIL)
667  */
668 typedef enum eAutokey_Flag {
669         AUTOKEY_FLAG_INSERTAVAIL        = (1 << 0),
670         AUTOKEY_FLAG_INSERTNEEDED       = (1 << 1),
671         AUTOKEY_FLAG_AUTOMATKEY         = (1 << 2),
672         AUTOKEY_FLAG_XYZ2RGB            = (1 << 3),
673         
674         /* toolsettings->autokey_flag */
675         AUTOKEY_FLAG_ONLYKEYINGSET      = (1 << 6),
676         AUTOKEY_FLAG_NOWARNING          = (1 << 7),
677         ANIMRECORD_FLAG_WITHNLA         = (1 << 10),
678 } eAutokey_Flag;
679
680 /* transopts */
681 typedef enum eUserpref_Translation_Flags {
682         USER_TR_TOOLTIPS                = (1 << 0),
683         USER_TR_IFACE                   = (1 << 1),
684 /*      USER_TR_MENUS                   = (1 << 2),  deprecated */
685 /*      USER_TR_FILESELECT              = (1 << 3),  deprecated */
686 /*      USER_TR_TEXTEDIT                = (1 << 4),  deprecated */
687         USER_DOTRANSLATE                = (1 << 5),
688         USER_USETEXTUREFONT             = (1 << 6),
689 /*      CONVERT_TO_UTF8                 = (1 << 7),  deprecated */
690         USER_TR_NEWDATANAME             = (1 << 8),
691 } eUserpref_Translation_Flags;
692
693 /* dupflag */
694 typedef enum eDupli_ID_Flags {
695         USER_DUP_MESH                   = (1 << 0),
696         USER_DUP_CURVE                  = (1 << 1),
697         USER_DUP_SURF                   = (1 << 2),
698         USER_DUP_FONT                   = (1 << 3),
699         USER_DUP_MBALL                  = (1 << 4),
700         USER_DUP_LAMP                   = (1 << 5),
701         USER_DUP_IPO                    = (1 << 6),
702         USER_DUP_MAT                    = (1 << 7),
703         USER_DUP_TEX                    = (1 << 8),
704         USER_DUP_ARM                    = (1 << 9),
705         USER_DUP_ACT                    = (1 << 10),
706         USER_DUP_PSYS                   = (1 << 11)
707 } eDupli_ID_Flags;
708
709 /* gameflags */
710 typedef enum eOpenGL_RenderingOptions {
711         /* USER_DEPRECATED_FLAG = (1 << 0), */
712         /* USER_DISABLE_SOUND           = (1 << 1), */ /* deprecated, don't use without checking for */
713                                              /* backwards compatibilty in do_versions! */
714         USER_DISABLE_MIPMAP             = (1 << 2),
715         USER_DISABLE_VBO                = (1 << 3),
716         /* USER_DISABLE_AA                      = (1 << 4), */ /* DEPRECATED */
717 } eOpenGL_RenderingOptions;
718
719 /* wm draw method */
720 typedef enum eWM_DrawMethod {
721         USER_DRAW_TRIPLE                = 0,
722         USER_DRAW_OVERLAP               = 1,
723         USER_DRAW_FULL                  = 2,
724         USER_DRAW_AUTOMATIC             = 3,
725         USER_DRAW_OVERLAP_FLIP  = 4,
726 } eWM_DrawMethod;
727
728 /* text draw options */
729 typedef enum eText_Draw_Options {
730         USER_TEXT_DISABLE_AA    = (1 << 0),
731 } eText_Draw_Options;
732
733 /* tw_flag (transform widget) */
734
735 /* gp_settings (Grease Pencil Settings) */
736 typedef enum eGP_UserdefSettings {
737         GP_PAINT_DOSMOOTH               = (1 << 0),
738         GP_PAINT_DOSIMPLIFY             = (1 << 1),
739 } eGP_UserdefSettings;
740
741 /* color picker types */
742 typedef enum eColorPicker_Types {
743         USER_CP_CIRCLE_HSV      = 0,
744         USER_CP_SQUARE_SV       = 1,
745         USER_CP_SQUARE_HS       = 2,
746         USER_CP_SQUARE_HV       = 3,
747         USER_CP_CIRCLE_HSL      = 4,
748 } eColorPicker_Types;
749
750 /* timecode display styles */
751 typedef enum eTimecodeStyles {
752         /* as little info as is necessary to show relevant info
753          * with '+' to denote the frames 
754          * i.e. HH:MM:SS+FF, MM:SS+FF, SS+FF, or MM:SS
755          */
756         USER_TIMECODE_MINIMAL           = 0,
757         
758         /* reduced SMPTE - (HH:)MM:SS:FF */
759         USER_TIMECODE_SMPTE_MSF         = 1,
760         
761         /* full SMPTE - HH:MM:SS:FF */
762         USER_TIMECODE_SMPTE_FULL        = 2,
763         
764         /* milliseconds for sub-frames - HH:MM:SS.sss */
765         USER_TIMECODE_MILLISECONDS      = 3,
766         
767         /* seconds only */
768         USER_TIMECODE_SECONDS_ONLY      = 4,
769 } eTimecodeStyles;
770
771 /* theme drawtypes */
772 /* XXX: These are probably only for the old UI engine? */
773 typedef enum eTheme_DrawTypes {
774         TH_MINIMAL      = 0,
775         TH_ROUNDSHADED  = 1,
776         TH_ROUNDED      = 2,
777         TH_OLDSKOOL     = 3,
778         TH_SHADED       = 4
779 } eTheme_DrawTypes;
780
781 /* ndof_flag (3D mouse options) */
782 typedef enum eNdof_Flag {
783         NDOF_SHOW_GUIDE     = (1 << 0),
784         NDOF_FLY_HELICOPTER = (1 << 1),
785         NDOF_LOCK_HORIZON   = (1 << 2),
786
787         /* the following might not need to be saved between sessions,
788          * but they do need to live somewhere accessible... */
789         NDOF_SHOULD_PAN     = (1 << 3),
790         NDOF_SHOULD_ZOOM    = (1 << 4),
791         NDOF_SHOULD_ROTATE  = (1 << 5),
792
793         /* orbit navigation modes */
794
795         /* exposed as Orbit|Explore in the UI */
796         NDOF_MODE_ORBIT      = (1 << 6),
797
798         /* actually... users probably don't care about what the mode
799          * is called, just that it feels right */
800         /* zoom is up/down if this flag is set (otherwise forward/backward) */
801         NDOF_PAN_YZ_SWAP_AXIS   = (1 << 7),
802         NDOF_ZOOM_INVERT        = (1 << 8),
803         NDOF_ROTX_INVERT_AXIS   = (1 << 9),
804         NDOF_ROTY_INVERT_AXIS   = (1 << 10),
805         NDOF_ROTZ_INVERT_AXIS   = (1 << 11),
806         NDOF_PANX_INVERT_AXIS   = (1 << 12),
807         NDOF_PANY_INVERT_AXIS   = (1 << 13),
808         NDOF_PANZ_INVERT_AXIS   = (1 << 14),
809         NDOF_TURNTABLE          = (1 << 15),
810 } eNdof_Flag;
811
812 #define NDOF_PIXELS_PER_SECOND 600.0f
813
814 /* compute_device_type */
815 typedef enum eCompute_Device_Type {
816         USER_COMPUTE_DEVICE_NONE        = 0,
817         USER_COMPUTE_DEVICE_OPENCL      = 1,
818         USER_COMPUTE_DEVICE_CUDA        = 2,
819 } eCompute_Device_Type;
820
821         
822 typedef enum eMultiSample_Type {
823         USER_MULTISAMPLE_NONE   = 0,
824         USER_MULTISAMPLE_2      = 2,
825         USER_MULTISAMPLE_4      = 4,
826         USER_MULTISAMPLE_8      = 8,
827         USER_MULTISAMPLE_16     = 16,
828 } eMultiSample_Type;
829         
830 typedef enum eImageDrawMethod {
831         /* IMAGE_DRAW_METHOD_AUTO = 0, */ /* Currently unused */
832         IMAGE_DRAW_METHOD_GLSL = 1,
833         IMAGE_DRAW_METHOD_2DTEXTURE = 2,
834         IMAGE_DRAW_METHOD_DRAWPIXELS = 3,
835 } eImageDrawMethod;
836
837 #ifdef __cplusplus
838 }
839 #endif
840
841 #endif