022e1cef840b39d3d7fc4638d81c8e9c0c55828f
[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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, 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 italic, bold;             /* style hint */
70         short shadow;                   /* value is amount of pixels blur */
71         short shadx, shady;             /* shadow offset in pixels */
72         short align;                    /* text align hint */
73         float shadowalpha;              /* total alpha */
74         float shadowcolor;              /* 1 value, typically white or black anyway */
75         
76 } uiFontStyle;
77
78 /* uiFontStyle->align */
79 #define UI_STYLE_TEXT_LEFT              0
80 #define UI_STYLE_TEXT_CENTER    1
81 #define UI_STYLE_TEXT_RIGHT             2
82
83
84 /* this is fed to the layout engine and widget code */
85 typedef struct uiStyle {
86         struct uiStyle *next, *prev;
87         
88         char name[64];                  /* MAX_STYLE_NAME */
89         
90         uiFontStyle paneltitle;
91         uiFontStyle grouplabel;
92         uiFontStyle widgetlabel;
93         uiFontStyle widget;
94         
95         short minlabelchars;    /* in characters */
96         short minwidgetchars;   /* in characters */
97
98         short columnspace;
99         short templatespace;
100         short boxspace;
101         short buttonspacex;
102         short buttonspacey;
103         short panelspace;
104         short panelouter;
105
106         short pad[3];
107 } uiStyle;
108
109 typedef struct uiWidgetColors {
110         char outline[4];
111         char inner[4];
112         char inner_sel[4];
113         char item[4];
114         char text[4];
115         char text_sel[4];
116         short shaded;
117         short shadetop, shadedown;
118         short pad;
119 } uiWidgetColors;
120
121 typedef struct ThemeUI {
122         
123         /* Interface Elements (buttons, menus, icons) */
124         uiWidgetColors wcol_regular, wcol_tool, wcol_radio, wcol_text, wcol_option;
125         uiWidgetColors wcol_num, wcol_numslider;
126         uiWidgetColors wcol_menu, wcol_pulldown, wcol_menu_back, wcol_menu_item;
127         uiWidgetColors wcol_box;
128         
129         char iconfile[80];      // FILE_MAXFILE length
130         
131 } ThemeUI;
132
133 /* try to put them all in one, if needed a special struct can be created as well
134  * for example later on, when we introduce wire colors for ob types or so...
135  */
136 typedef struct ThemeSpace {
137         /* main window colors */
138         char back[4];
139         char title[4];
140         char text[4];   
141         char text_hi[4];
142         
143         /* header colors */
144         char header[4];
145         char header_title[4];
146         char header_text[4];    
147         char header_text_hi[4];
148
149         /* button/tool regions */
150         char button[4];
151         char button_title[4];
152         char button_text[4];    
153         char button_text_hi[4];
154         
155         /* listview regions */
156         char list[4];
157         char list_title[4];
158         char list_text[4];      
159         char list_text_hi[4];
160         
161         /* float panel */
162         char panel[4];
163         char panel_title[4];    
164         char panel_text[4];     
165         char panel_text_hi[4];
166         
167         char shade1[4];
168         char shade2[4];
169         
170         char hilite[4];
171         char grid[4]; 
172         
173         char wire[4], select[4];
174         char lamp[4];
175         char active[4], group[4], group_active[4], transform[4];
176         char vertex[4], vertex_select[4];
177         char edge[4], edge_select[4];
178         char edge_seam[4], edge_sharp[4], edge_facesel[4];
179         char face[4], face_select[4];   // solid faces
180         char face_dot[4];                               // selected color
181         char normal[4];
182         char bone_solid[4], bone_pose[4];
183         char strip[4], strip_select[4];
184         char cframe[4];
185         char ds_channel[4], ds_subchannel[4]; // dopesheet
186         
187         char vertex_size, facedot_size;
188         char bpad[2]; 
189
190         char syntaxl[4], syntaxn[4], syntaxb[4]; // syntax for textwindow and nodes
191         char syntaxv[4], syntaxc[4];
192         
193         char movie[4], image[4], scene[4], audio[4];            // for sequence editor
194         char effect[4], plugin[4], transition[4], meta[4];
195         char editmesh_active[4]; 
196
197         char handle_vertex[4];
198         char handle_vertex_select[4];
199         
200         char handle_vertex_size;
201         char hpad[3];
202         
203         char pad[4];
204         
205 } ThemeSpace;
206
207
208 /* set of colors for use as a custom color set for Objects/Bones wire drawing */
209 typedef struct ThemeWireColor {
210         char    solid[4];
211         char    select[4];
212         char    active[4];
213         
214         short   flag;
215         short   pad;
216 } ThemeWireColor; 
217
218 /* flags for ThemeWireColor */
219 #define TH_WIRECOLOR_CONSTCOLS  (1<<0)
220 #define TH_WIRECOLOR_TEXTCOLS   (1<<1)
221
222 /* A theme */
223 typedef struct bTheme {
224         struct bTheme *next, *prev;
225         char name[32];
226         
227         ThemeUI tui;
228         
229         /* Individual Spacetypes */
230         ThemeSpace tbuts;       
231         ThemeSpace tv3d;
232         ThemeSpace tfile;
233         ThemeSpace tipo;
234         ThemeSpace tinfo;       
235         ThemeSpace tsnd;
236         ThemeSpace tact;
237         ThemeSpace tnla;
238         ThemeSpace tseq;
239         ThemeSpace tima;
240         ThemeSpace timasel;
241         ThemeSpace text;
242         ThemeSpace toops;
243         ThemeSpace ttime;
244         ThemeSpace tnode;
245         
246         /* 20 sets of bone colors for this theme */
247         ThemeWireColor tarm[20];
248         /*ThemeWireColor tobj[20];*/
249         
250 } bTheme;
251
252 typedef struct SolidLight {
253         int flag, pad;
254         float col[4], spec[4], vec[4];
255 } SolidLight;
256
257 typedef struct UserDef {
258         int flag, dupflag;
259         int savetime;
260         char tempdir[160];      // FILE_MAXDIR length
261         char fontdir[160];
262         char renderdir[160];
263         char textudir[160];
264         char plugtexdir[160];
265         char plugseqdir[160];
266         char pythondir[160];
267         char sounddir[160];
268         /* yafray: temporary xml export directory */
269         char yfexportdir[160];
270         short versions, pad;
271         
272         int gameflags;
273         int wheellinescroll;
274         int uiflag, language;
275         short userpref, viewzoom;
276         
277         int mixbufsize;
278         int pad1;
279         int dpi;                /* range 48-128? */
280         short encoding;
281         short transopts;
282         short menuthreshold1, menuthreshold2;
283         
284         struct ListBase themes;
285         struct ListBase uifonts;
286         struct ListBase uistyles;
287         
288         short undosteps;
289         short undomemory;
290         short gp_manhattendist, gp_euclideandist, gp_eraser;
291         short gp_settings;
292         short tb_leftmouse, tb_rightmouse;
293         struct SolidLight light[3];
294         short tw_hotspot, tw_flag, tw_handlesize, tw_size;
295         short textimeout,texcollectrate;
296         short wmdrawmethod, wmpad;
297         int memcachelimit;
298         int prefetchframes;
299         short frameserverport;
300         short pad_rot_angle;    /*control the rotation step of the view when PAD2,PAD4,PAD6&PAD8 is use*/
301         short obcenter_dia;
302         short rvisize;                  /* rotating view icon size */
303         short rvibright;                /* rotating view icon brightness */
304         short recent_files;             /* maximum number of recently used files to remember  */
305         short smooth_viewtx;    /* miliseconds to spend spinning the view */
306         short glreslimit;
307         short ndof_pan, ndof_rotate;
308         short curssize, ipo_new;
309
310         char versemaster[160];
311         char verseuser[160];
312         float glalphaclip;
313         
314         short autokey_mode;             /* autokeying mode */
315         short autokey_flag;             /* flags for autokeying */
316
317         struct ColorBand coba_weight;   /* from texture.h */
318 } UserDef;
319
320 extern UserDef U; /* from blenkernel blender.c */
321
322 /* ***************** USERDEF ****************** */
323
324 /* flag */
325 #define USER_AUTOSAVE                   (1 << 0)
326 #define USER_AUTOGRABGRID               (1 << 1)
327 #define USER_AUTOROTGRID                (1 << 2)
328 #define USER_AUTOSIZEGRID               (1 << 3)
329 #define USER_SCENEGLOBAL                (1 << 4)
330 #define USER_TRACKBALL                  (1 << 5)
331 #define USER_DUPLILINK                  (1 << 6)
332 #define USER_FSCOLLUM                   (1 << 7)
333 #define USER_MAT_ON_OB                  (1 << 8)
334 /*#define USER_NO_CAPSLOCK              (1 << 9)*/ /* not used anywhere */
335 #define USER_VIEWMOVE                   (1 << 10)
336 #define USER_TOOLTIPS                   (1 << 11)
337 #define USER_TWOBUTTONMOUSE             (1 << 12)
338 #define USER_NONUMPAD                   (1 << 13)
339 #define USER_LMOUSESELECT               (1 << 14)
340 #define USER_FILECOMPRESS               (1 << 15)
341 #define USER_SAVE_PREVIEWS              (1 << 16)
342 #define USER_CUSTOM_RANGE               (1 << 17)
343 #define USER_ADD_EDITMODE               (1 << 18)
344 #define USER_ADD_VIEWALIGNED    (1 << 19)
345 #define USER_RELPATHS                   (1 << 20)
346 #define USER_DRAGIMMEDIATE              (1 << 21)
347 #define USER_DONT_DOSCRIPTLINKS (1 << 22)
348
349 /* viewzom */
350 #define USER_ZOOM_CONT                  0
351 #define USER_ZOOM_SCALE                 1
352 #define USER_ZOOM_DOLLY                 2
353
354 /* uiflag */
355 // old flag for #define USER_KEYINSERTACT               (1 << 0)
356 // old flag for #define USER_KEYINSERTOBJ               (1 << 1)
357 #define USER_WHEELZOOMDIR               (1 << 2)
358 #define USER_FILTERFILEEXTS             (1 << 3)
359 #define USER_DRAWVIEWINFO               (1 << 4)
360 #define USER_PLAINMENUS                 (1 << 5)                // old EVTTOCONSOLE print ghost events, here for tuhopuu compat. --phase
361                                                                 // old flag for hide pulldown was here 
362 #define USER_FLIPFULLSCREEN             (1 << 7)
363 #define USER_ALLWINCODECS               (1 << 8)
364 #define USER_MENUOPENAUTO               (1 << 9)
365 #define USER_PANELPINNED                (1 << 10)
366 #define USER_AUTOPERSP                  (1 << 11)
367 #define USER_LOCKAROUND         (1 << 12)
368 #define USER_GLOBALUNDO         (1 << 13)
369 #define USER_ORBIT_SELECTION    (1 << 14)
370 // old flag for #define USER_KEYINSERTAVAI              (1 << 15)
371 #define USER_ORBIT_ZBUF                 (1 << 15)
372 #define USER_HIDE_DOT                   (1 << 16)
373 #define USER_SHOW_ROTVIEWICON   (1 << 17)
374 #define USER_SHOW_VIEWPORTNAME  (1 << 18)
375 // old flag for #define USER_KEYINSERTNEED              (1 << 19)
376 #define USER_ZOOM_TO_MOUSEPOS   (1 << 20)
377 #define USER_SHOW_FPS                   (1 << 21)
378 #define USER_MMB_PASTE                  (1 << 22)
379
380 /* Auto-Keying mode */
381         /* AUTOKEY_ON is a bitflag */
382 #define         AUTOKEY_ON                              1
383         /* AUTOKEY_ON + 2**n...  (i.e. AUTOKEY_MODE_NORMAL = AUTOKEY_ON + 2) to preserve setting, even when autokey turned off  */
384 #define         AUTOKEY_MODE_NORMAL             3
385 #define         AUTOKEY_MODE_EDITKEYS   5
386
387 /* Auto-Keying flag */
388 #define         AUTOKEY_FLAG_INSERTAVAIL        (1<<0)
389 #define         AUTOKEY_FLAG_INSERTNEEDED       (1<<1)
390 #define         AUTOKEY_FLAG_AUTOMATKEY         (1<<2)
391
392
393 /* transopts */
394 #define USER_TR_TOOLTIPS                (1 << 0)
395 #define USER_TR_BUTTONS                 (1 << 1)
396 #define USER_TR_MENUS                   (1 << 2)
397 #define USER_TR_FILESELECT              (1 << 3)
398 #define USER_TR_TEXTEDIT                (1 << 4)
399 #define USER_DOTRANSLATE                (1 << 5)
400 #define USER_USETEXTUREFONT             (1 << 6)
401 #define CONVERT_TO_UTF8                 (1 << 7)
402
403 /* dupflag */
404 #define USER_DUP_MESH                   (1 << 0)
405 #define USER_DUP_CURVE                  (1 << 1)
406 #define USER_DUP_SURF                   (1 << 2)
407 #define USER_DUP_FONT                   (1 << 3)
408 #define USER_DUP_MBALL                  (1 << 4)
409 #define USER_DUP_LAMP                   (1 << 5)
410 #define USER_DUP_IPO                    (1 << 6)
411 #define USER_DUP_MAT                    (1 << 7)
412 #define USER_DUP_TEX                    (1 << 8)
413 #define USER_DUP_ARM                    (1 << 9)
414 #define USER_DUP_ACT                    (1 << 10)
415
416 /* gameflags */
417 #define USER_DEPRECATED_FLAG    1
418 #define USER_DISABLE_SOUND              2
419 #define USER_DISABLE_MIPMAP             4
420
421 /* wm draw method */
422 #define USER_DRAW_TRIPLE                0
423 #define USER_DRAW_OVERLAP               1
424 #define USER_DRAW_FULL                  2
425
426 /* tw_flag (transform widget) */
427
428 /* gp_settings (Grease Pencil Settings) */
429 #define GP_PAINT_DOSMOOTH               (1<<0)
430 #define GP_PAINT_DOSIMPLIFY             (1<<1)
431
432 /* theme drawtypes */
433 #define TH_MINIMAL      0
434 #define TH_ROUNDSHADED  1
435 #define TH_ROUNDED      2
436 #define TH_OLDSKOOL     3
437 #define TH_SHADED       4
438
439 #endif