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