diff options
author | Ton Roosendaal <ton@blender.org> | 2003-10-15 23:23:54 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2003-10-15 23:23:54 +0400 |
commit | 10333bd1d39460efb2e71930f43342e6b5840c9a (patch) | |
tree | 856016c103836bba6030b7852130042cd1d23a66 /source | |
parent | 478f61563a320d33b51fec02640e41ab4b05f825 (diff) |
- removed all #include "interface.h" from files. this is a local/internal
include only (use BIF_interface.h instead)
- split up interface.c in two files: NEW: interface_panel.c
- removed the temporal text files
WARN: FIX AUTOMAKE AND MSVC!
Diffstat (limited to 'source')
58 files changed, 1722 insertions, 10434 deletions
diff --git a/source/blender/include/BIF_interface.h b/source/blender/include/BIF_interface.h index 1b91d6a6c31..3d85a56ce43 100644 --- a/source/blender/include/BIF_interface.h +++ b/source/blender/include/BIF_interface.h @@ -37,6 +37,103 @@ struct ID; struct ListBase; struct ScrArea; +/* uiBlock->dt */ +#define UI_EMBOSSX 0 /* Rounded embossed button */ +#define UI_EMBOSSW 1 /* Flat bordered button */ +#define UI_EMBOSSN 2 /* No border */ +#define UI_EMBOSSF 3 /* Square embossed button */ +#define UI_EMBOSSM 4 /* Colored Border */ +#define UI_EMBOSSP 5 /* Borderless coloured button */ +#define UI_EMBOSSA 6 /* same as EMBOSSX but with arrows to simulate */ +#define UI_EMBOSSTABL 7 +#define UI_EMBOSSTABM 8 +#define UI_EMBOSSTABR 9 +#define UI_EMBOSST 10 +#define UI_EMBOSSMB 11 /* emboss menu button */ + +/* uiBlock->direction */ +#define UI_TOP 0 +#define UI_DOWN 1 +#define UI_LEFT 2 +#define UI_RIGHT 3 + +/* uiBlock->autofill */ +#define UI_BLOCK_COLLUMNS 1 +#define UI_BLOCK_ROWS 2 + +/* return from uiDoBlock */ +#define UI_CONT 0 +#define UI_NOTHING 1 +#define UI_RETURN_CANCEL 2 +#define UI_RETURN_OK 4 +#define UI_RETURN_OUT 8 +#define UI_RETURN 14 +#define UI_EXIT_LOOP 16 + +/* uiBlock->flag (controls) */ +#define UI_BLOCK_LOOP 1 +#define UI_BLOCK_REDRAW 2 +#define UI_BLOCK_RET_1 4 +#define UI_BLOCK_BUSY 8 +#define UI_BLOCK_NUMSELECT 16 +#define UI_BLOCK_ENTER_OK 32 + +/* block->font, for now: bold = medium+1 */ +#define UI_HELV 0 +#define UI_HELVB 1 + +/* panel style */ +#define UI_PNL_TRANSP 0 +#define UI_PNL_SOLID 1 + + +/* definitions for icons (and their alignment) in buttons */ +/* warning the first 4 flags are internal */ +#define UI_TEXT_LEFT 16 +#define UI_ICON_LEFT 32 +#define UI_ICON_RIGHT 64 + + +/* Button types */ +#define CHA 32 +#define SHO 64 +#define INT 96 +#define FLO 128 +#define FUN 192 +#define BIT 256 + +#define BUTPOIN (128+64+32) + +#define BUT (1<<9) +#define ROW (2<<9) +#define TOG (3<<9) +#define SLI (4<<9) +#define NUM (5<<9) +#define TEX (6<<9) +#define TOG3 (7<<9) +#define TOGR (8<<9) +#define TOGN (9<<9) +#define LABEL (10<<9) +#define MENU (11<<9) +#define ICONROW (12<<9) +#define ICONTOG (13<<9) +#define NUMSLI (14<<9) +#define COL (15<<9) +#define IDPOIN (16<<9) +#define HSVSLI (17<<9) +#define SCROLL (18<<9) +#define BLOCK (19<<9) +#define BUTM (20<<9) +#define SEPR (21<<9) +#define LINK (22<<9) +#define INLINK (23<<9) +#define KEYEVT (24<<9) +#define ICONTEXTROW (25<<9) + +#define BUTTYPE (31<<9) + + + typedef struct uiBut uiBut; typedef struct uiBlock uiBlock; diff --git a/source/blender/include/interface.h b/source/blender/include/interface.h index 7a81a047bfa..0a277299f8c 100644 --- a/source/blender/include/interface.h +++ b/source/blender/include/interface.h @@ -33,112 +33,174 @@ #ifndef INTERFACE_H #define INTERFACE_H +#include "BIF_resources.h" + /* general defines */ #define UI_MAX_DRAW_STR 400 #define UI_MAX_NAME_STR 64 #define UI_ARRAY 29 -/* block->font, for now: bold = medium+1 */ -#define UI_HELV 0 -#define UI_HELVB 1 - -/* Button types */ -#define CHA 32 -#define SHO 64 -#define INT 96 -#define FLO 128 -#define FUN 192 -#define BIT 256 - -#define BUTPOIN (128+64+32) - -#define BUT (1<<9) -#define ROW (2<<9) -#define TOG (3<<9) -#define SLI (4<<9) -#define NUM (5<<9) -#define TEX (6<<9) -#define TOG3 (7<<9) -#define TOGR (8<<9) -#define TOGN (9<<9) -#define LABEL (10<<9) -#define MENU (11<<9) -#define ICONROW (12<<9) -#define ICONTOG (13<<9) -#define NUMSLI (14<<9) -#define COL (15<<9) -#define IDPOIN (16<<9) -#define HSVSLI (17<<9) -#define SCROLL (18<<9) -#define BLOCK (19<<9) -#define BUTM (20<<9) -#define SEPR (21<<9) -#define LINK (22<<9) -#define INLINK (23<<9) -#define KEYEVT (24<<9) -#define ICONTEXTROW (25<<9) - -#define BUTTYPE (31<<9) - -#define MAXBUTSTR 20 - - -/* return from uiDoBlock */ -#define UI_CONT 0 -#define UI_NOTHING 1 -#define UI_RETURN_CANCEL 2 -#define UI_RETURN_OK 4 -#define UI_RETURN_OUT 8 -#define UI_RETURN 14 -#define UI_EXIT_LOOP 16 + /* uiBut->flag */ #define UI_SELECT 1 #define UI_MOUSE_OVER 2 #define UI_ACTIVE 4 #define UI_HAS_ICON 8 -#define UI_TEXT_LEFT 16 -/* definitions for icons (and their alignment) in buttons */ -#define UI_ICON_LEFT 32 -#define UI_ICON_RIGHT 64 + /* definitions for icons (and their alignment) in buttons */ -/* uiBlock->flag */ -#define UI_BLOCK_LOOP 1 -#define UI_BLOCK_REDRAW 2 -#define UI_BLOCK_RET_1 4 -#define UI_BLOCK_BUSY 8 -#define UI_BLOCK_NUMSELECT 16 -#define UI_BLOCK_ENTER_OK 32 - - -/* uiBlock->dt */ -#define UI_EMBOSSX 0 /* Rounded embossed button */ -#define UI_EMBOSSW 1 /* Flat bordered button */ -#define UI_EMBOSSN 2 /* No border */ -#define UI_EMBOSSF 3 /* Square embossed button */ -#define UI_EMBOSSM 4 /* Colored Border */ -#define UI_EMBOSSP 5 /* Borderless coloured button */ -#define UI_EMBOSSA 6 /* same as EMBOSSX but with arrows to simulate */ -#define UI_EMBOSSTABL 7 -#define UI_EMBOSSTABM 8 -#define UI_EMBOSSTABR 9 -#define UI_EMBOSST 10 -#define UI_EMBOSSMB 11 /* emboss menu button */ - -/* uiBlock->direction */ -#define UI_TOP 0 -#define UI_DOWN 1 -#define UI_LEFT 2 -#define UI_RIGHT 3 - -/* uiBlock->autofill */ -#define UI_BLOCK_COLLUMNS 1 -#define UI_BLOCK_ROWS 2 - -#define UI_PNL_TRANSP 0 -#define UI_PNL_SOLID 1 + +/* block->frontbuf: (only internal here), to nice localize the old global var uiFrontBuf */ +#define UI_NEED_DRAW_FRONT 1 +#define UI_HAS_DRAW_FRONT 2 + + +/* internal panel drawing defines */ +#define PNL_GRID 4 +#define PNL_DIST 8 +#define PNL_SAFETY 8 +#define PNL_HEADER 20 + +/* panel->flag */ +#define PNL_SELECT 1 +#define PNL_CLOSEDX 2 +#define PNL_CLOSEDY 4 +#define PNL_CLOSED 6 +#define PNL_TABBED 8 +#define PNL_OVERLAP 16 + + + +typedef struct { + short xim, yim; + unsigned int *rect; + short xofs, yofs; +} uiIconImage; + +typedef struct { + short mval[2]; + short qual, val; + int event; +} uiEvent; + +typedef struct { + void *xl, *large, *medium, *small; +} uiFont; + +typedef struct uiLinkLine uiLinkLine; +struct uiLinkLine { /* only for draw/edit */ + uiLinkLine *next, *prev; + + short flag, pad; + + uiBut *from, *to; +}; + +typedef struct { + void **poin; /* pointer to original pointer */ + void ***ppoin; /* pointer to original pointer-array */ + short *totlink; /* if pointer-array, here is the total */ + + short maxlink, pad; + short fromcode, tocode; + + ListBase lines; +} uiLink; + +struct uiBut { + uiBut *next, *prev; + short type, pointype, bit, bitnr, retval, flag, strwidth, ofs, pos; + + char *str; + char strdata[UI_MAX_NAME_STR]; + char drawstr[UI_MAX_DRAW_STR]; + + float x1, y1, x2, y2; + + char *poin; + float min, max; + float a1, a2, rt[4]; + float aspect; + + void (*func)(void *, void *); + void *func_arg1; + void *func_arg2; + + void (*embossfunc)(BIFColorID, float, float, float, float, float, int); + + uiLink *link; + + char *tip, *lockstr; + + BIFColorID col; + void *font; + + BIFIconID icon; + short lock, win; + short iconadd; + + /* IDPOIN data */ + uiIDPoinFuncFP idpoin_func; + ID **idpoin_idpp; + + /* BLOCK data */ + uiBlockFuncFP block_func; + + /* BUTM data */ + void (*butm_func)(void *arg, int event); + void *butm_func_arg; + + /* pointer back */ + uiBlock *block; +}; + +struct uiBlock { + uiBlock *next, *prev; + + ListBase buttons; + Panel *panel; + + char name[UI_MAX_NAME_STR]; + + float winmat[4][4]; + + float minx, miny, maxx, maxy; + float aspect; + + void (*butm_func)(void *arg, int event); + void *butm_func_arg; + + void (*func)(void *arg1, void *arg2); + void *func_arg1; + void *func_arg2; + + /* extra draw function for custom blocks */ + void (*drawextra)(); + + BIFColorID col; + short font; /* indices */ + int afterval; + void *curfont; + + short autofill, flag, win, winq, direction, dt, frontbuf, auto_open; //frontbuf see below + void *saveunder; + + float xofs, yofs; // offset to parent button + rctf parentrct; // for pulldowns, rect the mouse is allowed outside of menu (parent button) +}; + +/* interface.c */ +extern void ui_check_but(uiBut *but); +extern void ui_autofill(uiBlock *block); + +/* interface_panel.c */ +extern void ui_draw_panel(uiBlock *block); +extern void ui_do_panel(uiBlock *block, uiEvent *uevent); + + + #endif diff --git a/source/blender/src/buttons.txt b/source/blender/src/buttons.txt deleted file mode 100644 index 36d00fd6295..00000000000 --- a/source/blender/src/buttons.txt +++ /dev/null @@ -1,246 +0,0 @@ -/** - * $Id$ - * - * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. The Blender - * Foundation also sells licenses for use in proprietary software under - * the Blender License. See http://www.blender.org/BL/ for information - * about this. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL/BL DUAL LICENSE BLOCK ***** - * Everything for drawing buttons (and I do mean _everything_). - */ - - -/* System includes ----------------------------------------------------- */ - -#include <time.h> -#include <math.h> -#include <stdlib.h> -#include <string.h> - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#ifdef _WIN32 -#include "BLI_winstuff.h" -#else -#include <unistd.h> -#endif -#include "MEM_guardedalloc.h" - -#include "BMF_Api.h" - -#include "IMB_imbuf_types.h" -#include "IMB_imbuf.h" - -#include "BLI_blenlib.h" -#include "BLI_arithb.h" -#include "BLI_editVert.h" - -#include "DNA_action_types.h" -#include "DNA_armature_types.h" -#include "DNA_camera_types.h" -#include "DNA_constraint_types.h" -#include "DNA_curve_types.h" -#include "DNA_effect_types.h" -#include "DNA_group_types.h" -#include "DNA_ika_types.h" -#include "DNA_image_types.h" -#include "DNA_key_types.h" -#include "DNA_lamp_types.h" -#include "DNA_lattice_types.h" -#include "DNA_material_types.h" -#include "DNA_meta_types.h" -#include "DNA_mesh_types.h" -#include "DNA_object_types.h" -#include "DNA_packedFile_types.h" -#include "DNA_radio_types.h" -#include "DNA_scene_types.h" -#include "DNA_screen_types.h" -#include "DNA_sound_types.h" -#include "DNA_space_types.h" -#include "DNA_texture_types.h" -#include "DNA_userdef_types.h" -#include "DNA_vfont_types.h" -#include "DNA_view3d_types.h" -#include "DNA_world_types.h" - -#include "BKE_anim.h" -#include "BKE_armature.h" -#include "BKE_constraint.h" -#include "BKE_curve.h" -#include "BKE_displist.h" -#include "BKE_effect.h" -#include "BKE_font.h" -#include "BKE_global.h" -#include "BKE_ika.h" -#include "BKE_image.h" -#include "BKE_ipo.h" -#include "BKE_lattice.h" -#include "BKE_library.h" -#include "BKE_main.h" -#include "BKE_material.h" -#include "BKE_mball.h" -#include "BKE_mesh.h" -#include "BKE_object.h" -#include "BKE_packedFile.h" -#include "BKE_plugin_types.h" -#include "BKE_sound.h" -#include "BKE_texture.h" -#include "BKE_utildefines.h" -#include "BKE_writeavi.h" - -/* Everything from source (BIF, BDR, BSE) ------------------------------ */ - -#include "BDR_drawobject.h" -#include "BDR_editcurve.h" -#include "BDR_editface.h" -#include "BDR_editobject.h" -#include "BDR_vpaint.h" - -#include "BSE_drawview.h" -#include "BSE_editipo.h" -#include "BSE_edit.h" -#include "BSE_filesel.h" -#include "BSE_headerbuttons.h" -#include "BSE_trans_types.h" -#include "BSE_view.h" -#include "BSE_buttons.h" -#include "BSE_seqaudio.h" - -#include "BIF_gl.h" -#include "BIF_editarmature.h" -#include "BIF_editconstraint.h" -#include "BIF_editdeform.h" -#include "BIF_editfont.h" -#include "BIF_editmesh.h" -#include "BIF_editsca.h" -#include "BIF_editsound.h" -#include "BIF_interface.h" -#include "BIF_mywindow.h" -#include "BIF_renderwin.h" -#include "BIF_resources.h" -#include "BIF_screen.h" -#include "BIF_scrarea.h" -#include "BIF_space.h" -#include "BIF_toets.h" -#include "BIF_toolbox.h" -#include "BIF_previewrender.h" -#include "BIF_writeimage.h" -#include "BIF_writeavicodec.h" -#ifdef WITH_QUICKTIME -#include "quicktime_export.h" -#endif - -/* 'old' stuff": defines and types ------------------------------------- */ -#include "blendef.h" -#include "interface.h" - -/* old style modules --------------------------------------------------- */ - -#include "mydevice.h" - -#include "render.h" -#include "radio.h" -#include "nla.h" /* For __NLA: Do not remove! */ - -/* Decimation includes. See LOD_DependKludge.h for enabling Decimation */ -#include "LOD_DependKludge.h" -#ifdef NAN_DECIMATION - #include "LOD_decimation.h" -#endif - -/* own include --------------------------------------------------------- */ -#include "BSE_buttons.h" - -/* some dirt ... let the linker deal with it :( ------------------------ */ -extern ListBase editNurb; /* from editcurve */ -extern VPaint Gvp; /* from vpaint */ - -/* Local vars ---------------------------------------------------------- */ -short bgpicmode=0, near=1000, far=1000; -short degr= 90, step= 9, turn= 1, editbutflag= 1; -float hspeed=0.1f, prspeed=0.0f, prlen=0.0f, doublimit= 0.001f; -int decim_faces=0; - -#ifdef __NLA -float editbutvweight=1; -#endif -float extr_offs= 1.0, editbutweight=1.0, editbutsize=0.1, cumapsize= 1.0; -MTex emptytex; -char texstr[15][8]= {"None" , "Clouds" , "Wood", - "Marble", "Magic" , "Blend", - "Stucci", "Noise" , "Image", - "Plugin", "EnvMap" , "", - "" , "" , ""}; - - -/* Local functions ----------------------------------------------------- */ -static char *physics_pup(void) -{ - /* the number needs to match defines in KX_PhysicsBlenderSceneConverter.cpp */ - return ; -} - - -static void draw_buttons_edge(int win, float x1) -{ - float asp, winmat[4][4]; - int w,h; - - bwin_getsinglematrix(win, winmat); - bwin_getsize(win, &w, &h); - asp= (float)(2.0/(w*winmat[0][0])); - - glColor3ub(0,0,0); - fdrawline(x1, -1000, x1, 2000); - glColor3ub(255,255,255); - fdrawline(x1+asp, -1000, x1+asp, 2000); -} - -static int packdummy = 0; - - -// Bish made it to here. (reviewing tooltips) - - -/* ****************************** MATERIAL ************************ */ - - -/* **************************** VIEW ************************ */ - -/* **************************** VIEW ************************ */ - - -static void scene_change_set(Scene *sc, Scene *set) { - if (sc->set!=set) { - sc->set= set; - - allqueue(REDRAWBUTSRENDER, 0); - allqueue(REDRAWVIEW3D, 0); - } -} - - diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c index 84b5029ee26..2af018ce5b2 100644 --- a/source/blender/src/buttons_editing.c +++ b/source/blender/src/buttons_editing.c @@ -103,7 +103,6 @@ #include "BIF_previewrender.h" #include "BIF_butspace.h" -#include "interface.h" #include "mydevice.h" #include "blendef.h" diff --git a/source/blender/src/buttons_logic.c b/source/blender/src/buttons_logic.c index 79d353d5945..e1d0276be08 100644 --- a/source/blender/src/buttons_logic.c +++ b/source/blender/src/buttons_logic.c @@ -86,7 +86,6 @@ #include "blendef.h" #include "mydevice.h" -#include "interface.h" #include "nla.h" /* For __NLA : Important, do not remove */ #include "butspace.h" // own module diff --git a/source/blender/src/buttons_object.c b/source/blender/src/buttons_object.c index f3466b0590b..e609d920afe 100644 --- a/source/blender/src/buttons_object.c +++ b/source/blender/src/buttons_object.c @@ -74,7 +74,6 @@ #include "BDR_drawobject.h" #include "BIF_butspace.h" -#include "interface.h" #include "mydevice.h" #include "blendef.h" diff --git a/source/blender/src/buttons_scene.c b/source/blender/src/buttons_scene.c index 08f9ab9e2dd..a879245da46 100644 --- a/source/blender/src/buttons_scene.c +++ b/source/blender/src/buttons_scene.c @@ -76,7 +76,6 @@ #include "BIF_butspace.h" -#include "interface.h" #include "mydevice.h" #include "blendef.h" diff --git a/source/blender/src/buttons_script.c b/source/blender/src/buttons_script.c index 9e0593509c5..3a19442ad24 100644 --- a/source/blender/src/buttons_script.c +++ b/source/blender/src/buttons_script.c @@ -109,7 +109,6 @@ #include "BIF_butspace.h" -#include "interface.h" #include "mydevice.h" #include "blendef.h" #include "butspace.h" diff --git a/source/blender/src/buttons_shading.c b/source/blender/src/buttons_shading.c index 7db7ba4a8ec..13a95622e59 100644 --- a/source/blender/src/buttons_shading.c +++ b/source/blender/src/buttons_shading.c @@ -97,7 +97,6 @@ #include "BIF_writeimage.h" #include "BIF_toets.h" -#include "interface.h" #include "mydevice.h" #include "blendef.h" #include "radio.h" diff --git a/source/blender/src/drawaction.c b/source/blender/src/drawaction.c index 7c0949a0a74..33ddedd90fa 100644 --- a/source/blender/src/drawaction.c +++ b/source/blender/src/drawaction.c @@ -85,7 +85,6 @@ /* 'old' stuff": defines and types, and own include -------------------- */ #include "blendef.h" -#include "interface.h" #include "mydevice.h" #include "BKE_ipo.h" diff --git a/source/blender/src/drawimasel.c b/source/blender/src/drawimasel.c index 5dce85ef344..a691e82e24b 100644 --- a/source/blender/src/drawimasel.c +++ b/source/blender/src/drawimasel.c @@ -65,7 +65,6 @@ #include "BSE_drawimasel.h" #include "BSE_filesel.h" -#include "interface.h" #include "blendef.h" #include "mydevice.h" diff --git a/source/blender/src/drawipo.c b/source/blender/src/drawipo.c index 77f07e8eb5c..7df9a44133a 100644 --- a/source/blender/src/drawipo.c +++ b/source/blender/src/drawipo.c @@ -78,7 +78,6 @@ #include "BSE_editnla_types.h" #include "mydevice.h" -#include "interface.h" #include "ipo.h" /* retains old stuff */ #include "blendef.h" diff --git a/source/blender/src/drawnla.c b/source/blender/src/drawnla.c index f19a294aaad..65b9209ce32 100644 --- a/source/blender/src/drawnla.c +++ b/source/blender/src/drawnla.c @@ -72,7 +72,6 @@ #include "BDR_editcurve.h" #include "blendef.h" -#include "interface.h" /* Local function prototypes */ static void draw_nlastrips(SpaceNla *snla); diff --git a/source/blender/src/drawoops.c b/source/blender/src/drawoops.c index 7ddb9361428..bf5971839b9 100644 --- a/source/blender/src/drawoops.c +++ b/source/blender/src/drawoops.c @@ -65,7 +65,6 @@ #include "BIF_glutil.h" #include "BIF_resources.h" #include "BIF_screen.h" -#include "BIF_interface.h" #include "BIF_mywindow.h" /* #include "BIF_drawoops.h" bad name :(*/ @@ -73,7 +72,6 @@ #include "BSE_drawipo.h" #include "BSE_drawoops.h" -#include "interface.h" float oopscalex; diff --git a/source/blender/src/drawtext.c b/source/blender/src/drawtext.c index 4b83323f941..e7667b64a54 100644 --- a/source/blender/src/drawtext.c +++ b/source/blender/src/drawtext.c @@ -82,7 +82,6 @@ #include "mydevice.h" #include "blendef.h" -#include "interface.h" #define TEXTXLOC 38 diff --git a/source/blender/src/drawview.c b/source/blender/src/drawview.c index 968c9ac663e..bbaa95489c2 100644 --- a/source/blender/src/drawview.c +++ b/source/blender/src/drawview.c @@ -106,7 +106,6 @@ #include "BPY_extern.h" // Blender Python library -#include "interface.h" #include "blendef.h" #include "mydevice.h" #include "butspace.h" // event codes diff --git a/source/blender/src/edit.c b/source/blender/src/edit.c index bf0f91cf61c..ac3ea078c32 100644 --- a/source/blender/src/edit.c +++ b/source/blender/src/edit.c @@ -91,8 +91,8 @@ /* old stuff */ #include "blendef.h" -#include "interface.h" #include "mydevice.h" + /*#include "armature.h"*/ /* #include "edit.h" */ #include "nla.h" diff --git a/source/blender/src/editaction.c b/source/blender/src/editaction.c index 5ebe463e40a..b1850aeb0b3 100644 --- a/source/blender/src/editaction.c +++ b/source/blender/src/editaction.c @@ -93,7 +93,6 @@ #include "BDR_editobject.h" -#include "interface.h" #include "mydevice.h" #include "blendef.h" #include "nla.h" diff --git a/source/blender/src/editarmature.c b/source/blender/src/editarmature.c index d0a428408be..58a8627b9ea 100644 --- a/source/blender/src/editarmature.c +++ b/source/blender/src/editarmature.c @@ -89,7 +89,6 @@ #include "BSE_editaction.h" #include "mydevice.h" -#include "interface.h" #include "blendef.h" #include "nla.h" diff --git a/source/blender/src/editconstraint.c b/source/blender/src/editconstraint.c index 574e55b03e5..60798fe0b8b 100644 --- a/source/blender/src/editconstraint.c +++ b/source/blender/src/editconstraint.c @@ -61,7 +61,6 @@ #include "BSE_editaction.h" -#include "interface.h" #include "blendef.h" #include "nla.h" diff --git a/source/blender/src/editcurve.c b/source/blender/src/editcurve.c index 3e2d4119e72..476901586c6 100644 --- a/source/blender/src/editcurve.c +++ b/source/blender/src/editcurve.c @@ -86,9 +86,6 @@ #include "BDR_editcurve.h" #include "BDR_editobject.h" -/* #include "graphics.h" */ -#include "interface.h" /* MAART: for NUM and FLO types, + pupmenu */ -/* #include "edit.h" */ #include "mydevice.h" #include "blendef.h" diff --git a/source/blender/src/editface.c b/source/blender/src/editface.c index d1b520260d9..7a30c7230bc 100644 --- a/source/blender/src/editface.c +++ b/source/blender/src/editface.c @@ -87,9 +87,6 @@ #include "blendef.h" #include "render.h" -/* #include "graphics.h" */ -// #include "blendef.h" -#include "interface.h" #include "TPT_DependKludge.h" #ifdef NAN_TPT diff --git a/source/blender/src/editgroup.c b/source/blender/src/editgroup.c index 194e9671088..1338fb998b2 100644 --- a/source/blender/src/editgroup.c +++ b/source/blender/src/editgroup.c @@ -52,7 +52,6 @@ #include "BIF_toolbox.h" #include "BIF_editgroup.h" -#include "interface.h" #include "blendef.h" #include "mydevice.h" diff --git a/source/blender/src/editimasel.c b/source/blender/src/editimasel.c index fbe6e1b3f2a..3c32dfb7e1d 100644 --- a/source/blender/src/editimasel.c +++ b/source/blender/src/editimasel.c @@ -71,7 +71,6 @@ #include "blendef.h" #include "mydevice.h" -#include "interface.h" #define XIC 20 #define YIC 21 diff --git a/source/blender/src/editipo.c b/source/blender/src/editipo.c index 2d52b6e9f62..6d40db54c6f 100644 --- a/source/blender/src/editipo.c +++ b/source/blender/src/editipo.c @@ -117,7 +117,6 @@ #include "blendef.h" #include "mydevice.h" -#include "interface.h" #include "render.h" /* forwards */ diff --git a/source/blender/src/editkey.c b/source/blender/src/editkey.c index 0edc47ad9c8..c554d212977 100644 --- a/source/blender/src/editkey.c +++ b/source/blender/src/editkey.c @@ -87,7 +87,6 @@ #include "blendef.h" #include "mydevice.h" #include "ipo.h" -#include "interface.h" extern ListBase editNurb; /* in editcurve.c */ diff --git a/source/blender/src/editmesh.c b/source/blender/src/editmesh.c index 4da75e11183..9ea3fe6fa1d 100644 --- a/source/blender/src/editmesh.c +++ b/source/blender/src/editmesh.c @@ -94,7 +94,6 @@ #include "mydevice.h" #include "blendef.h" -#include "interface.h" /* MAART: for NUM and FLO types */ #include "nla.h" /* For __NLA : Important - Do not remove! */ #include "render.h" diff --git a/source/blender/src/editnla.c b/source/blender/src/editnla.c index 712fc93c626..da828399b42 100644 --- a/source/blender/src/editnla.c +++ b/source/blender/src/editnla.c @@ -78,7 +78,6 @@ #include "BSE_filesel.h" #include "BDR_editobject.h" -#include "interface.h" #include "blendef.h" #include "mydevice.h" diff --git a/source/blender/src/editobject.c b/source/blender/src/editobject.c index 099f8dc2458..7604e6d4d9c 100644 --- a/source/blender/src/editobject.c +++ b/source/blender/src/editobject.c @@ -147,8 +147,6 @@ #include "nla.h" #include "blendef.h" -/* #include "graphics.h" */ -#include "interface.h" #include "BKE_constraint.h" #include "BIF_editconstraint.h" diff --git a/source/blender/src/editoops.c b/source/blender/src/editoops.c index fb87b7cb849..b747a21e5b0 100644 --- a/source/blender/src/editoops.c +++ b/source/blender/src/editoops.c @@ -70,6 +70,7 @@ #include "BIF_drawscene.h" #include "BIF_mywindow.h" #include "BIF_toolbox.h" +#include "BIF_interface.h" #include "BDR_editobject.h" @@ -78,7 +79,6 @@ #include "blendef.h" #include "mydevice.h" -#include "interface.h" typedef struct TransOops { diff --git a/source/blender/src/editscreen.c b/source/blender/src/editscreen.c index 3335df0bdb3..a3813220dc9 100644 --- a/source/blender/src/editscreen.c +++ b/source/blender/src/editscreen.c @@ -98,7 +98,6 @@ #include "BSE_headerbuttons.h" #include "BSE_view.h" -#include "interface.h" #include "mydevice.h" #include "blendef.h" #include "render.h" diff --git a/source/blender/src/editseq.c b/source/blender/src/editseq.c index e4b174ab87a..a4cdd489f57 100644 --- a/source/blender/src/editseq.c +++ b/source/blender/src/editseq.c @@ -94,7 +94,6 @@ #include "blendef.h" #include "mydevice.h" -#include "interface.h" /* for button types, pupmenu */ Sequence *last_seq=0; char last_imagename[80]= "/"; diff --git a/source/blender/src/editsima.c b/source/blender/src/editsima.c index a743dd2fd5f..41f28870d5b 100644 --- a/source/blender/src/editsima.c +++ b/source/blender/src/editsima.c @@ -80,7 +80,6 @@ #include "blendef.h" #include "mydevice.h" -#include "interface.h" static int is_uv_tface_editing_allowed(void) { diff --git a/source/blender/src/editsound.c b/source/blender/src/editsound.c index 29942926d5f..6a23731a755 100644 --- a/source/blender/src/editsound.c +++ b/source/blender/src/editsound.c @@ -73,7 +73,6 @@ #include "blendef.h" -#include "interface.h" #include "mydevice.h" #include "SND_C-api.h" diff --git a/source/blender/src/filesel.c b/source/blender/src/filesel.c index 8c7851abff1..4722d526b5e 100644 --- a/source/blender/src/filesel.c +++ b/source/blender/src/filesel.c @@ -102,7 +102,6 @@ #include "mydevice.h" #include "blendef.h" #include "render.h" -#include "interface.h" #include "nla.h" diff --git a/source/blender/src/header_action.c b/source/blender/src/header_action.c index e1a3d67d2de..7a20f9a9e76 100644 --- a/source/blender/src/header_action.c +++ b/source/blender/src/header_action.c @@ -74,7 +74,6 @@ #include "nla.h" #include "blendef.h" -#include "interface.h" #include "mydevice.h" void do_action_buttons(unsigned short event) diff --git a/source/blender/src/header_buttonswin.c b/source/blender/src/header_buttonswin.c index 81bb8e95eaa..9fd6b543350 100644 --- a/source/blender/src/header_buttonswin.c +++ b/source/blender/src/header_buttonswin.c @@ -84,7 +84,6 @@ #include "MEM_guardedalloc.h" #include "blendef.h" -#include "interface.h" #include "mydevice.h" #include "butspace.h" diff --git a/source/blender/src/header_filesel.c b/source/blender/src/header_filesel.c index abef906a1e4..cb59284ae89 100644 --- a/source/blender/src/header_filesel.c +++ b/source/blender/src/header_filesel.c @@ -70,7 +70,6 @@ #include "BSE_headerbuttons.h" #include "blendef.h" -#include "interface.h" #include "mydevice.h" void do_file_buttons(short event) diff --git a/source/blender/src/header_image.c b/source/blender/src/header_image.c index 416e026897d..9890bca5e68 100644 --- a/source/blender/src/header_image.c +++ b/source/blender/src/header_image.c @@ -82,7 +82,6 @@ #include "IMB_imbuf_types.h" #include "blendef.h" -#include "interface.h" #include "mydevice.h" #include "TPT_DependKludge.h" diff --git a/source/blender/src/header_imasel.c b/source/blender/src/header_imasel.c index 2eab6a25e6d..4f486ab5ff5 100644 --- a/source/blender/src/header_imasel.c +++ b/source/blender/src/header_imasel.c @@ -65,7 +65,6 @@ #include "BKE_main.h" #include "BSE_headerbuttons.h" -#include "interface.h" #include "blendef.h" diff --git a/source/blender/src/header_info.c b/source/blender/src/header_info.c index 413ef1e3777..23438081f31 100644 --- a/source/blender/src/header_info.c +++ b/source/blender/src/header_info.c @@ -112,7 +112,6 @@ #include "render.h" // for R - should use BKE_bad_level_calls.h instead? #include "blendef.h" -#include "interface.h" #include "mydevice.h" extern char versionstr[]; /* from blender.c */ diff --git a/source/blender/src/header_ipo.c b/source/blender/src/header_ipo.c index cb0b471af72..ce6c9e69582 100644 --- a/source/blender/src/header_ipo.c +++ b/source/blender/src/header_ipo.c @@ -77,7 +77,6 @@ #include "nla.h" #include "blendef.h" -#include "interface.h" #include "mydevice.h" static int viewmovetemp = 0; diff --git a/source/blender/src/header_nla.c b/source/blender/src/header_nla.c index 0d76536f4df..7130b50ee44 100644 --- a/source/blender/src/header_nla.c +++ b/source/blender/src/header_nla.c @@ -68,7 +68,6 @@ //#include "nla.h" #include "blendef.h" -#include "interface.h" #include "mydevice.h" void do_nla_buttons(unsigned short event) diff --git a/source/blender/src/header_oops.c b/source/blender/src/header_oops.c index 80b9f7d5ce8..c2992171732 100644 --- a/source/blender/src/header_oops.c +++ b/source/blender/src/header_oops.c @@ -67,7 +67,6 @@ #include "BSE_drawoops.h" #include "BSE_headerbuttons.h" -#include "interface.h" #include "blendef.h" static int viewmovetemp = 0; diff --git a/source/blender/src/header_seq.c b/source/blender/src/header_seq.c index c7fe2443361..e08c086b91d 100644 --- a/source/blender/src/header_seq.c +++ b/source/blender/src/header_seq.c @@ -68,7 +68,6 @@ #include "BSE_sequence.h" #include "blendef.h" -#include "interface.h" #include "mydevice.h" static int viewmovetemp = 0; diff --git a/source/blender/src/header_sound.c b/source/blender/src/header_sound.c index 0d25f4e7d0d..eea0d4a51ea 100644 --- a/source/blender/src/header_sound.c +++ b/source/blender/src/header_sound.c @@ -73,7 +73,6 @@ #include "BSE_headerbuttons.h" #include "blendef.h" -#include "interface.h" #include "mydevice.h" void do_sound_buttons(unsigned short event) diff --git a/source/blender/src/header_text.c b/source/blender/src/header_text.c index 33833534d55..c87f2d294c8 100644 --- a/source/blender/src/header_text.c +++ b/source/blender/src/header_text.c @@ -73,7 +73,6 @@ #include "BSE_filesel.h" #include "blendef.h" -#include "interface.h" #include "mydevice.h" void do_text_buttons(unsigned short event) diff --git a/source/blender/src/header_view3d.c b/source/blender/src/header_view3d.c index 4025447fc7e..70c4c106818 100644 --- a/source/blender/src/header_view3d.c +++ b/source/blender/src/header_view3d.c @@ -103,7 +103,6 @@ #include "BIF_gl.h" #include "blendef.h" -#include "interface.h" #include "mydevice.h" #include "butspace.h" diff --git a/source/blender/src/headerbuttons.c b/source/blender/src/headerbuttons.c index b3a456b2c82..ba63129b225 100644 --- a/source/blender/src/headerbuttons.c +++ b/source/blender/src/headerbuttons.c @@ -169,7 +169,6 @@ #include "BPY_extern.h" // Blender Python library -#include "interface.h" #include "mydevice.h" #include "blendef.h" #include "render.h" diff --git a/source/blender/src/headerbuttons.txt b/source/blender/src/headerbuttons.txt deleted file mode 100644 index 9c906d5e7cb..00000000000 --- a/source/blender/src/headerbuttons.txt +++ /dev/null @@ -1,8520 +0,0 @@ -/** - * $Id$ - * - * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. The Blender - * Foundation also sells licenses for use in proprietary software under - * the Blender License. See http://www.blender.org/BL/ for information - * about this. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL/BL DUAL LICENSE BLOCK ***** - */ - -#include <stdlib.h> -#include <string.h> -#include <math.h> - -#include <sys/types.h> - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#ifdef WIN32 -#include "BLI_winstuff.h" -#endif - -#include "MEM_guardedalloc.h" - -#include "BMF_Api.h" -#include "BIF_language.h" -#ifdef INTERNATIONAL -#include "FTF_Api.h" -#endif - -#include "BLI_blenlib.h" -#include "BLI_arithb.h" -#include "BLI_editVert.h" -#include "BLI_storage_types.h" - -#include "IMB_imbuf_types.h" -#include "IMB_imbuf.h" - -#include "DNA_ID.h" -#include "DNA_action_types.h" -#include "DNA_armature_types.h" -#include "DNA_camera_types.h" -#include "DNA_curve_types.h" -#include "DNA_group_types.h" -#include "DNA_image_types.h" -#include "DNA_ipo_types.h" -#include "DNA_key_types.h" -#include "DNA_lamp_types.h" -#include "DNA_lattice_types.h" -#include "DNA_material_types.h" -#include "DNA_mesh_types.h" -#include "DNA_meta_types.h" -#include "DNA_object_types.h" -#include "DNA_oops_types.h" -#include "DNA_packedFile_types.h" -#include "DNA_scene_types.h" -#include "DNA_screen_types.h" -#include "DNA_sequence_types.h" -#include "DNA_sound_types.h" -#include "DNA_space_types.h" -#include "DNA_texture_types.h" -#include "DNA_text_types.h" -#include "DNA_userdef_types.h" -#include "DNA_view2d_types.h" -#include "DNA_view3d_types.h" -#include "DNA_world_types.h" -#include "DNA_constraint_types.h" - -#include "BKE_utildefines.h" - -#include "BKE_constraint.h" -#include "BKE_action.h" -#include "BKE_armature.h" -#include "BKE_blender.h" -#include "BKE_curve.h" -#include "BKE_displist.h" -#include "BKE_exotic.h" -#include "BKE_global.h" -#include "BKE_image.h" -#include "BKE_ika.h" -#include "BKE_ipo.h" -#include "BKE_key.h" -#include "BKE_lattice.h" -#include "BKE_library.h" -#include "BKE_main.h" -#include "BKE_material.h" -#include "BKE_mball.h" -#include "BKE_mesh.h" -#include "BKE_object.h" -#include "BKE_packedFile.h" -#include "BKE_sca.h" -#include "BKE_scene.h" -#include "BKE_texture.h" -#include "BKE_text.h" -#include "BKE_world.h" - -#include "BLO_readfile.h" -#include "BLO_writefile.h" - -#include "BIF_drawimage.h" -#include "BIF_drawoops.h" -#include "BIF_drawscene.h" -#include "BIF_drawtext.h" -#include "BIF_editarmature.h" -#include "BIF_editfont.h" -#include "BIF_editlattice.h" -#include "BIF_editconstraint.h" -#include "BIF_editmesh.h" -#include "BIF_editmesh.h" -#include "BIF_editsima.h" -#include "BIF_editsound.h" -#include "BIF_editsound.h" -#include "BIF_gl.h" -#include "BIF_imasel.h" -#include "BIF_interface.h" -#include "BIF_mainqueue.h" -#include "BIF_mywindow.h" -#include "BIF_poseobject.h" -#include "BIF_renderwin.h" -#include "BIF_resources.h" -#include "BIF_screen.h" -#include "BIF_space.h" -#include "BIF_toets.h" -#include "BIF_toets.h" -#include "BIF_toolbox.h" -#include "BIF_usiblender.h" -#include "BIF_previewrender.h" -#include "BIF_writeimage.h" - -#include "BSE_edit.h" -#include "BSE_filesel.h" -#include "BSE_headerbuttons.h" -#include "BSE_view.h" -#include "BSE_sequence.h" -#include "BSE_editaction.h" -#include "BSE_editaction_types.h" -#include "BSE_editipo.h" -#include "BSE_drawipo.h" - -#include "BDR_drawmesh.h" -#include "BDR_vpaint.h" -#include "BDR_editface.h" -#include "BDR_editobject.h" -#include "BDR_editcurve.h" -#include "BDR_editmball.h" - -#include "BPY_extern.h" // Blender Python library - -#include "interface.h" -#include "mydevice.h" -#include "blendef.h" -#include "render.h" -#include "ipo.h" -#include "nla.h" /* __NLA : To be removed later */ - -#include "TPT_DependKludge.h" - -/* local (?) functions */ -void do_file_buttons(short event); -void do_text_buttons(unsigned short event); -void load_space_sound(char *str); -void load_sound_buttons(char *str); -void load_space_image(char *str); -void image_replace(Image *old, Image *new); -void replace_space_image(char *str); -void do_image_buttons(unsigned short event); -void do_imasel_buttons(short event); -static void check_packAll(void); -static void unique_bone_name(Bone *bone, bArmature *arm); -static int bonename_exists(Bone *orig, char *name, ListBase *list); - -static void test_idbutton_cb(void *namev, void *arg2_unused) -{ - char *name= namev; - test_idbutton(name+2); -} - -#define SPACEICONMAX 14 /* See release/datafiles/blenderbuttons */ - -#include "BIF_poseobject.h" - -#include "SYS_System.h" - -static int std_libbuttons(uiBlock *block, - int xco, int pin, short *pinpoin, - int browse, ID *id, ID *parid, - short *menupoin, int users, - int lib, int del, int autobut, int keepbut); - - -extern char versionstr[]; /* from blender.c */ -/* extern void add_text_fs(char *file); *//* from text.c, BIF_text.h*/ - - /* WATCH IT: always give all headerbuttons for same window the same name - * event B_REDR is a standard redraw - * - */ - - -/* View3d->modeselect - * This is a bit of a dodgy hack to enable a 'mode' menu with icons+labels rather than those buttons. - * I know the implementation's not good - it's an experiment to see if this approach would work well - * - * This can be cleaned when I make some new 'mode' icons. - */ - -#define V3D_OBJECTMODE_SEL ICON_ORTHO -#define V3D_EDITMODE_SEL ICON_EDITMODE_HLT -#define V3D_FACESELECTMODE_SEL ICON_FACESEL_HLT -#define V3D_VERTEXPAINTMODE_SEL ICON_VPAINT_HLT -#define V3D_TEXTUREPAINTMODE_SEL ICON_TPAINT_HLT -#define V3D_WEIGHTPAINTMODE_SEL ICON_WPAINT_HLT -#define V3D_POSEMODE_SEL ICON_POSE_HLT - -#define XIC 20 -#define YIC 20 - -static int viewmovetemp=0; - -/* extern void info_buttons(); in BSE_headerbuttons.c */ - -extern char videosc_dir[]; /* exotic.c */ - -/* *********************************************************************** */ - -void write_videoscape_fs() -{ - if(G.obedit) { - error("Can't save Videoscape. Press TAB to leave EditMode"); - } - else { - if(videosc_dir[0]==0) strcpy(videosc_dir, G.sce); - activate_fileselect(FILE_SPECIAL, "SAVE VIDEOSCAPE", videosc_dir, write_videoscape); - } -} - -void write_vrml_fs() -{ - if(G.obedit) { - error("Can't save VRML. Press TAB to leave EditMode"); - } - else { - if(videosc_dir[0]==0) strcpy(videosc_dir, G.sce); - - activate_fileselect(FILE_SPECIAL, "SAVE VRML1", videosc_dir, write_vrml); - } - -} - -void write_dxf_fs() -{ - if(G.obedit) { - error("Can't save DXF. Press TAB to leave EditMode"); - } - else { - - if(videosc_dir[0]==0) strcpy(videosc_dir, G.sce); - - activate_fileselect(FILE_SPECIAL, "SAVE DXF", videosc_dir, write_dxf); - } -} - -/* ********************** GLOBAL ****************************** */ - -static int std_libbuttons(uiBlock *block, int xco, int pin, short *pinpoin, int browse, ID *id, ID *parid, short *menupoin, int users, int lib, int del, int autobut, int keepbut) -{ - ListBase *lb; - Object *ob; - Ipo *ipo; - uiBut *but; - int len, idwasnul=0, idtype, oldcol; - char *str=NULL, str1[10]; - - oldcol= uiBlockGetCol(block); - - if(id && pin) { - uiDefIconButS(block, ICONTOG, pin, ICON_PIN_DEHLT, (short)xco,0,XIC,YIC, pinpoin, 0, 0, 0, 0, "Keeps this view displaying the current data regardless of what object is selected"); - xco+= XIC; - } - if(browse) { - if(id==0) { - idwasnul= 1; - /* only the browse button */ - ob= OBACT; - if(curarea->spacetype==SPACE_IMAGE) { - id= G.main->image.first; - } - else if(curarea->spacetype==SPACE_SOUND) { - id= G.main->sound.first; - } - else if(curarea->spacetype==SPACE_ACTION) { - id= G.main->action.first; - } - else if(curarea->spacetype==SPACE_NLA) { - id=NULL; - } - else if(curarea->spacetype==SPACE_IPO) { - id= G.main->ipo.first; - /* test for ipotype */ - while(id) { - ipo= (Ipo *)id; - if(G.sipo->blocktype==ipo->blocktype) break; - id= id->next; - } - } - else if(curarea->spacetype==SPACE_BUTS) { - if(browse==B_WORLDBROWSE) { - id= G.main->world.first; - } - else if(ob && ob->type && (ob->type<OB_LAMP)) { - if(G.buts->mainb==CONTEXT_SHADING) { - int tab= G.buts->tab[CONTEXT_SHADING]; - - if(tab==TAB_SHADING_MAT) id= G.main->mat.first; - else if(tab==TAB_SHADING_TEX) id= G.main->tex.first; - } - } - } - else if(curarea->spacetype==SPACE_TEXT) { - id= G.main->text.first; - } - } - if(id) { - char *extrastr= NULL; - - idtype= GS(id->name); - lb= wich_libbase(G.main, GS(id->name)); - - if(idwasnul) id= NULL; - else if(id->us>1) uiBlockSetCol(block, BUTDBLUE); - - if (pin && *pinpoin) { - uiBlockSetCol(block, BUTDPINK); - } - - if ELEM7( idtype, ID_SCE, ID_SCR, ID_MA, ID_TE, ID_WO, ID_IP, ID_AC) extrastr= "ADD NEW %x 32767"; - else if (idtype==ID_TXT) extrastr= "OPEN NEW %x 32766 |ADD NEW %x 32767"; - else if (idtype==ID_SO) extrastr= "OPEN NEW %x 32766"; - - uiSetButLock(G.scene->id.lib!=0, "Can't edit library data"); - if( idtype==ID_SCE || idtype==ID_SCR ) uiClearButLock(); - - if(curarea->spacetype==SPACE_BUTS) - uiSetButLock(idtype!=ID_SCR && G.obedit!=0 && G.buts->mainb==CONTEXT_EDITING, NULL); - - if(parid) uiSetButLock(parid->lib!=0, "Can't edit library data"); - - if (lb) { - if( idtype==ID_IP) - IPOnames_to_pupstring(&str, NULL, extrastr, lb, id, menupoin, G.sipo->blocktype); - else - IDnames_to_pupstring(&str, NULL, extrastr, lb, id, menupoin); - } - - uiDefButS(block, MENU, browse, str, (short)xco,0,XIC,YIC, menupoin, 0, 0, 0, 0, "Browses existing choices or adds NEW"); - - uiClearButLock(); - - MEM_freeN(str); - xco+= XIC; - } - else if(curarea->spacetype==SPACE_BUTS) { - if(G.buts->mainb==CONTEXT_SHADING) { - uiSetButLock(G.scene->id.lib!=0, "Can't edit library data"); - if(parid) uiSetButLock(parid->lib!=0, "Can't edit library data"); - uiDefButS(block, MENU, browse, "ADD NEW %x 32767",(short) xco,0,XIC,YIC, menupoin, 0, 0, 0, 0, "Browses Datablock"); - uiClearButLock(); -// } else if (G.buts->mainb == BUTS_SOUND) { -// uiDefButS(block, MENU, browse, "OPEN NEW %x 32766",(short) xco,0,XIC,YIC, menupoin, 0, 0, 0, 0, "Browses Datablock"); - } - } - else if(curarea->spacetype==SPACE_TEXT) { - uiDefButS(block, MENU, browse, "OPEN NEW %x 32766 | ADD NEW %x 32767", (short)xco,0,XIC,YIC, menupoin, 0, 0, 0, 0, "Browses Datablock"); - } - else if(curarea->spacetype==SPACE_SOUND) { - uiDefButS(block, MENU, browse, "OPEN NEW %x 32766",(short)xco,0,XIC,YIC, menupoin, 0, 0, 0, 0, "Browses Datablock"); - } - else if(curarea->spacetype==SPACE_NLA) { - } - else if(curarea->spacetype==SPACE_ACTION) { - uiSetButLock(G.scene->id.lib!=0, "Can't edit library data"); - if(parid) uiSetButLock(parid->lib!=0, "Can't edit library data"); - - uiDefButS(block, MENU, browse, "ADD NEW %x 32767", xco,0,XIC,YIC, menupoin, 0, 0, 0, 0, "Browses Datablock"); - uiClearButLock(); - } - else if(curarea->spacetype==SPACE_IPO) { - uiSetButLock(G.scene->id.lib!=0, "Can't edit library data"); - if(parid) uiSetButLock(parid->lib!=0, "Can't edit library data"); - - uiDefButS(block, MENU, browse, "ADD NEW %x 32767", (short)xco,0,XIC,YIC, menupoin, 0, 0, 0, 0, "Browses Datablock"); - uiClearButLock(); - } - } - - - uiBlockSetCol(block, oldcol); - - if(id) { - - /* name */ - if(id->us>1) uiBlockSetCol(block, BUTDBLUE); - /* Pinned data ? */ - if (pin && *pinpoin) { - uiBlockSetCol(block, BUTDPINK); - } - /* Redalert overrides pin color */ - if(id->us<=0) uiBlockSetCol(block, REDALERT); - - uiSetButLock(id->lib!=0, "Can't edit library data"); - - str1[0]= id->name[0]; - str1[1]= id->name[1]; - str1[2]= ':'; - str1[3]= 0; - if(strcmp(str1, "SC:")==0) strcpy(str1, "SCE:"); - else if(strcmp(str1, "SR:")==0) strcpy(str1, "SCR:"); - - if( GS(id->name)==ID_IP) len= 110; - else len= 120; - - but= uiDefBut(block, TEX, B_IDNAME, str1,(short)xco, 0, (short)len, YIC, id->name+2, 0.0, 19.0, 0, 0, "Displays current Datablock name. Click to change."); - uiButSetFunc(but, test_idbutton_cb, id->name, NULL); - - uiClearButLock(); - - xco+= len; - - if(id->lib) { - - if(parid && parid->lib) uiDefIconBut(block, BUT, 0, ICON_DATALIB,(short)xco,0,XIC,YIC, 0, 0, 0, 0, 0, "Displays name of the current Indirect Library Datablock. Click to change."); - else uiDefIconBut(block, BUT, lib, ICON_PARLIB, (short)xco,0,XIC,YIC, 0, 0, 0, 0, 0, "Displays current Library Datablock name. Click to make local."); - - xco+= XIC; - } - - - if(users && id->us>1) { - uiSetButLock (pin && *pinpoin, "Can't make pinned data single-user"); - - sprintf(str1, "%d", id->us); - if(id->us<100) { - - uiDefBut(block, BUT, users, str1, (short)xco,0,XIC,YIC, 0, 0, 0, 0, 0, "Displays number of users of this data. Click to make a single-user copy."); - xco+= XIC; - } - else { - uiDefBut(block, BUT, users, str1, (short)xco, 0, XIC+10, YIC, 0, 0, 0, 0, 0, "Displays number of users of this data. Click to make a single-user copy."); - xco+= XIC+10; - } - - uiClearButLock(); - - } - - if(del) { - - uiSetButLock (pin && *pinpoin, "Can't unlink pinned data"); - if(parid && parid->lib); - else { - uiDefIconBut(block, BUT, del, ICON_X, (short)xco,0,XIC,YIC, 0, 0, 0, 0, 0, "Deletes link to this Datablock"); - xco+= XIC; - } - - uiClearButLock(); - } - - if(autobut) { - if(parid && parid->lib); - else { - uiDefIconBut(block, BUT, autobut, ICON_AUTO,(short)xco,0,XIC,YIC, 0, 0, 0, 0, 0, "Generates an automatic name"); - xco+= XIC; - } - - - } - if(keepbut) { - uiDefBut(block, BUT, keepbut, "F", (short)xco,0,XIC,YIC, 0, 0, 0, 0, 0, "Saves this datablock even if it has no users"); - xco+= XIC; - } - } - else xco+=XIC; - - uiBlockSetCol(block, oldcol); - - return xco; -} - -void do_update_for_newframe(int mute) -{ - extern void audiostream_scrub(unsigned int frame); /* seqaudio.c */ - - allqueue(REDRAWVIEW3D, 0); - allqueue(REDRAWACTION,0); - allqueue(REDRAWNLA,0); - allqueue(REDRAWIPO, 0); - allqueue(REDRAWINFO, 1); - allqueue(REDRAWSEQ, 1); - allqueue(REDRAWSOUND, 1); - allqueue(REDRAWBUTSHEAD, 0); - allqueue(REDRAWBUTSSHADING, 0); - allqueue(REDRAWBUTSOBJECT, 0); - - /* layers/materials, object ipos are calculted in where_is_object (too) */ - do_all_ipos(); - BPY_do_all_scripts(SCRIPT_FRAMECHANGED); - do_all_keys(); - do_all_actions(); - do_all_ikas(); - - test_all_displists(); - - if ( (CFRA>1) && (!mute) && (G.scene->audio.flag & AUDIO_SCRUB)) audiostream_scrub( CFRA ); -} - -void update_for_newframe(void) -{ - do_update_for_newframe(0); -} - -void update_for_newframe_muted(void) -{ - do_update_for_newframe(1); -} - -static void show_splash(void) -{ - extern char datatoc_splash_jpg[]; - extern int datatoc_splash_jpg_size; - char *string = NULL; - -#ifdef NAN_BUILDINFO - char buffer[1024]; - extern char * build_date; - extern char * build_time; - extern char * build_platform; - extern char * build_type; - - string = &buffer[0]; - sprintf(string,"Built on %s %s Version %s %s", build_date, build_time, build_platform, build_type); -#endif - - splash((void *)datatoc_splash_jpg, datatoc_splash_jpg_size, string); -} - - -/* Functions for user preferences fileselect windows */ - -void filesel_u_fontdir(char *name) -{ - char dir[FILE_MAXDIR], file[FILE_MAXFILE]; - BLI_split_dirfile(name, dir, file); - - strcpy(U.fontdir, dir); - allqueue(REDRAWALL, 0); -} - -void filesel_u_textudir(char *name) -{ - char dir[FILE_MAXDIR], file[FILE_MAXFILE]; - BLI_split_dirfile(name, dir, file); - - strcpy(U.textudir, dir); - allqueue(REDRAWALL, 0); -} - -void filesel_u_plugtexdir(char *name) -{ - char dir[FILE_MAXDIR], file[FILE_MAXFILE]; - BLI_split_dirfile(name, dir, file); - - strcpy(U.plugtexdir, dir); - allqueue(REDRAWALL, 0); -} - -void filesel_u_plugseqdir(char *name) -{ - char dir[FILE_MAXDIR], file[FILE_MAXFILE]; - BLI_split_dirfile(name, dir, file); - - strcpy(U.plugseqdir, dir); - allqueue(REDRAWALL, 0); -} - -void filesel_u_renderdir(char *name) -{ - char dir[FILE_MAXDIR], file[FILE_MAXFILE]; - BLI_split_dirfile(name, dir, file); - - strcpy(U.renderdir, dir); - allqueue(REDRAWALL, 0); -} - -void filesel_u_pythondir(char *name) -{ - char dir[FILE_MAXDIR], file[FILE_MAXFILE]; - BLI_split_dirfile(name, dir, file); - - strcpy(U.pythondir, dir); - allqueue(REDRAWALL, 0); -} - -void filesel_u_sounddir(char *name) -{ - char dir[FILE_MAXDIR], file[FILE_MAXFILE]; - BLI_split_dirfile(name, dir, file); - - strcpy(U.sounddir, dir); - allqueue(REDRAWALL, 0); -} - -void filesel_u_tempdir(char *name) -{ - char dir[FILE_MAXDIR], file[FILE_MAXFILE]; - BLI_split_dirfile(name, dir, file); - - strcpy(U.tempdir, dir); - allqueue(REDRAWALL, 0); -} - -/* END Functions for user preferences fileselect windows */ - - -void do_global_buttons(unsigned short event) -{ - ListBase *lb; - Object *ob; - Material *ma; - MTex *mtex; - Ipo *ipo; - Lamp *la; - World *wrld; - Sequence *seq; - bAction *act; - ID *id, *idtest, *from; - ScrArea *sa; - int nr= 1; - char buf[FILE_MAXDIR+FILE_MAXFILE]; - - - ob= OBACT; - - id= 0; /* id at null for texbrowse */ - - - switch(event) { - - case B_NEWFRAME: - scrarea_queue_winredraw(curarea); - scrarea_queue_headredraw(curarea); - - update_for_newframe(); - break; - case B_REDR: - scrarea_queue_winredraw(curarea); - scrarea_queue_headredraw(curarea); - break; - case B_REDRCURW3D: - allqueue(REDRAWVIEW3D, 0); - scrarea_queue_winredraw(curarea); - scrarea_queue_headredraw(curarea); - break; - case B_EDITBROWSE: - if(ob==0) return; - if(ob->id.lib) return; - id= ob->data; - if(id==0) return; - - if(G.buts->menunr== -2) { - activate_databrowse((ID *)G.buts->lockpoin, GS(id->name), 0, B_EDITBROWSE, &G.buts->menunr, do_global_buttons); - return; - } - if(G.buts->menunr < 0) return; - - lb= wich_libbase(G.main, GS(id->name)); - idtest= lb->first; - while(idtest) { - if(nr==G.buts->menunr) { - if(idtest!=id) { - id->us--; - id_us_plus(idtest); - - ob->data= idtest; - - test_object_materials(idtest); - - if( GS(idtest->name)==ID_CU ) { - test_curve_type(ob); - allqueue(REDRAWBUTSEDIT, 0); - makeDispList(ob); - } - else if( ob->type==OB_MESH ) { - makeDispList(ob); - } - - allqueue(REDRAWBUTSEDIT, 0); - allqueue(REDRAWVIEW3D, 0); - allqueue(REDRAWACTION,0); - allqueue(REDRAWIPO, 0); - allqueue(REDRAWNLA,0); - } - break; - } - nr++; - idtest= idtest->next; - } - - break; - case B_MESHBROWSE: - if(ob==0) return; - if(ob->id.lib) return; - - id= ob->data; - if(id==0) id= G.main->mesh.first; - if(id==0) return; - - if(G.buts->menunr== -2) { - activate_databrowse((ID *)G.buts->lockpoin, GS(id->name), 0, B_MESHBROWSE, &G.buts->menunr, do_global_buttons); - return; - } - if(G.buts->menunr < 0) return; - - - idtest= G.main->mesh.first; - while(idtest) { - if(nr==G.buts->menunr) { - - set_mesh(ob, (Mesh *)idtest); - - allqueue(REDRAWBUTSEDIT, 0); - allqueue(REDRAWVIEW3D, 0); - allqueue(REDRAWACTION,0); - allqueue(REDRAWIPO, 0); - - break; - } - nr++; - idtest= idtest->next; - } - - break; - case B_MATBROWSE: - if(G.buts->menunr== -2) { - activate_databrowse((ID *)G.buts->lockpoin, ID_MA, 0, B_MATBROWSE, &G.buts->menunr, do_global_buttons); - return; - } - - if(G.buts->menunr < 0) return; - - if(G.buts->pin) { - - } - else { - - ma= give_current_material(ob, ob->actcol); - nr= 1; - - id= (ID *)ma; - - idtest= G.main->mat.first; - while(idtest) { - if(nr==G.buts->menunr) { - break; - } - nr++; - idtest= idtest->next; - } - if(idtest==0) { /* new mat */ - if(id) idtest= (ID *)copy_material((Material *)id); - else { - idtest= (ID *)add_material("Material"); - } - idtest->us--; - } - if(idtest!=id) { - assign_material(ob, (Material *)idtest, ob->actcol); - - allqueue(REDRAWBUTSHEAD, 0); - allqueue(REDRAWBUTSSHADING, 0); - allqueue(REDRAWIPO, 0); - BIF_preview_changed(G.buts); - } - - } - break; - case B_MATDELETE: - if(G.buts->pin) { - - } - else { - ma= give_current_material(ob, ob->actcol); - if(ma) { - assign_material(ob, 0, ob->actcol); - allqueue(REDRAWBUTSHEAD, 0); - allqueue(REDRAWBUTSSHADING, 0); - allqueue(REDRAWIPO, 0); - BIF_preview_changed(G.buts); - } - } - break; - case B_TEXDELETE: - if(G.buts->pin) { - - } - else { - if(G.buts->texfrom==0) { /* from mat */ - ma= give_current_material(ob, ob->actcol); - if(ma) { - mtex= ma->mtex[ ma->texact ]; - if(mtex) { - if(mtex->tex) mtex->tex->id.us--; - MEM_freeN(mtex); - ma->mtex[ ma->texact ]= 0; - allqueue(REDRAWBUTSSHADING, 0); - allqueue(REDRAWIPO, 0); - BIF_preview_changed(G.buts); - } - } - } - else if(G.buts->texfrom==1) { /* from world */ - wrld= G.scene->world; - if(wrld) { - mtex= wrld->mtex[ wrld->texact ]; - if(mtex) { - if(mtex->tex) mtex->tex->id.us--; - MEM_freeN(mtex); - wrld->mtex[ wrld->texact ]= 0; - allqueue(REDRAWBUTSSHADING, 0); - allqueue(REDRAWIPO, 0); - BIF_preview_changed(G.buts); - } - } - } - else { /* from lamp */ - la= ob->data; - if(la && ob->type==OB_LAMP) { /* to be sure */ - mtex= la->mtex[ la->texact ]; - if(mtex) { - if(mtex->tex) mtex->tex->id.us--; - MEM_freeN(mtex); - la->mtex[ la->texact ]= 0; - allqueue(REDRAWBUTSSHADING, 0); - allqueue(REDRAWIPO, 0); - BIF_preview_changed(G.buts); - } - } - } - } - break; - case B_EXTEXBROWSE: - case B_TEXBROWSE: - - if(G.buts->texnr== -2) { - - id= G.buts->lockpoin; - if(event==B_EXTEXBROWSE) { - id= 0; - ma= give_current_material(ob, ob->actcol); - if(ma) { - mtex= ma->mtex[ ma->texact ]; - if(mtex) id= (ID *)mtex->tex; - } - } - - activate_databrowse(id, ID_TE, 0, B_TEXBROWSE, &G.buts->texnr, do_global_buttons); - return; - } - if(G.buts->texnr < 0) break; - - if(G.buts->pin) { - - } - else { - id= 0; - - ma= give_current_material(ob, ob->actcol); - if(ma) { - mtex= ma->mtex[ ma->texact ]; - if(mtex) id= (ID *)mtex->tex; - } - - idtest= G.main->tex.first; - while(idtest) { - if(nr==G.buts->texnr) { - break; - } - nr++; - idtest= idtest->next; - } - if(idtest==0) { /* new tex */ - if(id) idtest= (ID *)copy_texture((Tex *)id); - else idtest= (ID *)add_texture("Tex"); - idtest->us--; - } - if(idtest!=id && ma) { - - if( ma->mtex[ma->texact]==0) ma->mtex[ma->texact]= add_mtex(); - - ma->mtex[ ma->texact ]->tex= (Tex *)idtest; - id_us_plus(idtest); - if(id) id->us--; - - allqueue(REDRAWBUTSHEAD, 0); - allqueue(REDRAWBUTSSHADING, 0); - allqueue(REDRAWIPO, 0); - BIF_preview_changed(G.buts); - } - } - break; - case B_ACTIONDELETE: - act=ob->action; - - if (act) - act->id.us--; - ob->action=NULL; - allqueue(REDRAWACTION, 0); - allqueue(REDRAWNLA, 0); - allqueue(REDRAWIPO, 0); - break; - case B_ACTIONBROWSE: - if (!ob) - break; - act=ob->action; - id= (ID *)act; - - if (G.saction->actnr== -2){ - activate_databrowse((ID *)G.saction->action, ID_AC, 0, B_ACTIONBROWSE, &G.saction->actnr, do_global_buttons); - return; - } - - if(G.saction->actnr < 0) break; - - /* See if we have selected a valid action */ - for (idtest= G.main->action.first; idtest; idtest= idtest->next) { - if(nr==G.saction->actnr) { - break; - } - nr++; - - } - - if(G.saction->pin) { - G.saction->action= (bAction *)idtest; - allqueue(REDRAWACTION, 0); - } - else { - - /* Store current action */ - if (!idtest){ - if (act) - idtest= (ID *)copy_action(act); - else - idtest=(ID *)add_empty_action(); - idtest->us--; - } - - - if(idtest!=id && ob) { - act= (bAction *)idtest; - - ob->action= act; - ob->activecon=NULL; - id_us_plus(idtest); - - if(id) id->us--; - - // Update everything - do_global_buttons (B_NEWFRAME); - allqueue(REDRAWVIEW3D, 0); - allqueue(REDRAWNLA, 0); - allqueue(REDRAWACTION, 0); - allqueue(REDRAWHEADERS, 0); - } - } - - break; - case B_IPOBROWSE: - - ipo= get_ipo_to_edit(&from); - id= (ID *)ipo; - if(from==0) return; - - if(G.sipo->menunr== -2) { - activate_databrowse((ID *)G.sipo->ipo, ID_IP, GS(from->name), B_IPOBROWSE, &G.sipo->menunr, do_global_buttons); - return; - } - - if(G.sipo->menunr < 0) break; - - idtest= G.main->ipo.first; - while(idtest) { - if( ((Ipo *)idtest)->blocktype == G.sipo->blocktype) { - if(nr==G.sipo->menunr) { - break; - } - nr++; - } - idtest= idtest->next; - } - - if(G.sipo->pin) { - if(idtest) { - G.sipo->ipo= (Ipo *)idtest; - allspace(REMAKEIPO, 0); // in fact it should only do this one, but there is no function for it - } - } - else { - // assign the ipo to ... - - if(idtest==0) { - if(ipo) idtest= (ID *)copy_ipo(ipo); - else { - nr= GS(from->name); - if(nr==ID_OB){ - if (G.sipo->blocktype==IPO_CO) - idtest= (ID *)add_ipo("CoIpo", IPO_CO); /* BLEARGH! */ - else - idtest= (ID *)add_ipo("ObIpo", nr); - } - else if(nr==ID_MA) idtest= (ID *)add_ipo("MatIpo", nr); - else if(nr==ID_SEQ) idtest= (ID *)add_ipo("MatSeq", nr); - else if(nr==ID_CU) idtest= (ID *)add_ipo("CuIpo", nr); - else if(nr==ID_KE) idtest= (ID *)add_ipo("KeyIpo", nr); - else if(nr==ID_WO) idtest= (ID *)add_ipo("WoIpo", nr); - else if(nr==ID_LA) idtest= (ID *)add_ipo("LaIpo", nr); - else if(nr==ID_CA) idtest= (ID *)add_ipo("CaIpo", nr); - else if(nr==ID_SO) idtest= (ID *)add_ipo("SndIpo", nr); - else if(nr==ID_AC) idtest= (ID *)add_ipo("ActIpo", nr); - else error("Warn bugs@blender.nl!"); - } - idtest->us--; - } - if(idtest!=id && from) { - ipo= (Ipo *)idtest; - - if (ipo->blocktype==IPO_CO){ - ((Object*)from)->activecon->ipo = ipo; - id_us_plus(idtest); - allqueue(REDRAWVIEW3D, 0); - allqueue(REDRAWACTION, 0); - allqueue(REDRAWNLA, 0); - } - else if(ipo->blocktype==ID_OB) { - ( (Object *)from)->ipo= ipo; - id_us_plus(idtest); - allqueue(REDRAWVIEW3D, 0); - } - else if(ipo->blocktype==ID_AC) { - bActionChannel *chan; - chan = get_hilighted_action_channel ((bAction*)from); - if (!chan){ - error ("Create an action channel first"); - return; - } - chan->ipo=ipo; - id_us_plus(idtest); - allqueue(REDRAWNLA, 0); - allqueue(REDRAWACTION, 0); - } - else if(ipo->blocktype==ID_MA) { - ( (Material *)from)->ipo= ipo; - id_us_plus(idtest); - allqueue(REDRAWBUTSSHADING, 0); - } - else if(ipo->blocktype==ID_SEQ) { - seq= (Sequence *)from; - if((seq->type & SEQ_EFFECT)||(seq->type == SEQ_SOUND)) { - id_us_plus(idtest); - seq->ipo= ipo; - } - } - else if(ipo->blocktype==ID_CU) { - ( (Curve *)from)->ipo= ipo; - id_us_plus(idtest); - allqueue(REDRAWVIEW3D, 0); - } - else if(ipo->blocktype==ID_KE) { - ( (Key *)from)->ipo= ipo; - - id_us_plus(idtest); - allqueue(REDRAWVIEW3D, 0); - - } - else if(ipo->blocktype==ID_WO) { - ( (World *)from)->ipo= ipo; - id_us_plus(idtest); - allqueue(REDRAWBUTSSHADING, 0); - } - else if(ipo->blocktype==ID_LA) { - ( (Lamp *)from)->ipo= ipo; - id_us_plus(idtest); - allqueue(REDRAWBUTSLAMP, 0); - } - else if(ipo->blocktype==ID_CA) { - ( (Camera *)from)->ipo= ipo; - id_us_plus(idtest); - allqueue(REDRAWBUTSEDIT, 0); - } - else if(ipo->blocktype==ID_SO) { - ( (bSound *)from)->ipo= ipo; - id_us_plus(idtest); - allqueue(REDRAWBUTSEDIT, 0); - } - else - printf("error in browse ipo \n"); - - if(id) id->us--; - - scrarea_queue_winredraw(curarea); - scrarea_queue_headredraw(curarea); - allqueue(REDRAWIPO, 0); - } - } - break; - case B_IPODELETE: - ipo= get_ipo_to_edit(&from); - if(from==0) return; - - ipo->id.us--; - - if(ipo->blocktype==ID_OB) ( (Object *)from)->ipo= 0; - else if(ipo->blocktype==ID_MA) ( (Material *)from)->ipo= 0; - else if(ipo->blocktype==ID_SEQ) ( (Sequence *)from)->ipo= 0; - else if(ipo->blocktype==ID_CU) ( (Curve *)from)->ipo= 0; - else if(ipo->blocktype==ID_KE) ( (Key *)from)->ipo= 0; - else if(ipo->blocktype==ID_WO) ( (World *)from)->ipo= 0; - else if(ipo->blocktype==ID_LA) ( (Lamp *)from)->ipo= 0; - else if(ipo->blocktype==ID_WO) ( (World *)from)->ipo= 0; - else if(ipo->blocktype==ID_CA) ( (Camera *)from)->ipo= 0; - else if(ipo->blocktype==ID_SO) ( (bSound *)from)->ipo= 0; - else if(ipo->blocktype==ID_AC) { - bAction *act = (bAction*) from; - bActionChannel *chan = - get_hilighted_action_channel((bAction*)from); - BLI_freelinkN (&act->chanbase, chan); - } - else if(ipo->blocktype==IPO_CO) ((Object *)from)->activecon->ipo= 0; - - else error("Warn bugs@blender.nl!"); - - editipo_changed(G.sipo, 1); /* doredraw */ - allqueue(REDRAWIPO, 0); - allqueue(REDRAWNLA, 0); - allqueue (REDRAWACTION, 0); - - break; - case B_WORLDBROWSE: - - if(G.buts->menunr==-2) { - activate_databrowse((ID *)G.scene->world, ID_WO, 0, B_WORLDBROWSE, &G.buts->menunr, do_global_buttons); - break; - } - - if(G.buts->menunr < 0) break; - /* no lock */ - - wrld= G.scene->world; - nr= 1; - - id= (ID *)wrld; - - idtest= G.main->world.first; - while(idtest) { - if(nr==G.buts->menunr) { - break; - } - nr++; - idtest= idtest->next; - } - if(idtest==0) { /* new world */ - if(id) idtest= (ID *)copy_world((World *)id); - else idtest= (ID *)add_world("World"); - idtest->us--; - } - if(idtest!=id) { - G.scene->world= (World *)idtest; - id_us_plus(idtest); - if(id) id->us--; - - allqueue(REDRAWBUTSHEAD, 0); - allqueue(REDRAWBUTSSHADING, 0); - allqueue(REDRAWIPO, 0); - BIF_preview_changed(G.buts); - } - break; - case B_WORLDDELETE: - if(G.scene->world) { - G.scene->world->id.us--; - G.scene->world= 0; - allqueue(REDRAWBUTSSHADING, 0); - allqueue(REDRAWIPO, 0); - } - - break; - case B_WTEXBROWSE: - - if(G.buts->texnr== -2) { - id= 0; - wrld= G.scene->world; - if(wrld) { - mtex= wrld->mtex[ wrld->texact ]; - if(mtex) id= (ID *)mtex->tex; - } - - activate_databrowse((ID *)id, ID_TE, 0, B_WTEXBROWSE, &G.buts->texnr, do_global_buttons); - return; - } - if(G.buts->texnr < 0) break; - - if(G.buts->pin) { - - } - else { - id= 0; - - wrld= G.scene->world; - if(wrld) { - mtex= wrld->mtex[ wrld->texact ]; - if(mtex) id= (ID *)mtex->tex; - } - - idtest= G.main->tex.first; - while(idtest) { - if(nr==G.buts->texnr) { - break; - } - nr++; - idtest= idtest->next; - } - if(idtest==0) { /* new tex */ - if(id) idtest= (ID *)copy_texture((Tex *)id); - else idtest= (ID *)add_texture("Tex"); - idtest->us--; - } - if(idtest!=id && wrld) { - - if( wrld->mtex[wrld->texact]==0) { - wrld->mtex[wrld->texact]= add_mtex(); - wrld->mtex[wrld->texact]->texco= TEXCO_VIEW; - } - wrld->mtex[ wrld->texact ]->tex= (Tex *)idtest; - id_us_plus(idtest); - if(id) id->us--; - - allqueue(REDRAWBUTSHEAD, 0); - allqueue(REDRAWBUTSSHADING, 0); - allqueue(REDRAWIPO, 0); - BIF_preview_changed(G.buts); - } - } - break; - case B_LAMPBROWSE: - /* no lock */ - if(ob==0) return; - if(ob->type!=OB_LAMP) return; - - if(G.buts->menunr== -2) { - activate_databrowse((ID *)G.buts->lockpoin, ID_LA, 0, B_LAMPBROWSE, &G.buts->menunr, do_global_buttons); - return; - } - if(G.buts->menunr < 0) break; - - la= ob->data; - nr= 1; - id= (ID *)la; - - idtest= G.main->lamp.first; - while(idtest) { - if(nr==G.buts->menunr) { - break; - } - nr++; - idtest= idtest->next; - } - if(idtest==0) { /* no new lamp */ - return; - } - if(idtest!=id) { - ob->data= (Lamp *)idtest; - id_us_plus(idtest); - if(id) id->us--; - - allqueue(REDRAWBUTSHEAD, 0); - allqueue(REDRAWBUTSLAMP, 0); - allqueue(REDRAWVIEW3D, 0); - allqueue(REDRAWIPO, 0); - BIF_preview_changed(G.buts); - } - break; - - case B_LTEXBROWSE: - - if(ob==0) return; - if(ob->type!=OB_LAMP) return; - - if(G.buts->texnr== -2) { - id= 0; - la= ob->data; - mtex= la->mtex[ la->texact ]; - if(mtex) id= (ID *)mtex->tex; - - activate_databrowse(id, ID_TE, 0, B_LTEXBROWSE, &G.buts->texnr, do_global_buttons); - return; - } - if(G.buts->texnr < 0) break; - - if(G.buts->pin) { - - } - else { - id= 0; - - la= ob->data; - mtex= la->mtex[ la->texact ]; - if(mtex) id= (ID *)mtex->tex; - - idtest= G.main->tex.first; - while(idtest) { - if(nr==G.buts->texnr) { - break; - } - nr++; - idtest= idtest->next; - } - if(idtest==0) { /* new tex */ - if(id) idtest= (ID *)copy_texture((Tex *)id); - else idtest= (ID *)add_texture("Tex"); - idtest->us--; - } - if(idtest!=id && la) { - - if( la->mtex[la->texact]==0) { - la->mtex[la->texact]= add_mtex(); - la->mtex[la->texact]->texco= TEXCO_GLOB; - } - la->mtex[ la->texact ]->tex= (Tex *)idtest; - id_us_plus(idtest); - if(id) id->us--; - - allqueue(REDRAWBUTSHEAD, 0); - allqueue(REDRAWBUTSSHADING, 0); - allqueue(REDRAWBUTSLAMP, 0); - allqueue(REDRAWIPO, 0); - BIF_preview_changed(G.buts); - } - } - break; - - case B_IMAGEDELETE: - G.sima->image= 0; - image_changed(G.sima, 0); - allqueue(REDRAWIMAGE, 0); - break; - - case B_AUTOMATNAME: - automatname(G.buts->lockpoin); - allqueue(REDRAWBUTSHEAD, 0); - break; - case B_AUTOTEXNAME: - if(G.buts->mainb==CONTEXT_SHADING) { - if(G.buts->tab[CONTEXT_SHADING]==TAB_SHADING_TEX) { - autotexname(G.buts->lockpoin); - allqueue(REDRAWBUTSHEAD, 0); - allqueue(REDRAWBUTSSHADING, 0); - } - else if(G.buts->tab[CONTEXT_SHADING]==TAB_SHADING_MAT) { - ma= G.buts->lockpoin; - if(ma->mtex[ ma->texact]) autotexname(ma->mtex[ma->texact]->tex); - allqueue(REDRAWBUTSSHADING, 0); - } - else if(G.buts->tab[CONTEXT_SHADING]==TAB_SHADING_WORLD) { - wrld= G.buts->lockpoin; - if(wrld->mtex[ wrld->texact]) autotexname(wrld->mtex[wrld->texact]->tex); - allqueue(REDRAWBUTSSHADING, 0); - } - else if(G.buts->tab[CONTEXT_SHADING]==TAB_SHADING_LAMP) { - la= G.buts->lockpoin; - if(la->mtex[ la->texact]) autotexname(la->mtex[la->texact]->tex); - allqueue(REDRAWBUTSLAMP, 0); - } - } - break; - - case B_RESETAUTOSAVE: - reset_autosave(); - allqueue(REDRAWINFO, 0); - break; - case B_SOUNDTOGGLE: - SYS_WriteCommandLineInt(SYS_GetSystem(), "noaudio", (U.gameflags & USERDEF_DISABLE_SOUND)); - break; - case B_SHOWSPLASH: - show_splash(); - break; - case B_MIPMAPCHANGED: - set_mipmap(!(U.gameflags & USERDEF_DISABLE_SOUND)); - allqueue(REDRAWVIEW3D, 0); - break; - case B_NEWSPACE: - newspace(curarea, curarea->butspacetype); - break; - case B_LOADTEMP: /* is button from space.c */ - BIF_read_autosavefile(); - break; - - case B_USERPREF: - allqueue(REDRAWINFO, 0); - break; - - case B_DRAWINFO: /* is button from space.c *info* */ - allqueue(REDRAWVIEW3D, 0); - break; - - case B_FLIPINFOMENU: /* is button from space.c *info* */ - scrarea_queue_headredraw(curarea); - break; - -#ifdef _WIN32 // FULLSCREEN - case B_FLIPFULLSCREEN: - if(U.uiflag & FLIPFULLSCREEN) - U.uiflag &= ~FLIPFULLSCREEN; - else - U.uiflag |= FLIPFULLSCREEN; - mainwindow_toggle_fullscreen((U.uiflag & FLIPFULLSCREEN)); - break; -#endif - - /* Fileselect windows for user preferences file paths */ - - case B_FONTDIRFILESEL: /* is button from space.c *info* */ - if(curarea->spacetype==SPACE_INFO) { - sa= closest_bigger_area(); - areawinset(sa->win); - } - - activate_fileselect(FILE_SPECIAL, "SELECT FONT PATH", U.fontdir, filesel_u_fontdir); - break; - - case B_TEXTUDIRFILESEL: /* is button from space.c *info* */ - if(curarea->spacetype==SPACE_INFO) { - sa= closest_bigger_area(); - areawinset(sa->win); - } - - activate_fileselect(FILE_SPECIAL, "SELECT TEXTURE PATH", U.textudir, filesel_u_textudir); - break; - - case B_PLUGTEXDIRFILESEL: /* is button form space.c *info* */ - if(curarea->spacetype==SPACE_INFO) { - sa= closest_bigger_area(); - areawinset(sa->win); - } - - activate_fileselect(FILE_SPECIAL, "SELECT TEX PLUGIN PATH", U.plugtexdir, filesel_u_plugtexdir); - break; - - case B_PLUGSEQDIRFILESEL: /* is button from space.c *info* */ - if(curarea->spacetype==SPACE_INFO) { - sa= closest_bigger_area(); - areawinset(sa->win); - } - - activate_fileselect(FILE_SPECIAL, "SELECT SEQ PLUGIN PATH", U.plugseqdir, filesel_u_plugseqdir); - break; - - case B_RENDERDIRFILESEL: /* is button from space.c *info* */ - if(curarea->spacetype==SPACE_INFO) { - sa= closest_bigger_area(); - areawinset(sa->win); - } - - activate_fileselect(FILE_SPECIAL, "SELECT RENDER PATH", U.renderdir, filesel_u_renderdir); - break; - - case B_PYTHONDIRFILESEL: /* is button from space.c *info* */ - if(curarea->spacetype==SPACE_INFO) { - sa= closest_bigger_area(); - areawinset(sa->win); - } - - activate_fileselect(FILE_SPECIAL, "SELECT SCRIPT PATH", U.pythondir, filesel_u_pythondir); - break; - - case B_SOUNDDIRFILESEL: /* is button from space.c *info* */ - if(curarea->spacetype==SPACE_INFO) { - sa= closest_bigger_area(); - areawinset(sa->win); - } - - activate_fileselect(FILE_SPECIAL, "SELECT SOUND PATH", U.sounddir, filesel_u_sounddir); - break; - - case B_TEMPDIRFILESEL: /* is button from space.c *info* */ - if(curarea->spacetype==SPACE_INFO) { - sa= closest_bigger_area(); - areawinset(sa->win); - } - - activate_fileselect(FILE_SPECIAL, "SELECT TEMP FILE PATH", U.tempdir, filesel_u_tempdir); - break; - - /* END Fileselect windows for user preferences file paths */ - - -#ifdef INTERNATIONAL - case B_LOADUIFONT: /* is button from space.c *info* */ - if(curarea->spacetype==SPACE_INFO) { - sa= closest_bigger_area(); - areawinset(sa->win); - } - BLI_make_file_string("/", buf, U.fontdir, U.fontname); - activate_fileselect(FILE_SPECIAL, "LOAD UI FONT", buf, set_interface_font); - break; - - case B_SETLANGUAGE: /* is button from space.c *info* */ - lang_setlanguage(); - allqueue(REDRAWALL, 0); - break; - - case B_SETFONTSIZE: /* is button from space.c *info* */ - FTF_SetSize(U.fontsize); - allqueue(REDRAWALL, 0); - break; - - case B_SETTRANSBUTS: /* is button from space.c *info* */ - allqueue(REDRAWALL, 0); - break; - - case B_DOLANGUIFONT: /* is button from space.c *info* */ - if(U.transopts & TR_ALL) - start_interface_font(); - else - G.ui_international = FALSE; - allqueue(REDRAWALL, 0); - break; -#endif - - case B_FULL: - if(curarea->spacetype!=SPACE_INFO) { - area_fullscreen(); - } - break; - - case B_IDNAME: - /* changing a metaballs name, sadly enough, - * can require it to be updated because its - * basis might have changed... -zr - */ - if (OBACT && OBACT->type==OB_MBALL) - makeDispList(OBACT); - - /* redraw because name has changed: new pup */ - scrarea_queue_headredraw(curarea); - allqueue(REDRAWBUTSHEAD, 0); - allqueue(REDRAWINFO, 1); - allqueue(REDRAWOOPS, 1); - /* name scene also in set PUPmenu */ - if ELEM(curarea->spacetype, SPACE_BUTS, SPACE_INFO) allqueue(REDRAWBUTSALL, 0); - - allqueue(REDRAWHEADERS, 0); - - break; - - case B_KEEPDATA: - /* keep datablock. similar to pressing FKEY in a fileselect window - * maybe we can move that stuff to a seperate function? -- sg - */ - if (curarea->spacetype==SPACE_BUTS) { - id= (ID *)G.buts->lockpoin; - } else if(curarea->spacetype==SPACE_IPO) { - id = (ID *)G.sipo->ipo; - } /* similar for other spacetypes ? */ - if (id) { - if( id->flag & LIB_FAKEUSER) { - id->flag -= LIB_FAKEUSER; - id->us--; - } else { - id->flag |= LIB_FAKEUSER; - id->us++; - } - } - allqueue(REDRAWHEADERS, 0); - - break; - - } -} - - -void do_global_buttons2(short event) -{ - Base *base; - Object *ob; - Material *ma; - MTex *mtex; - Mesh *me; - Curve *cu; - MetaBall *mb; - Ipo *ipo; - Lamp *la; - Lattice *lt; - World *wrld; - ID *idfrom; - bAction *act; - - /* general: Single User is allowed when from==LOCAL - * Make Local is allowed when (from==LOCAL && id==LIB) - */ - - ob= OBACT; - - switch(event) { - - case B_LAMPALONE: - if(ob && ob->id.lib==0) { - la= ob->data; - if(la->id.us>1) { - if(okee("Single user")) { - ob->data= copy_lamp(la); - la->id.us--; - } - } - } - break; - case B_LAMPLOCAL: - if(ob && ob->id.lib==0) { - la= ob->data; - if(la->id.lib) { - if(okee("Make local")) { - make_local_lamp(la); - } - } - } - break; - - case B_ARMLOCAL: - if (ob&&ob->id.lib==0){ - bArmature *arm=ob->data; - if (arm->id.lib){ - if(okee("Make local")) { - make_local_armature(arm); - } - } - } - break; - case B_ARMALONE: - if(ob && ob->id.lib==0) { - bArmature *arm=ob->data; - if(arm->id.us>1) { - if(okee("Single user")) { - ob->data= copy_armature(arm); - arm->id.us--; - } - } - } - break; - case B_ACTLOCAL: - if(ob && ob->id.lib==0) { - act= ob->action; - if(act->id.lib) { - if(okee("Make local")) { - make_local_action(act); - allqueue(REDRAWACTION,0); - } - } - } - break; - case B_ACTALONE: - if(ob && ob->id.lib==0) { - act= ob->action; - - if(act->id.us>1) { - if(okee("Single user")) { - ob->action=copy_action(act); - ob->activecon=NULL; - act->id.us--; - allqueue(REDRAWACTION, 0); - } - } - } - break; - - case B_CAMERAALONE: - if(ob && ob->id.lib==0) { - Camera *ca= ob->data; - if(ca->id.us>1) { - if(okee("Single user")) { - ob->data= copy_camera(ca); - ca->id.us--; - } - } - } - break; - case B_CAMERALOCAL: - if(ob && ob->id.lib==0) { - Camera *ca= ob->data; - if(ca->id.lib) { - if(okee("Make local")) { - make_local_camera(ca); - } - } - } - break; - case B_WORLDALONE: - wrld= G.scene->world; - if(wrld->id.us>1) { - if(okee("Single user")) { - G.scene->world= copy_world(wrld); - wrld->id.us--; - } - } - break; - case B_WORLDLOCAL: - wrld= G.scene->world; - if(wrld && wrld->id.lib) { - if(okee("Make local")) { - make_local_world(wrld); - } - } - break; - - case B_LATTALONE: - if(ob && ob->id.lib==0) { - lt= ob->data; - if(lt->id.us>1) { - if(okee("Single user")) { - ob->data= copy_lattice(lt); - lt->id.us--; - } - } - } - break; - case B_LATTLOCAL: - if(ob && ob->id.lib==0) { - lt= ob->data; - if(lt->id.lib) { - if(okee("Make local")) { - make_local_lattice(lt); - } - } - } - break; - - case B_MATALONE: - if(ob==0) return; - ma= give_current_material(ob, ob->actcol); - idfrom= material_from(ob, ob->actcol); - if(idfrom && idfrom->lib==0) { - if(ma->id.us>1) { - if(okee("Single user")) { - ma= copy_material(ma); - ma->id.us= 0; - assign_material(ob, ma, ob->actcol); - } - } - } - break; - case B_MATLOCAL: - if(ob==0) return; - idfrom= material_from(ob, ob->actcol); - if(idfrom->lib==0) { - ma= give_current_material(ob, ob->actcol); - if(ma && ma->id.lib) { - if(okee("Make local")) { - make_local_material(ma); - } - } - } - break; - - case B_MESHLOCAL: - if(ob && ob->id.lib==0) { - me= ob->data; - if(me && me->id.lib) { - if(okee("Make local")) { - make_local_mesh(me); - make_local_key( me->key ); - } - } - } - break; - - case B_MBALLALONE: - if(ob && ob->id.lib==0) { - mb= ob->data; - if(mb->id.us>1) { - if(okee("Single user")) { - ob->data= copy_mball(mb); - mb->id.us--; - if(ob==G.obedit) allqueue(REDRAWVIEW3D, 0); - } - } - } - break; - case B_MBALLLOCAL: - if(ob && ob->id.lib==0) { - mb= ob->data; - if(mb->id.lib) { - if(okee("Make local")) { - make_local_mball(mb); - } - } - } - break; - - case B_CURVEALONE: - if(ob && ob->id.lib==0) { - cu= ob->data; - if(cu->id.us>1) { - if(okee("Single user")) { - ob->data= copy_curve(cu); - cu->id.us--; - makeDispList(ob); - if(ob==G.obedit) allqueue(REDRAWVIEW3D, 0); - } - } - } - break; - case B_CURVELOCAL: - if(ob && ob->id.lib==0) { - cu= ob->data; - if(cu->id.lib) { - if(okee("Make local")) { - make_local_curve(cu); - make_local_key( cu->key ); - makeDispList(ob); - } - } - } - break; - - case B_TEXALONE: - if(G.buts->texfrom==0) { /* from mat */ - if(ob==0) return; - ma= give_current_material(ob, ob->actcol); - if(ma && ma->id.lib==0) { - mtex= ma->mtex[ ma->texact ]; - if(mtex->tex && mtex->tex->id.us>1) { - if(okee("Single user")) { - mtex->tex->id.us--; - mtex->tex= copy_texture(mtex->tex); - } - } - } - } - else if(G.buts->texfrom==1) { /* from world */ - wrld= G.scene->world; - if(wrld->id.lib==0) { - mtex= wrld->mtex[ wrld->texact ]; - if(mtex->tex && mtex->tex->id.us>1) { - if(okee("Single user")) { - mtex->tex->id.us--; - mtex->tex= copy_texture(mtex->tex); - } - } - } - } - else if(G.buts->texfrom==2) { /* from lamp */ - if(ob==0 || ob->type!=OB_LAMP) return; - la= ob->data; - if(la->id.lib==0) { - mtex= la->mtex[ la->texact ]; - if(mtex->tex && mtex->tex->id.us>1) { - if(okee("Single user")) { - mtex->tex->id.us--; - mtex->tex= copy_texture(mtex->tex); - } - } - } - } - break; - case B_TEXLOCAL: - if(G.buts->texfrom==0) { /* from mat */ - if(ob==0) return; - ma= give_current_material(ob, ob->actcol); - if(ma && ma->id.lib==0) { - mtex= ma->mtex[ ma->texact ]; - if(mtex->tex && mtex->tex->id.lib) { - if(okee("Make local")) { - make_local_texture(mtex->tex); - } - } - } - } - else if(G.buts->texfrom==1) { /* from world */ - wrld= G.scene->world; - if(wrld->id.lib==0) { - mtex= wrld->mtex[ wrld->texact ]; - if(mtex->tex && mtex->tex->id.lib) { - if(okee("Make local")) { - make_local_texture(mtex->tex); - } - } - } - } - else if(G.buts->texfrom==2) { /* from lamp */ - if(ob==0 || ob->type!=OB_LAMP) return; - la= ob->data; - if(la->id.lib==0) { - mtex= la->mtex[ la->texact ]; - if(mtex->tex && mtex->tex->id.lib) { - if(okee("Make local")) { - make_local_texture(mtex->tex); - } - } - } - } - break; - - case B_IPOALONE: - ipo= get_ipo_to_edit(&idfrom); - - if(idfrom && idfrom->lib==0) { - if(ipo->id.us>1) { - if(okee("Single user")) { - if(ipo->blocktype==ID_OB) ((Object *)idfrom)->ipo= copy_ipo(ipo); - else if(ipo->blocktype==ID_MA) ((Material *)idfrom)->ipo= copy_ipo(ipo); - else if(ipo->blocktype==ID_SEQ) ((Sequence *)idfrom)->ipo= copy_ipo(ipo); - else if(ipo->blocktype==ID_CU) ((Curve *)idfrom)->ipo= copy_ipo(ipo); - else if(ipo->blocktype==ID_KE) ((Key *)idfrom)->ipo= copy_ipo(ipo); - else if(ipo->blocktype==ID_LA) ((Lamp *)idfrom)->ipo= copy_ipo(ipo); - else if(ipo->blocktype==ID_WO) ((World *)idfrom)->ipo= copy_ipo(ipo); - else if(ipo->blocktype==ID_CA) ((Camera *)idfrom)->ipo= copy_ipo(ipo); - else if(ipo->blocktype==ID_SO) ((bSound *)idfrom)->ipo= copy_ipo(ipo); - else if(ipo->blocktype==ID_AC) get_hilighted_action_channel((bAction *)idfrom)->ipo= copy_ipo(ipo); - else if(ipo->blocktype==IPO_CO) ((Object *)idfrom)->activecon->ipo= copy_ipo(ipo); - else error("Warn ton!"); - - ipo->id.us--; - allqueue(REDRAWIPO, 0); - } - } - } - break; - case B_IPOLOCAL: - ipo= get_ipo_to_edit(&idfrom); - - if(idfrom && idfrom->lib==0) { - if(ipo->id.lib) { - if(okee("Make local")) { - make_local_ipo(ipo); - allqueue(REDRAWIPO, 0); - } - } - } - break; - - case B_OBALONE: - if(G.scene->id.lib==0) { - if(ob->id.us>1) { - if(okee("Single user")) { - base= FIRSTBASE; - while(base) { - if(base->object==ob) { - base->object= copy_object(ob); - ob->id.us--; - allqueue(REDRAWVIEW3D, 0); - break; - } - base= base->next; - } - } - } - } - break; - case B_OBLOCAL: - if(G.scene->id.lib==0) { - if(ob->id.lib) { - if(okee("Make local")) { - make_local_object(ob); - allqueue(REDRAWVIEW3D, 0); - } - } - } - break; - case B_MESHALONE: - if(ob && ob->id.lib==0) { - - me= ob->data; - - if(me && me->id.us>1) { - if(okee("Single user")) { - Mesh *men= copy_mesh(me); - men->id.us= 0; - - set_mesh(ob, men); - - if(ob==G.obedit) allqueue(REDRAWVIEW3D, 0); - } - } - } - break; - } - - allqueue(REDRAWBUTSALL, 0); - allqueue(REDRAWOOPS, 0); -} - -/* ********************** EMPTY ****************************** */ -/* ********************** INFO ****************************** */ - -int buttons_do_unpack() -{ - int how; - char menu[2048]; - char line[128]; - int ret_value = RET_OK, count = 0; - - count = countPackedFiles(); - - if (count) { - if (count == 1) { - sprintf(menu, "Unpack 1 file%%t"); - } else { - sprintf(menu, "Unpack %d files%%t", count); - } - - sprintf(line, "|Use files in current directory (create when necessary)%%x%d", PF_USE_LOCAL); - strcat(menu, line); - - sprintf(line, "|Write files to current directory (overwrite existing files)%%x%d", PF_WRITE_LOCAL); - strcat(menu, line); - - sprintf(line, "|%%l|Use files in original location (create when necessary)%%x%d", PF_USE_ORIGINAL); - strcat(menu, line); - - sprintf(line, "|Write files to original location (overwrite existing files)%%x%d", PF_WRITE_ORIGINAL); - strcat(menu, line); - - sprintf(line, "|%%l|Disable AutoPack, keep all packed files %%x%d", PF_KEEP); - strcat(menu, line); - - sprintf(line, "|Ask for each file %%x%d", PF_ASK); - strcat(menu, line); - - how = pupmenu(menu); - - if(how != -1) { - if (how != PF_KEEP) { - unpackAll(how); - } - G.fileflags &= ~G_AUTOPACK; - } else { - ret_value = RET_CANCEL; - } - } else { - pupmenu("No packed files. Autopack disabled"); - } - - return (ret_value); -} - -/* here, because of all creator stuff */ - -Scene *copy_scene(Scene *sce, int level) -{ - /* level 0: al objects shared - * level 1: al object-data shared - * level 2: full copy - */ - Scene *scen; - Base *base, *obase; - - - /* level 0 */ - scen= copy_libblock(sce); - duplicatelist(&(scen->base), &(sce->base)); - - clear_id_newpoins(); - - id_us_plus((ID *)scen->world); - id_us_plus((ID *)scen->set); - - scen->ed= 0; - scen->radio= 0; - - obase= sce->base.first; - base= scen->base.first; - while(base) { - base->object->id.us++; - if(obase==sce->basact) scen->basact= base; - - obase= obase->next; - base= base->next; - } - - if(level==0) return scen; - - /* level 1 */ - G.scene= scen; - single_object_users(0); - - /* camera */ - ID_NEW(G.scene->camera); - - /* level 2 */ - if(level>=2) { - if(scen->world) { - scen->world->id.us--; - scen->world= copy_world(scen->world); - } - single_obdata_users(0); - single_mat_users_expand(); - single_tex_users_expand(); - } - - clear_id_newpoins(); - - BPY_copy_scriptlink(&sce->scriptlink); - - - - // make a private copy of the avicodecdata - - if (sce->r.avicodecdata) { - - scen->r.avicodecdata = MEM_dupallocN(sce->r.avicodecdata); - scen->r.avicodecdata->lpFormat = MEM_dupallocN(scen->r.avicodecdata->lpFormat); - scen->r.avicodecdata->lpParms = MEM_dupallocN(scen->r.avicodecdata->lpParms); - } - - // make a private copy of the qtcodecdata - - if (sce->r.qtcodecdata) { - - scen->r.qtcodecdata = MEM_dupallocN(sce->r.qtcodecdata); - scen->r.qtcodecdata->cdParms = MEM_dupallocN(scen->r.qtcodecdata->cdParms); - } - return scen; -} - -void do_info_buttons(unsigned short event) -{ - bScreen *sc, *oldscreen; - Scene *sce, *sce1; - ScrArea *sa; - int nr; - - switch(event) { - - case B_INFOSCR: /* menu select screen */ - - if( G.curscreen->screennr== -2) { - if(curarea->winy <50) { - sa= closest_bigger_area(); - areawinset(sa->win); - } - activate_databrowse((ID *)G.curscreen, ID_SCR, 0, B_INFOSCR, &G.curscreen->screennr, do_info_buttons); - return; - } - if( G.curscreen->screennr < 0) return; - - sc= G.main->screen.first; - nr= 1; - while(sc) { - if(nr==G.curscreen->screennr) { - if(is_allowed_to_change_screen(sc)) setscreen(sc); - else error("Unable to perform function in EditMode"); - break; - } - nr++; - sc= sc->id.next; - } - /* last item: NEW SCREEN */ - if(sc==0) { - duplicate_screen(); - } - break; - case B_INFODELSCR: - /* do this event only with buttons, so it can never be called with full-window */ - - if(G.curscreen->id.prev) sc= G.curscreen->id.prev; - else if(G.curscreen->id.next) sc= G.curscreen->id.next; - else return; - if(okee("Delete current screen")) { - /* find new G.curscreen */ - - oldscreen= G.curscreen; - setscreen(sc); /* this test if sc has a full */ - unlink_screen(oldscreen); - free_libblock(&G.main->screen, oldscreen); - } - scrarea_queue_headredraw(curarea); - - break; - case B_INFOSCE: /* menu select scene */ - - if( G.obedit) { - error("Unable to perform function in EditMode"); - return; - } - if( G.curscreen->scenenr== -2) { - if(curarea->winy <50) { - sa= closest_bigger_area(); - areawinset(sa->win); - } - activate_databrowse((ID *)G.scene, ID_SCE, 0, B_INFOSCE, &G.curscreen->scenenr, do_info_buttons); - return; - } - if( G.curscreen->scenenr < 0) return; - - sce= G.main->scene.first; - nr= 1; - while(sce) { - if(nr==G.curscreen->scenenr) { - if(sce!=G.scene) set_scene(sce); - break; - } - nr++; - sce= sce->id.next; - } - /* last item: NEW SCENE */ - if(sce==0) { - nr= pupmenu("Add scene%t|Empty|Link Objects|Link ObData|Full Copy"); - if(nr<= 0) return; - if(nr==1) { - sce= add_scene(G.scene->id.name+2); - sce->r= G.scene->r; -#ifdef _WIN32 - if (sce->r.avicodecdata) { - sce->r.avicodecdata = MEM_dupallocN(G.scene->r.avicodecdata); - sce->r.avicodecdata->lpFormat = MEM_dupallocN(G.scene->r.avicodecdata->lpFormat); - sce->r.avicodecdata->lpParms = MEM_dupallocN(G.scene->r.avicodecdata->lpParms); - } -#endif -#ifdef WITH_QUICKTIME - if (sce->r.qtcodecdata) { - sce->r.qtcodecdata = MEM_dupallocN(G.scene->r.qtcodecdata); - sce->r.qtcodecdata->cdParms = MEM_dupallocN(G.scene->r.qtcodecdata->cdParms); - } -#endif - } - else sce= copy_scene(G.scene, nr-2); - - set_scene(sce); - } - BIF_preview_changed(G.buts); - - break; - case B_INFODELSCE: - - if(G.scene->id.prev) sce= G.scene->id.prev; - else if(G.scene->id.next) sce= G.scene->id.next; - else return; - if(okee("Delete current scene")) { - - /* check all sets */ - sce1= G.main->scene.first; - while(sce1) { - if(sce1->set == G.scene) sce1->set= 0; - sce1= sce1->id.next; - } - - /* check all sequences */ - clear_scene_in_allseqs(G.scene); - - /* al screens */ - sc= G.main->screen.first; - while(sc) { - if(sc->scene == G.scene) sc->scene= sce; - sc= sc->id.next; - } - free_libblock(&G.main->scene, G.scene); - set_scene(sce); - } - - break; - case B_FILEMENU: - tbox_setmain(9); - toolbox(); - break; - } -} - -/* strubi shamelessly abused the status line as a progress bar... - feel free to kill him after release */ - -static int g_progress_bar = 0; -static char *g_progress_info = 0; -static float g_done; - -int start_progress_bar(void) -{ - g_progress_bar = 1; - return 1; // we never fail (yet) -} - -void end_progress_bar(void) -{ - g_progress_bar = 0; -} - -static void update_progress_bar(float done, char *info) -{ - g_done = done; - g_progress_info = info; -} - -/** Progress bar - 'done': a value between 0.0 and 1.0, showing progress - 'info': a info text what is currently being done - - Make sure that the progress bar is always called with: - done = 0.0 first - and - done = 1.0 last -- or alternatively use: - - start_progressbar(); - do_stuff_and_callback_progress_bar(); - end_progressbar(); -*/ -int progress_bar(float done, char *busy_info) -{ - ScrArea *sa; - short val; - - /* User break (ESC) */ - while (qtest()) { - if (extern_qread(&val) == ESCKEY) - return 0; - } - if (done == 0.0) { - start_progress_bar(); - } else if (done > 0.99) { - end_progress_bar(); - } - - sa= G.curscreen->areabase.first; - while(sa) { - if (sa->spacetype == SPACE_INFO) { - update_progress_bar(done, busy_info); - - curarea = sa; - - scrarea_do_headdraw(curarea); - areawinset(curarea->win); - sa->head_swap= WIN_BACK_OK; - screen_swapbuffers(); - } - sa = sa->next; - } - return 1; -} - - -static void check_packAll() -{ - // first check for dirty images - Image *ima; - - ima = G.main->image.first; - while (ima) { - if (ima->ibuf && (ima->ibuf->userflags &= IB_BITMAPDIRTY)) { - break; - } - ima= ima->id.next; - } - - if (ima == 0 || okee("Some images are painted on. These changes will be lost. Continue ?")) { - packAll(); - G.fileflags |= G_AUTOPACK; - } -} - - -int write_runtime(char *str, char *exename) -{ - char *freestr= NULL; - char *ext = 0; - -#ifdef _WIN32 - ext = ".exe"; -#endif - -#ifdef __APPLE__ - ext = ".app"; -#endif - if (ext && (!BLI_testextensie(str, ext))) { - freestr= MEM_mallocN(strlen(str) + strlen(ext) + 1, "write_runtime_check"); - strcpy(freestr, str); - strcat(freestr, ext); - str= freestr; - } - - if (!BLI_exists(str) || saveover(str)) - BLO_write_runtime(str, exename); - - if (freestr) - MEM_freeN(freestr); - - return 0; -} - -static void write_runtime_check_dynamic(char *str) -{ - write_runtime(str, "blenderdynplayer.exe"); -} - -static void write_runtime_check(char *str) -{ - char player[128]; - - strcpy(player, "blenderplayer"); - -#ifdef _WIN32 - strcat(player, ".exe"); -#endif - -#ifdef __APPLE__ - strcat(player, ".app"); -#endif - - write_runtime(str, player); -} -/* end keyed functions */ - -static char *windowtype_pup(void) -{ - static char string[1024]; - - strcpy(string, "Window type:%t"); //14 - strcat(string, "|3D Viewport %x1"); //30 - - strcat(string, "|%l"); // 33 - - strcat(string, "|Ipo Curve Editor %x2"); //54 - strcat(string, "|Action Editor %x12"); //73 - strcat(string, "|NLA Editor %x13"); //94 - - strcat(string, "|%l"); //97 - - strcat(string, "|UV/Image Editor %x6"); //117 - - strcat(string, "|Video Sequence Editor %x8"); //143 - strcat(string, "|Audio Timeline %x11"); //163 - strcat(string, "|Text Editor %x9"); //179 - - strcat(string, "|%l"); //192 - - - strcat(string, "|User Preferences %x7"); //213 - strcat(string, "|OOPS Schematic %x3"); //232 - strcat(string, "|Buttons Window %x4"); //251 - - strcat(string, "|%l"); //254 - - strcat(string, "|Image Browser %x10"); - strcat(string, "|File Browser %x5"); - - return (string); -} - -/************************** MAIN MENU *****************************/ -/************************** FILE *****************************/ - -void do_info_file_optionsmenu(void *arg, int event) -{ - G.fileflags ^= (1 << event); - - // allqueue(REDRAWINFO, 0); -} - -#if 0 -static uiBlock *info_file_optionsmenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, xco = 20; - - block= uiNewBlock(&curarea->uiblocks, "runtime_options", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_info_file_optionsmenu, NULL); - uiBlockSetXOfs(block,-40); // offset to parent button - uiBlockSetCol(block, MENUCOL); - - /* flags are case-values */ - uiDefBut(block, BUTM, 1, "Compress File", xco, yco-=20, 100, 19, NULL, 0.0, 0.0, 0, G_FILE_COMPRESS_BIT, "Enables file compression"); -/* - uiDefBut(block, BUTM, 1, "Sign File", xco, yco-=20, 100, 19, NULL, 0.0, 0.0, 0, G_FILE_SIGN_BIT, "Add signature to file"); - uiDefBut(block, BUTM, 1, "Lock File", xco, yco-=20, 100, 19, NULL, 0.0, 0.0, 0, G_FILE_LOCK_BIT, "Protect the file from editing by others"); -*/ - uiTextBoundsBlock(block, 50); - - /* Toggle buttons */ - - yco= 0; - xco -= 20; - uiBlockSetEmboss(block, UI_EMBOSSW); - uiBlockSetButmFunc(block, NULL, NULL); - /* flags are defines */ - uiDefIconButI(block, ICONTOG|BIT|G_FILE_COMPRESS_BIT, 0, ICON_CHECKBOX_DEHLT, xco, yco-=20, 19, 19, &G.fileflags, 0.0, 0.0, 0, 0, ""); -/* - uiDefIconButI(block, ICONTOG|BIT|G_FILE_SIGN_BIT, 0, ICON_CHECKBOX_DEHLT, xco, yco-=20, 19, 19, &G.fileflags, 0.0, 0.0, 0, 0, ""); - uiDefIconButI(block, ICONTOG|BIT|G_FILE_LOCK_BIT, 0, ICON_CHECKBOX_DEHLT, xco, yco-=20, 19, 19, &G.fileflags, 0.0, 0.0, 0, 0, ""); -*/ - uiBlockSetDirection(block, UI_RIGHT); - - return block; -} - -static uiBlock *info_runtime_optionsmenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, xco = 20; - - block= uiNewBlock(&curarea->uiblocks, "add_surfacemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetXOfs(block, -40); // offset to parent button - uiBlockSetCol(block, MENUCOL); - uiBlockSetEmboss(block, UI_EMBOSSW); - - uiDefBut(block, LABEL, 0, "Size options:", xco, yco-=20, 114, 19, 0, 0.0, 0.0, 0, 0, ""); - uiDefButS(block, NUM, 0, "X:", xco+19, yco-=20, 95, 19, &G.scene->r.xplay, 10.0, 2000.0, 0, 0, "Displays current X screen/window resolution. Click to change."); - uiDefButS(block, NUM, 0, "Y:", xco+19, yco-=20, 95, 19, &G.scene->r.yplay, 10.0, 2000.0, 0, 0, "Displays current Y screen/window resolution. Click to change."); - - uiDefBut(block, SEPR, 0, "", xco, yco-=4, 114, 4, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefBut(block, LABEL, 0, "Fullscreen options:", xco, yco-=20, 114, 19, 0, 0.0, 0.0, 0, 0, ""); - uiDefButS(block, TOG, 0, "Fullscreen", xco + 19, yco-=20, 95, 19, &G.scene->r.fullscreen, 0.0, 0.0, 0, 0, "Starts player in a new fullscreen display"); - uiDefButS(block, NUM, 0, "Freq:", xco+19, yco-=20, 95, 19, &G.scene->r.freqplay, 10.0, 120.0, 0, 0, "Displays clock frequency of fullscreen display. Click to change."); - uiDefButS(block, NUM, 0, "Bits:", xco+19, yco-=20, 95, 19, &G.scene->r.depth, 1.0, 32.0, 0, 0, "Displays bit depth of full screen display. Click to change."); - - uiDefBut(block, SEPR, 0, "", xco, yco-=4, 114, 4, NULL, 0.0, 0.0, 0, 0, ""); - - /* stereo settings */ - /* can't use any definition from the game engine here so hardcode it. Change it here when it changes there! - * RAS_IRasterizer has definitions: - * RAS_STEREO_NOSTEREO 1 - * RAS_STEREO_QUADBUFFERED 2 - * RAS_STEREO_ABOVEBELOW 3 - * RAS_STEREO_INTERLACED 4 future - */ - uiDefBut(block, LABEL, 0, "Stereo options", xco, yco-=20, 114, 19, 0, 0.0, 0.0, 0, 0, ""); - uiDefButS(block, ROW, 0, "no stereo", xco+19, yco-=20, 95, 19, &(G.scene->r.stereomode), 6.0, 1.0, 0, 0, "Disables stereo"); - uiDefButS(block, ROW, 0, "h/w pageflip", xco+19, yco-=20, 95, 19, &(G.scene->r.stereomode), 6.0, 2.0, 0, 0, "Enables hardware pageflip stereo method"); - uiDefButS(block, ROW, 0, "syncdoubling", xco+19, yco-=20, 95, 19, &(G.scene->r.stereomode), 6.0, 3.0, 0, 0, "Enables syncdoubling stereo method"); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 50); - - return block; -} -#endif - -static void do_info_file_importmenu(void *arg, int event) -{ - ScrArea *sa; - - if(curarea->spacetype==SPACE_INFO) { - sa= closest_bigger_area(); - areawinset(sa->win); - } - - /* these are no defines, easier this way, the codes are in the function below */ - switch(event) { - - case 0: - break; - } - allqueue(REDRAWINFO, 0); -} - -static uiBlock *info_file_importmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiNewBlock(&curarea->uiblocks, "importmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_info_file_importmenu, NULL); - //uiBlockSetXOfs(block, -50); // offset to parent button - uiBlockSetCol(block, MENUCOL); - - uiDefBut(block, BUTM, 1, "Python scripts go here somehow!", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - - return block; -} - -static void do_info_file_exportmenu(void *arg, int event) -{ - ScrArea *sa; - - if(curarea->spacetype==SPACE_INFO) { - sa= closest_bigger_area(); - areawinset(sa->win); - } - - /* these are no defines, easier this way, the codes are in the function below */ - switch(event) { - - case 0: - write_vrml_fs(); - break; - case 1: - write_dxf_fs(); - break; - case 2: - write_videoscape_fs(); - break; - } - allqueue(REDRAWINFO, 0); -} - -static uiBlock *info_file_exportmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20; - - block= uiNewBlock(&curarea->uiblocks, "exportmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_info_file_exportmenu, NULL); - //uiBlockSetXOfs(block, -50); // offset to parent button - uiBlockSetCol(block, MENUCOL); - - uiDefBut(block, BUTM, 1, "VRML 1.0...|Ctrl F2", 0, yco-=20, 120, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefBut(block, BUTM, 1, "DXF...|Shift F2", 0, yco-=20, 120, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefBut(block, BUTM, 1, "Videoscape...|Alt W", 0, yco-=20, 120, 19, NULL, 0.0, 0.0, 1, 2, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - - return block; -} - - -static void do_info_filemenu(void *arg, int event) -{ - ScrArea *sa; - char dir[FILE_MAXDIR]; - - if(curarea->spacetype==SPACE_INFO) { - sa= closest_bigger_area(); - areawinset(sa->win); - } - - /* these are no defines, easier this way, the codes are in the function below */ - switch(event) { - case 0: - if (okee("Erase All")) { - if (!BIF_read_homefile()) - error("No file ~/.B.blend"); - } - break; - case 1: /* open */ - activate_fileselect(FILE_BLENDER, "Open", G.sce, BIF_read_file); - break; - case 2: /* reopen last */ - { - char *s= MEM_mallocN(strlen(G.sce) + 11 + 1, "okee_reload"); - strcpy(s, "Open file: "); - strcat(s, G.sce); - if (okee(s)) BIF_read_file(G.sce); - MEM_freeN(s); - } - break; - case 3: /* append */ - activate_fileselect(FILE_LOADLIB, "Load Library", G.lib, 0); - break; - case 4: /* save */ - strcpy(dir, G.sce); - untitled(dir); - activate_fileselect(FILE_BLENDER, "Save As", dir, BIF_write_file); - break; - case 5: - strcpy(dir, G.sce); - if (untitled(dir)) { - activate_fileselect(FILE_BLENDER, "Save As", dir, BIF_write_file); - } else { - BIF_write_file(dir); - free_filesel_spec(dir); - } - break; - case 6: /* save image */ - mainqenter(F3KEY, 1); - break; -/* - case 20: - strcpy(dir, G.sce); - activate_fileselect(FILE_SPECIAL, "INSTALL LICENSE KEY", dir, loadKeyboard); - break; - case 21: - SHOW_LICENSE_KEY(); - break; -*/ - case 22: /* save runtime */ - activate_fileselect(FILE_SPECIAL, "Save Runtime", "", write_runtime_check); - break; - case 23: /* save dynamic runtime */ - activate_fileselect(FILE_SPECIAL, "Save Dynamic Runtime", "", write_runtime_check_dynamic); - break; - case 10: /* pack data */ - check_packAll(); - break; - case 11: /* unpack to current dir */ - unpackAll(PF_WRITE_LOCAL); - G.fileflags &= ~G_AUTOPACK; - break; - case 12: /* unpack data */ - if (buttons_do_unpack() != RET_CANCEL) { - /* Clear autopack bit only if user selected one of the unpack options */ - G.fileflags &= ~G_AUTOPACK; - } - break; - case 13: - exit_usiblender(); - break; - case 31: /* save default settings */ - BIF_write_homefile(); - break; - } - allqueue(REDRAWINFO, 0); -} -static uiBlock *info_filemenu(void *arg_unused) -{ - uiBlock *block; - short yco=0; - short menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "info_filemenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_info_filemenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "New|Ctrl X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Open...|F1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reopen Last|Ctrl O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save|Ctrl W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save As...|F2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save Image...|F3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save Runtime...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, ""); -#ifdef _WIN32 - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save Dynamic Runtime...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 23, ""); -#endif - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save Default Settings|Ctrl U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 31, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Append...|Shift F1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBlockBut(block, info_file_importmenu, NULL, ICON_RIGHTARROW_THIN, "Import", 0, yco-=20, menuwidth, 19, ""); - uiDefIconTextBlockBut(block, info_file_exportmenu, NULL, ICON_RIGHTARROW_THIN, "Export", 0, yco-=20, menuwidth, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pack Data", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 10, ""); -// uiDefBut(block, BUTM, 1, "Unpack Data to current dir", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 11, "Removes all packed files from the project and saves them to the current directory"); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Unpack Data...", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 12, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Quit Blender| Q", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, ""); - - uiBlockSetDirection(block, UI_DOWN); - uiTextBoundsBlock(block, 80); - - return block; -} - - - - -/**************************** ADD ******************************/ - -static void do_info_add_meshmenu(void *arg, int event) -{ - - switch(event) { - case 0: - /* Plane */ - add_primitiveMesh(0); - break; - case 1: - /* Cube */ - add_primitiveMesh(1); - break; - case 2: - /* Circle */ - add_primitiveMesh(4); - break; - case 3: - /* UVsphere */ - add_primitiveMesh(11); - break; - case 4: - /* IcoSphere */ - add_primitiveMesh(12); - break; - case 5: - /* Cylinder */ - add_primitiveMesh(5); - break; - case 6: - /* Tube */ - add_primitiveMesh(6); - break; - case 7: - /* Cone */ - add_primitiveMesh(7); - break; - case 8: - /* Grid */ - add_primitiveMesh(10); - break; - default: - break; - } - allqueue(REDRAWINFO, 0); -} - -static uiBlock *info_add_meshmenu(void *arg_unused) -{ -/* static short tog=0; */ - uiBlock *block; - short yco= 0; - - block= uiNewBlock(&curarea->uiblocks, "add_meshmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_info_add_meshmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Plane|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cube|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Circle|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "UVsphere", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "IcoSphere|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cylinder|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tube|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 6, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cone|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 7, ""); - uiDefIconTextBut(block, SEPR, 0, ICON_BLANK1, "", 0, yco-=6, 160, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grid|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 8, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 50); - - return block; -} - -static void do_info_add_curvemenu(void *arg, int event) -{ - - switch(event) { - case 0: - /* Bezier Curve */ - add_primitiveCurve(10); - break; - case 1: - /* Bezier Circle */ - add_primitiveCurve(11); - break; - case 2: - /* NURB Curve */ - add_primitiveCurve(40); - break; - case 3: - /* NURB Circle */ - add_primitiveCurve(41); - break; - case 4: - /* Path */ - add_primitiveCurve(46); - break; - default: - break; - } - allqueue(REDRAWINFO, 0); -} - -static uiBlock *info_add_curvemenu(void *arg_unused) -{ -/* static short tog=0; */ - uiBlock *block; - short yco= 0; - - block= uiNewBlock(&curarea->uiblocks, "add_curvemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_info_add_curvemenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bezier Curve|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bezier Circle|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NURBS Curve|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NURBS Circle", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Path|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 4, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 50); - - return block; -} - - -static void do_info_add_surfacemenu(void *arg, int event) -{ - - switch(event) { - case 0: - /* Curve */ - add_primitiveNurb(0); - break; - case 1: - /* Circle */ - add_primitiveNurb(1); - break; - case 2: - /* Surface */ - add_primitiveNurb(2); - break; - case 3: - /* Tube */ - add_primitiveNurb(3); - break; - case 4: - /* Sphere */ - add_primitiveNurb(4); - break; - case 5: - /* Donut */ - add_primitiveNurb(5); - break; - default: - break; - } - allqueue(REDRAWINFO, 0); -} - -static uiBlock *info_add_surfacemenu(void *arg_unused) -{ -/* static short tog=0; */ - uiBlock *block; - short yco= 0; - - block= uiNewBlock(&curarea->uiblocks, "add_surfacemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_info_add_surfacemenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NURBS Curve|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NURBS Circle|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NURBS Surface|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NURBS Tube", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NURBS Sphere|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NURBS Donut|", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 5, ""); - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 50); - - return block; -} - -static void do_info_add_metamenu(void *arg, int event) -{ - - switch(event) { - case 0: - /* Ball */ - add_primitiveMball(1); - break; - case 1: - /* Tube */ - add_primitiveMball(2); - break; - case 2: - /* Plane */ - add_primitiveMball(3); - break; - case 3: - /* Elipsoid */ - add_primitiveMball(4); - break; - case 4: - /* Cube */ - add_primitiveMball(5); - break; - default: - break; - } - allqueue(REDRAWINFO, 0); -} - - -static uiBlock *info_add_metamenu(void *arg_unused) -{ -/* static short tog=0; */ - uiBlock *block; - short xco= 0; - - block= uiNewBlock(&curarea->uiblocks, "add_metamenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_info_add_metamenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,"Meta Ball|", 0, xco-=20, 160, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta Tube|", 0, xco-=20, 160, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta Plane|", 0, xco-=20, 160, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta Ellipsoid|", 0, xco-=20, 160, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta Cube|", 0, xco-=20, 160, 19, NULL, 0.0, 0.0, 1, 4, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 50); - - return block; -} - - -static void do_info_addmenu(void *arg, int event) -{ - - switch(event) { - case 0: - /* Mesh */ - break; - case 1: - /* Curve */ - break; - case 2: - /* Surface */ - break; - case 3: - /* Metaball */ - break; - case 4: - /* Text (argument is discarded) */ - add_primitiveFont(event); - break; - case 5: - /* Empty */ - add_object_draw(OB_EMPTY); - break; - case 6: - /* Camera */ - add_object_draw(OB_CAMERA); - break; - case 7: - /* Lamp */ - add_object_draw(OB_LAMP); - break; - case 8: - /* Armature */ - add_primitiveArmature(OB_ARMATURE); - break; - case 9: - /* Lattice */ - add_object_draw(OB_LATTICE); - break; - default: - break; - } - allqueue(REDRAWINFO, 0); -} - - -static uiBlock *info_addmenu(void *arg_unused) -{ -/* static short tog=0; */ - uiBlock *block; - short yco= 0; - - block= uiNewBlock(&curarea->uiblocks, "addmenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_info_addmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBlockBut(block, info_add_meshmenu, NULL, ICON_RIGHTARROW_THIN, "Mesh", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, info_add_curvemenu, NULL, ICON_RIGHTARROW_THIN, "Curve", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, info_add_surfacemenu, NULL, ICON_RIGHTARROW_THIN, "Surface", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, info_add_metamenu, NULL, ICON_RIGHTARROW_THIN, "Meta", 0, yco-=20, 120, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, 120, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice|", 0, yco-=20, 120, 19, NULL, 0.0, 0.0, 1, 9, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text|", 0, yco-=20, 120, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Empty|", 0, yco-=20, 120, 19, NULL, 0.0, 0.0, 1, 5, ""); - uiDefBut(block, SEPR, 0, "", 0, yco-=6, 120, 6, NULL, 0.0, 0.0, 0, 0, ""); -// uiDefBut(block, BUTM, 1, "Armature|", 0, yco-=20, 120, 19, NULL, 0.0, 0.0, 1, 8, "Adds an Armature"); -// uiDefBut(block, SEPR, 0, "", 0, yco-=6, 120, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera|", 0, yco-=20, 120, 19, NULL, 0.0, 0.0, 1, 6, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp|", 0, yco-=20, 120, 19, NULL, 0.0, 0.0, 1, 7, ""); - - uiBlockSetDirection(block, UI_DOWN); - uiTextBoundsBlock(block, 80); - - return block; -} - -/************************** GAME *****************************/ - -static void do_info_gamemenu(void *arg, int event) -{ - switch (event) { - case G_FILE_ENABLE_ALL_FRAMES_BIT: - case G_FILE_SHOW_FRAMERATE_BIT: - case G_FILE_SHOW_DEBUG_PROPS_BIT: - case G_FILE_AUTOPLAY_BIT: - G.fileflags ^= (1 << event); - break; - default: - ; /* ignore the rest */ - } -} - -static uiBlock *info_gamemenu(void *arg_unused) -{ -/* static short tog=0; */ - uiBlock *block; - short yco= 0; - short menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "gamemenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_info_gamemenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, B_STARTGAME, ICON_BLANK1, "Start Game|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 1, 0, ""); - - - if(G.fileflags & (1 << G_FILE_ENABLE_ALL_FRAMES_BIT)) { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Enable All Frames", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_ENABLE_ALL_FRAMES_BIT, ""); - } else { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Enable All Frames", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_ENABLE_ALL_FRAMES_BIT, ""); - } - - if(G.fileflags & (1 << G_FILE_SHOW_FRAMERATE_BIT)) { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Show Framerate and Profile", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_SHOW_FRAMERATE_BIT, ""); - } else { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Show Framerate and Profile", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_SHOW_FRAMERATE_BIT, ""); - } - - if(G.fileflags & (1 << G_FILE_SHOW_DEBUG_PROPS_BIT)) { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Show Debug Properties", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_SHOW_DEBUG_PROPS_BIT, ""); - } else { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Show Debug Properties", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_SHOW_DEBUG_PROPS_BIT, ""); - } - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 1, 0, ""); - - if(G.fileflags & (1 << G_FILE_AUTOPLAY_BIT)) { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Autostart", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_AUTOPLAY_BIT, ""); - } else { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Autostart", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, G_FILE_AUTOPLAY_BIT, ""); - } - - uiBlockSetDirection(block, UI_DOWN); - uiTextBoundsBlock(block, 50); - - return block; -} -/************************** TIMELINE *****************************/ - -static void do_info_timelinemenu(void *arg, int event) -{ - /* needed to check for valid selected objects */ - Base *base=NULL; - Object *ob=NULL; - //char file[FILE_MAXDIR+FILE_MAXFILE]; - - base= BASACT; - if (base) ob= base->object; - - switch(event) { - case 1: - /* Show Keyframes */ - if (!ob) error("Select an object before showing its keyframes"); - else set_ob_ipoflags(); - break; - case 2: - /* Show and select Keyframes */ - if (!ob) error("Select an object before showing and selecting its keyframes"); - else select_select_keys(); - break; - case 3: - /* select next keyframe */ - if (!ob) error("Select an object before selecting its next keyframe"); - else nextkey_obipo(1); - break; - case 4: - /* select previous keyframe */ - if (!ob) error("Select an object before selecting its previous keyframe"); - else nextkey_obipo(-1); - break; - case 5: - /* next keyframe */ - if (!ob) error("Select an object before going to its next keyframe"); - else movekey_obipo(1); - break; - case 6: - /* previous keyframe */ - if (!ob) error("Select an object before going to its previous keyframe"); - else movekey_obipo(-1); - break; - case 7: - /* next frame */ - CFRA++; - update_for_newframe(); - break; - case 8: - /* previous frame */ - CFRA--; - if(CFRA<1) CFRA=1; - update_for_newframe(); - break; - case 9: - /* forward 10 frames */ - CFRA+= 10; - update_for_newframe(); - break; - case 10: - /* back 10 frames */ - CFRA-= 10; - if(CFRA<1) CFRA=1; - update_for_newframe(); - break; - case 11: - /* end frame */ - CFRA= EFRA; - update_for_newframe(); - break; - case 12: - /* start frame */ - CFRA= SFRA; - update_for_newframe(); - break; - } - allqueue(REDRAWINFO, 0); -} - -static uiBlock *info_timelinemenu(void *arg_unused) -{ -/* static short tog=0; */ - uiBlock *block; - short yco= 0; - short menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "timelinemenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_info_timelinemenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Keyframes|K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show and Select Keyframes|Shift K",0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Next Keyframe|PageUp", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Previous Keyframe|PageDown", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Next Keyframe|Ctrl PageUp", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Previous Keyframe|Ctrl PageDown", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Next Frame|RightArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Previous Frame|LeftArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Forward 10 Frames|UpArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Back 10 Frames|DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "End Frame|Shift RightArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Start Frame|Shift LeftArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, ""); - - uiBlockSetDirection(block, UI_DOWN); - uiTextBoundsBlock(block, 80); - - return block; -} - -/************************** RENDER *****************************/ - -/* copied from buttons.c. .. probably not such a good idea!? */ -static void run_playanim(char *file) { - extern char bprogname[]; /* usiblender.c */ - char str[FILE_MAXDIR+FILE_MAXFILE]; - int pos[2], size[2]; - - calc_renderwin_rectangle(R.winpos, pos, size); - - sprintf(str, "%s -a -p %d %d \"%s\"", bprogname, pos[0], pos[1], file); - system(str); -} - -static void do_info_rendermenu(void *arg, int event) -{ - char file[FILE_MAXDIR+FILE_MAXFILE]; - - extern void makeavistring(char *string); - extern void makeqtstring (char *string); - - switch(event) { - - case 0: - BIF_do_render(0); - break; - case 1: - BIF_do_render(1); - break; - case 2: - if(select_area(SPACE_VIEW3D)) { - BIF_do_ogl_render(curarea->spacedata.first, 0 ); - } - break; - case 3: - if(select_area(SPACE_VIEW3D)) { - BIF_do_ogl_render(curarea->spacedata.first, 1 ); - } - break; - case 4: - BIF_toggle_render_display(); - break; - case 5: -#ifdef WITH_QUICKTIME - if(G.scene->r.imtype == R_QUICKTIME) - makeqtstring(file); - else -#endif - makeavistring(file); - if(BLI_exist(file)) { - run_playanim(file); - } - else { - makepicstring(file, G.scene->r.sfra); - if(BLI_exist(file)) { - run_playanim(file); - } - else error("Can't find image: %s", file); - } - break; - case 6: - /* dodgy hack turning on SHIFT key to do a proper render border select - strangely, set_render_border(); won't work :( - - This code copied from toolbox.c */ - - if(select_area(SPACE_VIEW3D)) { - mainqenter(LEFTSHIFTKEY, 1); - mainqenter(BKEY, 1); - mainqenter(BKEY, 0); - mainqenter(EXECUTE, 1); - mainqenter(LEFTSHIFTKEY, 0); - } - - break; - - case 7: - extern_set_butspace(F10KEY); - break; - } - allqueue(REDRAWINFO, 0); -} - -static uiBlock *info_rendermenu(void *arg_unused) -{ -/* static short tog=0; */ - uiBlock *block; - short yco= 0; - short menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "rendermenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_info_rendermenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Render Current Frame|F12", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Render Animation", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "OpenGL Preview Current Frame",0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "OpenGL Preview Animation", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Render Buffer|F11", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Rendered Animation", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Render Border|Shift B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Render Settings|F10", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); - - uiBlockSetDirection(block, UI_DOWN); - uiTextBoundsBlock(block, 80); - - return block; -} - -/************************** HELP *****************************/ - -static void do_info_help_websitesmenu(void *arg, int event) -{ - /* these are no defines, easier this way, the codes are in the function below */ - switch(event) { - case 0: /* */ - - break; - } - allqueue(REDRAWVIEW3D, 0); -} - - -static uiBlock *info_help_websitesmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiNewBlock(&curarea->uiblocks, "info_help_websitesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_info_help_websitesmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Blender Website *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Blender E-shop *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Development Community *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "User Community *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "...? *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - - return block; -} - - -static void do_info_helpmenu(void *arg, int event) -{ - switch(event) { - - case 0: - break; - case 1: - /* dodgy hack turning on CTRL ALT SHIFT key to do a benchmark - * rather than copying lines and lines of code from toets.c :( - */ - - if(select_area(SPACE_VIEW3D)) { - mainqenter(LEFTSHIFTKEY, 1); - mainqenter(LEFTCTRLKEY, 1); - mainqenter(LEFTALTKEY, 1); - mainqenter(TKEY, 1); - mainqenter(TKEY, 0); - mainqenter(EXECUTE, 1); - mainqenter(LEFTSHIFTKEY, 0); - mainqenter(LEFTCTRLKEY, 0); - mainqenter(LEFTALTKEY, 0); - } - break; - } - allqueue(REDRAWINFO, 0); -} - -static uiBlock *info_helpmenu(void *arg_unused) -{ -/* static short tog=0; */ - uiBlock *block; - short yco= 0; - short menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "info_helpmenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_info_helpmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "-- Placeholders only --", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tutorials *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "User Manual *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Python Scripting Reference *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBlockBut(block, info_help_websitesmenu, NULL, ICON_RIGHTARROW_THIN, "Websites", 0, yco-=20, 120, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Benchmark", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, B_SHOWSPLASH, ICON_BLANK1, "About Blender...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Release Notes *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiBlockSetDirection(block, UI_DOWN); - uiTextBoundsBlock(block, 80); - - return block; -} - - -/************************** END MAIN MENU *****************************/ - - -static void info_text(int x, int y) -{ - Object *ob; - extern float hashvectf[]; - extern int mem_in_use; - unsigned int swatch_color; - float fac1, fac2, fac3; - char infostr[300]; - char *headerstr; - int hsize; - - - if(G.obedit) { - sprintf(infostr,"Ve:%d-%d Fa:%d-%d Mem:%.2fM ", - G.totvertsel, G.totvert, G.totfacesel, G.totface, - (mem_in_use>>10)/1024.0); - } - else { - sprintf(infostr,"Ve:%d Fa:%d Ob:%d-%d La:%d Mem:%.2fM ", - G.totvert, G.totface, G.totobj, G.totobjsel, G.totlamp, (mem_in_use>>10)/1024.0); - } - ob= OBACT; - if(ob) { - strcat(infostr, ob->id.name+2); - } - - if (g_progress_bar) { - hsize = 4 + (138.0 * g_done); - fac1 = 0.5 * g_done; // do some rainbow colours on progress - fac2 = 1.0; - fac3 = 0.9; - } else { - hsize = 142; - /* promise! Never change these lines again! (zr & ton did!) */ - fac1= fabs(hashvectf[ 2*G.version+4]); - fac2= 0.5+0.1*hashvectf[ G.version+3]; - fac3= 0.7; - } - - if (g_progress_bar && g_progress_info) { - headerstr= g_progress_info; - } else { - headerstr= versionstr; - } - - swatch_color= hsv_to_cpack(fac1, fac2, fac3); - - cpack( swatch_color ); - glRecti(x-24, y-4, x-24+hsize, y+13); - - glColor3ub(0, 0, 0); - - glRasterPos2i(x, y); - - BIF_DrawString(G.font, headerstr, (U.transopts & TR_MENUS), 0); - - glRasterPos2i(x+120, y); - - BIF_DrawString(G.font, infostr, (U.transopts & TR_MENUS), 0); -} - -static int GetButStringLength(char *str) { - int rt; - - rt= BIF_GetStringWidth(G.font, str, (U.transopts & TR_BUTTONS)); - - return rt + 15; -} - - - -void info_buttons(void) -{ - uiBlock *block; - short xco= 32; - char naam[20]; - int xmax; - - sprintf(naam, "header %d", curarea->headwin); - block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSSN, UI_HELV, curarea->headwin); - uiBlockSetCol(block, BUTGREY); - - if(U.uiflag & FLIPINFOMENU) { - uiDefIconButS(block, TOG|BIT|6, B_FLIPINFOMENU, ICON_DISCLOSURE_TRI_RIGHT, - xco,2,XIC,YIC-2, - &(U.uiflag), 0, 0, 0, 0, "Enables display of pulldown menus");/* dir */ - } else { - uiDefIconButS(block, TOG|BIT|6, B_FLIPINFOMENU, ICON_DISCLOSURE_TRI_DOWN, - xco,2,XIC,YIC-2, - &(U.uiflag), 0, 0, 0, 0, "Hides pulldown menus");/* dir */ - } - xco+=XIC; - - if(U.uiflag & FLIPINFOMENU) { - } else { - uiBlockSetEmboss(block, UI_EMBOSSP); - if(area_is_active_area(curarea)) uiBlockSetCol(block, HEADERCOLSEL); - else uiBlockSetCol(block, HEADERCOL); - - xmax= GetButStringLength("File"); - uiDefBlockBut(block, info_filemenu, NULL, "File", xco, 0, xmax, 21, ""); - xco+= xmax; - - xmax= GetButStringLength("Add"); - uiDefBlockBut(block, info_addmenu, NULL, "Add", xco, 0, xmax, 21, ""); - xco+= xmax; - - xmax= GetButStringLength("Timeline"); - uiDefBlockBut(block, info_timelinemenu, NULL, "Timeline", xco, 0, xmax, 21, ""); - xco+= xmax; - - xmax= GetButStringLength("Game"); - uiDefBlockBut(block, info_gamemenu, NULL, "Game", xco, 0, xmax, 21, ""); - xco+= xmax; - - xmax= GetButStringLength("Render"); - uiDefBlockBut(block, info_rendermenu, NULL, "Render", xco, 0, xmax, 21, ""); - xco+= xmax; - - xmax= GetButStringLength("Help"); - uiDefBlockBut(block, info_helpmenu, NULL, "Help", xco, 0, xmax, 21, ""); - xco+= xmax; - - } - - /* pack icon indicates a packed file */ - uiBlockSetCol(block, BUTGREY); - - if (G.fileflags & G_AUTOPACK) { - uiBlockSetEmboss(block, UI_EMBOSSN); - uiDefIconBut(block, LABEL, 0, ICON_PACKAGE, xco, 0, XIC, YIC, &G.fileflags, 0.0, 0.0, 0, 0, "Indicates this is a Packed file. See File menu."); - xco += XIC; - uiBlockSetEmboss(block, UI_EMBOSSX); - } - - uiBlockSetEmboss(block, UI_EMBOSSX); - - if (curarea->full == 0) { - curarea->butspacetype= SPACE_INFO; - uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types."); - - /* STD SCREEN BUTTONS */ -// xco+= XIC; - xco+= 4; - xco= std_libbuttons(block, xco, 0, NULL, B_INFOSCR, (ID *)G.curscreen, 0, &G.curscreen->screennr, 1, 1, B_INFODELSCR, 0, 0); - - /* STD SCENE BUTTONS */ - xco+= 5; - xco= std_libbuttons(block, xco, 0, NULL, B_INFOSCE, (ID *)G.scene, 0, &G.curscreen->scenenr, 1, 1, B_INFODELSCE, 0, 0); - } - else xco= 430; - - info_text(xco+24, 6); - - uiBlockSetEmboss(block, UI_EMBOSSN); - uiDefIconBut(block, BUT, B_SHOWSPLASH, ICON_BLENDER, xco+1, 0,XIC,YIC, 0, 0, 0, 0, 0, "Click to display Splash Screen"); - uiBlockSetEmboss(block, UI_EMBOSSX); - -/* - uiBlockSetEmboss(block, UI_EMBOSSN); - uiDefIconBut(block, LABEL, 0, ICON_PUBLISHER, xco+125, 0,XIC,YIC, 0, 0, 0, 0, 0, ""); - uiBlockSetEmboss(block, UI_EMBOSSX); -*/ - /* always do as last */ - curarea->headbutlen= xco+2*XIC; - - if(curarea->headbutlen + 4*XIC < curarea->winx) { - uiDefIconBut(block, BUT, B_FILEMENU, ICON_HELP, - (short)(curarea->winx-XIC-2), 0,XIC,YIC, - 0, 0, 0, 0, 0, "Displays Toolbox menu (SPACE)"); - -#ifdef _WIN32 // FULLSCREEN - if(U.uiflag & FLIPFULLSCREEN) { - uiDefIconBut(block, BUT, B_FLIPFULLSCREEN, ICON_WINDOW_WINDOW, - (short)(curarea->winx-(XIC*2)-2), 0,XIC,YIC, - 0, 0, 0, 0, 0, "Toggles Blender to fullscreen mode");/* dir */ - } else { - uiDefIconBut(block, BUT, B_FLIPFULLSCREEN, ICON_WINDOW_FULLSCREEN, - (short)(curarea->winx-(XIC*2)-2), 0,XIC,YIC, - 0, 0, 0, 0, 0, "Toggles Blender to fullscreen mode");/* dir */ - } -#endif - - } - - uiDrawBlock(block); -} - -/* ********************** END INFO ****************************** */ -/* ********************** SEQUENCE ****************************** */ - -void do_seq_buttons(short event) -{ - Editing *ed; - - ed= G.scene->ed; - if(ed==0) return; - - switch(event) { - case B_SEQHOME: - G.v2d->cur= G.v2d->tot; - test_view2d(G.v2d, curarea->winx, curarea->winy); - scrarea_queue_winredraw(curarea); - break; - case B_SEQCLEAR: - free_imbuf_seq(); - allqueue(REDRAWSEQ, 1); - break; - } - -} - -void seq_buttons() -{ - SpaceSeq *sseq; - short xco; - char naam[20]; - uiBlock *block; - - sseq= curarea->spacedata.first; - - sprintf(naam, "header %d", curarea->headwin); - block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSSX, UI_HELV, curarea->headwin); - uiBlockSetCol(block, BUTPURPLE); - - curarea->butspacetype= SPACE_SEQ; - - uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types."); - - /* FULL WINDOW */ - xco= 25; - if(curarea->full) uiDefIconBut(block, BUT,B_FULL, ICON_SPLITSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Returns to multiple views window (CTRL+Up arrow)"); - else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Makes current window full screen (CTRL+Down arrow)"); - - /* HOME */ - uiDefIconBut(block, BUT, B_SEQHOME, ICON_HOME, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms window to home view showing all items (HOMEKEY)"); - xco+= XIC; - - /* IMAGE */ - uiDefIconButS(block, TOG, B_REDR, ICON_IMAGE_COL, xco+=XIC,0,XIC,YIC, &sseq->mainb, 0, 0, 0, 0, "Toggles image display"); - - /* ZOOM and BORDER */ - xco+= XIC; - uiDefIconButI(block, TOG, B_VIEW2DZOOM, ICON_VIEWZOOM, xco+=XIC,0,XIC,YIC, &viewmovetemp, 0, 0, 0, 0, "Zooms view in and out (CTRL+MiddleMouse)"); - uiDefIconBut(block, BUT, B_IPOBORDER, ICON_BORDERMOVE, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms view to fit area"); - - /* CLEAR MEM */ - xco+= XIC; - uiDefBut(block, BUT, B_SEQCLEAR, "Clear", xco+=XIC,0,2*XIC,YIC, 0, 0, 0, 0, 0, "Forces a clear of all buffered images in memory"); - - uiDrawBlock(block); -} - -/* ********************** END SEQ ****************************** */ -/* ********************** VIEW3D ****************************** */ -void do_layer_buttons(short event) -{ - static int oldlay= 1; - - if(G.vd==0) return; - if(G.vd->localview) return; - - if(event==-1 && (G.qual & LR_CTRLKEY)) { - G.vd->scenelock= !G.vd->scenelock; - do_view3d_buttons(B_SCENELOCK); - } else if (event==-1) { - if(G.vd->lay== (2<<20)-1) { - if(G.qual & LR_SHIFTKEY) G.vd->lay= oldlay; - } - else { - oldlay= G.vd->lay; - G.vd->lay= (2<<20)-1; - } - - if(G.vd->scenelock) handle_view3d_lock(); - scrarea_queue_winredraw(curarea); - } - else { - if(G.qual & LR_ALTKEY) { - if(event<11) event+= 10; - } - if(G.qual & LR_SHIFTKEY) { - if(G.vd->lay & (1<<event)) G.vd->lay -= (1<<event); - else G.vd->lay += (1<<event); - } - do_view3d_buttons(event+B_LAY); - } - /* redraw seems double: but the queue nicely handles that */ - scrarea_queue_headredraw(curarea); - - if(curarea->spacetype==SPACE_OOPS) allqueue(REDRAWVIEW3D, 1); /* 1==also do headwin */ - -} - -static void do_view3d_view_cameracontrolsmenu(void *arg, int event) -{ - switch(event) { - case 0: /* Orbit Left */ - persptoetsen(PAD4); - break; - case 1: /* Orbit Right */ - persptoetsen(PAD6); - break; - case 2: /* Orbit Up */ - persptoetsen(PAD8); - break; - case 3: /* Orbit Down */ - persptoetsen(PAD2); - break; - case 4: /* Zoom In */ - persptoetsen(PADPLUSKEY); - break; - case 5: /* Zoom Out */ - persptoetsen(PADMINUS); - break; - case 6: /* Reset Zoom */ - persptoetsen(PADENTER); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_view_cameracontrolsmenu(void *arg_unused) -{ -/* static short tog=0; */ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_view_cameracontrolsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_view3d_view_cameracontrolsmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Left|NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Right|NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Up|NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Down|NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom In|NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Out|NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Zoom|NumPad Enter", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_viewmenu(void *arg, int event) -{ - extern int play_anim(int mode); - - float *curs; - - switch(event) { - case 0: /* User */ - G.vd->viewbut = 0; - G.vd->persp = 1; - break; - case 1: /* Camera */ - persptoetsen(PAD0); - break; - case 2: /* Top */ - persptoetsen(PAD7); - break; - case 3: /* Front */ - persptoetsen(PAD1); - break; - case 4: /* Side */ - persptoetsen(PAD3); - break; - case 5: /* Perspective */ - G.vd->persp=1; - break; - case 6: /* Orthographic */ - G.vd->persp=0; - break; - case 7: /* Local View */ - G.vd->localview= 1; - initlocalview(); - break; - case 8: /* Global View */ - G.vd->localview= 0; - endlocalview(curarea); - break; - case 9: /* Frame All (Home) */ - view3d_home(0); - break; - case 10: /* Center at Cursor */ - curs= give_cursor(); - G.vd->ofs[0]= -curs[0]; - G.vd->ofs[1]= -curs[1]; - G.vd->ofs[2]= -curs[2]; - scrarea_queue_winredraw(curarea); - break; - case 11: /* Center View to Selected */ - centreview(); - break; - case 12: /* Align View to Selected */ - mainqenter(PADASTERKEY, 1); - break; - case 13: /* Play Back Animation */ - play_anim(0); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_viewmenu(void *arg_unused) -{ -/* static short tog=0; */ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_viewmenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_viewmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - if ((G.vd->viewbut == 0) && !(G.vd->persp == 2)) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, ""); - if (G.vd->persp == 2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, ""); - if (G.vd->viewbut == 1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, ""); - if (G.vd->viewbut == 2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, ""); - if (G.vd->viewbut == 3) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - if(G.vd->persp==1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, ""); - if(G.vd->persp==0) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - if(G.vd->localview) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, ""); - if(!G.vd->localview) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBlockBut(block, view3d_view_cameracontrolsmenu, NULL, ICON_RIGHTARROW_THIN, "Viewport Navigation", 0, yco-=20, 120, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Frame All|Home", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Frame Cursor|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Frame Selected|NumPad .", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected|NumPad *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 12, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation|Alt A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - if(!curarea->full) uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Maximize Window|Ctrl UpArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0,0, ""); - else uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - - return block; -} - -static void do_view3d_select_objectmenu(void *arg, int event) -{ - extern void borderselect(void); - extern void deselectall(void); - - switch(event) { - - case 0: /* border select */ - borderselect(); - break; - case 1: /* Select/Deselect All */ - deselectall(); - break; - case 2: /* Select Linked */ - selectlinks(); - break; - case 3: /* Select Grouped */ - group_menu(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_select_objectmenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_select_objectmenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_select_objectmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked...|Shift L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grouped...|Shift G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_select_meshmenu(void *arg, int event) -{ - extern void borderselect(void); - - switch(event) { - - case 0: /* border select */ - borderselect(); - break; - case 2: /* Select/Deselect all */ - deselectall_mesh(); - break; - case 3: /* Inverse */ - selectswap_mesh(); - break; - case 4: /* select linked vertices */ - G.qual |= LR_CTRLKEY; - selectconnected_mesh(); - G.qual &= ~LR_CTRLKEY; - break; - case 5: /* select random */ - // selectrandom_mesh(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - - -static uiBlock *view3d_select_meshmenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_select_meshmenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_select_meshmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - //uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Loop|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random Vertices...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connected Vertices|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_select_curvemenu(void *arg, int event) -{ - extern void borderselect(void); - - switch(event) { - case 0: /* border select */ - borderselect(); - break; - case 2: /* Select/Deselect all */ - deselectall_nurb(); - break; - case 3: /* Inverse */ - selectswapNurb(); - break; - //case 4: /* select connected control points */ - //G.qual |= LR_CTRLKEY; - //selectconnected_nurb(); - //G.qual &= ~LR_CTRLKEY; - //break; - case 5: /* select row (nurb) */ - selectrow_nurb(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - - -static uiBlock *view3d_select_curvemenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_select_curvemenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_select_curvemenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - - if (OBACT->type == OB_SURF) { - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Control Point Row|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - } - /* commented out because it seems to only like the LKEY method - based on mouse pointer position :( */ - //uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connected Control Points|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_select_metaballmenu(void *arg, int event) -{ - extern void borderselect(void); - - switch(event) { - case 0: /* border select */ - borderselect(); - break; - case 2: /* Select/Deselect all */ - deselectall_mball(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - - -static uiBlock *view3d_select_metaballmenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_select_metaballmenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_select_metaballmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_select_latticemenu(void *arg, int event) -{ - extern void borderselect(void); - - switch(event) { - case 0: /* border select */ - borderselect(); - break; - case 2: /* Select/Deselect all */ - deselectall_Latt(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_select_latticemenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_select_latticemenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_select_latticemenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_select_armaturemenu(void *arg, int event) -{ - extern void borderselect(void); - - switch(event) { - case 0: /* border select */ - borderselect(); - break; - case 2: /* Select/Deselect all */ - deselectall_armature(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_select_armaturemenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_select_armaturemenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_select_armaturemenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_select_pose_armaturemenu(void *arg, int event) -{ - extern void borderselect(void); - - switch(event) { - case 0: /* border select */ - borderselect(); - break; - case 2: /* Select/Deselect all */ - deselectall_posearmature(1); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_select_pose_armaturemenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_select_pose_armaturemenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_select_pose_armaturemenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_select_faceselmenu(void *arg, int event) -{ - extern void borderselect(void); - - switch(event) { - case 0: /* border select */ - borderselect(); - break; - case 2: /* Select/Deselect all */ - deselectall_tface(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_select_faceselmenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_select_faceselmenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_select_faceselmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_edit_object_transformmenu(void *arg, int event) -{ - switch(event) { - case 0: /* clear origin */ - clear_object('o'); - break; - case 1: /* clear size */ - clear_object('s'); - break; - case 2: /* clear rotation */ - clear_object('r'); - break; - case 3: /* clear location */ - clear_object('g'); - break; - case 4: /* apply deformation */ - make_duplilist_real(); - break; - case 5: /* apply size/rotation */ - apply_object(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_object_transformmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_transformmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_view3d_edit_object_transformmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Size/Rotation|Ctrl A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Deformation|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Location|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Rotation|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Size|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_edit_object_parentmenu(void *arg, int event) -{ - switch(event) { - case 0: /* clear parent */ - clear_parent(); - break; - case 1: /* make parent */ - make_parent(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_object_parentmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_parentmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_view3d_edit_object_parentmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Parent...|Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_edit_object_trackmenu(void *arg, int event) -{ - switch(event) { - case 0: /* clear track */ - clear_track(); - break; - case 1: /* make track */ - make_track(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_object_trackmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_trackmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_view3d_edit_object_trackmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Track...|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Track...|Alt T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_edit_objectmenu(void *arg, int event) -{ - /* needed to check for valid selected objects */ - Base *base=NULL; - Object *ob=NULL; - - base= BASACT; - if (base) ob= base->object; - - switch(event) { - - case 0: /* transform properties*/ - blenderqread(NKEY, 1); - break; - case 1: /* delete */ - delete_context_selected(); - break; - case 2: /* duplicate */ - duplicate_context_selected(); - break; - case 3: /* duplicate linked */ - G.qual |= LR_ALTKEY; - adduplicate(0); - G.qual &= ~LR_ALTKEY; - break; - case 4: /* make links */ - linkmenu(); - break; - case 5: /* make single user */ - single_user(); - break; - case 6: /* copy properties */ - copymenu(); - break; - case 7: /* boolean operation */ - special_editmenu(); - break; - case 8: /* join objects */ - if( (ob= OBACT) ) { - if(ob->type == OB_MESH) join_mesh(); - else if(ob->type == OB_CURVE) join_curve(OB_CURVE); - else if(ob->type == OB_SURF) join_curve(OB_SURF); - else if(ob->type == OB_ARMATURE) join_armature(); - } - break; - case 9: /* convert object type */ - convertmenu(); - break; - case 10: /* move to layer */ - movetolayer(); - break; - case 11: /* insert keyframe */ - common_insertkey(); - break; - case 12: /* snap */ - snapmenu(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_objectmenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_objectmenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_edit_objectmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - //uiDefIconTextBlockBut(block, 0, NULL, ICON_RIGHTARROW_THIN, "Move", 0, yco-=20, 120, 19, ""); - //uiDefIconTextBlockBut(block, 0, NULL, ICON_RIGHTARROW_THIN, "Rotate", 0, yco-=20, 120, 19, ""); - //uiDefIconTextBlockBut(block, 0, NULL, ICON_RIGHTARROW_THIN, "Scale", 0, yco-=20, 120, 19, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Transform Properties...|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBlockBut(block, view3d_edit_object_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Snap...|Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Linked|Alt D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Links...|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Single User...|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copy Properties...|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBlockBut(block, view3d_edit_object_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, view3d_edit_object_trackmenu, NULL, ICON_RIGHTARROW_THIN, "Track", 0, yco-=20, 120, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - if (OBACT && OBACT->type == OB_MESH) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Boolean Operation...|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); - } - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Join Objects|Ctrl J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Object Type...|Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - - -static void do_view3d_edit_propfalloffmenu(void *arg, int event) -{ - extern int prop_mode; - - switch(event) { - case 0: /* proportional edit - sharp*/ - prop_mode = 0; - break; - case 1: /* proportional edit - smooth*/ - prop_mode = 1; - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_propfalloffmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - extern int prop_mode; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_propfalloffmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_view3d_edit_propfalloffmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - if (prop_mode==0) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - if (prop_mode==1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_edit_mesh_verticesmenu(void *arg, int event) -{ - extern float doublimit; - - switch(event) { - - case 0: /* make vertex parent */ - make_parent(); - break; - case 1: /* remove doubles */ - notice("Removed: %d", removedoublesflag(1, doublimit)); - break; - case 2: /* smooth */ - vertexsmooth(); - break; - case 3: /* separate */ - separate_mesh(); - break; - case 4: /*split */ - split_mesh(); - break; - case 5: /*merge */ - mergemenu(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_mesh_verticesmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_verticesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_view3d_edit_mesh_verticesmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Merge...|Alt M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Split|Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Smooth", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Doubles", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_edit_mesh_edgesmenu(void *arg, int event) -{ - extern short editbutflag; - float fac; - short randfac; - - switch(event) { - - case 0: /* subdivide smooth */ - subdivideflag(1, 0.0, editbutflag | B_SMOOTH); - break; - case 1: /*subdivide fractal */ - randfac= 10; - if(button(&randfac, 1, 100, "Rand fac:")==0) return; - fac= -( (float)randfac )/100; - subdivideflag(1, fac, editbutflag); - break; - case 2: /* subdivide */ - subdivideflag(1, 0.0, editbutflag); - break; - case 3: /* knife subdivide */ - // KnifeSubdivide(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_mesh_edgesmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_edgesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_view3d_edit_mesh_edgesmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Knife Subdivide|K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Fractal", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Smooth", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_edit_mesh_facesmenu(void *arg, int event) -{ - switch(event) { - case 0: /* Fill Faces */ - fill_mesh(); - break; - case 1: /* Beauty Fill Faces */ - beauty_fill(); - break; - case 2: /* Quads to Tris */ - convert_to_triface(0); - allqueue(REDRAWVIEW3D, 0); - countall(); - makeDispList(G.obedit); - break; - case 3: /* Tris to Quads */ - join_triangles(); - break; - case 4: /* Flip triangle edges */ - edge_flip(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_mesh_facesmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_facesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_view3d_edit_mesh_facesmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Fill|Shift F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Beauty Fill|Alt F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Quads to Triangles|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Triangles to Quads|Alt J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip Triangle Edges|Ctrl F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_edit_mesh_normalsmenu(void *arg, int event) -{ - switch(event) { - case 0: /* flip */ - flip_editnormals(); - break; - case 1: /* recalculate inside */ - righthandfaces(2); - break; - case 2: /* recalculate outside */ - righthandfaces(1); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_mesh_normalsmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_normalsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_view3d_edit_mesh_normalsmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Recalculate Outside|Ctrl N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Recalculate Inside|Ctrl Shift N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_edit_meshmenu(void *arg, int event) -{ - switch(event) { - - case 0: /* Undo Editing */ - remake_editMesh(); - break; - case 1: /* transform properties */ - blenderqread(NKEY, 1); - break; - case 2: /* Extrude */ - extrude_mesh(); - break; - case 3: /* duplicate */ - duplicate_context_selected(); - break; - case 4: /* Make Edge/Face */ - addedgevlak_mesh(); - break; - case 5: /* delete */ - delete_context_selected(); - break; - case 6: /* Shrink/Fatten Along Normals */ - transform('N'); - break; - case 7: /* Shear */ - transform('S'); - break; - case 8: /* Warp */ - transform('w'); - break; - case 9: /* proportional edit (toggle) */ - if(G.f & G_PROPORTIONAL) G.f &= ~G_PROPORTIONAL; - else G.f |= G_PROPORTIONAL; - break; - case 10: /* show hidden vertices */ - reveal_mesh(); - break; - case 11: /* hide selected vertices */ - hide_mesh(0); - break; - case 12: /* hide deselected vertices */ - hide_mesh(1); - break; - case 13: /* insert keyframe */ - common_insertkey(); - break; - case 14: /* snap */ - snapmenu(); - break; - case 15: /* move to layer */ - movetolayer(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_meshmenu(void *arg_unused) -{ - - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_meshmenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_edit_meshmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - /* - uiDefIconTextBlockBut(block, view3d_edit_mesh_facesmenu, NULL, ICON_RIGHTARROW_THIN, "Move", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, view3d_edit_mesh_facesmenu, NULL, ICON_RIGHTARROW_THIN, "Rotate", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, view3d_edit_mesh_facesmenu, NULL, ICON_RIGHTARROW_THIN, "Scale", 0, yco-=20, 120, 19, ""); - */ - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Transform Properties...|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Snap...|Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extrude|E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete...|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBlockBut(block, view3d_edit_mesh_verticesmenu, NULL, ICON_RIGHTARROW_THIN, "Vertices", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, view3d_edit_mesh_edgesmenu, NULL, ICON_RIGHTARROW_THIN, "Edges", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, view3d_edit_mesh_facesmenu, NULL, ICON_RIGHTARROW_THIN, "Faces", 0, yco-=20, 120, 19, ""); - uiDefIconTextBlockBut(block, view3d_edit_mesh_normalsmenu, NULL, ICON_RIGHTARROW_THIN, "Normals", 0, yco-=20, 120, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Ctrl W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - if(G.f & G_PROPORTIONAL) { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, ""); - } else { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, ""); - } - uiDefIconTextBlockBut(block, view3d_edit_propfalloffmenu, NULL, ICON_RIGHTARROW_THIN, "Proportional Falloff", 0, yco-=20, 120, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden Vertices", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected Vertices|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected Vertices|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_edit_curve_controlpointsmenu(void *arg, int event) -{ - switch(event) { - case 0: /* tilt */ - transform('t'); - break; - case 1: /* clear tilt */ - clear_tilt(); - break; - case 2: /* Free */ - sethandlesNurb(3); - makeDispList(G.obedit); - break; - case 3: /* vector */ - sethandlesNurb(2); - makeDispList(G.obedit); - break; - case 4: /* smooth */ - sethandlesNurb(1); - makeDispList(G.obedit); - break; - case 5: /* make vertex parent */ - make_parent(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_curve_controlpointsmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_curve_controlpointsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_view3d_edit_curve_controlpointsmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - if (OBACT->type == OB_CURVE) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Tilt|Alt T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Toggle Free/Aligned|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vector|V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Smooth|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - } - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_edit_curve_segmentsmenu(void *arg, int event) -{ - switch(event) { - case 0: /* subdivide */ - subdivideNurb(); - break; - case 1: /* switch direction */ - switchdirectionNurb2(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_curve_segmentsmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_curve_segmentsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_view3d_edit_curve_segmentsmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Switch Direction", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_edit_curvemenu(void *arg, int event) -{ - switch(event) { - - case 0: /* Undo Editing */ - remake_editNurb(); - break; - case 1: /* transformation properties */ - blenderqread(NKEY, 1); - break; - case 2: /* insert keyframe */ - common_insertkey(); - break; - case 4: /* extrude */ - if (OBACT->type == OB_CURVE) { - addvert_Nurb('e'); - } else if (OBACT->type == OB_SURF) { - extrude_nurb(); - } - break; - case 5: /* duplicate */ - duplicate_context_selected(); - break; - case 6: /* make segment */ - addsegment_nurb(); - break; - case 7: /* toggle cyclic */ - makecyclicNurb(); - makeDispList(G.obedit); - break; - case 8: /* delete */ - delete_context_selected(); - break; - case 9: /* proportional edit (toggle) */ - if(G.f & G_PROPORTIONAL) G.f &= ~G_PROPORTIONAL; - else G.f |= G_PROPORTIONAL; - break; - case 10: /* show hidden control points */ - revealNurb(); - break; - case 11: /* hide selected control points */ - hideNurb(0); - break; - case 12: /* hide deselected control points */ - hideNurb(1); - break; - case 13: /* Shear */ - transform('S'); - break; - case 14: /* Warp */ - transform('w'); - break; - case 15: /* snap */ - snapmenu(); - break; - case 16: /* move to layer */ - movetolayer(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_curvemenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_curvemenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_edit_curvemenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Transform Properties...|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Snap...|Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extrude|E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Segment|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Toggle Cyclic|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete...|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBlockBut(block, view3d_edit_curve_controlpointsmenu, NULL, ICON_RIGHTARROW_THIN, "Control Points", 0, yco-=20, menuwidth, 19, ""); - uiDefIconTextBlockBut(block, view3d_edit_curve_segmentsmenu, NULL, ICON_RIGHTARROW_THIN, "Segments", 0, yco-=20, menuwidth, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Ctrl W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - if(G.f & G_PROPORTIONAL) { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, ""); - } else { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, ""); - } - uiDefIconTextBlockBut(block, view3d_edit_propfalloffmenu, NULL, ICON_RIGHTARROW_THIN, "Proportional Falloff", 0, yco-=20, 120, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden Control Points|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected Control Points|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, ""); - if (OBACT->type == OB_SURF) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected Control Points|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_edit_metaballmenu(void *arg, int event) -{ - switch(event) { - case 1: /* duplicate */ - duplicate_context_selected(); - break; - case 2: /* delete */ - delete_context_selected(); - break; - case 3: /* Shear */ - transform('S'); - break; - case 4: /* Warp */ - transform('w'); - break; - case 5: /* move to layer */ - movetolayer(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_metaballmenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_metaballmenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_edit_metaballmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete...|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Ctrl W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_edit_text_charsmenu(void *arg, int event) -{ - switch(event) { - case 0: /* copyright */ - do_textedit(0,0,169); - break; - case 1: /* registered trademark */ - do_textedit(0,0,174); - break; - case 2: /* degree sign */ - do_textedit(0,0,176); - break; - case 3: /* Multiplication Sign */ - do_textedit(0,0,215); - break; - case 4: /* Circle */ - do_textedit(0,0,138); - break; - case 5: /* superscript 1 */ - do_textedit(0,0,185); - break; - case 6: /* superscript 2 */ - do_textedit(0,0,178); - break; - case 7: /* superscript 3 */ - do_textedit(0,0,179); - break; - case 8: /* double >> */ - do_textedit(0,0,187); - break; - case 9: /* double << */ - do_textedit(0,0,171); - break; - case 10: /* Promillage */ - do_textedit(0,0,139); - break; - case 11: /* dutch florin */ - do_textedit(0,0,164); - break; - case 12: /* british pound */ - do_textedit(0,0,163); - break; - case 13: /* japanese yen*/ - do_textedit(0,0,165); - break; - case 14: /* german S */ - do_textedit(0,0,223); - break; - case 15: /* spanish question mark */ - do_textedit(0,0,191); - break; - case 16: /* spanish exclamation mark */ - do_textedit(0,0,161); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_text_charsmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_text_charsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_view3d_edit_text_charsmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copyright|Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Registered Trademark|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Degree Sign|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Multiplication Sign|Alt x", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Circle|Alt .", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Superscript 1|Alt 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Superscript 2|Alt 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Superscript 3|Alt 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Double >>|Alt >", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Double <<|Alt <", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Promillage|Alt %", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dutch Florin|Alt F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "British Pound|Alt L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Japanese Yen|Alt Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "German S|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Spanish Question Mark|Alt ?", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Spanish Exclamation Mark|Alt !", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - - return block; -} - -static void do_view3d_edit_textmenu(void *arg, int event) -{ - switch(event) { - - case 0: /* Undo Editing */ - remake_editText(); - break; - case 1: /* paste from file buffer */ - paste_editText(); - break; - case 2: /* move to layer */ - movetolayer(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_textmenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_textmenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_edit_textmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Paste From Buffer File|Alt V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBlockBut(block, view3d_edit_text_charsmenu, NULL, ICON_RIGHTARROW_THIN, "Special Characters", 0, yco-=20, 120, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_edit_latticemenu(void *arg, int event) -{ - switch(event) { - - case 0: /* Undo Editing */ - remake_editLatt(); - break; - case 1: /* snap */ - snapmenu(); - break; - case 2: /* insert keyframe */ - common_insertkey(); - break; - case 3: /* Shear */ - transform('S'); - break; - case 4: /* Warp */ - transform('w'); - break; - case 5: /* proportional edit (toggle) */ - if(G.f & G_PROPORTIONAL) G.f &= ~G_PROPORTIONAL; - else G.f |= G_PROPORTIONAL; - break; - case 6: /* move to layer */ - movetolayer(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_latticemenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_latticemenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_edit_latticemenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Snap...|Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Ctrl W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - if(G.f & G_PROPORTIONAL) { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - } else { - uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - } - uiDefIconTextBlockBut(block, view3d_edit_propfalloffmenu, NULL, ICON_RIGHTARROW_THIN, "Proportional Falloff", 0, yco-=20, 120, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); - - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_edit_armaturemenu(void *arg, int event) -{ - switch(event) { - - case 0: /* Undo Editing */ - remake_editArmature(); - break; - case 1: /* transformation properties */ - blenderqread(NKEY, 1); - break; - case 2: /* snap */ - snapmenu(); - break; - case 3: /* extrude */ - extrude_armature(); - break; - case 4: /* duplicate */ - duplicate_context_selected(); - break; - case 5: /* delete */ - delete_context_selected(); - break; - case 6: /* Shear */ - transform('S'); - break; - case 7: /* Warp */ - transform('w'); - break; - case 8: /* Move to Layer */ - movetolayer(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_edit_armaturemenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_edit_armaturemenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_edit_armaturemenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Snap...|Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extrude|E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Ctrl W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, ""); - - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - - return block; -} - -static void do_view3d_pose_armature_transformmenu(void *arg, int event) -{ - switch(event) { - case 0: /* clear origin */ - clear_object('o'); - break; - case 1: /* clear size */ - clear_object('s'); - break; - case 2: /* clear rotation */ - clear_object('r'); - break; - case 3: /* clear location */ - clear_object('g'); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_pose_armature_transformmenu(void *arg_unused) -{ - uiBlock *block; - short yco = 20, menuwidth = 120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_pose_armature_transformmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_view3d_pose_armature_transformmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Location|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Rotation|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Size|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_pose_armaturemenu(void *arg, int event) -{ - switch(event) { - - case 0: /* transform properties */ - blenderqread(NKEY, 1); - break; - case 1: /* insert keyframe */ - common_insertkey(); - break; - case 2: /* Move to Layer */ - movetolayer(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_pose_armaturemenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_pose_armaturemenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_pose_armaturemenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - uiDefIconTextBlockBut(block, view3d_pose_armature_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - - return block; -} - - -static void do_view3d_paintmenu(void *arg, int event) -{ - switch(event) { - case 0: /* undo vertex painting */ - vpaint_undo(); - break; - case 1: /* undo weight painting */ - wpaint_undo(); - break; - case 2: /* clear vertex colors */ - clear_vpaint(); - break; - } - allqueue(REDRAWVIEW3D, 0); -} - -static uiBlock *view3d_paintmenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - block= uiNewBlock(&curarea->uiblocks, "view3d_paintmenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_paintmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - if (G.f & G_VERTEXPAINT) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Vertex Painting|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - if (G.f & G_WEIGHTPAINT) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Weight Painting|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - if (G.f & G_TEXTUREPAINT) uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - if (G.f & G_VERTEXPAINT) { - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Vertex Colors|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - } - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - -static void do_view3d_facesel_propertiesmenu(void *arg, int event) -{ - extern TFace *lasttface; - set_lasttface(); - - switch(event) { - case 0: /* textured */ - lasttface->mode ^= TF_TEX; - break; - case 1: /* tiled*/ - lasttface->mode ^= TF_TILES; - break; - case 2: /* light */ - lasttface->mode ^= TF_LIGHT; - break; - case 3: /* invisible */ - lasttface->mode ^= TF_INVISIBLE; - break; - case 4: /* collision */ - lasttface->mode ^= TF_DYNAMIC; - break; - case 5: /* shared vertex colors */ - lasttface->mode ^= TF_SHAREDCOL; - break; - case 6: /* two sided */ - lasttface->mode ^= TF_TWOSIDE; - break; - case 7: /* use object color */ - lasttface->mode ^= TF_OBCOL; - break; - case 8: /* halo */ - lasttface->mode ^= TF_BILLBOARD; - break; - case 9: /* billboard */ - lasttface->mode ^= TF_BILLBOARD2; - break; - case 10: /* shadow */ - lasttface->mode ^= TF_SHADOW; - break; - case 11: /* text */ - lasttface->mode ^= TF_BMFONT; - break; - case 12: /* opaque blend mode */ - lasttface->transp = TF_SOLID; - break; - case 13: /* additive blend mode */ - lasttface->transp |= TF_ADD; - break; - case 14: /* alpha blend mode */ - lasttface->transp = TF_ALPHA; - break; - } - allqueue(REDRAWVIEW3D, 0); - allqueue(REDRAWBUTSLOGIC, 0); -} - -static uiBlock *view3d_facesel_propertiesmenu(void *arg_unused) -{ - extern TFace *lasttface; - uiBlock *block; - short yco = 20, menuwidth = 120; - - /* to display ticks/crosses depending on face properties */ - set_lasttface(); - - block= uiNewBlock(&curarea->uiblocks, "view3d_facesel_propertiesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); - uiBlockSetButmFunc(block, do_view3d_facesel_propertiesmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - if (lasttface->mode & TF_TEX) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Textured", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Textured", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, ""); - - if (lasttface->mode & TF_TILES) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Tiled", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Tiled", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, ""); - - if (lasttface->mode & TF_LIGHT) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Light", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Light", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, ""); - - if (lasttface->mode & TF_INVISIBLE) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Invisible", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Invisible", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, ""); - - if (lasttface->mode & TF_DYNAMIC) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Collision", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Collision", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, ""); - - if (lasttface->mode & TF_SHAREDCOL) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Shared Vertex Colors", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Shared Vertex Colors", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, ""); - - if (lasttface->mode & TF_TWOSIDE) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Two Sided", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Two Sided", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, ""); - - if (lasttface->mode & TF_OBCOL) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Use Object Color", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Use Object Color", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, ""); - - if (lasttface->mode & TF_BILLBOARD) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Halo", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Halo", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, ""); - - if (lasttface->mode & TF_BILLBOARD2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Billboard", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Billboard", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, ""); - - if (lasttface->mode & TF_SHADOW) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Shadow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Shadow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, ""); - - if (lasttface->mode & TF_BMFONT) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Text", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Text", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - if (lasttface->transp == TF_SOLID) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Opaque Blend Mode", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 12, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Opaque Blend Mode", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 12, ""); - - if (lasttface->transp == TF_ADD) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Additive Blend Mode", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Additive Blend Mode", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, ""); - - if (lasttface->transp == TF_ALPHA) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Alpha Blend Mode", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 14, ""); - else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Alpha Blend Mode", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 14, ""); - - uiBlockSetDirection(block, UI_RIGHT); - uiTextBoundsBlock(block, 60); - return block; -} - -static void do_view3d_faceselmenu(void *arg, int event) -{ - /* code copied from buttons.c :( - would be nice if it was split up into functions */ - Mesh *me; - Object *ob; - extern TFace *lasttface; /* caches info on tface bookkeeping ?*/ - - ob= OBACT; - - switch(event) { - case 0: /* copy draw mode */ - case 1: /* copy UVs */ - case 2: /* copy vertex colors */ - me= get_mesh(ob); - if(me && me->tface) { - - TFace *tface= me->tface; - int a= me->totface; - - set_lasttface(); - if(lasttface) { - - while(a--) { - if(tface!=lasttface && (tface->flag & TF_SELECT)) { - if(event==0) { - tface->mode= lasttface->mode; - tface->transp= lasttface->transp; - } else if(event==1) { - memcpy(tface->uv, lasttface->uv, sizeof(tface->uv)); - tface->tpage= lasttface->tpage; - tface->tile= lasttface->tile; - - if(lasttface->mode & TF_TILES) tface->mode |= TF_TILES; - else tface->mode &= ~TF_TILES; - - } else if(event==2) memcpy(tface->col, lasttface->col, sizeof(tface->col)); - } - tface++; - } - } - do_shared_vertexcol(me); - } - break; - case 3: /* clear vertex colors */ - clear_vpaint_selectedfaces(); - break; - // case 3: /* uv calculation */ - // uv_autocalc_tface(); - // break; - case 4: /* show hidden faces */ - reveal_tface(); - break; - case 5: /* hide selected faces */ - hide_tface(); - break; - case 6: /* hide deselected faces */ - G.qual |= LR_SHIFTKEY; - hide_tface(); - G.qual &= ~LR_SHIFTKEY; - break; - case 7: /* rotate UVs */ - rotate_uv_tface(); - break; - } - allqueue(REDRAWVIEW3D, 0); - allqueue(REDRAWBUTSLOGIC, 0); - allqueue(REDRAWIMAGE, 0); -} - -static uiBlock *view3d_faceselmenu(void *arg_unused) -{ - uiBlock *block; - short yco= 0, menuwidth=120; - - set_lasttface(); - - block= uiNewBlock(&curarea->uiblocks, "view3d_faceselmenu", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetButmFunc(block, do_view3d_faceselmenu, NULL); - uiBlockSetCol(block, MENUCOL); - - uiDefIconTextBlockBut(block, view3d_facesel_propertiesmenu, NULL, ICON_RIGHTARROW_THIN, "Active Draw Mode", 0, yco-=20, 120, 19, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copy Draw Mode", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copy UVs & Textures", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copy Vertex Colors", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Vertex Colors|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - /* for some reason calling this from the header messes up the 'from window' - * UV calculation :( - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Calculate UVs", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - */ - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate UVs|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); - - uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden Faces|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected Faces|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected Faces|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); - - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - uiTextBoundsBlock(block, 50); - return block; -} - - -static char *view3d_modeselect_pup(void) -{ - static char string[1024]; - char formatstring[1024]; - - strcpy(formatstring, "Mode: %%t"); - - strcat(formatstring, "|%s %%x%d"); // add space in the menu for Object - - /* if active object is an armature */ - if (OBACT && OBACT->type==OB_ARMATURE) { - strcat(formatstring, "|%s %%x%d"); // add space in the menu for pose - } - - /* if active object is a mesh */ - if (OBACT && OBACT->type == OB_MESH) { - strcat(formatstring, "|%s %%x%d|%s %%x%d|%s %%x%d"); // add space in the menu for faceselect, vertex paint, texture paint - - /* if active mesh has an armature */ - if ((((Mesh*)(OBACT->data))->dvert)) { - strcat(formatstring, "|%s %%x%d"); // add space in the menu for weight paint - } - } - - /* if active object is editable */ - if (OBACT && ((OBACT->type == OB_MESH) || (OBACT->type == OB_ARMATURE) - || (OBACT->type == OB_CURVE) || (OBACT->type == OB_SURF) || (OBACT->type == OB_FONT) - || (OBACT->type == OB_MBALL) || (OBACT->type == OB_LATTICE))) { - strcat(formatstring, "|%s %%x%d"); // add space in the menu for Edit - } - - /* - * fill in the spaces in the menu with appropriate mode choices depending on active object - */ - - /* if active object is an armature */ - if (OBACT && OBACT->type==OB_ARMATURE) { - sprintf(string, formatstring, - "Object", V3D_OBJECTMODE_SEL, - "Edit", V3D_EDITMODE_SEL, - "Pose", V3D_POSEMODE_SEL - ); - } - /* if active object is a mesh with armature */ - else if ((OBACT && OBACT->type == OB_MESH) && ((((Mesh*)(OBACT->data))->dvert))) { - sprintf(string, formatstring, - "Object", V3D_OBJECTMODE_SEL, - "Edit", V3D_EDITMODE_SEL, - "Face Select", V3D_FACESELECTMODE_SEL, - "Vertex Paint", V3D_VERTEXPAINTMODE_SEL, - "Texture Paint", V3D_TEXTUREPAINTMODE_SEL, - "Weight Paint", V3D_WEIGHTPAINTMODE_SEL - ); - } - /* if active object is a mesh */ - else if (OBACT && OBACT->type == OB_MESH) { - sprintf(string, formatstring, - "Object", V3D_OBJECTMODE_SEL, - "Edit", V3D_EDITMODE_SEL, - "Face Select", V3D_FACESELECTMODE_SEL, - "Vertex Paint", V3D_VERTEXPAINTMODE_SEL, - "Texture Paint", V3D_TEXTUREPAINTMODE_SEL - ); - } - /* if active object is editable */ - else if (OBACT && ((OBACT->type == OB_MESH) || (OBACT->type == OB_ARMATURE) - || (OBACT->type == OB_CURVE) || (OBACT->type == OB_SURF) || (OBACT->type == OB_FONT) - || (OBACT->type == OB_MBALL) || (OBACT->type == OB_LATTICE))) { - sprintf(string, formatstring, - "Object", V3D_OBJECTMODE_SEL, - "Edit", V3D_EDITMODE_SEL - ); - } - /* if active object is not editable */ - else { - sprintf(string, formatstring, - "Object", V3D_OBJECTMODE_SEL - ); - } - - return (string); -} - -void do_view3d_buttons(short event) -{ - int bit; - - /* watch it: if curarea->win does not exist, check that when calling direct drawing routines */ - - switch(event) { - case B_HOME: - view3d_home(0); - break; - case B_SCENELOCK: - if(G.vd->scenelock) { - G.vd->lay= G.scene->lay; - /* seek for layact */ - bit= 0; - while(bit<32) { - if(G.vd->lay & (1<<bit)) { - G.vd->layact= 1<<bit; - break; - } - bit++; - } - G.vd->camera= G.scene->camera; - scrarea_queue_winredraw(curarea); - scrarea_queue_headredraw(curarea); - } - break; - case B_LOCALVIEW: - if(G.vd->localview) initlocalview(); - else endlocalview(curarea); - scrarea_queue_headredraw(curarea); - break; - case B_EDITMODE: - if (G.f & G_VERTEXPAINT) { - /* Switch off vertex paint */ - G.f &= ~G_VERTEXPAINT; - } - if (G.f & G_WEIGHTPAINT){ - /* Switch off weight paint */ - G.f &= ~G_WEIGHTPAINT; - } -#ifdef NAN_TPT - if (G.f & G_TEXTUREPAINT) { - /* Switch off texture paint */ - G.f &= ~G_TEXTUREPAINT; - } -#endif /* NAN_VPT */ - if(G.obedit==0) enter_editmode(); - else exit_editmode(1); - scrarea_queue_headredraw(curarea); - break; - case B_POSEMODE: - /* if (G.obedit){ - error("Unable to perform function in EditMode"); - G.vd->flag &= ~V3D_POSEMODE; - scrarea_queue_headredraw(curarea); - } - else{ - */ - if (G.obpose==NULL) enter_posemode(); - else exit_posemode(1); - - allqueue(REDRAWHEADERS, 0); - - break; - case B_WPAINT: - if (G.f & G_VERTEXPAINT) { - /* Switch off vertex paint */ - G.f &= ~G_VERTEXPAINT; - } -#ifdef NAN_TPT - if ((!(G.f & G_WEIGHTPAINT)) && (G.f & G_TEXTUREPAINT)) { - /* Switch off texture paint */ - G.f &= ~G_TEXTUREPAINT; - } -#endif /* NAN_VPT */ - if(G.obedit) { - error("Unable to perform function in EditMode"); - G.vd->flag &= ~V3D_WEIGHTPAINT; - scrarea_queue_headredraw(curarea); - } - else if(G.obpose) { - error("Unable to perform function in PoseMode"); - G.vd->flag &= ~V3D_WEIGHTPAINT; - scrarea_queue_headredraw(curarea); - } - else set_wpaint(); - break; - case B_VPAINT: - if ((!(G.f & G_VERTEXPAINT)) && (G.f & G_WEIGHTPAINT)) { - G.f &= ~G_WEIGHTPAINT; - } -#ifdef NAN_TPT - if ((!(G.f & G_VERTEXPAINT)) && (G.f & G_TEXTUREPAINT)) { - /* Switch off texture paint */ - G.f &= ~G_TEXTUREPAINT; - } -#endif /* NAN_VPT */ - if(G.obedit) { - error("Unable to perform function in EditMode"); - G.vd->flag &= ~V3D_VERTEXPAINT; - scrarea_queue_headredraw(curarea); - } - else if(G.obpose) { - error("Unable to perform function in PoseMode"); - G.vd->flag &= ~V3D_VERTEXPAINT; - scrarea_queue_headredraw(curarea); - } - else set_vpaint(); - break; - -#ifdef NAN_TPT - case B_TEXTUREPAINT: - if (G.f & G_TEXTUREPAINT) { - G.f &= ~G_TEXTUREPAINT; - } - else { - if (G.obedit) { - error("Unable to perform function in EditMode"); - G.vd->flag &= ~V3D_TEXTUREPAINT; - } - else { - if (G.f & G_WEIGHTPAINT){ - /* Switch off weight paint */ - G.f &= ~G_WEIGHTPAINT; - } - if (G.f & G_VERTEXPAINT) { - /* Switch off vertex paint */ - G.f &= ~G_VERTEXPAINT; - } - if (G.f & G_FACESELECT) { - /* Switch off face select */ - G.f &= ~G_FACESELECT; - } - G.f |= G_TEXTUREPAINT; - scrarea_queue_headredraw(curarea); - } - } - break; -#endif /* NAN_TPT */ - - case B_FACESEL: - if(G.obedit) { - error("Unable to perform function in EditMode"); - G.vd->flag &= ~V3D_FACESELECT; - scrarea_queue_headredraw(curarea); - } - else if(G.obpose) { - error("Unable to perform function in PoseMode"); - G.vd->flag &= ~V3D_FACESELECT; - scrarea_queue_headredraw(curarea); - } - else set_faceselect(); - break; - - case B_VIEWBUT: - - if(G.vd->viewbut==1) persptoetsen(PAD7); - else if(G.vd->viewbut==2) persptoetsen(PAD1); - else if(G.vd->viewbut==3) persptoetsen(PAD3); - break; - - case B_PERSP: - - if(G.vd->persp==2) persptoetsen(PAD0); - else { - G.vd->persp= 1-G.vd->persp; - persptoetsen(PAD5); - } - - break; - case B_PROPTOOL: - allqueue(REDRAWHEADERS, 0); - break; - case B_VIEWRENDER: - if (curarea->spacetype==SPACE_VIEW3D) { - BIF_do_ogl_render(curarea->spacedata.first, G.qual!=0 ); - } - break; - case B_STARTGAME: - if (select_area(SPACE_VIEW3D)) { - start_game(); - } - break; - case B_VIEWZOOM: - viewmovetemp= 0; - viewmove(2); - scrarea_queue_headredraw(curarea); - break; - case B_VIEWTRANS: - viewmovetemp= 0; - viewmove(1); - scrarea_queue_headredraw(curarea); - break; - case B_MODESELECT: - if (G.vd->modeselect == V3D_OBJECTMODE_SEL) { - G.vd->flag &= ~V3D_MODE; - G.f &= ~G_VERTEXPAINT; /* Switch off vertex paint */ - G.f &= ~G_TEXTUREPAINT; /* Switch off texture paint */ - G.f &= ~G_WEIGHTPAINT; /* Switch off weight paint */ - G.f &= ~G_FACESELECT; /* Switch off face select */ - if (G.obpose) exit_posemode(1); /* exit posemode */ - if(G.obedit) exit_editmode(1); /* exit editmode */ - } else if (G.vd->modeselect == V3D_EDITMODE_SEL) { - if(!G.obedit) { - G.vd->flag &= ~V3D_MODE; - G.f &= ~G_VERTEXPAINT; /* Switch off vertex paint */ - G.f &= ~G_TEXTUREPAINT; /* Switch off texture paint */ - G.f &= ~G_WEIGHTPAINT; /* Switch off weight paint */ - if (G.obpose) exit_posemode(1); /* exit posemode */ - - enter_editmode(); - } - } else if (G.vd->modeselect == V3D_FACESELECTMODE_SEL) { - if ((G.obedit) && (G.f & G_FACESELECT)) { - exit_editmode(1); /* exit editmode */ - } else if ((G.f & G_FACESELECT) && (G.f & G_VERTEXPAINT)) { - G.f &= ~G_VERTEXPAINT; - } else if ((G.f & G_FACESELECT) && (G.f & G_TEXTUREPAINT)) { - G.f &= ~G_TEXTUREPAINT; - } else { - G.vd->flag &= ~V3D_MODE; - G.f &= ~G_VERTEXPAINT; /* Switch off vertex paint */ - G.f &= ~G_TEXTUREPAINT; /* Switch off texture paint */ - G.f &= ~G_WEIGHTPAINT; /* Switch off weight paint */ - if (G.obpose) exit_posemode(1); /* exit posemode */ - if (G.obedit) exit_editmode(1); /* exit editmode */ - - set_faceselect(); - } - } else if (G.vd->modeselect == V3D_VERTEXPAINTMODE_SEL) { - if (!(G.f & G_VERTEXPAINT)) { - G.vd->flag &= ~V3D_MODE; - G.f &= ~G_TEXTUREPAINT; /* Switch off texture paint */ - G.f &= ~G_WEIGHTPAINT; /* Switch off weight paint */ - if (G.obpose) exit_posemode(1); /* exit posemode */ - if(G.obedit) exit_editmode(1); /* exit editmode */ - - set_vpaint(); - } - } else if (G.vd->modeselect == V3D_TEXTUREPAINTMODE_SEL) { - if (!(G.f & G_TEXTUREPAINT)) { - G.vd->flag &= ~V3D_MODE; - G.f &= ~G_VERTEXPAINT; /* Switch off vertex paint */ - G.f &= ~G_WEIGHTPAINT; /* Switch off weight paint */ - if (G.obpose) exit_posemode(1); /* exit posemode */ - if(G.obedit) exit_editmode(1); /* exit editmode */ - - G.f |= G_TEXTUREPAINT; /* Switch on texture paint flag */ - } - } else if (G.vd->modeselect == V3D_WEIGHTPAINTMODE_SEL) { - if (!(G.f & G_WEIGHTPAINT) && (OBACT && OBACT->type == OB_MESH) && ((((Mesh*)(OBACT->data))->dvert))) { - G.vd->flag &= ~V3D_MODE; - G.f &= ~G_VERTEXPAINT; /* Switch off vertex paint */ - G.f &= ~G_TEXTUREPAINT; /* Switch off texture paint */ - if (G.obpose) exit_posemode(1); /* exit posemode */ - if(G.obedit) exit_editmode(1); /* exit editmode */ - - set_wpaint(); - } - } else if (G.vd->modeselect == V3D_POSEMODE_SEL) { - if (!G.obpose) { - G.vd->flag &= ~V3D_MODE; - if(G.obedit) exit_editmode(1); /* exit editmode */ - - enter_posemode(); - } - } - allqueue(REDRAWVIEW3D, 0); - break; - - default: - - if(event>=B_LAY && event<B_LAY+31) { - if(G.vd->lay!=0 && (G.qual & LR_SHIFTKEY)) { - - /* but do find active layer */ - - bit= event-B_LAY; - if( G.vd->lay & (1<<bit)) G.vd->layact= 1<<bit; - else { - if( (G.vd->lay & G.vd->layact) == 0) { - bit= 0; - while(bit<32) { - if(G.vd->lay & (1<<bit)) { - G.vd->layact= 1<<bit; - break; - } - bit++; - } - } - } - } - else { - bit= event-B_LAY; - G.vd->lay= 1<<bit; - G.vd->layact= G.vd->lay; - scrarea_queue_headredraw(curarea); - } - scrarea_queue_winredraw(curarea); - countall(); - - if(G.vd->scenelock) handle_view3d_lock(); - allqueue(REDRAWOOPS, 0); - } - break; - } -} - -void do_nla_buttons(unsigned short event) -{ - View2D *v2d; - - switch(event){ - case B_NLAHOME: - // Find X extents - v2d= &(G.snla->v2d); - - v2d->cur.xmin = G.scene->r.sfra; - v2d->cur.ymin=-SCROLLB; - -// if (!G.saction->action){ - v2d->cur.xmax=G.scene->r.efra; -// } -// else -// { -// v2d->cur.xmax=calc_action_length(G.saction->action)+1; -// } - - test_view2d(G.v2d, curarea->winx, curarea->winy); - addqueue (curarea->win, REDRAW, 1); - break; - } -} - -void nla_buttons(void) -{ - SpaceNla *snla; - short xco; - char naam[20]; - uiBlock *block; - - snla= curarea->spacedata.first; - - sprintf(naam, "header %d", curarea->headwin); - block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSSX, UI_HELV, curarea->headwin); - uiBlockSetCol(block, BUTCHOKE); - - curarea->butspacetype= SPACE_NLA; - uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types."); - - /* FULL WINDOW */ - xco= 25; - if(curarea->full) uiDefIconBut(block, BUT,B_FULL, ICON_SPLITSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Returns to multiple views window (CTRL+Up arrow)"); - else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Makes current window full screen (CTRL+Down arrow)"); - - /* HOME */ - uiDefIconBut(block, BUT, B_NLAHOME, ICON_HOME, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms window to home view showing all items (HOMEKEY)"); - xco+= XIC; - - /* IMAGE */ -// uiDefIconButS(block, TOG, B_REDR, ICON_IMAGE_COL, xco+=XIC,0,XIC,YIC, &sseq->mainb, 0, 0, 0, 0, "Toggles image display"); - - /* ZOOM en BORDER */ -// xco+= XIC; -// uiDefIconButI(block, TOG, B_VIEW2DZOOM, ICON_VIEWZOOM, xco+=XIC,0,XIC,YIC, &viewmovetemp, 0, 0, 0, 0, "Zoom view (CTRL+MiddleMouse)"); -// uiDefIconBut(block, BUT, B_NLABORDER, ICON_BORDERMOVE, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zoom view to area"); - - /* draw LOCK */ - xco+= XIC/2; - - uiDefIconButS(block, ICONTOG, 1, ICON_UNLOCKED, xco+=XIC,0,XIC,YIC, &(snla->lock), 0, 0, 0, 0, "Toggles forced redraw of other windows to reflect changes in real time"); - - uiDrawBlock(block);} - -void action_buttons(void) -{ - uiBlock *block; - short xco; - char naam[256]; - Object *ob; - ID *from; - - if (!G.saction) - return; - - // copy from drawactionspace.... - if (!G.saction->pin) { - if (OBACT) - G.saction->action = OBACT->action; - else - G.saction->action=NULL; - } - - sprintf(naam, "header %d", curarea->headwin); - block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSSX, UI_HELV, curarea->headwin); - uiBlockSetCol(block, BUTPINK); - - curarea->butspacetype= SPACE_ACTION; - uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types."); - - /* FULL WINDOW */ - xco= 25; - if(curarea->full) uiDefIconBut(block, BUT,B_FULL, ICON_SPLITSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Returns to multiple views window (CTRL+Up arrow)"); - else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Makes current window full screen (CTRL+Down arrow)"); - uiDefIconBut(block, BUT, B_ACTHOME, ICON_HOME, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms window to home view showing all items (HOMEKEY)"); - - - if (!get_action_mesh_key()) { - /* NAME ETC */ - ob=OBACT; - from = (ID*) ob; - - xco= std_libbuttons(block, xco+1.5*XIC, B_ACTPIN, &G.saction->pin, - B_ACTIONBROWSE, (ID*)G.saction->action, - from, &(G.saction->actnr), B_ACTALONE, - B_ACTLOCAL, B_ACTIONDELETE, 0, 0); - -#ifdef __NLA_BAKE - /* Draw action baker */ - uiDefBut(block, BUT, B_ACTBAKE, "Bake", - xco+=XIC, 0, 64, YIC, 0, 0, 0, 0, 0, - "Generate an action with the constraint " - "effects converted into ipo keys"); - xco+=64; -#endif - } - uiClearButLock(); - - /* draw LOCK */ - xco+= XIC/2; - uiDefIconButS(block, ICONTOG, 1, ICON_UNLOCKED, xco+=XIC,0,XIC,YIC, &(G.saction->lock), 0, 0, 0, 0, "Toggles forced redraw of other windows to reflect changes in real time"); - - - /* always as last */ - curarea->headbutlen= xco+2*XIC; - - uiDrawBlock(block); -} - -void view3d_buttons(void) -{ - uiBlock *block; - int a; - short xco = 0; - char naam[20]; - short xmax; - - sprintf(naam, "header %d", curarea->headwin); - block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSSX, UI_HELV, curarea->headwin); - uiBlockSetCol(block, MIDGREY); - - curarea->butspacetype= SPACE_VIEW3D; - - uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types."); - - xco+= XIC+18; - - /* pull down menus */ - uiBlockSetEmboss(block, UI_EMBOSSP); - if(area_is_active_area(curarea)) uiBlockSetCol(block, HEADERCOLSEL); - else uiBlockSetCol(block, HEADERCOL); - - /* compensate for local mode when setting up the viewing menu/iconrow values */ - if(G.vd->view==7) G.vd->viewbut= 1; - else if(G.vd->view==1) G.vd->viewbut= 2; - else if(G.vd->view==3) G.vd->viewbut= 3; - else G.vd->viewbut= 0; - - xmax= GetButStringLength("View"); - uiDefBlockBut(block, view3d_viewmenu, NULL, "View", xco, 0, xmax, 20, ""); - xco+= xmax; - - xmax= GetButStringLength("Select"); - if (G.obedit) { - if (OBACT && OBACT->type == OB_MESH) { - uiDefBlockBut(block, view3d_select_meshmenu, NULL, "Select", xco, 0, xmax, 20, ""); - } else if (OBACT && (OBACT->type == OB_CURVE || OBACT->type == OB_SURF)) { - uiDefBlockBut(block, view3d_select_curvemenu, NULL, "Select", xco, 0, xmax, 20, ""); - } else if (OBACT && OBACT->type == OB_FONT) { - uiDefBlockBut(block, view3d_select_meshmenu, NULL, "Select", xco, 0, xmax, 20, ""); - } else if (OBACT && OBACT->type == OB_MBALL) { - uiDefBlockBut(block, view3d_select_metaballmenu, NULL, "Select", xco, 0, xmax, 20, ""); - } else if (OBACT && OBACT->type == OB_LATTICE) { - uiDefBlockBut(block, view3d_select_latticemenu, NULL, "Select", xco, 0, xmax, 20, ""); - } else if (OBACT && OBACT->type == OB_ARMATURE) { - uiDefBlockBut(block, view3d_select_armaturemenu, NULL, "Select", xco, 0, xmax, 20, ""); - } - } else if (G.f & G_FACESELECT) { - if (OBACT && OBACT->type == OB_MESH) { - uiDefBlockBut(block, view3d_select_faceselmenu, NULL, "Select", xco, 0, xmax, 20, ""); - } - } else if (G.obpose) { - if (OBACT && OBACT->type == OB_ARMATURE) { - uiDefBlockBut(block, view3d_select_pose_armaturemenu, NULL, "Select", xco, 0, xmax, 20, ""); - } - } else if ((G.f & G_VERTEXPAINT) || (G.f & G_TEXTUREPAINT) || (G.f & G_WEIGHTPAINT)) { - uiDefBut(block, LABEL,0,"", xco, 0, xmax, 20, 0, 0, 0, 0, 0, ""); - } else { - uiDefBlockBut(block, view3d_select_objectmenu, NULL, "Select", xco, 0, xmax, 20, ""); - } - xco+= xmax; - - if ((G.f & G_VERTEXPAINT) || (G.f & G_TEXTUREPAINT) || (G.f & G_WEIGHTPAINT)) { - xmax= GetButStringLength("Paint"); - uiDefBlockBut(block, view3d_paintmenu, NULL, "Paint", xco, 0, xmax, 20, ""); - xco+= xmax; - } else if (G.obedit) { - if (OBACT && OBACT->type == OB_MESH) { - xmax= GetButStringLength("Mesh"); - uiDefBlockBut(block, view3d_edit_meshmenu, NULL, "Mesh", xco, 0, xmax, 20, ""); - xco+= xmax; - } else if (OBACT && OBACT->type == OB_CURVE) { - xmax= GetButStringLength("Curve"); - uiDefBlockBut(block, view3d_edit_curvemenu, NULL, "Curve", xco, 0, xmax, 20, ""); - xco+= xmax; - } else if (OBACT && OBACT->type == OB_SURF) { - xmax= GetButStringLength("Surface"); - uiDefBlockBut(block, view3d_edit_curvemenu, NULL, "Surface", xco, 0, xmax, 20, ""); - xco+= xmax; - } else if (OBACT && OBACT->type == OB_FONT) { - xmax= GetButStringLength("Text"); - uiDefBlockBut(block, view3d_edit_textmenu, NULL, "Text", xco, 0, xmax, 20, ""); - xco+= xmax; - } else if (OBACT && OBACT->type == OB_MBALL) { - xmax= GetButStringLength("Metaball"); - uiDefBlockBut(block, view3d_edit_metaballmenu, NULL, "Metaball", xco, 0, xmax, 20, ""); - xco+= xmax; - } else if (OBACT && OBACT->type == OB_LATTICE) { - xmax= GetButStringLength("Lattice"); - uiDefBlockBut(block, view3d_edit_latticemenu, NULL, "Lattice", xco, 0, xmax, 20, ""); - xco+= xmax; - } else if (OBACT && OBACT->type == OB_ARMATURE) { - xmax= GetButStringLength("Armature"); - uiDefBlockBut(block, view3d_edit_armaturemenu, NULL, "Armature", xco, 0, xmax, 20, ""); - xco+= xmax; - } - } else if (G.f & G_FACESELECT) { - if (OBACT && OBACT->type == OB_MESH) { - xmax= GetButStringLength("Face"); - uiDefBlockBut(block, view3d_faceselmenu, NULL, "Face", xco, 0, xmax, 20, ""); - xco+= xmax; - } - } else if (G.obpose) { - if (OBACT && OBACT->type == OB_ARMATURE) { - xmax= GetButStringLength("Armature"); - uiDefBlockBut(block, view3d_pose_armaturemenu, NULL, "Armature", xco, 0, xmax, 20, ""); - xco+= xmax; - } - } else { - xmax= GetButStringLength("Object"); - uiDefBlockBut(block, view3d_edit_objectmenu, NULL, "Object", xco, 0, xmax, 20, ""); - xco+= xmax; - } - - /* end pulldowns, other buttons: */ - uiBlockSetCol(block, MIDGREY); - uiBlockSetEmboss(block, UI_EMBOSSX); - - /* mode */ - G.vd->modeselect = V3D_OBJECTMODE_SEL; - if (G.f & G_WEIGHTPAINT) G.vd->modeselect = V3D_WEIGHTPAINTMODE_SEL; - else if (G.f & G_VERTEXPAINT) G.vd->modeselect = V3D_VERTEXPAINTMODE_SEL; - else if (G.f & G_TEXTUREPAINT) G.vd->modeselect = V3D_TEXTUREPAINTMODE_SEL; - else if(G.f & G_FACESELECT) G.vd->modeselect = V3D_FACESELECTMODE_SEL; - if (G.obpose) G.vd->modeselect = V3D_POSEMODE_SEL; - if (G.obedit) G.vd->modeselect = V3D_EDITMODE_SEL; - - G.vd->flag &= ~V3D_MODE; - if(G.obedit) G.vd->flag |= V3D_EDITMODE; - if(G.f & G_VERTEXPAINT) G.vd->flag |= V3D_VERTEXPAINT; - if(G.f & G_WEIGHTPAINT) G.vd->flag |= V3D_WEIGHTPAINT; -#ifdef NAN_TPT - if (G.f & G_TEXTUREPAINT) G.vd->flag |= V3D_TEXTUREPAINT; -#endif /* NAN_TPT */ - if(G.f & G_FACESELECT) G.vd->flag |= V3D_FACESELECT; - if(G.obpose){ - G.vd->flag |= V3D_POSEMODE; - } - - xco+= 16; - - uiDefIconTextButS(block, MENU, B_MODESELECT, (G.vd->modeselect),view3d_modeselect_pup() , - xco,0,120,20, &(G.vd->modeselect), 0, 0, 0, 0, "Mode:"); - - xco+= 130; - - /* DRAWTYPE */ - uiDefIconButS(block, ICONROW, B_REDR, ICON_BBOX, xco,0,XIC,YIC, &(G.vd->drawtype), 1.0, 5.0, 0, 0, "Drawtype: boundbox/wire/solid/shaded (ZKEY, SHIFT+Z)"); - - // uiDefIconTextButS(block, MENU, REDRAWVIEW3D, (ICON_BBOX+G.vd->drawtype-1), "Viewport Shading%t|Bounding Box %x1|Wireframe %x2|Solid %x3|Shaded %x4|Textured %x5", - // xco,0,124,20, &(G.vd->drawtype), 0, 0, 0, 0, "Viewport Shading"); - // uiDefButS(block, MENU, REDRAWVIEW3D, "Viewport Shading%t|Bounding Box %x1|Wireframe %x2|Solid %x3|Shaded %x4|Textured %x5", - // xco,0,110,20, &(G.vd->drawtype), 0, 0, 0, 0, "Viewport Shading"); - - xco+= XIC+10; - /* LAYERS */ - if(G.vd->localview==0) { - - for(a=0; a<10; a++) { - uiDefButI(block, TOG|BIT|(a+10), B_LAY+10+a, "",(short)(xco+a*(XIC/2)), 0, XIC/2, (YIC)/2, &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility"); - uiDefButI(block, TOG|BIT|a, B_LAY+a, "", (short)(xco+a*(XIC/2)), (short)(YIC/2),(short)(XIC/2),(short)(YIC/2), &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility"); - if(a==4) xco+= 5; - } - xco+= (a-2)*(XIC/2)+5; - - /* LOCK */ - uiDefIconButS(block, ICONTOG, B_SCENELOCK, ICON_UNLOCKED, xco+=XIC,0,XIC,YIC, &(G.vd->scenelock), 0, 0, 0, 0, "Locks layers and used Camera to Scene"); - xco+= 14; - - } - else xco+= (10+1)*(XIC/2)+10+4; - - /* VIEWMOVE */ - /* - uiDefIconButI(block, TOG, B_VIEWTRANS, ICON_VIEWMOVE, xco+=XIC,0,XIC,YIC, &viewmovetemp, 0, 0, 0, 0, "Translates view (SHIFT+MiddleMouse)"); - uiDefIconButI(block, TOG, B_VIEWZOOM, ICON_VIEWZOOM, xco+=XIC,0,XIC,YIC, &viewmovetemp, 0, 0, 0, 0, "Zooms view (CTRL+MiddleMouse)"); - */ - - /* around */ - xco+= XIC/2; - uiDefIconButS(block, ROW, 1, ICON_ROTATE, xco+=XIC,0,XIC,YIC, &G.vd->around, 3.0, 0.0, 0, 0, "Enables Rotation or Scaling around boundbox center (COMMAKEY)"); - uiDefIconButS(block, ROW, 1, ICON_ROTATECENTER, xco+=XIC,0,XIC,YIC, &G.vd->around, 3.0, 3.0, 0, 0, "Enables Rotation or Scaling around median point"); - uiDefIconButS(block, ROW, 1, ICON_CURSOR, xco+=XIC,0,XIC,YIC, &G.vd->around, 3.0, 1.0, 0, 0, "Enables Rotation or Scaling around cursor (DOTKEY)"); - uiDefIconButS(block, ROW, 1, ICON_ROTATECOLLECTION, xco+=XIC,0,XIC,YIC, &G.vd->around, 3.0, 2.0, 0, 0, "Enables Rotation or Scaling around individual object centers"); - - if(G.vd->bgpic) { - xco+= XIC/2; - uiDefIconButS(block, TOG|BIT|1, B_REDR, ICON_IMAGE_COL, xco+=XIC,0,XIC,YIC, &G.vd->flag, 0, 0, 0, 0, "Displays a Background picture"); - } - if(G.obedit && (OBACT->type == OB_MESH || OBACT->type == OB_CURVE || OBACT->type == OB_SURF || OBACT->type == OB_LATTICE)) { - extern int prop_mode; - xco+= XIC/2; - uiDefIconButI(block, ICONTOG|BIT|14, B_PROPTOOL, ICON_GRID, xco+=XIC,0,XIC,YIC, &G.f, 0, 0, 0, 0, "Toggles Proportional Vertex Editing (OKEY)"); - if(G.f & G_PROPORTIONAL) { - uiDefIconButI(block, ROW, 0, ICON_SHARPCURVE, xco+=XIC,0,XIC,YIC, &prop_mode, 4.0, 0.0, 0, 0, "Enables Sharp falloff (SHIFT+OKEY)"); - uiDefIconButI(block, ROW, 0, ICON_SMOOTHCURVE, xco+=XIC,0,XIC,YIC, &prop_mode, 4.0, 1.0, 0, 0, "Enables Smooth falloff (SHIFT+OKEY)"); - } - } - - xco+=XIC; - - /* Always do this last */ - curarea->headbutlen= xco+2*XIC; - - uiDrawBlock(block); - -} - -/* ********************** VIEW3D ****************************** */ -/* ********************** IPO ****************************** */ - -void do_ipo_buttons(short event) -{ - EditIpo *ei; - View2D *v2d; - rcti rect; - float xmin, ymin, dx, dy; - int a, val, first; - short mval[2]; - - if(curarea->win==0) return; - - switch(event) { - case B_IPOHOME: - - /* boundbox */ - - v2d= &(G.sipo->v2d); - first= 1; - - ei= G.sipo->editipo; - if(ei==0) return; - for(a=0; a<G.sipo->totipo; a++, ei++) { - if ISPOIN(ei, flag & IPO_VISIBLE, icu) { - - boundbox_ipocurve(ei->icu); - - if(first) { - v2d->tot= ei->icu->totrct; - first= 0; - } - else BLI_union_rctf(&(v2d->tot), &(ei->icu->totrct)); - } - } - - /* speciale home */ - if(G.qual & LR_SHIFTKEY) { - v2d->tot.xmin= SFRA; - v2d->tot.xmax= EFRA; - } - - /* zoom out a bit */ - dx= 0.10*(v2d->tot.xmax-v2d->tot.xmin); - dy= 0.10*(v2d->tot.ymax-v2d->tot.ymin); - - if(dx<v2d->min[0]) dx= v2d->min[0]; - if(dy<v2d->min[1]) dy= v2d->min[1]; - - v2d->cur.xmin= v2d->tot.xmin- dx; - v2d->cur.xmax= v2d->tot.xmax+ dx; - v2d->cur.ymin= v2d->tot.ymin- dy; - v2d->cur.ymax= v2d->tot.ymax+ dy; - - test_view2d(G.v2d, curarea->winx, curarea->winy); - scrarea_queue_winredraw(curarea); - break; - case B_IPOBORDER: - val= get_border(&rect, 2); - if(val) { - mval[0]= rect.xmin; - mval[1]= rect.ymin; - areamouseco_to_ipoco(G.v2d, mval, &xmin, &ymin); - mval[0]= rect.xmax; - mval[1]= rect.ymax; - areamouseco_to_ipoco(G.v2d, mval, &(G.v2d->cur.xmax), &(G.v2d->cur.ymax)); - G.v2d->cur.xmin= xmin; - G.v2d->cur.ymin= ymin; - - test_view2d(G.v2d, curarea->winx, curarea->winy); - scrarea_queue_winredraw(curarea); - } - break; - - case B_IPOPIN: - allqueue (REDRAWIPO, 0); - break; - - case B_IPOCOPY: - copy_editipo(); - break; - case B_IPOPASTE: - paste_editipo(); - break; - case B_IPOCONT: - set_exprap_ipo(IPO_HORIZ); - break; - case B_IPOEXTRAP: - set_exprap_ipo(IPO_DIR); - break; - case B_IPOCYCLIC: - set_exprap_ipo(IPO_CYCL); - break; - case B_IPOCYCLICX: - set_exprap_ipo(IPO_CYCLX); - break; - case B_IPOMAIN: - make_editipo(); - scrarea_queue_winredraw(curarea); - scrarea_queue_headredraw(curarea); - - break; - case B_IPOSHOWKEY: - /* reverse value because of winqread */ - G.sipo->showkey= 1-G.sipo->showkey; - ipo_toggle_showkey(); - scrarea_queue_headredraw(curarea); - scrarea_queue_winredraw(curarea); - allqueue(REDRAWVIEW3D, 0); - break; - case B_VIEW2DZOOM: - viewmovetemp= 0; - view2dzoom(event); - scrarea_queue_headredraw(curarea); - break; - - } -} - -void ipo_buttons(void) -{ - Object *ob; - ID *id, *from; - uiBlock *block; - short xco; - char naam[20]; - - sprintf(naam, "header %d", curarea->headwin); - block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSSX, UI_HELV, curarea->headwin); - uiBlockSetCol(block, BUTSALMON); - - curarea->butspacetype= SPACE_IPO; - - uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types."); - - test_editipo(); /* test if current editipo is OK, make_editipo sets v2d->cur */ - - /* FULL WINDOW en HOME */ - xco= 25; - if(curarea->full) uiDefIconBut(block, BUT,B_FULL, ICON_SPLITSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Returns to multiple views window (CTRL+Up arrow)"); - else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Makes current window full screen (CTRL+Down arrow)"); - uiDefIconBut(block, BUT, B_IPOHOME, ICON_HOME, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms window to home view showing all items (HOMEKEY)"); - uiDefIconButS(block, ICONTOG, B_IPOSHOWKEY, ICON_KEY_DEHLT, xco+=XIC,0,XIC,YIC, &G.sipo->showkey, 0, 0, 0, 0, "Toggles between Curve and Key display (KKEY)"); - - /* mainmenu, only when data is there and no pin */ - uiSetButLock(G.sipo->pin, "Can't change because of pinned data"); - - ob= OBACT; - xco+= XIC/2; - uiDefIconButS(block, ROW, B_IPOMAIN, ICON_OBJECT, xco+=XIC,0,XIC,YIC, &G.sipo->blocktype, 1.0, (float)ID_OB, 0, 0, "Displays Object Ipos"); - - if(ob && give_current_material(ob, ob->actcol)) { - uiDefIconButS(block, ROW, B_IPOMAIN, ICON_MATERIAL, xco+=XIC,0,XIC,YIC, &G.sipo->blocktype, 1.0, (float)ID_MA, 0, 0, "Displays Material Ipos"); - if(G.sipo->blocktype==ID_MA) { - uiDefButS(block, NUM, B_IPOMAIN, "", xco+=XIC,0,XIC-4,YIC, &G.sipo->channel, 0.0, 7.0, 0, 0, "Displays Channel Number of the active Material texture. Click to change."); - xco-= 4; - } - } - if(G.scene->world) { - uiDefIconButS(block, ROW, B_IPOMAIN, ICON_WORLD, xco+=XIC,0,XIC,YIC, &G.sipo->blocktype, 1.0, (float)ID_WO, 0, 0, "Display World Ipos"); - if(G.sipo->blocktype==ID_WO) { - uiDefButS(block, NUM, B_IPOMAIN, "", xco+=XIC,0,XIC-4,YIC, &G.sipo->channel, 0.0, 7.0, 0, 0, "Displays Channel Number of the active World texture. Click to change."); - xco-= 4; - } - } - - if(ob && ob->type==OB_CURVE) - uiDefIconButS(block, ROW, B_IPOMAIN, ICON_ANIM, xco+=XIC,0,XIC,YIC, &G.sipo->blocktype, 1.0, (float)ID_CU, 0, 0, "Display Curve Ipos"); - - if(ob && ob->type==OB_CAMERA) - uiDefIconButS(block, ROW, B_IPOMAIN, ICON_CAMERA, xco+=XIC,0,XIC,YIC, &G.sipo->blocktype, 1.0, (float)ID_CA, 0, 0, "Display Camera Ipos"); - - if(ob && ob->type==OB_LAMP) { - uiDefIconButS(block, ROW, B_IPOMAIN, ICON_LAMP, xco+=XIC,0,XIC,YIC, &G.sipo->blocktype, 1.0, (float)ID_LA, 0, 0, "Display Lamp Ipos"); - if(G.sipo->blocktype==ID_LA) { - uiDefButS(block, NUM, B_IPOMAIN, "", xco+=XIC,0,XIC-4,YIC, &G.sipo->channel, 0.0, 7.0, 0, 0, "Displays Channel Number of the active Lamp texture. Click to change."); - xco-= 4; - } - } - - if(ob) { - if ELEM4(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_LATTICE) - uiDefIconButS(block, ROW, B_IPOMAIN, ICON_EDIT, xco+=XIC,0,XIC,YIC, &G.sipo->blocktype, 1.0, (float)ID_KE, 0, 0, "Displays VertexKeys Ipos"); - if (ob->action) - uiDefIconButS(block, ROW, B_IPOMAIN, ICON_ACTION, xco+=XIC,0,XIC,YIC, &G.sipo->blocktype, 1.0, (float)ID_AC, 0, 0, "Displays Action Ipos"); -#ifdef __CON_IPO - uiDefIconButS(block, ROW, B_IPOMAIN, ICON_CONSTRAINT, xco+=XIC,0,XIC,YIC, &G.sipo->blocktype, 1.0, (float)IPO_CO, 0, 0, "Displays Constraint Ipos"); -#endif - } - uiDefIconButS(block, ROW, B_IPOMAIN, ICON_SEQUENCE, xco+=XIC,0,XIC,YIC, &G.sipo->blocktype, 1.0, (float)ID_SEQ, 0, 0, "Displays Sequence Ipos"); - -// if(G.buts && G.buts->mainb == BUTS_SOUND && G.buts->lockpoin) -// uiDefIconButS(block, ROW, B_IPOMAIN, ICON_SOUND, xco+=XIC,0,XIC,YIC, &G.sipo->blocktype, 1.0, (float)ID_SO, 0, 0, "Displays Sound Ipos"); - - - uiClearButLock(); - - /* NAME ETC */ - id= (ID *)get_ipo_to_edit(&from); - - xco= std_libbuttons(block, (short)(xco+1.5*XIC), B_IPOPIN, &G.sipo->pin, B_IPOBROWSE, (ID*)G.sipo->ipo, from, &(G.sipo->menunr), B_IPOALONE, B_IPOLOCAL, B_IPODELETE, 0, B_KEEPDATA); - - uiSetButLock(id && id->lib, "Can't edit library data"); - - /* COPY PASTE */ - xco-= XIC/2; - if(curarea->headertype==HEADERTOP) { - uiDefIconBut(block, BUT, B_IPOCOPY, ICON_COPYUP, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Copies the selected curves to the buffer"); - uiSetButLock(id && id->lib, "Can't edit library data"); - uiDefIconBut(block, BUT, B_IPOPASTE, ICON_PASTEUP, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Pastes the curves from the buffer"); - } - else { - uiDefIconBut(block, BUT, B_IPOCOPY, ICON_COPYDOWN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Copies the selected curves to the buffer"); - uiSetButLock(id && id->lib, "Can't edit library data"); - uiDefIconBut(block, BUT, B_IPOPASTE, ICON_PASTEDOWN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Pastes the curves from the buffer"); - } - xco+=XIC/2; - - /* EXTRAP */ - uiDefIconBut(block, BUT, B_IPOCONT, ICON_CONSTANT, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Sets the extend mode to constant"); - uiDefIconBut(block, BUT, B_IPOEXTRAP, ICON_LINEAR, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Sets the extend mode to extrapolation"); - uiDefIconBut(block, BUT, B_IPOCYCLIC, ICON_CYCLIC, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Sets the extend mode to cyclic"); - uiDefIconBut(block, BUT, B_IPOCYCLICX, ICON_CYCLICLINEAR, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Sets the extend mode to cyclic extrapolation"); - xco+= XIC/2; - - uiClearButLock(); - /* ZOOM en BORDER */ - uiDefIconButI(block, TOG, B_VIEW2DZOOM, ICON_VIEWZOOM, xco+=XIC,0,XIC,YIC, &viewmovetemp, 0, 0, 0, 0, "Zooms view (CTRL+MiddleMouse)"); - uiDefIconBut(block, BUT, B_IPOBORDER, ICON_BORDERMOVE, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms view to area"); - - /* draw LOCK */ - uiDefIconButS(block, ICONTOG, 1, ICON_UNLOCKED, xco+=XIC,0,XIC,YIC, &(G.sipo->lock), 0, 0, 0, 0, "Toggles forced redraw of other windows to reflect changes in real time"); - - /* always do as last */ - curarea->headbutlen= xco+2*XIC; - - uiDrawBlock(block); -} - -/* ********************** IPO ****************************** */ -/* ********************** BUTS ****************************** */ - -Material matcopybuf; - -void clear_matcopybuf(void) -{ - memset(&matcopybuf, 0, sizeof(Material)); -} - -void free_matcopybuf(void) -{ - extern MTex mtexcopybuf; /* buttons.c */ - int a; - - for(a=0; a<8; a++) { - if(matcopybuf.mtex[a]) { - MEM_freeN(matcopybuf.mtex[a]); - matcopybuf.mtex[a]= 0; - } - } - - default_mtex(&mtexcopybuf); -} - -void do_buts_buttons(short event) -{ - static short matcopied=0; - MTex *mtex; - Material *ma; - ID id; - int a; - - if(curarea->win==0) return; - - switch(event) { - case B_BUTSHOME: - uiSetPanel_view2d(curarea); - G.v2d->cur= G.v2d->tot; - test_view2d(G.v2d, curarea->winx, curarea->winy); - scrarea_queue_winredraw(curarea); - break; - case B_BUTSPREVIEW: - //BIF_preview_changed(G.buts); - //scrarea_queue_headredraw(curarea); - //scrarea_queue_winredraw(curarea); - break; - case B_MATCOPY: - if(G.buts->lockpoin) { - - if(matcopied) free_matcopybuf(); - - memcpy(&matcopybuf, G.buts->lockpoin, sizeof(Material)); - for(a=0; a<8; a++) { - mtex= matcopybuf.mtex[a]; - if(mtex) { - matcopybuf.mtex[a]= MEM_dupallocN(mtex); - } - } - matcopied= 1; - } - break; - case B_MATPASTE: - if(matcopied && G.buts->lockpoin) { - ma= G.buts->lockpoin; - /* free current mat */ - for(a=0; a<8; a++) { - mtex= ma->mtex[a]; - if(mtex && mtex->tex) mtex->tex->id.us--; - if(mtex) MEM_freeN(mtex); - } - - id= (ma->id); - memcpy(G.buts->lockpoin, &matcopybuf, sizeof(Material)); - (ma->id)= id; - - for(a=0; a<8; a++) { - mtex= ma->mtex[a]; - if(mtex) { - ma->mtex[a]= MEM_dupallocN(mtex); - if(mtex->tex) id_us_plus((ID *)mtex->tex); - } - } - BIF_preview_changed(G.buts); - scrarea_queue_winredraw(curarea); - } - break; - case B_MESHTYPE: - allqueue(REDRAWBUTSEDIT, 0); - allqueue(REDRAWVIEW3D, 0); - break; - } -} - -void buttons_active_id(ID **id, ID **idfrom) -{ - Object *ob= OBACT; - Material *ma; - - *id= NULL; - *idfrom= (ID *)ob; - - if(G.buts->mainb==CONTEXT_SCENE) { - *id= (ID *)G.scene; - - } - else if(G.buts->mainb==CONTEXT_SHADING) { - int tab= G.buts->tab[CONTEXT_SHADING]; - - if(tab==TAB_SHADING_LAMP) { - if(ob && ob->type==OB_LAMP) { - *id= ob->data; - } - } - else if(tab==TAB_SHADING_MAT) { - if(ob && (ob->type<OB_LAMP) && ob->type) { - *id= (ID *)give_current_material(ob, ob->actcol); - *idfrom= material_from(ob, ob->actcol); - } - } - else if(tab==TAB_SHADING_WORLD) { - *id= (ID *)G.scene->world; - *idfrom= (ID *)G.scene; - } - else if(tab==TAB_SHADING_TEX) { - MTex *mtex; - - if(G.buts->mainbo==G.buts->mainb && G.buts->tabo!=tab) { - if(G.buts->tabo==TAB_SHADING_LAMP) G.buts->texfrom= 2; - else if(G.buts->tabo==TAB_SHADING_WORLD) G.buts->texfrom= 1; - else if(G.buts->tabo==TAB_SHADING_MAT) G.buts->texfrom= 0; - } - - if(G.buts->texfrom==0) { - if(ob && ob->type<OB_LAMP && ob->type) { - ma= give_current_material(ob, ob->actcol); - *idfrom= (ID *)ma; - if(ma) { - mtex= ma->mtex[ ma->texact ]; - if(mtex) *id= (ID *)mtex->tex; - } - } - } - else if(G.buts->texfrom==1) { - World *wrld= G.scene->world; - *idfrom= (ID *)wrld; - if(wrld) { - mtex= wrld->mtex[ wrld->texact]; - if(mtex) *id= (ID *)mtex->tex; - } - } - else if(G.buts->texfrom==2) { - Lamp *la; - if(ob && ob->type==OB_LAMP) { - la= ob->data; - *idfrom= (ID *)la; - mtex= la->mtex[ la->texact]; - if(mtex) *id= (ID *)mtex->tex; - } - } - } - } - else if(G.buts->mainb==CONTEXT_OBJECT || G.buts->mainb==CONTEXT_LOGIC) { - if(ob) { - *idfrom= (ID *)G.scene; - *id= (ID *)ob; - } - } - else if(G.buts->mainb==CONTEXT_TYPES || G.buts->mainb==CONTEXT_EDITING) { - if(ob && ob->data) { - *id= ob->data; - } - } - else if (G.buts->mainb == BUTS_SOUND) { -#if 0 - ID * search; - - if (G.buts->lockpoin) { - search = G.main->sound.first; - while (search) { - if (search == G.buts->lockpoin) { - break; - } - search = search->next; - } - if (search == NULL) { - *id = G.main->sound.first; - } else { - *id = search; - } - } else { - *id = G.main->sound.first; - } - // printf("id: %d\n\n", *id); -#endif - } -} - - -static void validate_bonebutton(void *bonev, void *data2_unused){ - Bone *bone= bonev; - bArmature *arm; - - arm = get_armature(G.obpose); - unique_bone_name(bone, arm); -} - - -static int bonename_exists(Bone *orig, char *name, ListBase *list) -{ - Bone *curbone; - - for (curbone=list->first; curbone; curbone=curbone->next){ - /* Check this bone */ - if (orig!=curbone){ - if (!strcmp(curbone->name, name)) - return 1; - } - - /* Check Children */ - if (bonename_exists(orig, name, &curbone->childbase)) - return 1; - } - - return 0; - -} - -static void unique_bone_name (Bone *bone, bArmature *arm) -{ - char tempname[64]; - char oldname[64]; - int number; - char *dot; - - if (!arm) - return; - - strcpy(oldname, bone->name); - - /* See if we even need to do this */ - if (!bonename_exists(bone, bone->name, &arm->bonebase)) - return; - - /* Strip off the suffix */ - dot=strchr(bone->name, '.'); - if (dot) - *dot=0; - - for (number = 1; number <=999; number++){ - sprintf (tempname, "%s.%03d", bone->name, number); - - if (!bonename_exists(bone, tempname, &arm->bonebase)){ - strcpy (bone->name, tempname); - return; - } - } -} - -static uiBlock *sbuts_context_menu(void *arg_unused) -{ - uiBlock *block; - short yco = 0; - - block= uiNewBlock(&curarea->uiblocks, "context_options", UI_EMBOSSP, UI_HELV, curarea->headwin); - uiBlockSetCol(block, MENUCOL); - - /* should be branches from tree */ - uiDefIconTextButS(block, BUTM, B_REDR, ICON_SCENE_DEHLT, "Scene|F10", 0, yco-=22, 100, 20, &G.buts->mainb, 0.0, 0.0, 0, 0, ""); - uiDefIconTextButS(block, BUTM, B_REDR, ICON_EDIT, "Editing|F9", 0, yco-=22, 100, 20, &G.buts->mainb, 4.0, 0.0, 0, 0, ""); - uiDefIconTextButS(block, BUTM, B_REDR, ICON_OBJECT, "Object|F8", 0, yco-=22, 100, 20, &G.buts->mainb, 1.0, 0.0, 0, 0, ""); - uiDefIconTextButS(block, BUTM, B_REDR, ICON_BBOX, "Types|F7", 0, yco-=22, 100, 20, &G.buts->mainb, 2.0, 0.0, 0, 0, ""); - uiDefIconTextButS(block, BUTM, B_REDR, ICON_SCRIPT, "Script|F6", 0, yco-=22, 100, 20, &G.buts->mainb, 5.0, 0.0, 0, 0, ""); - uiDefIconTextButS(block, BUTM, B_REDR, ICON_MATERIAL_DEHLT, "Shading|F5", 0, yco-=22, 100, 20, &G.buts->mainb, 3.0, 0.0, 0, 0, ""); - uiDefIconTextButS(block, BUTM, B_REDR, ICON_GAME, "Logic|F4", 0, yco-=22, 100, 20, &G.buts->mainb, 6.0, 0.0, 0, 0, ""); - - if(curarea->headertype==HEADERTOP) { - uiBlockSetDirection(block, UI_DOWN); - } - else { - uiBlockSetDirection(block, UI_TOP); - uiBlockFlipOrder(block); - } - - return block; -} - - -void buts_buttons(void) -{ - ID *id, *idfrom; - Object *ob; - uiBlock *block; - uiBut *but; - short xco; - int alone, local, browse; - char naam[20]; - short type, t_base= -2; - void *data=NULL; - char str[256]; - - sprintf(naam, "header %d", curarea->headwin); - block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSSX, UI_HELV, curarea->headwin); - uiBlockSetCol(block, BUTGREY); - - curarea->butspacetype= SPACE_BUTS; - - uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types."); - - /* FULL WINDOW */ - xco= 25; - if(curarea->full) uiDefIconBut(block, BUT,B_FULL, ICON_SPLITSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Returns to multiple views window (CTRL+Up arrow)"); - else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Makes current window full screen (CTRL+Down arrow)"); - - /* HOME */ - uiDefIconBut(block, BUT, B_BUTSHOME, ICON_HOME, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms window to home view showing all items (HOMEKEY)"); - xco+=XIC+10; - - /* mainb menu */ - /* (this could be done later with a dynamic tree and branches, also for python) */ - uiBlockSetCol(block, MIDGREY); - uiBlockSetEmboss(block, UI_EMBOSSMB); // menu but - - { - char mainbname[8][12]= {" Scene", " Object", " Types", " Shading", " Editing", " Script", " Logic"}; - char mainbicon[8]= {ICON_SCENE_DEHLT, ICON_OBJECT, ICON_BBOX, ICON_MATERIAL_DEHLT, ICON_EDIT, ICON_SCRIPT, ICON_GAME}; - uiBut *but= uiDefIconTextBlockBut(block, sbuts_context_menu, NULL, mainbicon[G.buts->mainb], mainbname[G.buts->mainb], xco, 0, 90, YIC, "Set main context for button panels"); - uiButClearFlag(but, UI_ICON_RIGHT); // this type has both flags set, and draws icon right.. uhh - xco+= 90-XIC+10; - } - - /* select the context to be drawn, per contex/tab the actual context is tested */ - switch(G.buts->mainb) { - case CONTEXT_SCENE: - uiDefIconButC(block, ROW, B_REDR, ICON_SCENE, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SCENE]), 1.0, (float)TAB_SCENE_RENDER, 0, 0, "Display buttons (F10)"); - uiDefIconButC(block, ROW, B_BUTSPREVIEW,ICON_WORLD, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SCENE]), 1.0, (float)TAB_SCENE_WORLD, 0, 0, "World buttons"); - - break; - case CONTEXT_OBJECT: - - break; - case CONTEXT_TYPES: - - break; - case CONTEXT_SHADING: - uiDefIconButC(block, ROW, B_BUTSPREVIEW, ICON_LAMP, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_LAMP, 0, 0, "Lamp buttons"); - uiDefIconButC(block, ROW, B_BUTSPREVIEW, ICON_MATERIAL, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_MAT, 0, 0, "Material buttons"); - uiDefIconButC(block, ROW, B_BUTSPREVIEW, ICON_TEXTURE, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_TEX, 0, 0, "Texture buttons"); - uiDefIconButC(block, ROW, B_REDR, ICON_RADIO,xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_RAD, 0, 0, "Radiosity buttons"); - uiDefIconButC(block, ROW, B_BUTSPREVIEW, ICON_WORLD, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_WORLD, 0, 0, "World buttons"); - - break; - case CONTEXT_EDITING: - - break; - case CONTEXT_SCRIPT: - - break; - case CONTEXT_LOGIC: - - break; - } - -#if 0 - xco+= 2*XIC; - uiDefIconButS(block, ROW, B_REDR, ICON_EYE, xco+=XIC, t_base, 30, YIC, &(G.buts->mainb), 1.0, (float)BUTS_VIEW, 0, 0, "View buttons"); - - uiDefIconButS(block, ROW, B_REDR, ICON_ANIM, xco+=30, t_base, 30, YIC, &(G.buts->mainb), 1.0, (float)BUTS_ANIM, 0, 0, "Animation buttons (F7)"); - uiDefIconButS(block, ROW, B_REDR, ICON_GAME, xco+=30, t_base, 30, YIC, &(G.buts->mainb), 1.0, (float)BUTS_GAME, 0, 0, "Realtime buttons (F8)"); - uiDefIconButS(block, ROW, B_REDR, ICON_EDIT, xco+=30, t_base, 30, YIC, &(G.buts->mainb), 1.0, (float)BUTS_EDIT, 0, 0, "Edit buttons (F9)"); - uiDefIconButS(block, ROW, B_REDR, ICON_CONSTRAINT,xco+=30, t_base, 30, YIC, &(G.buts->mainb), 1.0, (float)BUTS_CONSTRAINT, 0, 0, "Constraint buttons"); - uiDefIconButS(block, ROW, B_REDR, ICON_SPEAKER,xco+=30, t_base, 30, YIC, &(G.buts->mainb), 1.0, (float)BUTS_SOUND, 0, 0, "Sound buttons"); - uiDefIconButS(block, ROW, B_REDR, ICON_PAINT,xco+=30, t_base, 30, YIC, &(G.buts->mainb), 1.0, (float)BUTS_FPAINT, 0, 0, "Paint buttons"); - uiDefIconButS(block, ROW, B_REDR, ICON_SCRIPT,xco+=30, t_base, 30, YIC, &(G.buts->mainb), 1.0, (float)BUTS_SCRIPT, 0, 0, "Script buttons"); - uiDefIconButS(block, ROW, B_REDR, ICON_SCENE, xco+=30, t_base, 50, YIC, &(G.buts->mainb), 1.0, (float)BUTS_RENDER, 0, 0, "Display buttons (F10)"); - xco+= 80; - - uiBlockSetCol(block, BUTGREY); - uiBlockSetEmboss(block, UI_EMBOSSX); - - ob= OBACT; - - buttons_active_id(&id, &idfrom); - - G.buts->lockpoin= id; - - if(G.buts->mainb==BUTS_LAMP) { - if(id) { - xco= std_libbuttons(block, xco, 0, NULL, B_LAMPBROWSE, id, (ID *)ob, &(G.buts->menunr), B_LAMPALONE, B_LAMPLOCAL, 0, 0, 0); - } - } - else if(G.buts->mainb==BUTS_MAT) { - if(ob && (ob->type<OB_LAMP) && ob->type) { - xco= std_libbuttons(block, xco, 0, NULL, B_MATBROWSE, id, idfrom, &(G.buts->menunr), B_MATALONE, B_MATLOCAL, B_MATDELETE, B_AUTOMATNAME, B_KEEPDATA); - } - - /* COPY PASTE */ - if(curarea->headertype==HEADERTOP) { - uiDefIconBut(block, BUT, B_MATCOPY, ICON_COPYUP, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Copies Material to the buffer"); - uiSetButLock(id && id->lib, "Can't edit library data"); - uiDefIconBut(block, BUT, B_MATPASTE, ICON_PASTEUP, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Pastes Material from the buffer"); - } - else { - uiDefIconBut(block, BUT, B_MATCOPY, ICON_COPYDOWN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Copies Material to the buffer"); - uiSetButLock(id && id->lib, "Can't edit library data"); - uiDefIconBut(block, BUT, B_MATPASTE, ICON_PASTEDOWN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Pastes Material from the buffer"); - } - xco+=XIC; - - } - else if(G.buts->mainb==BUTS_TEX) { - if(G.buts->texfrom==0) { - if(idfrom) { - xco= std_libbuttons(block, xco, 0, NULL, B_TEXBROWSE, id, idfrom, &(G.buts->texnr), B_TEXALONE, B_TEXLOCAL, B_TEXDELETE, B_AUTOTEXNAME, B_KEEPDATA); - } - } - else if(G.buts->texfrom==1) { - if(idfrom) { - xco= std_libbuttons(block, xco, 0, NULL, B_WTEXBROWSE, id, idfrom, &(G.buts->texnr), B_TEXALONE, B_TEXLOCAL, B_TEXDELETE, B_AUTOTEXNAME, B_KEEPDATA); - } - } - else if(G.buts->texfrom==2) { - if(idfrom) { - xco= std_libbuttons(block, xco, 0, NULL, B_LTEXBROWSE, id, idfrom, &(G.buts->texnr), B_TEXALONE, B_TEXLOCAL, B_TEXDELETE, B_AUTOTEXNAME, B_KEEPDATA); - } - } - } - else if(G.buts->mainb==BUTS_ANIM) { - if(id) { - xco= std_libbuttons(block, xco, 0, NULL, 0, id, idfrom, &(G.buts->menunr), B_OBALONE, B_OBLOCAL, 0, 0, 0); - - if(G.scene->group) { - Group *group= G.scene->group; - but= uiDefBut(block, TEX, B_IDNAME, "GR:", xco, 0, 135, YIC, group->id.name+2, 0.0, 19.0, 0, 0, "Displays Active Group name. Click to change."); - uiButSetFunc(but, test_idbutton_cb, group->id.name, NULL); - xco+= 135; - } - } - } - else if(G.buts->mainb==BUTS_GAME) { - if(id) { - xco= std_libbuttons(block, xco, 0, NULL, 0, id, idfrom, &(G.buts->menunr), B_OBALONE, B_OBLOCAL, 0, 0, 0); - } - } - else if(G.buts->mainb==BUTS_WORLD) { - xco= std_libbuttons(block, xco, 0, NULL, B_WORLDBROWSE, id, idfrom, &(G.buts->menunr), B_WORLDALONE, B_WORLDLOCAL, B_WORLDDELETE, 0, B_KEEPDATA); - } - else if (G.buts->mainb==BUTS_SOUND) { - xco= std_libbuttons(block, xco, 0, NULL, B_SOUNDBROWSE2, id, idfrom, &(G.buts->texnr), 1, 0, 0, 0, 0); - } - - else if(G.buts->mainb==BUTS_RENDER) { - xco= std_libbuttons(block, xco, 0, NULL, B_INFOSCE, (ID *)G.scene, 0, &(G.curscreen->scenenr), 1, 1, B_INFODELSCE, 0, B_KEEPDATA); - } - else if(G.buts->mainb==BUTS_EDIT) { - if(id) { - - alone= 0; - local= 0; - browse= B_EDITBROWSE; - xco+= 10; - - if(ob->type==OB_MESH) { - browse= B_MESHBROWSE; - alone= B_MESHALONE; - local= B_MESHLOCAL; - uiSetButLock(G.obedit!=0, "Unable to perform function in EditMode"); - } - else if(ob->type==OB_MBALL) { - alone= B_MBALLALONE; - local= B_MBALLLOCAL; - } - else if ELEM3(ob->type, OB_CURVE, OB_FONT, OB_SURF) { - alone= B_CURVEALONE; - local= B_CURVELOCAL; - } - else if(ob->type==OB_CAMERA) { - alone= B_CAMERAALONE; - local= B_CAMERALOCAL; - } - else if(ob->type==OB_LAMP) { - alone= B_LAMPALONE; - local= B_LAMPLOCAL; - } - else if (ob->type==OB_ARMATURE){ - alone = B_ARMALONE; - local = B_ARMLOCAL; - } - else if(ob->type==OB_LATTICE) { - alone= B_LATTALONE; - local= B_LATTLOCAL; - } - - xco= std_libbuttons(block, xco, 0, NULL, browse, id, idfrom, &(G.buts->menunr), alone, local, 0, 0, B_KEEPDATA); - - xco+= XIC; - } - if(ob) { - but= uiDefBut(block, TEX, B_IDNAME, "OB:", xco, 0, 135, YIC, ob->id.name+2, 0.0, 19.0, 0, 0, "Displays Active Object name. Click to change."); - uiButSetFunc(but, test_idbutton_cb, ob->id.name, NULL); - xco+= 135; - } - } - else if(G.buts->mainb==BUTS_CONSTRAINT){ - if(id) { - - - xco= std_libbuttons(block, xco, 0, NULL, 0, id, idfrom, &(G.buts->menunr), B_OBALONE, B_OBLOCAL, 0, 0, 0); - - get_constraint_client(NULL, &type, &data); - if (data && type==TARGET_BONE){ - sprintf(str, "BO:%s", ((Bone*)data)->name); - but= uiDefBut(block, LABEL, 1, str, xco, 0, 135, YIC, ((Bone*)data)->name, 0.0, 19.0, 0, 0, "Displays Active Bone name. Click to change."); - xco+= 135; - } - } - } - else if(G.buts->mainb==BUTS_SCRIPT) { - if(ob) - uiDefIconButS(block, ROW, B_REDR, ICON_OBJECT, xco,0,XIC,YIC, &G.buts->scriptblock, 2.0, (float)ID_OB, 0, 0, "Displays Object script links"); - - if(ob && give_current_material(ob, ob->actcol)) - uiDefIconButS(block, ROW, B_REDR, ICON_MATERIAL, xco+=XIC,0,XIC,YIC, &G.buts->scriptblock, 2.0, (float)ID_MA, 0, 0, "Displays Material script links "); - - if(G.scene->world) - uiDefIconButS(block, ROW, B_REDR, ICON_WORLD, xco+=XIC,0,XIC,YIC, &G.buts->scriptblock, 2.0, (float)ID_WO, 0, 0, "Displays World script links"); - - if(ob && ob->type==OB_CAMERA) - uiDefIconButS(block, ROW, B_REDR, ICON_CAMERA, xco+=XIC,0,XIC,YIC, &G.buts->scriptblock, 2.0, (float)ID_CA, 0, 0, "Displays Camera script links"); - - if(ob && ob->type==OB_LAMP) - uiDefIconButS(block, ROW, B_REDR, ICON_LAMP, xco+=XIC,0,XIC,YIC, &G.buts->scriptblock, 2.0, (float)ID_LA, 0, 0, "Displays Lamp script links"); - - xco+= 20; - } - - uiDefButS(block, NUM, B_NEWFRAME, "", (short)(xco+20),0,60,YIC, &(G.scene->r.cfra), 1.0, 18000.0, 0, 0, "Displays Current Frame of animation. Click to change."); - xco+= 80; -#endif - - // memory for finding which texture you'd like to see - G.buts->mainbo= G.buts->mainb; - G.buts->tabo= G.buts->tab[G.buts->mainb]; - - /* always do as last */ - uiDrawBlock(block); - curarea->headbutlen= xco; -} - -/* ********************** BUTS ****************************** */ -/* ******************** FILE ********************** */ - -void do_file_buttons(short event) -{ - SpaceFile *sfile; - - if(curarea->win==0) return; - sfile= curarea->spacedata.first; - - switch(event) { - case B_SORTFILELIST: - sort_filelist(sfile); - scrarea_queue_winredraw(curarea); - break; - case B_RELOADDIR: - freefilelist(sfile); - scrarea_queue_winredraw(curarea); - break; - } - -} - -void file_buttons(void) -{ - SpaceFile *sfile; - uiBlock *block; - float df, totlen, sellen; - short xco; - int totfile, selfile; - char naam[256]; - - sfile= curarea->spacedata.first; - - sprintf(naam, "header %d", curarea->headwin); - block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSSX, UI_HELV, curarea->headwin); - uiBlockSetCol(block, BUTGREY); - - curarea->butspacetype= SPACE_FILE; - uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types."); - - /* FULL WINDOW */ - xco= 25; - if(curarea->full) uiDefIconBut(block, BUT,B_FULL, ICON_SPLITSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Returns to multiple views window (CTRL+Up arrow)"); - else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Makes current window full screen (CTRL+Down arrow)"); - - /* SORT TYPE */ - xco+=XIC; - uiDefIconButS(block, ROW, B_SORTFILELIST, ICON_SORTALPHA, xco+=XIC,0,XIC,YIC, &sfile->sort, 1.0, 0.0, 0, 0, "Sorts files alphabetically"); - uiDefIconButS(block, ROW, B_SORTFILELIST, ICON_SORTTIME, xco+=XIC,0,XIC,YIC, &sfile->sort, 1.0, 1.0, 0, 0, "Sorts files by time"); - uiDefIconButS(block, ROW, B_SORTFILELIST, ICON_SORTSIZE, xco+=XIC,0,XIC,YIC, &sfile->sort, 1.0, 2.0, 0, 0, "Sorts files by size"); - - cpack(0x0); - glRasterPos2i(xco+=XIC+10, 5); - - BIF_DrawString(uiBlockGetCurFont(block), sfile->title, (U.transopts & TR_BUTTONS), 0); - xco+= BIF_GetStringWidth(G.font, sfile->title, (U.transopts & TR_BUTTONS)); - - uiDefIconButS(block, ICONTOG|BIT|0, B_SORTFILELIST, ICON_LONGDISPLAY,xco+=XIC,0,XIC,YIC, &sfile->flag, 0, 0, 0, 0, "Toggles long info"); - uiDefIconButS(block, TOG|BIT|3, B_RELOADDIR, ICON_GHOST,xco+=XIC,0,XIC,YIC, &sfile->flag, 0, 0, 0, 0, "Hides dot files"); - - xco+=XIC+10; - - if(sfile->type==FILE_LOADLIB) { - uiDefButS(block, TOGN|BIT|2, B_REDR, "Append", xco+=XIC,0,100,YIC, &sfile->flag, 0, 0, 0, 0, "Copies selected data into current project"); - uiDefButS(block, TOG|BIT|2, B_REDR, "Link", xco+=100,0,100,YIC, &sfile->flag, 0, 0, 0, 0, "Creates a link to selected data from current project"); - } - - if(sfile->type==FILE_UNIX) { - df= BLI_diskfree(sfile->dir)/(1048576.0); - - filesel_statistics(sfile, &totfile, &selfile, &totlen, &sellen); - - sprintf(naam, "Free: %.3f Mb Files: (%d) %d (%.3f) %.3f Mb", - df, selfile,totfile, sellen, totlen); - - cpack(0x0); - glRasterPos2i(xco, 5); - - BIF_DrawString(uiBlockGetCurFont(block), naam, 0, 0); - } - /* always do as last */ - curarea->headbutlen= xco+2*XIC; - - uiDrawBlock(block); -} - - -/* ********************** FILE ****************************** */ -/* ******************** OOPS ********************** */ - -void do_oops_buttons(short event) -{ - float dx, dy; - - if(curarea->win==0) return; - - switch(event) { - case B_OOPSHOME: - boundbox_oops(); - G.v2d->cur= G.v2d->tot; - dx= 0.15*(G.v2d->cur.xmax-G.v2d->cur.xmin); - dy= 0.15*(G.v2d->cur.ymax-G.v2d->cur.ymin); - G.v2d->cur.xmin-= dx; - G.v2d->cur.xmax+= dx; - G.v2d->cur.ymin-= dy; - G.v2d->cur.ymax+= dy; - test_view2d(G.v2d, curarea->winx, curarea->winy); - scrarea_queue_winredraw(curarea); - break; - - case B_NEWOOPS: - scrarea_queue_winredraw(curarea); - scrarea_queue_headredraw(curarea); - G.soops->lockpoin= 0; - break; - } - -} - -void oops_buttons(void) -{ - SpaceOops *soops; - Oops *oops; - uiBlock *block; - short xco; - char naam[256]; - - soops= curarea->spacedata.first; - - sprintf(naam, "header %d", curarea->headwin); - block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSSX, UI_HELV, curarea->headwin); - uiBlockSetCol(block, BUTGREEN); - - curarea->butspacetype= SPACE_OOPS; - - uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types."); - - /* FULL WINDOW */ - xco= 25; - if(curarea->full) uiDefIconBut(block, BUT,B_FULL, ICON_SPLITSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Returns to multiple views window (CTRL+Up arrow)"); - else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN, (short)(xco+=XIC),0,XIC,YIC, 0, 0, 0, 0, 0, "Makes current window full screen (CTRL+Down arrow)"); - - /* HOME */ - uiDefIconBut(block, BUT, B_OOPSHOME, ICON_HOME, (short)(xco+=XIC),0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms window to home view showing all items (HOMEKEY)"); - xco+= XIC; - - /* ZOOM and BORDER */ - xco+= XIC; - uiDefIconButI(block, TOG, B_VIEW2DZOOM, ICON_VIEWZOOM, (short)(xco+=XIC),0,XIC,YIC, &viewmovetemp, 0, 0, 0, 0, "Zooms view (CTRL+MiddleMouse)"); - uiDefIconBut(block, BUT, B_IPOBORDER, ICON_BORDERMOVE, (short)(xco+=XIC),0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms view to area"); - - /* VISIBLE */ - xco+= XIC; - uiDefButS(block, TOG|BIT|10,B_NEWOOPS, "lay", (short)(xco+=XIC),0,XIC+10,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Objects based on layer"); - uiDefIconButS(block, TOG|BIT|0, B_NEWOOPS, ICON_SCENE_HLT, (short)(xco+=XIC+10),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Scene data"); - uiDefIconButS(block, TOG|BIT|1, B_NEWOOPS, ICON_OBJECT_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Object data"); - uiDefIconButS(block, TOG|BIT|2, B_NEWOOPS, ICON_MESH_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Mesh data"); - uiDefIconButS(block, TOG|BIT|3, B_NEWOOPS, ICON_CURVE_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Curve/Surface/Font data"); - uiDefIconButS(block, TOG|BIT|4, B_NEWOOPS, ICON_MBALL_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Metaball data"); - uiDefIconButS(block, TOG|BIT|5, B_NEWOOPS, ICON_LATTICE_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Lattice data"); - uiDefIconButS(block, TOG|BIT|6, B_NEWOOPS, ICON_LAMP_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Lamp data"); - uiDefIconButS(block, TOG|BIT|7, B_NEWOOPS, ICON_MATERIAL_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Material data"); - uiDefIconButS(block, TOG|BIT|8, B_NEWOOPS, ICON_TEXTURE_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Texture data"); - uiDefIconButS(block, TOG|BIT|9, B_NEWOOPS, ICON_IPO_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Ipo data"); - uiDefIconButS(block, TOG|BIT|12, B_NEWOOPS, ICON_IMAGE_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Image data"); - uiDefIconButS(block, TOG|BIT|11, B_NEWOOPS, ICON_LIBRARY_HLT, (short)(xco+=XIC),0,XIC,YIC, &soops->visiflag, 0, 0, 0, 0, "Displays Library data"); - - /* name */ - if(G.soops->lockpoin) { - oops= G.soops->lockpoin; - if(oops->type==ID_LI) strcpy(naam, ((Library *)oops->id)->name); - else strcpy(naam, oops->id->name); - - cpack(0x0); - glRasterPos2i(xco+=XIC+10, 5); - BMF_DrawString(uiBlockGetCurFont(block), naam); - - } - - /* always do as last */ - curarea->headbutlen= xco+2*XIC; - - uiDrawBlock(block); -} - - -/* ********************** OOPS ****************************** */ -/* ********************** TEXT ****************************** */ - -void do_text_buttons(unsigned short event) -{ - SpaceText *st= curarea->spacedata.first; - ID *id, *idtest; - int nr= 1; - Text *text; - - if (!st) return; - if (st->spacetype != SPACE_TEXT) return; - - switch (event) { - case B_TEXTBROWSE: - if (st->menunr==-2) { - activate_databrowse((ID *)st->text, ID_TXT, 0, B_TEXTBROWSE, &st->menunr, do_text_buttons); - break; - } - if(st->menunr < 0) break; - - text= st->text; - - nr= 1; - id= (ID *)text; - - if (st->menunr==32767) { - st->text= (Text *)add_empty_text(); - - st->top= 0; - - allqueue(REDRAWTEXT, 0); - allqueue(REDRAWHEADERS, 0); - } - else if (st->menunr==32766) { - activate_fileselect(FILE_SPECIAL, "LOAD TEXT FILE", G.sce, add_text_fs); - return; - } - else { - idtest= G.main->text.first; - while(idtest) { - if(nr==st->menunr) { - break; - } - nr++; - idtest= idtest->next; - } - if(idtest==0) { /* new text */ - activate_fileselect(FILE_SPECIAL, "LOAD TEXT FILE", G.sce, add_text_fs); - return; - } - if(idtest!=id) { - st->text= (Text *)idtest; - st->top= 0; - - pop_space_text(st); - - allqueue(REDRAWTEXT, 0); - allqueue(REDRAWHEADERS, 0); - } - } - break; - - case B_TEXTDELETE: - - text= st->text; - if (!text) return; - - BPY_clear_bad_scriptlinks(text); - free_text_controllers(text); - - unlink_text(text); - free_libblock(&G.main->text, text); - - break; - -/* - case B_TEXTSTORE: - st->text->flags ^= TXT_ISEXT; - - allqueue(REDRAWHEADERS, 0); - break; -*/ - case B_TEXTLINENUM: - if(st->showlinenrs) - st->showlinenrs = 0; - else - st->showlinenrs = 1; - - allqueue(REDRAWTEXT, 0); - allqueue(REDRAWHEADERS, 0); - break; - - case B_TEXTFONT: - switch(st->font_id) { - case 0: - st->lheight= 12; break; - case 1: - st->lheight= 15; break; - } - - allqueue(REDRAWTEXT, 0); - allqueue(REDRAWHEADERS, 0); - - break; - } -} - -void text_buttons(void) -{ - uiBlock *block; - SpaceText *st= curarea->spacedata.first; - short xco; - char naam[256]; - - if (!st || st->spacetype != SPACE_TEXT) return; - - sprintf(naam, "header %d", curarea->headwin); - block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSSX, UI_HELV, curarea->headwin); - uiBlockSetCol(block, BUTGREY); - - curarea->butspacetype= SPACE_TEXT; - - uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types."); - - /* FULL WINDOW */ - xco= 25; - if(curarea->full) uiDefIconBut(block, BUT,B_FULL, ICON_SPLITSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Returns to multiple views window (CTRL+Up arrow)"); - else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Makes current window full screen (CTRL+Down arrow)"); - - if(st->showlinenrs) - uiDefIconBut(block, BUT, B_TEXTLINENUM, ICON_SHORTDISPLAY, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Hides line numbers"); - else - uiDefIconBut(block, BUT, B_TEXTLINENUM, ICON_LONGDISPLAY, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Displays line numbers"); - - - /* STD TEXT BUTTONS */ - if (!BPY_spacetext_is_pywin(st)) { - xco+= 2*XIC; - xco= std_libbuttons(block, xco, 0, NULL, B_TEXTBROWSE, (ID*)st->text, 0, &(st->menunr), 0, 0, B_TEXTDELETE, 0, 0); - - /* - if (st->text) { - if (st->text->flags & TXT_ISDIRTY && (st->text->flags & TXT_ISEXT || !(st->text->flags & TXT_ISMEM))) - uiDefIconBut(block, BUT,0, ICON_ERROR, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "The text has been changed"); - if (st->text->flags & TXT_ISEXT) - uiDefBut(block, BUT,B_TEXTSTORE, ICON(), xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Stores text in project file"); - else - uiDefBut(block, BUT,B_TEXTSTORE, ICON(), xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Disables storing of text in project file"); - xco+=10; - } - */ - - xco+=XIC; - if(st->font_id>1) st->font_id= 0; - uiDefButI(block, MENU, B_TEXTFONT, "Screen 12 %x0|Screen 15%x1", xco,0,100,YIC, &st->font_id, 0, 0, 0, 0, "Displays available fonts"); - xco+=100; - } - - /* always as last */ - curarea->headbutlen= xco+2*XIC; - - uiDrawBlock(block); -} - - - -/* ******************** TEXT ********************** */ -/* ******************** SOUND ********************** */ - -void load_space_sound(char *str) /* called from fileselect */ -{ - bSound *sound; - - sound= sound_new_sound(str); - if (sound) { - if (G.ssound) { - G.ssound->sound= sound; - } - } else { - error("Not a valid sample: %s", str); - } - - allqueue(REDRAWSOUND, 0); - allqueue(REDRAWBUTSLOGIC, 0); -} - - -void load_sound_buttons(char *str) /* called from fileselect */ -{ - bSound *sound; - - sound= sound_new_sound(str); - if (sound) { - if (curarea && curarea->spacetype==SPACE_BUTS) { -// if (G.buts->mainb == BUTS_SOUND) { -// G.buts->lockpoin = sound; -// } - } - } else { - error("Not a valid sample: %s", str); - } - - //allqueue(REDRAWBUTSSOUND, 0); -} - -void do_action_buttons(unsigned short event) -{ - - switch(event){ -#ifdef __NLA_BAKE - case B_ACTBAKE: - bake_action_with_client (G.saction->action, OBACT, 0.01); - break; -#endif - case B_ACTCONT: - set_exprap_action(IPO_HORIZ); - break; -// case B_ACTEXTRAP: -// set_exprap_ipo(IPO_DIR); -// break; - case B_ACTCYCLIC: - set_exprap_action(IPO_CYCL); - break; -// case B_ACTCYCLICX: -// set_exprap_ipo(IPO_CYCLX); -// break; - case B_ACTHOME: - // Find X extents - //v2d= &(G.saction->v2d); - - G.v2d->cur.xmin = 0; - G.v2d->cur.ymin=-SCROLLB; - - if (!G.saction->action){ // here the mesh rvk? - G.v2d->cur.xmax=100; - } - else { - float extra; - G.v2d->cur.xmin= calc_action_start(G.saction->action); - G.v2d->cur.xmax= calc_action_end(G.saction->action); - extra= 0.05*(G.v2d->cur.xmax - G.v2d->cur.xmin); - G.v2d->cur.xmin-= extra; - G.v2d->cur.xmax+= extra; - } - - G.v2d->tot= G.v2d->cur; - test_view2d(G.v2d, curarea->winx, curarea->winy); - - - addqueue (curarea->win, REDRAW, 1); - - break; - case B_ACTCOPY: - copy_posebuf(); - allqueue(REDRAWVIEW3D, 1); - break; - case B_ACTPASTE: - paste_posebuf(0); - allqueue(REDRAWVIEW3D, 1); - break; - case B_ACTPASTEFLIP: - paste_posebuf(1); - allqueue(REDRAWVIEW3D, 1); - break; - - case B_ACTPIN: /* __PINFAKE */ -/* if (G.saction->flag & SACTION_PIN){ - if (G.saction->action) - G.saction->action->id.us ++; - - } - else { - if (G.saction->action) - G.saction->action->id.us --; - } -*/ /* end PINFAKE */ - allqueue(REDRAWACTION, 1); - break; - - } -} - -void do_sound_buttons(unsigned short event) -{ - ID *id, *idtest; - int nr; - char name[256]; - - switch(event) { - - case B_SOUNDBROWSE: - if(G.ssound->sndnr== -2) { - activate_databrowse((ID *)G.ssound->sound, ID_SO, 0, B_SOUNDBROWSE, &G.ssound->sndnr, do_sound_buttons); - return; - } - if (G.ssound->sndnr < 0) break; - if (G.ssound->sndnr == 32766) { - if (G.ssound && G.ssound->sound) strcpy(name, G.ssound->sound->name); - else strcpy(name, U.sounddir); - activate_fileselect(FILE_SPECIAL, "SELECT WAV FILE", name, load_space_sound); - } else { - nr= 1; - id= (ID *)G.ssound->sound; - - idtest= G.main->sound.first; - while(idtest) { - if(nr==G.ssound->sndnr) { - break; - } - nr++; - idtest= idtest->next; - } - - if(idtest==0) { /* no new */ - return; - } - - if(idtest!=id) { - G.ssound->sound= (bSound *)idtest; - if(idtest->us==0) idtest->us= 1; - allqueue(REDRAWSOUND, 0); - } - } - - break; - case B_SOUNDBROWSE2: - id = (ID *)G.buts->lockpoin; - if(G.buts->texnr == -2) { - activate_databrowse(id, ID_SO, 0, B_SOUNDBROWSE2, &G.buts->texnr, do_sound_buttons); - return; - } - if (G.buts->texnr < 0) break; - if (G.buts->texnr == 32766) { - if (id) strcpy(name, ((bSound *)id)->name); - else strcpy(name, U.sounddir); - activate_fileselect(FILE_SPECIAL, "SELECT WAV FILE", name, load_sound_buttons); - } else { - nr= 1; - - idtest= G.main->sound.first; - while (idtest) { - if(nr == G.buts->texnr) { - break; - } - nr++; - idtest = idtest->next; - } - - if (idtest == 0) { /* geen new */ - return; - } - - if (idtest != id) { - G.buts->lockpoin = (bSound *)idtest; - if(idtest->us==0) idtest->us= 1; - //allqueue(REDRAWBUTSSOUND, 0); - BIF_preview_changed(G.buts); - } - } - - break; - case B_SOUNDHOME: - - G.v2d->cur= G.v2d->tot; - test_view2d(G.v2d, curarea->winx, curarea->winy); - scrarea_queue_winredraw(curarea); - break; - } -} - -void sound_buttons(void) -{ - uiBlock *block; - short xco; - char naam[256]; - char ch[20]; - - sprintf(naam, "header %d", curarea->headwin); - block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSSX, UI_HELV, curarea->headwin); - uiBlockSetCol(block, BUTYELLOW); - - curarea->butspacetype= SPACE_SOUND; - - uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types."); - - /* FULL WINDOW */ - xco= 25; - if(curarea->full) uiDefIconBut(block, BUT,B_FULL, ICON_SPLITSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Returns to multiple views window (CTRL+Up arrow)"); - else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Makes current window full screen (CTRL+Down arrow)"); - uiDefIconBut(block, BUT, B_SOUNDHOME, ICON_HOME, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms window to home view showing all items (HOMEKEY)"); - - xco= std_libbuttons(block, xco+40, 0, NULL, B_SOUNDBROWSE, (ID *)G.ssound->sound, 0, &(G.ssound->sndnr), 1, 0, 0, 0, 0); - - if(G.ssound->sound) { - bSound *sound= G.ssound->sound; - - if (sound->sample && sound->sample->len) - { - if (sound->sample->channels == 1) - strcpy(ch, "Mono"); - else if (sound->sample->channels == 2) - strcpy(ch, "Stereo"); - else - strcpy(ch, "Unknown"); - - sprintf(naam, "Sample: %s, %d bit, %d Hz, %d samples", ch, sound->sample->bits, sound->sample->rate, sound->sample->len); - cpack(0x0); - glRasterPos2i(xco+10, 5); - BMF_DrawString(uiBlockGetCurFont(block), naam); - } - else - { - sprintf(naam, "No sample info available."); - cpack(0x0); - glRasterPos2i(xco+10, 5); - BMF_DrawString(uiBlockGetCurFont(block), naam); - } - - } - - /* always as last */ - curarea->headbutlen= xco+2*XIC; - - uiDrawBlock(block); -} - - -/* ******************** SOUND ********************** */ -/* ******************** IMAGE ********************** */ - -void load_space_image(char *str) /* called from fileselect */ -{ - Image *ima=0; - - if(G.obedit) { - error("Can't perfom this in editmode"); - return; - } - - ima= add_image(str); - if(ima) { - - G.sima->image= ima; - - free_image_buffers(ima); /* force read again */ - ima->ok= 1; - image_changed(G.sima, 0); - - } - - allqueue(REDRAWIMAGE, 0); -} - -void image_replace(Image *old, Image *new) -{ - TFace *tface; - Mesh *me; - int a, rep=0; - - new->tpageflag= old->tpageflag; - new->twsta= old->twsta; - new->twend= old->twend; - new->xrep= old->xrep; - new->yrep= old->yrep; - - me= G.main->mesh.first; - while(me) { - - if(me->tface) { - tface= me->tface; - a= me->totface; - while(a--) { - if(tface->tpage==old) { - tface->tpage= new; - rep++; - } - tface++; - } - } - me= me->id.next; - - } - if(rep) { - if(new->id.us==0) new->id.us= 1; - } - else error("Nothing replaced"); -} - -void replace_space_image(char *str) /* called from fileselect */ -{ - Image *ima=0; - - if(G.obedit) { - error("Can't perfom this in editmode"); - return; - } - - ima= add_image(str); - if(ima) { - - if(G.sima->image != ima) { - image_replace(G.sima->image, ima); - } - - G.sima->image= ima; - - free_image_buffers(ima); /* force read again */ - ima->ok= 1; - /* replace also assigns: */ - image_changed(G.sima, 0); - - } - allqueue(REDRAWIMAGE, 0); -} - -void save_paint(char *name) -{ - char str[FILE_MAXDIR+FILE_MAXFILE]; - Image *ima = G.sima->image; - ImBuf *ibuf; - - if (ima && ima->ibuf) { - BLI_strncpy(str, name, sizeof(str)); - - BLI_convertstringcode(str, G.sce, G.scene->r.cfra); - - if (saveover(str)) { - ibuf = IMB_dupImBuf(ima->ibuf); - - if (ibuf) { - if (BIF_write_ibuf(ibuf, str)) { - BLI_strncpy(ima->name, name, sizeof(ima->name)); - ima->ibuf->userflags &= ~IB_BITMAPDIRTY; - allqueue(REDRAWHEADERS, 0); - allqueue(REDRAWBUTSSHADING, 0); - } else { - error("Couldn't write image: %s", str); - } - - IMB_freeImBuf(ibuf); - } - } - } -} - - -void do_image_buttons(unsigned short event) -{ - Image *ima; - ID *id, *idtest; - int nr; - char name[256], str[256]; - - if(curarea->win==0) return; - - switch(event) { - case B_SIMAGEHOME: - image_home(); - break; - - case B_SIMABROWSE: - if(G.sima->imanr== -2) { - activate_databrowse((ID *)G.sima->image, ID_IM, 0, B_SIMABROWSE, &G.sima->imanr, do_image_buttons); - return; - } - if(G.sima->imanr < 0) break; - - nr= 1; - id= (ID *)G.sima->image; - - idtest= G.main->image.first; - while(idtest) { - if(nr==G.sima->imanr) { - break; - } - nr++; - idtest= idtest->next; - } - if(idtest==0) { /* no new */ - return; - } - - if(idtest!=id) { - G.sima->image= (Image *)idtest; - if(idtest->us==0) idtest->us= 1; - allqueue(REDRAWIMAGE, 0); - } - image_changed(G.sima, 0); /* also when image is the same: assign! 0==no tileflag */ - - break; - case B_SIMAGELOAD: - case B_SIMAGELOAD1: - - if(G.sima->image) strcpy(name, G.sima->image->name); - else strcpy(name, U.textudir); - - if(event==B_SIMAGELOAD) - activate_imageselect(FILE_SPECIAL, "SELECT IMAGE", name, load_space_image); - else - activate_fileselect(FILE_SPECIAL, "SELECT IMAGE", name, load_space_image); - break; - case B_SIMAGEREPLACE: - case B_SIMAGEREPLACE1: - - if(G.sima->image) strcpy(name, G.sima->image->name); - else strcpy(name, U.textudir); - - if(event==B_SIMAGEREPLACE) - activate_imageselect(FILE_SPECIAL, "REPLACE IMAGE", name, replace_space_image); - else - activate_fileselect(FILE_SPECIAL, "REPLACE IMAGE", name, replace_space_image); - break; - case B_SIMAGEDRAW: - - if(G.f & G_FACESELECT) { - make_repbind(G.sima->image); - image_changed(G.sima, 1); - } - allqueue(REDRAWVIEW3D, 0); - allqueue(REDRAWIMAGE, 0); - break; - - case B_SIMAGEDRAW1: - image_changed(G.sima, 2); /* 2: only tileflag */ - allqueue(REDRAWVIEW3D, 0); - allqueue(REDRAWIMAGE, 0); - break; - - case B_TWINANIM: - ima = G.sima->image; - if (ima) { - if(ima->flag & IMA_TWINANIM) { - nr= ima->xrep*ima->yrep; - if(ima->twsta>=nr) ima->twsta= 1; - if(ima->twend>=nr) ima->twend= nr-1; - if(ima->twsta>ima->twend) ima->twsta= 1; - allqueue(REDRAWIMAGE, 0); - } - } - break; - - case B_CLIP_UV: - tface_do_clip(); - allqueue(REDRAWIMAGE, 0); - allqueue(REDRAWVIEW3D, 0); - break; - - case B_SIMAGEPAINTTOOL: - // check for packed file here - allqueue(REDRAWIMAGE, 0); - allqueue(REDRAWVIEW3D, 0); - break; - case B_SIMAPACKIMA: - ima = G.sima->image; - if (ima) { - if (ima->packedfile) { - if (G.fileflags & G_AUTOPACK) { - if (okee("Disable AutoPack ?")) { - G.fileflags &= ~G_AUTOPACK; - } - } - - if ((G.fileflags & G_AUTOPACK) == 0) { - unpackImage(ima, PF_ASK); - } - } else { - if (ima->ibuf && (ima->ibuf->userflags & IB_BITMAPDIRTY)) { - error("Can't pack painted image. Save image first."); - } else { - ima->packedfile = newPackedFile(ima->name); - } - } - allqueue(REDRAWBUTSSHADING, 0); - allqueue(REDRAWHEADERS, 0); - } - break; - case B_SIMAGESAVE: - ima = G.sima->image; - if (ima) { - strcpy(name, ima->name); - if (ima->ibuf) { - save_image_filesel_str(str); - activate_fileselect(FILE_SPECIAL, str, name, save_paint); - } - } - break; - } -} - -/* This should not be a stack var! */ -static int headerbuttons_packdummy; -void image_buttons(void) -{ - uiBlock *block; - short xco; - char naam[256]; - headerbuttons_packdummy = 0; - - sprintf(naam, "header %d", curarea->headwin); - block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSSX, UI_HELV, curarea->headwin); - uiBlockSetCol(block, BUTBLUE); - - what_image(G.sima); - - curarea->butspacetype= SPACE_IMAGE; - - uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types."); - - /* FULL WINDOW */ - xco= 25; - if(curarea->full) uiDefIconBut(block, BUT,B_FULL, ICON_SPLITSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Returns to multiple views window (CTRL+Up arrow)"); - else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Makes current window full screen (CTRL+Down arrow)"); - - /* HOME*/ - uiDefIconBut(block, BUT, B_SIMAGEHOME, ICON_HOME, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms window to home view showing all items (HOMEKEY)"); - uiDefIconButS(block, TOG|BIT|0, B_BE_SQUARE, ICON_KEEPRECT, xco+=XIC,0,XIC,YIC, &G.sima->flag, 0, 0, 0, 0, "Toggles constraining UV polygons to squares while editing"); - uiDefIconButS(block, ICONTOG|BIT|2, B_CLIP_UV, ICON_CLIPUV_DEHLT,xco+=XIC,0,XIC,YIC, &G.sima->flag, 0, 0, 0, 0, "Toggles clipping UV with image size"); - - xco= std_libbuttons(block, xco+40, 0, NULL, B_SIMABROWSE, (ID *)G.sima->image, 0, &(G.sima->imanr), 0, 0, B_IMAGEDELETE, 0, 0); - - if (G.sima->image) { - if (G.sima->image->packedfile) { - headerbuttons_packdummy = 1; - } - uiDefIconButI(block, TOG|BIT|0, B_SIMAPACKIMA, ICON_PACKAGE, xco,0,XIC,YIC, &headerbuttons_packdummy, 0, 0, 0, 0, "Toggles packed status of this Image"); - xco += XIC; - } - - uiBlockSetCol(block, BUTSALMON); - uiDefBut(block, BUT, B_SIMAGELOAD, "Load", xco+=XIC,0,2*XIC,YIC, 0, 0, 0, 0, 0, "Loads image - thumbnail view"); - - uiBlockSetCol(block, BUTGREY); - uiDefBut(block, BUT, B_SIMAGELOAD1, "", (short)(xco+=2*XIC+2),0,10,YIC, 0, 0, 0, 0, 0, "Loads image - file select view"); - xco+=XIC/2; - - if (G.sima->image) { - uiBlockSetCol(block, BUTSALMON); - uiDefBut(block, BUT, B_SIMAGEREPLACE, "Replace",xco+=XIC,0,(short)(3*XIC),YIC, 0, 0, 0, 0, 0, "Replaces current image - thumbnail view"); - - uiBlockSetCol(block, BUTGREY); - uiDefBut(block, BUT, B_SIMAGEREPLACE1, "", (short)(xco+=3*XIC+2),0,10,YIC, 0, 0, 0, 0, 0, "Replaces current image - file select view"); - xco+=XIC/2; - - uiDefIconButS(block, TOG|BIT|4, 0, ICON_ENVMAP, xco+=XIC,0,XIC,YIC, &G.sima->image->flag, 0, 0, 0, 0, "Uses this image as a reflection map (Ignores UV Coordinates)"); - xco+=XIC/2; - - uiDefIconButS(block, TOG|BIT|0, B_SIMAGEDRAW1, ICON_GRID, xco+=XIC,0,XIC,YIC, &G.sima->image->flag, 0, 0, 0, 0, ""); - uiDefButS(block, NUM, B_SIMAGEDRAW, "", xco+=XIC,0,XIC,YIC, &G.sima->image->xrep, 1.0, 16.0, 0, 0, "Sets the degree of repetition in the X direction"); - uiDefButS(block, NUM, B_SIMAGEDRAW, "", xco+=XIC,0,XIC,YIC, &G.sima->image->yrep, 1.0, 16.0, 0, 0, "Sets the degree of repetition in the Y direction"); - - uiDefButS(block, TOG|BIT|1, B_TWINANIM, "Anim", xco+=XIC,0,(short)(2*XIC),YIC, &G.sima->image->tpageflag, 0, 0, 0, 0, "Toggles use of animated texture"); - uiDefButS(block, NUM, B_TWINANIM, "", (short)(xco+=2*XIC),0,XIC,YIC, &G.sima->image->twsta, 0.0, 128.0, 0, 0, "Displays the start frame of an animated texture. Click to change."); - uiDefButS(block, NUM, B_TWINANIM, "", xco+=XIC,0,XIC,YIC, &G.sima->image->twend, 0.0, 128.0, 0, 0, "Displays the end frame of an animated texture. Click to change."); -// uiDefButS(block, TOG|BIT|2, 0, "Cycle", xco+=XIC,0,2*XIC,YIC, &G.sima->image->tpageflag, 0, 0, 0, 0, ""); - uiDefButS(block, NUM, 0, "Speed", xco+=(2*XIC),0,4*XIC,YIC, &G.sima->image->animspeed, 1.0, 100.0, 0, 0, "Displays Speed of the animation in frames per second. Click to change."); - -#ifdef NAN_TPT - xco+= 4*XIC; - uiDefIconButS(block, ICONTOG|BIT|3, B_SIMAGEPAINTTOOL, ICON_TPAINT_DEHLT, xco+=XIC,0,XIC,YIC, &G.sima->flag, 0, 0, 0, 0, "Enables TexturePaint Mode"); - if (G.sima->image && G.sima->image->ibuf && (G.sima->image->ibuf->userflags & IB_BITMAPDIRTY)) { - uiDefBut(block, BUT, B_SIMAGESAVE, "Save", xco+=XIC,0,2*XIC,YIC, 0, 0, 0, 0, 0, "Saves image"); - xco += XIC; - } -#endif /* NAN_TPT */ - xco+= XIC; - } - - /* draw LOCK */ - xco+= XIC/2; - uiDefIconButS(block, ICONTOG, 0, ICON_UNLOCKED, (short)(xco+=XIC),0,XIC,YIC, &(G.sima->lock), 0, 0, 0, 0, "Toggles forced redraw of other windows to reflect changes in real time"); - - - /* Always do this last */ - curarea->headbutlen= xco+2*XIC; - - uiDrawBlock(block); -} - - -/* ********************** IMAGE ****************************** */ -/* ******************** IMASEL ********************** */ - -void do_imasel_buttons(short event) -{ - SpaceImaSel *simasel; - char name[256]; - - simasel= curarea->spacedata.first; - - if(curarea->win==0) return; - - switch(event) { - case B_IMASELHOME: - break; - - case B_IMASELREMOVEBIP: - - if(bitset(simasel->fase, IMS_FOUND_BIP)){ - - strcpy(name, simasel->dir); - strcat(name, ".Bpib"); - - remove(name); - - simasel->fase &= ~ IMS_FOUND_BIP; - } - break; - } -} - -void imasel_buttons(void) -{ - SpaceImaSel *simasel; - uiBlock *block; - short xco; - char naam[256]; - - simasel= curarea->spacedata.first; - - sprintf(naam, "header %d", curarea->headwin); - block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSSX, UI_HELV, curarea->headwin); - uiBlockSetCol(block, BUTBLUE); - - curarea->butspacetype= SPACE_IMASEL; - - uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), 6,0,XIC,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types."); - - /* FULL WINDOW */ - xco= 25; - if(curarea->full) uiDefIconBut(block, BUT,B_FULL, ICON_SPLITSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, ""); - else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, ""); - - xco+=XIC; - if (simasel->title){ - xco+=25; - glRasterPos2i(xco, 4); - BMF_DrawString(G.font, simasel->title); - xco+=BMF_GetStringWidth(G.fonts, simasel->title); - xco+=25; - } - uiDefIconBut(block, BUT, B_IMASELREMOVEBIP, ICON_BPIBFOLDER_X, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "");/* remove */ - - uiDefIconButS(block, TOG|BIT|0, B_REDR, ICON_BPIBFOLDERGREY, xco+=XIC,0,XIC,YIC, &simasel->mode, 0, 0, 0, 0, "Toggles display of directory information");/* dir */ - uiDefIconButS(block, TOG|BIT|1, B_REDR, ICON_INFO, xco+=XIC,0,XIC,YIC, &simasel->mode, 0, 0, 0, 0, "Toggles display of selected image information");/* info */ - uiDefIconButS(block, TOG|BIT|2, B_REDR, ICON_IMAGE_COL, xco+=XIC,0,XIC,YIC, &simasel->mode, 0, 0, 0, 0, "");/* image */ - uiDefIconButS(block, TOG|BIT|3, B_REDR, ICON_MAGNIFY, xco+=XIC,0,XIC,YIC, &simasel->mode, 0, 0, 0, 0, "Toggles magnified view of thumbnail of images under mouse pointer");/* magnify */ - - /* always do as last */ - curarea->headbutlen= xco+2*XIC; - - uiDrawBlock(block); -} - -/* ********************** IMASEL ****************************** */ - -/* ******************** GENERAL ********************** */ - -void do_headerbuttons(short event) -{ - - if(event<=50) do_global_buttons2(event); - else if(event<=100) do_global_buttons(event); - else if(event<200) do_view3d_buttons(event); - else if(event<250) do_ipo_buttons(event); - else if(event<300) do_oops_buttons(event); - else if(event<350) do_info_buttons(event); - else if(event<400) do_image_buttons(event); - else if(event<450) do_buts_buttons(event); - else if(event<500) do_imasel_buttons(event); - else if(event<550) do_text_buttons(event); - else if(event<600) do_file_buttons(event); - else if(event<650) do_seq_buttons(event); - else if(event<700) do_sound_buttons(event); - else if(event<800) do_action_buttons(event); - else if(event<900) do_nla_buttons(event); -} - diff --git a/source/blender/src/interface.c b/source/blender/src/interface.c index 521512225c8..bbc49c1da1d 100644 --- a/source/blender/src/interface.c +++ b/source/blender/src/interface.c @@ -101,147 +101,9 @@ */ /***/ - -typedef struct { - short xim, yim; - unsigned int *rect; - short xofs, yofs; -} uiIconImage; - -typedef struct { - short mval[2]; - short qual, val; - int event; -} uiEvent; - -typedef struct { - void *xl, *large, *medium, *small; -} uiFont; - -typedef struct uiLinkLine uiLinkLine; -struct uiLinkLine { /* only for draw/edit */ - uiLinkLine *next, *prev; - - short flag, pad; - - uiBut *from, *to; -}; - -typedef struct { - void **poin; /* pointer to original pointer */ - void ***ppoin; /* pointer to original pointer-array */ - short *totlink; /* if pointer-array, here is the total */ - - short maxlink, pad; - short fromcode, tocode; - - ListBase lines; -} uiLink; - -struct uiBut { - uiBut *next, *prev; - short type, pointype, bit, bitnr, retval, flag, strwidth, ofs, pos; - - char *str; - char strdata[UI_MAX_NAME_STR]; - char drawstr[UI_MAX_DRAW_STR]; - - float x1, y1, x2, y2; - - char *poin; - float min, max; - float a1, a2, rt[4]; - float aspect; - - void (*func)(void *, void *); - void *func_arg1; - void *func_arg2; - - void (*embossfunc)(BIFColorID, float, float, float, float, float, int); - - uiLink *link; - - char *tip, *lockstr; - - BIFColorID col; - void *font; - - BIFIconID icon; - short lock, win; - short iconadd; - - /* IDPOIN data */ - uiIDPoinFuncFP idpoin_func; - ID **idpoin_idpp; - - /* BLOCK data */ - uiBlockFuncFP block_func; - - /* BUTM data */ - void (*butm_func)(void *arg, int event); - void *butm_func_arg; - - /* pointer back */ - uiBlock *block; -}; - -struct uiBlock { - uiBlock *next, *prev; - - ListBase buttons; - Panel *panel; - - char name[UI_MAX_NAME_STR]; - - float winmat[4][4]; - - float minx, miny, maxx, maxy; - float aspect; - - void (*butm_func)(void *arg, int event); - void *butm_func_arg; - - void (*func)(void *arg1, void *arg2); - void *func_arg1; - void *func_arg2; - - /* extra draw function for custom blocks */ - void (*drawextra)(); - - BIFColorID col; - short font; /* indices */ - int afterval; - void *curfont; - - short autofill, flag, win, winq, direction, dt, frontbuf, auto_open; //frontbuf see below - void *saveunder; - - float xofs, yofs; // offset to parent button - rctf parentrct; // for pulldowns, rect the mouse is allowed outside of menu (parent button) -}; - -/* block->frontbuf: (only internal here), to nice localize the old global var uiFrontBuf */ -#define UI_NEED_DRAW_FRONT 1 -#define UI_HAS_DRAW_FRONT 2 - -/* panel drawing defines */ -#define PNL_GRID 4 -#define PNL_DIST 8 -#define PNL_SAFETY 8 -#define PNL_HEADER 20 - -/* panel->flag */ -#define PNL_SELECT 1 -#define PNL_CLOSEDX 2 -#define PNL_CLOSEDY 4 -#define PNL_CLOSED 6 -#define PNL_TABBED 8 -#define PNL_OVERLAP 16 - - /* ************ GLOBALS ************* */ -static float UIwinmat[4][4]; +float UIwinmat[4][4]; static int UIlock= 0, UIafterval; static char *UIlockstr=NULL; static void (*UIafterfunc)(void *arg, int event); @@ -252,14 +114,10 @@ static uiBut *UIbuttip; /* ************* PROTOTYPES ***************** */ -static void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3); -static void ui_check_but(uiBut *but); static void ui_set_but_val(uiBut *but, double value); static double ui_get_but_val(uiBut *but); -static void ui_draw_panel(uiBlock *block); -static void ui_drag_panel(uiBlock *block); -static void ui_do_panel(uiBlock *block, uiEvent *uevent); -static int panel_has_tabs(Panel *panel); + + /* ****************************** */ @@ -2195,272 +2053,6 @@ static void ui_draw_but(uiBut *but) } } -/* --------- generic helper drawng calls ---------------- */ - -/* supposes you draw the actual box atop of this. */ -void uiSoftShadow(float minx, float miny, float maxx, float maxy, float rad, int alpha) -{ - - glShadeModel(GL_SMOOTH); - glEnable(GL_BLEND); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); - - /* quads start left-top, clockwise */ - - /* left */ - glBegin(GL_POLYGON); - glColor4ub(0, 0, 0, 0); - glVertex2f( minx-rad, maxy-rad); - glColor4ub(0, 0, 0, alpha); - glVertex2f( minx+rad, maxy-rad); - glColor4ub(0, 0, 0, alpha); - glVertex2f( minx+rad, miny+rad); - glColor4ub(0, 0, 0, 0); - glVertex2f( minx-rad, miny-rad); - glEnd(); - - /* bottom */ - glBegin(GL_POLYGON); - glColor4ub(0, 0, 0, alpha); - glVertex2f( minx+rad, miny+rad); - glColor4ub(0, 0, 0, alpha); - glVertex2f( maxx-rad, miny+rad); - glColor4ub(0, 0, 0, 0); - glVertex2f( maxx+rad, miny-rad); - glColor4ub(0, 0, 0, 0); - glVertex2f( minx-rad, miny-rad); - glEnd(); - - /* right */ - glBegin(GL_POLYGON); - glColor4ub(0, 0, 0, alpha); - glVertex2f( maxx-rad, maxy-rad); - glColor4ub(0, 0, 0, 0); - glVertex2f( maxx+rad, maxy-rad); - glColor4ub(0, 0, 0, 0); - glVertex2f( maxx+rad, miny-rad); - glColor4ub(0, 0, 0, alpha); - glVertex2f( maxx-rad, miny+rad); - glEnd(); - - glDisable(GL_BLEND); - glShadeModel(GL_FLAT); -} - - -#define UI_RB_ALPHA 16 -static int roundboxtype= 15; - -void uiSetRoundBox(int type) -{ - roundboxtype= type; - - /* flags to set which corners will become rounded: - - 1------2 - | | - 8------4 - */ - -} - -void gl_round_box_topshade(float minx, float miny, float maxx, float maxy, float rad) -{ - float vec[7][2]= {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293}, - {0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}}; - char col[7]= {140, 165, 195, 210, 230, 245, 255}; - int a; - char alpha=255; - - if(roundboxtype & UI_RB_ALPHA) alpha= 128; - - /* mult */ - for(a=0; a<7; a++) { - vec[a][0]*= rad; vec[a][1]*= rad; - } - - /* shades from grey->white->grey */ - glBegin(GL_LINE_STRIP); - - if(roundboxtype & 3) { - /* corner right-top */ - glColor4ub(140, 140, 140, alpha); - glVertex2f( maxx, maxy-rad); - for(a=0; a<7; a++) { - glColor4ub(col[a], col[a], col[a], alpha); - glVertex2f( maxx-vec[a][1], maxy-rad+vec[a][0]); - } - glColor4ub(225, 225, 225, alpha); - glVertex2f( maxx-rad, maxy); - - - /* corner left-top */ - glVertex2f( minx+rad, maxy); - for(a=0; a<7; a++) { - glColor4ub(col[6-a], col[6-a], col[6-a], alpha); - glVertex2f( minx+rad-vec[a][0], maxy-vec[a][1]); - } - glVertex2f( minx, maxy-rad); - } - else { - glColor4ub(225, 225, 225, alpha); - glVertex2f( minx, maxy); - glVertex2f( maxx, maxy); - } - - glEnd(); -} - - -void gl_round_box(float minx, float miny, float maxx, float maxy, float rad) -{ - float vec[7][2]= {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293}, - {0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}}; - int a; - - /* mult */ - for(a=0; a<7; a++) { - vec[a][0]*= rad; vec[a][1]*= rad; - } - - /* start with corner right-bottom */ - if(roundboxtype & 4) { - glVertex2f( maxx-rad, miny); - for(a=0; a<7; a++) { - glVertex2f( maxx-rad+vec[a][0], miny+vec[a][1]); - } - glVertex2f( maxx, miny+rad); - } - else glVertex2f( maxx, miny); - - /* corner right-top */ - if(roundboxtype & 2) { - glVertex2f( maxx, maxy-rad); - for(a=0; a<7; a++) { - glVertex2f( maxx-vec[a][1], maxy-rad+vec[a][0]); - } - glVertex2f( maxx-rad, maxy); - } - else glVertex2f( maxx, maxy); - - /* corner left-top */ - if(roundboxtype & 1) { - glVertex2f( minx+rad, maxy); - for(a=0; a<7; a++) { - glVertex2f( minx+rad-vec[a][0], maxy-vec[a][1]); - } - glVertex2f( minx, maxy-rad); - } - else glVertex2f( minx, maxy); - - /* corner left-bottom */ - if(roundboxtype & 8) { - glVertex2f( minx, miny+rad); - for(a=0; a<7; a++) { - glVertex2f( minx+vec[a][1], miny+rad-vec[a][0]); - } - glVertex2f( minx+rad, miny); - } - else glVertex2f( minx, miny); - -} - -/* for headers and floating panels */ -void uiRoundBoxEmboss(float minx, float miny, float maxx, float maxy, float rad) -{ - float color[4]; - - if(roundboxtype & UI_RB_ALPHA) { - glGetFloatv(GL_CURRENT_COLOR, color); - color[3]= 0.5; - glColor4fv(color); - glEnable( GL_BLEND ); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); - } - - /* solid part */ - glBegin(GL_POLYGON); - gl_round_box(minx, miny, maxx, maxy, rad); - glEnd(); - - /* set antialias line */ - glEnable( GL_LINE_SMOOTH ); - glEnable( GL_BLEND ); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); - - gl_round_box_topshade(minx+1, miny+1, maxx-1, maxy-1, rad); - - if(roundboxtype & UI_RB_ALPHA) glColor4ub(0,0,0, 128); else glColor4ub(0,0,0, 255); - glBegin(GL_LINE_LOOP); - gl_round_box(minx, miny, maxx, maxy, rad); - glEnd(); - - glDisable( GL_BLEND ); - glDisable( GL_LINE_SMOOTH ); - -} - - -/* plain antialiased unfilled rectangle */ -void uiRoundRect(float minx, float miny, float maxx, float maxy, float rad) -{ - float color[4]; - - if(roundboxtype & UI_RB_ALPHA) { - glGetFloatv(GL_CURRENT_COLOR, color); - color[3]= 0.5; - glColor4fv(color); - glEnable( GL_BLEND ); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); - } - - /* set antialias line */ - glEnable( GL_LINE_SMOOTH ); - glEnable( GL_BLEND ); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); - - glBegin(GL_LINE_LOOP); - gl_round_box(minx, miny, maxx, maxy, rad); - glEnd(); - - glDisable( GL_BLEND ); - glDisable( GL_LINE_SMOOTH ); -} - - - -/* plain antialiased filled box */ -void uiRoundBox(float minx, float miny, float maxx, float maxy, float rad) -{ - float color[4]; - - if(roundboxtype & UI_RB_ALPHA) { - glGetFloatv(GL_CURRENT_COLOR, color); - color[3]= 0.5; - glColor4fv(color); - glEnable( GL_BLEND ); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); - } - - /* solid part */ - glBegin(GL_POLYGON); - gl_round_box(minx, miny, maxx, maxy, rad); - glEnd(); - - /* set antialias line */ - glEnable( GL_LINE_SMOOTH ); - glEnable( GL_BLEND ); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); - - glBegin(GL_LINE_LOOP); - gl_round_box(minx, miny, maxx, maxy, rad); - glEnd(); - - glDisable( GL_BLEND ); - glDisable( GL_LINE_SMOOTH ); -} - - void uiDrawMenuBox(float minx, float miny, float maxx, float maxy) @@ -2744,7 +2336,7 @@ static void ui_positionblock(uiBlock *block, uiBut *but) } -static void ui_autofill(uiBlock *block) +void ui_autofill(uiBlock *block) { uiBut *but; float *maxw, *maxh, startx = 0, starty, height = 0; @@ -5520,7 +5112,7 @@ uiBlock *uiGetBlock(char *name, ScrArea *sa) } -static void ui_check_but(uiBut *but) +void ui_check_but(uiBut *but) { /* if something changed in the button */ ID *id; @@ -6268,1107 +5860,3 @@ short pupmenu_col(char *instr, int maxrow) return val; } -/* ************** panels ************* */ - -static void copy_panel_offset(Panel *pa, Panel *papar) -{ - /* with respect to sizes... papar is parent */ - - pa->ofsx= papar->ofsx; - pa->ofsy= papar->ofsy + papar->sizey-pa->sizey; -} - - - -/* ugly global... but will be NULLed after each 'newPanel' call */ -static char *panel_tabbed=NULL, *group_tabbed=NULL; - -void uiNewPanelTabbed(char *panelname, char *groupname) -{ - panel_tabbed= panelname; - group_tabbed= groupname; -} - -/* another global... */ -static int pnl_style= UI_PNL_TRANSP; - -void uiSetPanelStyle(int style) -{ - pnl_style= style; -} - - -/* ofsx/ofsy only used for new panel definitions */ -/* return 1 if visible (create buttons!) */ -int uiNewPanel(ScrArea *sa, uiBlock *block, char *panelname, char *tabname, int ofsx, int ofsy, int sizex, int sizey) -{ - Panel *pa, *palign; - - /* check if Panel exists, then use that one */ - pa= sa->panels.first; - while(pa) { - if( strncmp(pa->panelname, panelname, UI_MAX_NAME_STR)==0) { - if( strncmp(pa->tabname, tabname, UI_MAX_NAME_STR)==0) { - break; - } - } - pa= pa->next; - } - - if(pa==NULL) { - - /* new panel */ - pa= MEM_callocN(sizeof(Panel), "new panel"); - BLI_addtail(&sa->panels, pa); - strncpy(pa->panelname, panelname, UI_MAX_NAME_STR); - strncpy(pa->tabname, tabname, UI_MAX_NAME_STR); - - pa->ofsx= ofsx & ~(PNL_GRID-1); - pa->ofsy= ofsy & ~(PNL_GRID-1); - pa->sizex= sizex; - pa->sizey= sizey; - pa->style= pnl_style; - - /* pre align, for good sorting later on */ - if(sa->spacetype==SPACE_BUTS && pa->prev) { - SpaceButs *sbuts= sa->spacedata.first; - - palign= pa->prev; - if(sbuts->align==BUT_VERTICAL) { - pa->ofsy= palign->ofsy - pa->sizey - PNL_HEADER; - } - else if(sbuts->align==BUT_HORIZONTAL) { - pa->ofsx= palign->ofsx + palign->sizex; - } - } - /* make new Panel tabbed? */ - if(panel_tabbed && group_tabbed) { - Panel *papar; - for(papar= sa->panels.first; papar; papar= papar->next) { - if(papar->active && papar->paneltab==NULL) { - if( strncmp(panel_tabbed, papar->panelname, UI_MAX_NAME_STR)==0) { - if( strncmp(group_tabbed, papar->tabname, UI_MAX_NAME_STR)==0) { - pa->paneltab= papar; - copy_panel_offset(pa, papar); - break; - } - } - } - } - } - } - - block->panel= pa; - pa->active= 1; - - /* clear global */ - panel_tabbed= group_tabbed= NULL; - - if(block->panel->paneltab) return 0; - if(block->panel->flag & PNL_CLOSED) return 0; - - return 1; -} - -void uiFreePanels(ListBase *lb) -{ - Panel *panel; - - while( (panel= lb->first) ) { - BLI_remlink(lb, panel); - MEM_freeN(panel); - } -} - -void uiNewPanelHeight(uiBlock *block, int sizey) -{ - if(sizey<64) sizey= 64; - - if(block->panel) { - block->panel->ofsy+= (block->panel->sizey - sizey); - block->panel->sizey= sizey; - } -} - -static int panel_has_tabs(Panel *panel) -{ - Panel *pa= curarea->panels.first; - - if(panel==NULL) return 0; - - while(pa) { - if(pa->paneltab==panel) return 1; - pa= pa->next; - } - return 0; -} - -static void ui_scale_panel_block(uiBlock *block) -{ - uiBut *but; - float facx= 1.0, facy= 1.0; - int centrex= 0, topy=0, tabsy=0; - - if(block->panel==NULL) return; - - if(block->autofill) ui_autofill(block); - /* buttons min/max centered, offset calculated */ - uiBoundsBlock(block, 0); - - if( block->maxx-block->minx > block->panel->sizex - 2*PNL_SAFETY ) { - facx= (block->panel->sizex - (2*PNL_SAFETY))/( block->maxx-block->minx ); - } - else centrex= (block->panel->sizex-( block->maxx-block->minx ) - PNL_SAFETY)/2; - - // tabsy= PNL_HEADER*panel_has_tabs(block->panel); - if( (block->maxy-block->miny) > block->panel->sizey - 2*PNL_SAFETY - tabsy) { - facy= (block->panel->sizey - (2*PNL_SAFETY) - tabsy)/( block->maxy-block->miny ); - } - else topy= (block->panel->sizey- 2*PNL_SAFETY - tabsy) - ( block->maxy-block->miny ) ; - - but= block->buttons.first; - while(but) { - but->x1= PNL_SAFETY+centrex+ facx*(but->x1-block->minx); - but->y1= PNL_SAFETY+topy + facy*(but->y1-block->miny); - but->x2= PNL_SAFETY+centrex+ facx*(but->x2-block->minx); - but->y2= PNL_SAFETY+topy + facy*(but->y2-block->miny); - if(facx!=1.0) ui_check_but(but); /* for strlen */ - but= but->next; - } - - block->maxx= block->panel->sizex; - block->maxy= block->panel->sizey; - block->minx= block->miny= 0.0; - -} - -// for 'home' key -void uiSetPanel_view2d(ScrArea *sa) -{ - Panel *pa; - float minx=10000, maxx= -10000, miny=10000, maxy= -10000; - int done=0; - - pa= sa->panels.first; - while(pa) { - if(pa->active) { - done= 1; - if(pa->ofsx < minx) minx= pa->ofsx; - if(pa->ofsx+pa->sizex > maxx) maxx= pa->ofsx+pa->sizex; - if(pa->ofsy < miny) miny= pa->ofsy; - if(pa->ofsy+pa->sizey+PNL_HEADER > maxy) maxy= pa->ofsy+pa->sizey+PNL_HEADER; - } - pa= pa->next; - } - if(done) { - G.v2d->tot.xmin= minx-PNL_DIST; - G.v2d->tot.xmax= maxx+PNL_DIST; - G.v2d->tot.ymin= miny-PNL_DIST; - G.v2d->tot.ymax= maxy+PNL_DIST; - } - else { - G.v2d->tot.xmin= 0; - G.v2d->tot.xmax= 1280; - G.v2d->tot.ymin= 0; - G.v2d->tot.ymax= 228; - } - -} - -// make sure the panels are not outside 'tot' area -void uiMatchPanel_view2d(ScrArea *sa) -{ - Panel *pa; - - pa= sa->panels.first; - while(pa) { - if(pa->active) { - if(pa->ofsx < G.v2d->tot.xmin) G.v2d->tot.xmin= pa->ofsx; - if(pa->ofsx+pa->sizex > G.v2d->tot.xmax) - G.v2d->tot.xmax= pa->ofsx+pa->sizex; - if(pa->ofsy < G.v2d->tot.ymin) G.v2d->tot.ymin= pa->ofsy; - if(pa->ofsy+pa->sizey+PNL_HEADER > G.v2d->tot.ymax) - G.v2d->tot.ymax= pa->ofsy+pa->sizey+PNL_HEADER; - } - pa= pa->next; - } -} - -/* extern used ny previewrender */ -void uiPanelPush(uiBlock *block) -{ - glPushMatrix(); - if(block->panel) { - glTranslatef((float)block->panel->ofsx, (float)block->panel->ofsy, 0.0); - i_translate((float)block->panel->ofsx, (float)block->panel->ofsy, 0.0, UIwinmat); - } -} - -void uiPanelPop(uiBlock *block) -{ - glPopMatrix(); - Mat4CpyMat4(UIwinmat, block->winmat); -} - -uiBlock *uiFindOpenPanelBlockName(ListBase *lb, char *name) -{ - uiBlock *block; - - for(block= lb->first; block; block= block->next) { - if(block->panel && block->panel->active && block->panel->paneltab==NULL) { - if(block->panel->flag & PNL_CLOSED); - else if(strncmp(name, block->panel->panelname, UI_MAX_NAME_STR)==0) break; - } - } - return block; -} - -static void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3) -{ - - // we draw twice, anti polygons not widely supported... - - glBegin(GL_POLYGON); - glVertex2f(x1, y1); - glVertex2f(x2, y2); - glVertex2f(x3, y3); - glEnd(); - - /* set antialias line */ - glEnable( GL_LINE_SMOOTH ); - glEnable( GL_BLEND ); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); - - glBegin(GL_LINE_LOOP); - glVertex2f(x1, y1); - glVertex2f(x2, y2); - glVertex2f(x3, y3); - glEnd(); - - glDisable( GL_LINE_SMOOTH ); - glDisable( GL_BLEND ); - -} - -/* 'icon' for panel header */ -static void ui_draw_tria_icon(float x, float y, float aspect, char dir) -{ - - - glColor3ub(240, 240, 240); - - if(dir=='h') { - ui_draw_anti_tria( x, y, x, y+12.0, x+10, y+6); - } - else { - ui_draw_anti_tria( x, y+10.0, x+12, y+10.0, x+6, y); - } - - -} - -static void ui_set_panel_pattern(char dir) -{ - static int firsttime= 1; - static GLubyte path[4*32], patv[4*32]; - int a,b,i=0; - - if(firsttime) { - firsttime= 0; - for(a=0; a<128; a++) patv[a]= 0x33; - for(a=0; a<8; a++) { - for(b=0; b<4; b++) path[i++]= 0xff; /* 1 scanlines */ - for(b=0; b<12; b++) path[i++]= 0x0; /* 3 lines */ - } - } - glEnable(GL_POLYGON_STIPPLE); - if(dir=='h') glPolygonStipple(path); - else glPolygonStipple(patv); -} - -static char *ui_block_cut_str(uiBlock *block, char *str, short okwidth) -{ - short width, ofs=strlen(str); - static char str1[128]; - - if(ofs>127) return str; - - width= block->aspect*BIF_GetStringWidth(block->curfont, str, (U.transopts & TR_BUTTONS)); - - if(width <= okwidth) return str; - strcpy(str1, str); - - while(width > okwidth && ofs>0) { - ofs--; - str1[ofs]= 0; - - width= block->aspect*BIF_GetStringWidth(block->curfont, str1, 0); - - if(width < 10) break; - } - return str1; -} - - -#define PNL_ICON 20 -#define PNL_DRAGGER 20 - - -static void ui_draw_panel_header(uiBlock *block) -{ - Panel *pa, *panel= block->panel; - float width; - int a, nr= 1; - char *str; - - /* count */ - pa= curarea->panels.first; - while(pa) { - if(pa->active) { - if(pa->paneltab==panel) nr++; - } - pa= pa->next; - } - - if(nr==1) { - glColor3ub(255,255,255); - glRasterPos2f(block->minx+40, block->maxy+5); - BIF_DrawString(block->curfont, block->panel->panelname, (U.transopts & TR_BUTTONS), 0); - return; - } - - a= 0; - width= (panel->sizex - 3 - 2*PNL_ICON)/nr; - pa= curarea->panels.first; - while(pa) { - if(pa->active==0); - else if(pa==panel) { - /* active tab */ - uiSetRoundBox(15); - glColor3ub(140, 140, 147); - uiRoundBox(2+PNL_ICON+a*width, panel->sizey+3, PNL_ICON+(a+1)*width, panel->sizey+PNL_HEADER-3, 8); - - glColor3ub(255,255,255); - glRasterPos2f(10+PNL_ICON+a*width, panel->sizey+5); - str= ui_block_cut_str(block, pa->panelname, (short)(width-10)); - BIF_DrawString(block->curfont, str, (U.transopts & TR_BUTTONS), 0); - - a++; - } - else if(pa->paneltab==panel) { - /* not active tab */ - - glColor3ub(95,95,95); - glRasterPos2f(10+PNL_ICON+a*width, panel->sizey+5); - str= ui_block_cut_str(block, pa->panelname, (short)(width-10)); - BIF_DrawString(block->curfont, str, (U.transopts & TR_BUTTONS), 0); - - a++; - } - pa= pa->next; - } - - // dragger - uiSetRoundBox(15); - glColor3ub(140, 140, 147); - uiRoundBox(panel->sizex-PNL_ICON+5, panel->sizey+5, panel->sizex-5, panel->sizey+PNL_HEADER-5, 5); - -} - -static void ui_draw_panel(uiBlock *block) -{ - int align=0; - - if(block->panel->paneltab) return; - - if(curarea->spacetype==SPACE_BUTS) { - SpaceButs *sbuts= curarea->spacedata.first; - align= sbuts->align; - } - - if(block->panel->flag & PNL_CLOSEDY) { - uiSetRoundBox(15); - glColor3ub(160, 160, 167); - uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 10); - - // title - glColor3ub(255,255,255); - glRasterPos2f(block->minx+40, block->maxy+5); - BIF_DrawString(block->curfont, block->panel->panelname, (U.transopts & TR_BUTTONS), 0); - - // border - if(block->panel->flag & PNL_SELECT) { - glColor3ub(64, 64, 64); - uiRoundRect(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 10); - } - if(block->panel->flag & PNL_OVERLAP) { - glColor3ub(240, 240, 240); - uiRoundRect(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 10); - } - - } - else if(block->panel->flag & PNL_CLOSEDX) { - char str[4]; - int a, end, ofs; - - uiSetRoundBox(15); - glColor3ub(160, 160, 167); - uiRoundBox(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 10); - - // title, only capitals for now - glColor3ub(255,255,255); - str[1]= 0; - end= strlen(block->panel->panelname); - ofs= 20; - for(a=0; a<end; a++) { - str[0]= block->panel->panelname[a]; - if( isupper(str[0]) ) { - glRasterPos2f(block->minx+5, block->maxy-ofs); - BIF_DrawString(block->curfont, str, 0, 0); - ofs+= 15; - } - } - - // border - if(block->panel->flag & PNL_SELECT) { - glColor3ub(64, 64, 64); - uiRoundRect(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 10); - } - if(block->panel->flag & PNL_OVERLAP) { - glColor3ub(240, 240, 240); - uiRoundRect(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 10); - } - - } - else { - - uiSetRoundBox(3); - - if(block->panel->style== UI_PNL_SOLID) { - glColor3ub(160, 160, 167); - uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 10); - // blend now for panels in 3d window, test... - glEnable(GL_BLEND); - glColor4ub(198, 198, 198, 100); - glRectf(block->minx, block->miny, block->maxx, block->maxy); - - if(align) { - glColor4ub(206, 206, 206, 100); - if(align==BUT_HORIZONTAL) ui_set_panel_pattern('h'); - else ui_set_panel_pattern('v'); - - glRectf(block->minx, block->miny, block->maxx, block->maxy); - glDisable(GL_POLYGON_STIPPLE); - } - glDisable(GL_BLEND); - } - else { - glColor3ub(218, 218, 218); - uiRoundRect(block->minx, block->miny, block->maxx, block->maxy+PNL_HEADER, 10); - } - - - ui_draw_panel_header(block); - - // border - uiSetRoundBox(3); - if(block->panel->flag & PNL_SELECT) { - glColor3ub(64, 64, 64); - uiRoundRect(block->minx, block->miny, block->maxx, block->maxy+PNL_HEADER, 10); - } - if(block->panel->flag & PNL_OVERLAP) { - glColor3ub(240, 240, 240); - uiRoundRect(block->minx, block->miny, block->maxx, block->maxy+PNL_HEADER, 10); - } - - /* and a soft shadow-line for now */ - glEnable( GL_BLEND ); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); - glColor4ub(0, 0, 0, 50); - fdrawline(block->maxx, block->miny, block->maxx, block->maxy+PNL_HEADER/2); - fdrawline(block->minx, block->miny, block->maxx, block->miny); - glDisable(GL_BLEND); - - } - - /* draw close icon */ - - if(block->panel->flag & PNL_CLOSEDY) - ui_draw_tria_icon(block->minx+6, block->maxy+3, block->aspect, 'h'); - else if(block->panel->flag & PNL_CLOSEDX) - ui_draw_tria_icon(block->minx+4, block->maxy+2, block->aspect, 'h'); - else - ui_draw_tria_icon(block->minx+6, block->maxy+3, block->aspect, 'v'); - - -} - -static void ui_redraw_select_panel(ScrArea *sa) -{ - /* only for beauty, make sure the panel thats moved is on top */ - /* better solution later? */ - uiBlock *block; - - for(block= sa->uiblocks.first; block; block= block->next) { - if(block->panel && (block->panel->flag & PNL_SELECT)) { - uiDrawBlock(block); - } - } - -} - - -/* ------------ panel alignment ---------------- */ - - -/* this function is needed because uiBlock and Panel itself dont -change sizey or location when closed */ -static int get_panel_real_ofsy(Panel *pa) -{ - if(pa->flag & PNL_CLOSEDY) return pa->ofsy+pa->sizey; - else if(pa->paneltab && (pa->paneltab->flag & PNL_CLOSEDY)) return pa->ofsy+pa->sizey; - else return pa->ofsy; -} - -static int get_panel_real_ofsx(Panel *pa) -{ - if(pa->flag & PNL_CLOSEDX) return pa->ofsx+PNL_HEADER; - else if(pa->paneltab && (pa->paneltab->flag & PNL_CLOSEDX)) return pa->ofsx+PNL_HEADER; - else return pa->ofsx+pa->sizex; -} - - -typedef struct PanelSort { - Panel *pa, *orig; -} PanelSort; - -static int find_leftmost_panel(const void *a1, const void *a2) -{ - const PanelSort *ps1=a1, *ps2=a2; - - if( ps1->pa->ofsx > ps2->pa->ofsx) return 1; - else if( ps1->pa->ofsx < ps2->pa->ofsx) return -1; - - return 0; -} - - -static int find_highest_panel(const void *a1, const void *a2) -{ - const PanelSort *ps1=a1, *ps2=a2; - - if( ps1->pa->ofsy < ps2->pa->ofsy) return 1; - else if( ps1->pa->ofsy > ps2->pa->ofsy) return -1; - - return 0; -} - -/* this doesnt draw */ -/* returns 1 when it did something */ -int uiAlignPanelStep(ScrArea *sa, float fac) -{ - SpaceButs *sbuts= sa->spacedata.first; - Panel *pa; - PanelSort *ps, *panelsort, *psnext; - int a, tot=0, done; - - if(sa->spacetype!=SPACE_BUTS) { - return 0; - } - - /* count active, not tabbed Panels */ - for(pa= sa->panels.first; pa; pa= pa->next) { - if(pa->active && pa->paneltab==NULL) tot++; - } - - if(tot==0) return 0; - - /* extra; change close direction? */ - for(pa= sa->panels.first; pa; pa= pa->next) { - if(pa->active && pa->paneltab==NULL) { - if( (pa->flag & PNL_CLOSEDX) && (sbuts->align==BUT_VERTICAL) ) - pa->flag ^= PNL_CLOSED; - - else if( (pa->flag & PNL_CLOSEDY) && (sbuts->align==BUT_HORIZONTAL) ) - pa->flag ^= PNL_CLOSED; - - } - } - - panelsort= MEM_callocN( tot*sizeof(PanelSort), "panelsort"); - - /* fill panelsort array */ - ps= panelsort; - for(pa= sa->panels.first; pa; pa= pa->next) { - if(pa->active && pa->paneltab==NULL) { - ps->pa= MEM_dupallocN(pa); - ps->orig= pa; - ps++; - } - } - - if(sbuts->align==BUT_VERTICAL) - qsort(panelsort, tot, sizeof(PanelSort), find_highest_panel); - else - qsort(panelsort, tot, sizeof(PanelSort), find_leftmost_panel); - - - /* no smart other default start loc! this keeps switching f5/f6/etc compatible */ - ps= panelsort; - ps->pa->ofsx= 0; - ps->pa->ofsy= 0; - - for(a=0 ; a<tot-1; a++, ps++) { - psnext= ps+1; - - if(sbuts->align==BUT_VERTICAL) { - psnext->pa->ofsx = ps->pa->ofsx; - psnext->pa->ofsy = get_panel_real_ofsy(ps->pa) - psnext->pa->sizey-PNL_HEADER-PNL_DIST; - } - else { - psnext->pa->ofsx = get_panel_real_ofsx(ps->pa)+PNL_DIST; - psnext->pa->ofsy = ps->pa->ofsy; - } - } - - /* we interpolate */ - done= 0; - ps= panelsort; - for(a=0; a<tot; a++, ps++) { - if( (ps->pa->flag & PNL_SELECT)==0) { - if( (ps->orig->ofsx != ps->pa->ofsx) || (ps->orig->ofsy != ps->pa->ofsy)) { - ps->orig->ofsx= floor(0.5 + fac*ps->pa->ofsx + (1.0-fac)*ps->orig->ofsx); - ps->orig->ofsy= floor(0.5 + fac*ps->pa->ofsy + (1.0-fac)*ps->orig->ofsy); - done= 1; - } - } - } - - /* copy locations to tabs */ - for(pa= sa->panels.first; pa; pa= pa->next) { - if(pa->paneltab && pa->active) { - copy_panel_offset(pa, pa->paneltab); - } - } - - /* free panelsort array */ - ps= panelsort; - for(a=0; a<tot; a++, ps++) { - MEM_freeN(ps->pa); - } - MEM_freeN(panelsort); - - return done; -} - - -static void ui_animate_panels(ScrArea *sa) -{ - double time=0, ltime; - float result= 0.0, fac= 0.2; - - ltime = PIL_check_seconds_timer(); - - /* for max 1 second, interpolate positions */ - while(TRUE) { - - if( uiAlignPanelStep(sa, fac) ) { - /* warn: this re-allocs uiblocks! */ - scrarea_do_windraw(curarea); - ui_redraw_select_panel(curarea); - screen_swapbuffers(); - } - else { - addqueue(curarea->win, REDRAW,1 ); // because 'Animate' is also called as redraw - break; - } - - if(result >= 1.0) break; - - if(result==0.0) { // firsttime - time = PIL_check_seconds_timer()-ltime; - if(time > 0.5) fac= 0.7; - else if(time > 0.2) fac= 0.5; - else if(time > 0.1) fac= 0.4; - else if(time > 0.05) fac= 0.3; // 11 steps - } - - result= fac + (1.0-fac)*result; - - if(result > 0.98) { - result= 1.0; - fac= 1.0; - } - } -} - -/* only draws blocks with panels */ -void uiDrawBlocksPanels(ScrArea *sa, int re_align) -{ - uiBlock *block; - Panel *panot, *panew, *patest; - - /* scaling contents */ - block= sa->uiblocks.first; - while(block) { - if(block->panel) ui_scale_panel_block(block); - block= block->next; - } - - /* consistancy; are panels not made, whilst they have tabs */ - for(panot= sa->panels.first; panot; panot= panot->next) { - if(panot->active==0) { // not made - - for(panew= sa->panels.first; panew; panew= panew->next) { - if(panew->active) { - if(panew->paneltab==panot) { // panew is tab in notmade pa - break; - } - } - } - /* now panew can become the new parent, check all other tabs */ - if(panew) { - for(patest= sa->panels.first; patest; patest= patest->next) { - if(patest->paneltab == panot) { - patest->paneltab= panew; - } - } - panot->paneltab= panew; - panew->paneltab= NULL; - addqueue(sa->win, REDRAW, 1); // the buttons panew were not made - } - } - } - - /* re-align */ - if(re_align) uiAlignPanelStep(sa, 1.0); - - /* draw */ - block= sa->uiblocks.first; - while(block) { - if(block->panel) uiDrawBlock(block); - block= block->next; - } - -} - - - -/* ------------ panel merging ---------------- */ - -static void check_panel_overlap(ScrArea *sa, Panel *panel) -{ - Panel *pa= sa->panels.first; - - /* also called with panel==NULL for clear */ - - while(pa) { - pa->flag &= ~PNL_OVERLAP; - if(panel && (pa != panel)) { - if(pa->paneltab==NULL && pa->active) { - float safex= 0.2, safey= 0.2; - - if( pa->flag & PNL_CLOSEDX) safex= 0.05; - else if(pa->flag & PNL_CLOSEDY) safey= 0.05; - else if( panel->flag & PNL_CLOSEDX) safex= 0.05; - else if(panel->flag & PNL_CLOSEDY) safey= 0.05; - - if( pa->ofsx > panel->ofsx- safex*panel->sizex) - if( pa->ofsx+pa->sizex < panel->ofsx+ (1.0+safex)*panel->sizex) - if( pa->ofsy > panel->ofsy- safey*panel->sizey) - if( pa->ofsy+pa->sizey < panel->ofsy+ (1.0+safey)*panel->sizey) - pa->flag |= PNL_OVERLAP; - } - } - - pa= pa->next; - } -} - -static void test_add_new_tabs(ScrArea *sa) -{ - Panel *pa, *pasel=NULL, *palap=NULL; - /* search selected and overlapped panel */ - - pa= sa->panels.first; - while(pa) { - if(pa->active) { - if(pa->flag & PNL_SELECT) pasel= pa; - if(pa->flag & PNL_OVERLAP) palap= pa; - } - pa= pa->next; - } - - if(pasel && palap==NULL) { - - /* copy locations */ - pa= sa->panels.first; - while(pa) { - if(pa->paneltab==pasel) { - copy_panel_offset(pa, pasel); - } - pa= pa->next; - } - } - - if(pasel==NULL || palap==NULL) return; - - /* the overlapped panel becomes a tab */ - palap->paneltab= pasel; - - /* the selected panel gets coords of overlapped one */ - copy_panel_offset(pasel, palap); - - /* and its tabs */ - pa= sa->panels.first; - while(pa) { - if(pa->paneltab == pasel) { - copy_panel_offset(pa, palap); - } - pa= pa->next; - } - - /* but, the overlapped panel already can have tabs too! */ - pa= sa->panels.first; - while(pa) { - if(pa->paneltab == palap) { - pa->paneltab = pasel; - } - pa= pa->next; - } -} - -/* ------------ panel drag ---------------- */ - - -static void ui_drag_panel(uiBlock *block) -{ - Panel *panel= block->panel; - short align=0, first=1, ofsx, ofsy, dx=0, dy=0, dxo=0, dyo=0, mval[2], mvalo[2]; - - if(curarea->spacetype==SPACE_BUTS) { - SpaceButs *sbuts= curarea->spacedata.first; - align= sbuts->align; - } - - uiGetMouse(block->win, mvalo); - ofsx= block->panel->ofsx; - ofsy= block->panel->ofsy; - - panel->flag |= PNL_SELECT; - - while(TRUE) { - - if( !(get_mbut() & L_MOUSE) ) break; - - /* first clip for window, no dragging outside */ - getmouseco_areawin(mval); - if( mval[0]>0 && mval[0]<curarea->winx && mval[1]>0 && mval[1]<curarea->winy) { - uiGetMouse(mywinget(), mval); - dx= (mval[0]-mvalo[0]) & ~(PNL_GRID-1); - dy= (mval[1]-mvalo[1]) & ~(PNL_GRID-1); - } - - if(dx!=dxo || dy!=dyo || first || align) { - dxo= dx; dyo= dy; - first= 0; - - panel->ofsx = ofsx+dx; - panel->ofsy = ofsy+dy; - - check_panel_overlap(curarea, panel); - - if(align) uiAlignPanelStep(curarea, 0.2); - - /* warn: this re-allocs blocks! */ - scrarea_do_windraw(curarea); - ui_redraw_select_panel(curarea); - screen_swapbuffers(); - - /* so, we find the new block */ - block= curarea->uiblocks.first; - while(block) { - if(block->panel == panel) break; - block= block->next; - } - // temporal debug - if(block==NULL) { - printf("block null while panel drag, should not happen\n"); - } - - /* restore */ - Mat4CpyMat4(UIwinmat, block->winmat); - - /* idle for align */ - if(dx==dxo && dy==dyo) PIL_sleep_ms(30); - } - /* idle for this poor code */ - else PIL_sleep_ms(30); - } - - test_add_new_tabs(curarea); // also copies locations of tabs in dragged panel - - panel->flag &= ~PNL_SELECT; - check_panel_overlap(curarea, NULL); // clears - - if(align==0) addqueue(block->win, REDRAW, 1); - else ui_animate_panels(curarea); -} - - -static void ui_panel_untab(uiBlock *block) -{ - Panel *panel= block->panel, *pa, *panew=NULL; - short nr, mval[2], mvalo[2]; - - /* while hold mouse, check for movement, then untab */ - - uiGetMouse(block->win, mvalo); - while(TRUE) { - - if( !(get_mbut() & L_MOUSE) ) break; - uiGetMouse(mywinget(), mval); - - if( abs(mval[0]-mvalo[0]) + abs(mval[1]-mvalo[1]) > 6 ) { - /* find new parent panel */ - nr= 0; - pa= curarea->panels.first; - while(pa) { - if(pa->paneltab==panel) { - panew= pa; - nr++; - } - pa= pa->next; - } - - /* make old tabs point to panew */ - if(panew==NULL) printf("panel untab: shouldnt happen\n"); - panew->paneltab= NULL; - - pa= curarea->panels.first; - while(pa) { - if(pa->paneltab==panel) { - pa->paneltab= panew; - } - pa= pa->next; - } - - ui_drag_panel(block); - break; - - } - /* idle for this poor code */ - else PIL_sleep_ms(50); - - } - -} - -/* ------------ panel events ---------------- */ - - -static void panel_clicked_tabs(uiBlock *block, int mousex) -{ - Panel *pa, *tabsel=NULL, *panel= block->panel; - int nr= 1, a, width; - - /* count */ - pa= curarea->panels.first; - while(pa) { - if(pa!=panel) { - if(pa->paneltab==panel) nr++; - } - pa= pa->next; - } - - if(nr==1) return; - - /* find clicked tab, mouse in panel coords */ - a= 0; - width= (panel->sizex - 3- 2*PNL_ICON)/nr; - pa= curarea->panels.first; - while(pa) { - if(pa==panel || pa->paneltab==panel) { - if( (mousex > PNL_ICON+a*width) && (mousex < PNL_ICON+(a+1)*width) ) { - tabsel= pa; - } - a++; - } - pa= pa->next; - } - - if(tabsel) { - - if(tabsel == panel) { - ui_panel_untab(block); - } - else { - /* tabsel now becomes parent for all others */ - panel->paneltab= tabsel; - tabsel->paneltab= NULL; - - pa= curarea->panels.first; - while(pa) { - if(pa->paneltab == panel) pa->paneltab = tabsel; - pa= pa->next; - } - - addqueue(curarea->win, REDRAW, 1); - } - } - -} - - -/* this function is supposed to call general window drawing too */ -/* also it supposes a block has panel, and isnt a menu */ -static void ui_do_panel(uiBlock *block, uiEvent *uevent) -{ - Panel *pa; - int align= 0; - - if(curarea->spacetype==SPACE_BUTS) { - SpaceButs *sbuts= curarea->spacedata.first; - align= sbuts->align; - } - - /* mouse coordinates in panel space! */ - - if(uevent->event==LEFTMOUSE && block->panel->paneltab==NULL) { - int button= 0; - - /* check open/closed button */ - if(block->panel->flag & PNL_CLOSEDX) { - if(uevent->mval[1] >= block->maxy) button= 1; - } - else if(uevent->mval[0] <= block->minx+PNL_ICON+3) button= 1; - - if(button) { - if(block->panel->flag & PNL_CLOSED) block->panel->flag &= ~PNL_CLOSED; - else if(align==BUT_HORIZONTAL) block->panel->flag |= PNL_CLOSEDX; - else block->panel->flag |= PNL_CLOSEDY; - - for(pa= curarea->panels.first; pa; pa= pa->next) { - if(pa->paneltab==block->panel) { - if(block->panel->flag & PNL_CLOSED) pa->flag |= PNL_CLOSED; - else pa->flag &= ~PNL_CLOSED; - } - } - if(align==0) addqueue(block->win, REDRAW, 1); - else ui_animate_panels(curarea); - - } - else if(block->panel->flag & PNL_CLOSED) { - ui_drag_panel(block); - } - /* check if clicked in tabbed area */ - else if(uevent->mval[0] < block->maxx-PNL_ICON-3 && panel_has_tabs(block->panel)) { - panel_clicked_tabs(block, uevent->mval[0]); - } - else { - ui_drag_panel(block); - } - } -} - - diff --git a/source/blender/src/interface_panel.c b/source/blender/src/interface_panel.c new file mode 100644 index 00000000000..795f9765ad7 --- /dev/null +++ b/source/blender/src/interface_panel.c @@ -0,0 +1,1463 @@ +/** + * $Id$ + * + * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. The Blender + * Foundation also sells licenses for use in proprietary software under + * the Blender License. See http://www.blender.org/BL/ for information + * about this. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL/BL DUAL LICENSE BLOCK ***** + */ + +/* + a full doc with API notes can be found in bf-blender/blender/doc/interface_API.txt + + */ + + +#include <math.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#ifndef WIN32 +#include <unistd.h> +#else +#include <io.h> +#include "BLI_winstuff.h" +#endif + +#include "MEM_guardedalloc.h" + +#include "PIL_time.h" + +#include "BLI_blenlib.h" +#include "BLI_arithb.h" + +#include "DNA_screen_types.h" +#include "DNA_space_types.h" +#include "DNA_userdef_types.h" +#include "DNA_vec_types.h" + +#include "BKE_blender.h" +#include "BKE_utildefines.h" +#include "BKE_global.h" + +#include "BIF_gl.h" +#include "BIF_graphics.h" +#include "BIF_keyval.h" +#include "BIF_mainqueue.h" + +#include "BIF_screen.h" +#include "BIF_toolbox.h" +#include "BIF_mywindow.h" +#include "BIF_space.h" +#include "BIF_glutil.h" +#include "BIF_interface.h" +#include "BIF_butspace.h" +#include "BIF_language.h" + +#include "BSE_view.h" + +#include "mydevice.h" +#include "interface.h" +#include "blendef.h" + + +extern float UIwinmat[4][4]; + +/* --------- generic helper drawng calls ---------------- */ + +/* supposes you draw the actual box atop of this. */ +void uiSoftShadow(float minx, float miny, float maxx, float maxy, float rad, int alpha) +{ + + glShadeModel(GL_SMOOTH); + glEnable(GL_BLEND); + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + + /* quads start left-top, clockwise */ + + /* left */ + glBegin(GL_POLYGON); + glColor4ub(0, 0, 0, 0); + glVertex2f( minx-rad, maxy-rad); + glColor4ub(0, 0, 0, alpha); + glVertex2f( minx+rad, maxy-rad); + glColor4ub(0, 0, 0, alpha); + glVertex2f( minx+rad, miny+rad); + glColor4ub(0, 0, 0, 0); + glVertex2f( minx-rad, miny-rad); + glEnd(); + + /* bottom */ + glBegin(GL_POLYGON); + glColor4ub(0, 0, 0, alpha); + glVertex2f( minx+rad, miny+rad); + glColor4ub(0, 0, 0, alpha); + glVertex2f( maxx-rad, miny+rad); + glColor4ub(0, 0, 0, 0); + glVertex2f( maxx+rad, miny-rad); + glColor4ub(0, 0, 0, 0); + glVertex2f( minx-rad, miny-rad); + glEnd(); + + /* right */ + glBegin(GL_POLYGON); + glColor4ub(0, 0, 0, alpha); + glVertex2f( maxx-rad, maxy-rad); + glColor4ub(0, 0, 0, 0); + glVertex2f( maxx+rad, maxy-rad); + glColor4ub(0, 0, 0, 0); + glVertex2f( maxx+rad, miny-rad); + glColor4ub(0, 0, 0, alpha); + glVertex2f( maxx-rad, miny+rad); + glEnd(); + + glDisable(GL_BLEND); + glShadeModel(GL_FLAT); +} + + +#define UI_RB_ALPHA 16 +static int roundboxtype= 15; + +void uiSetRoundBox(int type) +{ + roundboxtype= type; + + /* flags to set which corners will become rounded: + + 1------2 + | | + 8------4 + */ + +} + +void gl_round_box_topshade(float minx, float miny, float maxx, float maxy, float rad) +{ + float vec[7][2]= {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293}, + {0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}}; + char col[7]= {140, 165, 195, 210, 230, 245, 255}; + int a; + char alpha=255; + + if(roundboxtype & UI_RB_ALPHA) alpha= 128; + + /* mult */ + for(a=0; a<7; a++) { + vec[a][0]*= rad; vec[a][1]*= rad; + } + + /* shades from grey->white->grey */ + glBegin(GL_LINE_STRIP); + + if(roundboxtype & 3) { + /* corner right-top */ + glColor4ub(140, 140, 140, alpha); + glVertex2f( maxx, maxy-rad); + for(a=0; a<7; a++) { + glColor4ub(col[a], col[a], col[a], alpha); + glVertex2f( maxx-vec[a][1], maxy-rad+vec[a][0]); + } + glColor4ub(225, 225, 225, alpha); + glVertex2f( maxx-rad, maxy); + + + /* corner left-top */ + glVertex2f( minx+rad, maxy); + for(a=0; a<7; a++) { + glColor4ub(col[6-a], col[6-a], col[6-a], alpha); + glVertex2f( minx+rad-vec[a][0], maxy-vec[a][1]); + } + glVertex2f( minx, maxy-rad); + } + else { + glColor4ub(225, 225, 225, alpha); + glVertex2f( minx, maxy); + glVertex2f( maxx, maxy); + } + + glEnd(); +} + + +void gl_round_box(float minx, float miny, float maxx, float maxy, float rad) +{ + float vec[7][2]= {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293}, + {0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}}; + int a; + + /* mult */ + for(a=0; a<7; a++) { + vec[a][0]*= rad; vec[a][1]*= rad; + } + + /* start with corner right-bottom */ + if(roundboxtype & 4) { + glVertex2f( maxx-rad, miny); + for(a=0; a<7; a++) { + glVertex2f( maxx-rad+vec[a][0], miny+vec[a][1]); + } + glVertex2f( maxx, miny+rad); + } + else glVertex2f( maxx, miny); + + /* corner right-top */ + if(roundboxtype & 2) { + glVertex2f( maxx, maxy-rad); + for(a=0; a<7; a++) { + glVertex2f( maxx-vec[a][1], maxy-rad+vec[a][0]); + } + glVertex2f( maxx-rad, maxy); + } + else glVertex2f( maxx, maxy); + + /* corner left-top */ + if(roundboxtype & 1) { + glVertex2f( minx+rad, maxy); + for(a=0; a<7; a++) { + glVertex2f( minx+rad-vec[a][0], maxy-vec[a][1]); + } + glVertex2f( minx, maxy-rad); + } + else glVertex2f( minx, maxy); + + /* corner left-bottom */ + if(roundboxtype & 8) { + glVertex2f( minx, miny+rad); + for(a=0; a<7; a++) { + glVertex2f( minx+vec[a][1], miny+rad-vec[a][0]); + } + glVertex2f( minx+rad, miny); + } + else glVertex2f( minx, miny); + +} + +/* for headers and floating panels */ +void uiRoundBoxEmboss(float minx, float miny, float maxx, float maxy, float rad) +{ + float color[4]; + + if(roundboxtype & UI_RB_ALPHA) { + glGetFloatv(GL_CURRENT_COLOR, color); + color[3]= 0.5; + glColor4fv(color); + glEnable( GL_BLEND ); + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + } + + /* solid part */ + glBegin(GL_POLYGON); + gl_round_box(minx, miny, maxx, maxy, rad); + glEnd(); + + /* set antialias line */ + glEnable( GL_LINE_SMOOTH ); + glEnable( GL_BLEND ); + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + + gl_round_box_topshade(minx+1, miny+1, maxx-1, maxy-1, rad); + + if(roundboxtype & UI_RB_ALPHA) glColor4ub(0,0,0, 128); else glColor4ub(0,0,0, 255); + glBegin(GL_LINE_LOOP); + gl_round_box(minx, miny, maxx, maxy, rad); + glEnd(); + + glDisable( GL_BLEND ); + glDisable( GL_LINE_SMOOTH ); + +} + + +/* plain antialiased unfilled rectangle */ +void uiRoundRect(float minx, float miny, float maxx, float maxy, float rad) +{ + float color[4]; + + if(roundboxtype & UI_RB_ALPHA) { + glGetFloatv(GL_CURRENT_COLOR, color); + color[3]= 0.5; + glColor4fv(color); + glEnable( GL_BLEND ); + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + } + + /* set antialias line */ + glEnable( GL_LINE_SMOOTH ); + glEnable( GL_BLEND ); + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + + glBegin(GL_LINE_LOOP); + gl_round_box(minx, miny, maxx, maxy, rad); + glEnd(); + + glDisable( GL_BLEND ); + glDisable( GL_LINE_SMOOTH ); +} + + + +/* plain antialiased filled box */ +void uiRoundBox(float minx, float miny, float maxx, float maxy, float rad) +{ + float color[4]; + + if(roundboxtype & UI_RB_ALPHA) { + glGetFloatv(GL_CURRENT_COLOR, color); + color[3]= 0.5; + glColor4fv(color); + glEnable( GL_BLEND ); + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + } + + /* solid part */ + glBegin(GL_POLYGON); + gl_round_box(minx, miny, maxx, maxy, rad); + glEnd(); + + /* set antialias line */ + glEnable( GL_LINE_SMOOTH ); + glEnable( GL_BLEND ); + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + + glBegin(GL_LINE_LOOP); + gl_round_box(minx, miny, maxx, maxy, rad); + glEnd(); + + glDisable( GL_BLEND ); + glDisable( GL_LINE_SMOOTH ); +} + + +/* ************** panels ************* */ + +static void copy_panel_offset(Panel *pa, Panel *papar) +{ + /* with respect to sizes... papar is parent */ + + pa->ofsx= papar->ofsx; + pa->ofsy= papar->ofsy + papar->sizey-pa->sizey; +} + + + +/* ugly global... but will be NULLed after each 'newPanel' call */ +static char *panel_tabbed=NULL, *group_tabbed=NULL; + +void uiNewPanelTabbed(char *panelname, char *groupname) +{ + panel_tabbed= panelname; + group_tabbed= groupname; +} + +/* another global... */ +static int pnl_style= UI_PNL_TRANSP; + +void uiSetPanelStyle(int style) +{ + pnl_style= style; +} + + +/* ofsx/ofsy only used for new panel definitions */ +/* return 1 if visible (create buttons!) */ +int uiNewPanel(ScrArea *sa, uiBlock *block, char *panelname, char *tabname, int ofsx, int ofsy, int sizex, int sizey) +{ + Panel *pa, *palign; + + /* check if Panel exists, then use that one */ + pa= sa->panels.first; + while(pa) { + if( strncmp(pa->panelname, panelname, UI_MAX_NAME_STR)==0) { + if( strncmp(pa->tabname, tabname, UI_MAX_NAME_STR)==0) { + break; + } + } + pa= pa->next; + } + + if(pa==NULL) { + + /* new panel */ + pa= MEM_callocN(sizeof(Panel), "new panel"); + BLI_addtail(&sa->panels, pa); + strncpy(pa->panelname, panelname, UI_MAX_NAME_STR); + strncpy(pa->tabname, tabname, UI_MAX_NAME_STR); + + pa->ofsx= ofsx & ~(PNL_GRID-1); + pa->ofsy= ofsy & ~(PNL_GRID-1); + pa->sizex= sizex; + pa->sizey= sizey; + pa->style= pnl_style; + + /* pre align, for good sorting later on */ + if(sa->spacetype==SPACE_BUTS && pa->prev) { + SpaceButs *sbuts= sa->spacedata.first; + + palign= pa->prev; + if(sbuts->align==BUT_VERTICAL) { + pa->ofsy= palign->ofsy - pa->sizey - PNL_HEADER; + } + else if(sbuts->align==BUT_HORIZONTAL) { + pa->ofsx= palign->ofsx + palign->sizex; + } + } + /* make new Panel tabbed? */ + if(panel_tabbed && group_tabbed) { + Panel *papar; + for(papar= sa->panels.first; papar; papar= papar->next) { + if(papar->active && papar->paneltab==NULL) { + if( strncmp(panel_tabbed, papar->panelname, UI_MAX_NAME_STR)==0) { + if( strncmp(group_tabbed, papar->tabname, UI_MAX_NAME_STR)==0) { + pa->paneltab= papar; + copy_panel_offset(pa, papar); + break; + } + } + } + } + } + } + + block->panel= pa; + pa->active= 1; + + /* clear global */ + panel_tabbed= group_tabbed= NULL; + + if(block->panel->paneltab) return 0; + if(block->panel->flag & PNL_CLOSED) return 0; + + return 1; +} + +void uiFreePanels(ListBase *lb) +{ + Panel *panel; + + while( (panel= lb->first) ) { + BLI_remlink(lb, panel); + MEM_freeN(panel); + } +} + +void uiNewPanelHeight(uiBlock *block, int sizey) +{ + if(sizey<64) sizey= 64; + + if(block->panel) { + block->panel->ofsy+= (block->panel->sizey - sizey); + block->panel->sizey= sizey; + } +} + +static int panel_has_tabs(Panel *panel) +{ + Panel *pa= curarea->panels.first; + + if(panel==NULL) return 0; + + while(pa) { + if(pa->paneltab==panel) return 1; + pa= pa->next; + } + return 0; +} + +static void ui_scale_panel_block(uiBlock *block) +{ + uiBut *but; + float facx= 1.0, facy= 1.0; + int centrex= 0, topy=0, tabsy=0; + + if(block->panel==NULL) return; + + if(block->autofill) ui_autofill(block); + /* buttons min/max centered, offset calculated */ + uiBoundsBlock(block, 0); + + if( block->maxx-block->minx > block->panel->sizex - 2*PNL_SAFETY ) { + facx= (block->panel->sizex - (2*PNL_SAFETY))/( block->maxx-block->minx ); + } + else centrex= (block->panel->sizex-( block->maxx-block->minx ) - PNL_SAFETY)/2; + + // tabsy= PNL_HEADER*panel_has_tabs(block->panel); + if( (block->maxy-block->miny) > block->panel->sizey - 2*PNL_SAFETY - tabsy) { + facy= (block->panel->sizey - (2*PNL_SAFETY) - tabsy)/( block->maxy-block->miny ); + } + else topy= (block->panel->sizey- 2*PNL_SAFETY - tabsy) - ( block->maxy-block->miny ) ; + + but= block->buttons.first; + while(but) { + but->x1= PNL_SAFETY+centrex+ facx*(but->x1-block->minx); + but->y1= PNL_SAFETY+topy + facy*(but->y1-block->miny); + but->x2= PNL_SAFETY+centrex+ facx*(but->x2-block->minx); + but->y2= PNL_SAFETY+topy + facy*(but->y2-block->miny); + if(facx!=1.0) ui_check_but(but); /* for strlen */ + but= but->next; + } + + block->maxx= block->panel->sizex; + block->maxy= block->panel->sizey; + block->minx= block->miny= 0.0; + +} + +// for 'home' key +void uiSetPanel_view2d(ScrArea *sa) +{ + Panel *pa; + float minx=10000, maxx= -10000, miny=10000, maxy= -10000; + int done=0; + + pa= sa->panels.first; + while(pa) { + if(pa->active) { + done= 1; + if(pa->ofsx < minx) minx= pa->ofsx; + if(pa->ofsx+pa->sizex > maxx) maxx= pa->ofsx+pa->sizex; + if(pa->ofsy < miny) miny= pa->ofsy; + if(pa->ofsy+pa->sizey+PNL_HEADER > maxy) maxy= pa->ofsy+pa->sizey+PNL_HEADER; + } + pa= pa->next; + } + if(done) { + G.v2d->tot.xmin= minx-PNL_DIST; + G.v2d->tot.xmax= maxx+PNL_DIST; + G.v2d->tot.ymin= miny-PNL_DIST; + G.v2d->tot.ymax= maxy+PNL_DIST; + } + else { + G.v2d->tot.xmin= 0; + G.v2d->tot.xmax= 1280; + G.v2d->tot.ymin= 0; + G.v2d->tot.ymax= 228; + } + +} + +// make sure the panels are not outside 'tot' area +void uiMatchPanel_view2d(ScrArea *sa) +{ + Panel *pa; + + pa= sa->panels.first; + while(pa) { + if(pa->active) { + if(pa->ofsx < G.v2d->tot.xmin) G.v2d->tot.xmin= pa->ofsx; + if(pa->ofsx+pa->sizex > G.v2d->tot.xmax) + G.v2d->tot.xmax= pa->ofsx+pa->sizex; + if(pa->ofsy < G.v2d->tot.ymin) G.v2d->tot.ymin= pa->ofsy; + if(pa->ofsy+pa->sizey+PNL_HEADER > G.v2d->tot.ymax) + G.v2d->tot.ymax= pa->ofsy+pa->sizey+PNL_HEADER; + } + pa= pa->next; + } +} + +/* extern used ny previewrender */ +void uiPanelPush(uiBlock *block) +{ + glPushMatrix(); + if(block->panel) { + glTranslatef((float)block->panel->ofsx, (float)block->panel->ofsy, 0.0); + i_translate((float)block->panel->ofsx, (float)block->panel->ofsy, 0.0, UIwinmat); + } +} + +void uiPanelPop(uiBlock *block) +{ + glPopMatrix(); + Mat4CpyMat4(UIwinmat, block->winmat); +} + +uiBlock *uiFindOpenPanelBlockName(ListBase *lb, char *name) +{ + uiBlock *block; + + for(block= lb->first; block; block= block->next) { + if(block->panel && block->panel->active && block->panel->paneltab==NULL) { + if(block->panel->flag & PNL_CLOSED); + else if(strncmp(name, block->panel->panelname, UI_MAX_NAME_STR)==0) break; + } + } + return block; +} + +static void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3) +{ + + // we draw twice, anti polygons not widely supported... + + glBegin(GL_POLYGON); + glVertex2f(x1, y1); + glVertex2f(x2, y2); + glVertex2f(x3, y3); + glEnd(); + + /* set antialias line */ + glEnable( GL_LINE_SMOOTH ); + glEnable( GL_BLEND ); + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + + glBegin(GL_LINE_LOOP); + glVertex2f(x1, y1); + glVertex2f(x2, y2); + glVertex2f(x3, y3); + glEnd(); + + glDisable( GL_LINE_SMOOTH ); + glDisable( GL_BLEND ); + +} + +/* 'icon' for panel header */ +static void ui_draw_tria_icon(float x, float y, float aspect, char dir) +{ + + + glColor3ub(240, 240, 240); + + if(dir=='h') { + ui_draw_anti_tria( x, y, x, y+12.0, x+10, y+6); + } + else { + ui_draw_anti_tria( x, y+10.0, x+12, y+10.0, x+6, y); + } + + +} + +static void ui_set_panel_pattern(char dir) +{ + static int firsttime= 1; + static GLubyte path[4*32], patv[4*32]; + int a,b,i=0; + + if(firsttime) { + firsttime= 0; + for(a=0; a<128; a++) patv[a]= 0x33; + for(a=0; a<8; a++) { + for(b=0; b<4; b++) path[i++]= 0xff; /* 1 scanlines */ + for(b=0; b<12; b++) path[i++]= 0x0; /* 3 lines */ + } + } + glEnable(GL_POLYGON_STIPPLE); + if(dir=='h') glPolygonStipple(path); + else glPolygonStipple(patv); +} + +static char *ui_block_cut_str(uiBlock *block, char *str, short okwidth) +{ + short width, ofs=strlen(str); + static char str1[128]; + + if(ofs>127) return str; + + width= block->aspect*BIF_GetStringWidth(block->curfont, str, (U.transopts & TR_BUTTONS)); + + if(width <= okwidth) return str; + strcpy(str1, str); + + while(width > okwidth && ofs>0) { + ofs--; + str1[ofs]= 0; + + width= block->aspect*BIF_GetStringWidth(block->curfont, str1, 0); + + if(width < 10) break; + } + return str1; +} + + +#define PNL_ICON 20 +#define PNL_DRAGGER 20 + + +static void ui_draw_panel_header(uiBlock *block) +{ + Panel *pa, *panel= block->panel; + float width; + int a, nr= 1; + char *str; + + /* count */ + pa= curarea->panels.first; + while(pa) { + if(pa->active) { + if(pa->paneltab==panel) nr++; + } + pa= pa->next; + } + + if(nr==1) { + glColor3ub(255,255,255); + glRasterPos2f(block->minx+40, block->maxy+5); + BIF_DrawString(block->curfont, block->panel->panelname, (U.transopts & TR_BUTTONS), 0); + return; + } + + a= 0; + width= (panel->sizex - 3 - 2*PNL_ICON)/nr; + pa= curarea->panels.first; + while(pa) { + if(pa->active==0); + else if(pa==panel) { + /* active tab */ + uiSetRoundBox(15); + glColor3ub(140, 140, 147); + uiRoundBox(2+PNL_ICON+a*width, panel->sizey+3, PNL_ICON+(a+1)*width, panel->sizey+PNL_HEADER-3, 8); + + glColor3ub(255,255,255); + glRasterPos2f(10+PNL_ICON+a*width, panel->sizey+5); + str= ui_block_cut_str(block, pa->panelname, (short)(width-10)); + BIF_DrawString(block->curfont, str, (U.transopts & TR_BUTTONS), 0); + + a++; + } + else if(pa->paneltab==panel) { + /* not active tab */ + + glColor3ub(95,95,95); + glRasterPos2f(10+PNL_ICON+a*width, panel->sizey+5); + str= ui_block_cut_str(block, pa->panelname, (short)(width-10)); + BIF_DrawString(block->curfont, str, (U.transopts & TR_BUTTONS), 0); + + a++; + } + pa= pa->next; + } + + // dragger + uiSetRoundBox(15); + glColor3ub(140, 140, 147); + uiRoundBox(panel->sizex-PNL_ICON+5, panel->sizey+5, panel->sizex-5, panel->sizey+PNL_HEADER-5, 5); + +} + +void ui_draw_panel(uiBlock *block) +{ + int align=0; + + if(block->panel->paneltab) return; + + if(curarea->spacetype==SPACE_BUTS) { + SpaceButs *sbuts= curarea->spacedata.first; + align= sbuts->align; + } + + if(block->panel->flag & PNL_CLOSEDY) { + uiSetRoundBox(15); + glColor3ub(160, 160, 167); + uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 10); + + // title + glColor3ub(255,255,255); + glRasterPos2f(block->minx+40, block->maxy+5); + BIF_DrawString(block->curfont, block->panel->panelname, (U.transopts & TR_BUTTONS), 0); + + // border + if(block->panel->flag & PNL_SELECT) { + glColor3ub(64, 64, 64); + uiRoundRect(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 10); + } + if(block->panel->flag & PNL_OVERLAP) { + glColor3ub(240, 240, 240); + uiRoundRect(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 10); + } + + } + else if(block->panel->flag & PNL_CLOSEDX) { + char str[4]; + int a, end, ofs; + + uiSetRoundBox(15); + glColor3ub(160, 160, 167); + uiRoundBox(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 10); + + // title, only capitals for now + glColor3ub(255,255,255); + str[1]= 0; + end= strlen(block->panel->panelname); + ofs= 20; + for(a=0; a<end; a++) { + str[0]= block->panel->panelname[a]; + if( isupper(str[0]) ) { + glRasterPos2f(block->minx+5, block->maxy-ofs); + BIF_DrawString(block->curfont, str, 0, 0); + ofs+= 15; + } + } + + // border + if(block->panel->flag & PNL_SELECT) { + glColor3ub(64, 64, 64); + uiRoundRect(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 10); + } + if(block->panel->flag & PNL_OVERLAP) { + glColor3ub(240, 240, 240); + uiRoundRect(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 10); + } + + } + else { + + uiSetRoundBox(3); + + if(block->panel->style== UI_PNL_SOLID) { + glColor3ub(160, 160, 167); + uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 10); + // blend now for panels in 3d window, test... + glEnable(GL_BLEND); + glColor4ub(198, 198, 198, 100); + glRectf(block->minx, block->miny, block->maxx, block->maxy); + + if(align) { + glColor4ub(206, 206, 206, 100); + if(align==BUT_HORIZONTAL) ui_set_panel_pattern('h'); + else ui_set_panel_pattern('v'); + + glRectf(block->minx, block->miny, block->maxx, block->maxy); + glDisable(GL_POLYGON_STIPPLE); + } + glDisable(GL_BLEND); + } + else { + glColor3ub(218, 218, 218); + uiRoundRect(block->minx, block->miny, block->maxx, block->maxy+PNL_HEADER, 10); + } + + + ui_draw_panel_header(block); + + // border + uiSetRoundBox(3); + if(block->panel->flag & PNL_SELECT) { + glColor3ub(64, 64, 64); + uiRoundRect(block->minx, block->miny, block->maxx, block->maxy+PNL_HEADER, 10); + } + if(block->panel->flag & PNL_OVERLAP) { + glColor3ub(240, 240, 240); + uiRoundRect(block->minx, block->miny, block->maxx, block->maxy+PNL_HEADER, 10); + } + + /* and a soft shadow-line for now */ + glEnable( GL_BLEND ); + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + glColor4ub(0, 0, 0, 50); + fdrawline(block->maxx, block->miny, block->maxx, block->maxy+PNL_HEADER/2); + fdrawline(block->minx, block->miny, block->maxx, block->miny); + glDisable(GL_BLEND); + + } + + /* draw close icon */ + + if(block->panel->flag & PNL_CLOSEDY) + ui_draw_tria_icon(block->minx+6, block->maxy+3, block->aspect, 'h'); + else if(block->panel->flag & PNL_CLOSEDX) + ui_draw_tria_icon(block->minx+4, block->maxy+2, block->aspect, 'h'); + else + ui_draw_tria_icon(block->minx+6, block->maxy+3, block->aspect, 'v'); + + +} + +static void ui_redraw_select_panel(ScrArea *sa) +{ + /* only for beauty, make sure the panel thats moved is on top */ + /* better solution later? */ + uiBlock *block; + + for(block= sa->uiblocks.first; block; block= block->next) { + if(block->panel && (block->panel->flag & PNL_SELECT)) { + uiDrawBlock(block); + } + } + +} + + +/* ------------ panel alignment ---------------- */ + + +/* this function is needed because uiBlock and Panel itself dont +change sizey or location when closed */ +static int get_panel_real_ofsy(Panel *pa) +{ + if(pa->flag & PNL_CLOSEDY) return pa->ofsy+pa->sizey; + else if(pa->paneltab && (pa->paneltab->flag & PNL_CLOSEDY)) return pa->ofsy+pa->sizey; + else return pa->ofsy; +} + +static int get_panel_real_ofsx(Panel *pa) +{ + if(pa->flag & PNL_CLOSEDX) return pa->ofsx+PNL_HEADER; + else if(pa->paneltab && (pa->paneltab->flag & PNL_CLOSEDX)) return pa->ofsx+PNL_HEADER; + else return pa->ofsx+pa->sizex; +} + + +typedef struct PanelSort { + Panel *pa, *orig; +} PanelSort; + +static int find_leftmost_panel(const void *a1, const void *a2) +{ + const PanelSort *ps1=a1, *ps2=a2; + + if( ps1->pa->ofsx > ps2->pa->ofsx) return 1; + else if( ps1->pa->ofsx < ps2->pa->ofsx) return -1; + + return 0; +} + + +static int find_highest_panel(const void *a1, const void *a2) +{ + const PanelSort *ps1=a1, *ps2=a2; + + if( ps1->pa->ofsy < ps2->pa->ofsy) return 1; + else if( ps1->pa->ofsy > ps2->pa->ofsy) return -1; + + return 0; +} + +/* this doesnt draw */ +/* returns 1 when it did something */ +int uiAlignPanelStep(ScrArea *sa, float fac) +{ + SpaceButs *sbuts= sa->spacedata.first; + Panel *pa; + PanelSort *ps, *panelsort, *psnext; + int a, tot=0, done; + + if(sa->spacetype!=SPACE_BUTS) { + return 0; + } + + /* count active, not tabbed Panels */ + for(pa= sa->panels.first; pa; pa= pa->next) { + if(pa->active && pa->paneltab==NULL) tot++; + } + + if(tot==0) return 0; + + /* extra; change close direction? */ + for(pa= sa->panels.first; pa; pa= pa->next) { + if(pa->active && pa->paneltab==NULL) { + if( (pa->flag & PNL_CLOSEDX) && (sbuts->align==BUT_VERTICAL) ) + pa->flag ^= PNL_CLOSED; + + else if( (pa->flag & PNL_CLOSEDY) && (sbuts->align==BUT_HORIZONTAL) ) + pa->flag ^= PNL_CLOSED; + + } + } + + panelsort= MEM_callocN( tot*sizeof(PanelSort), "panelsort"); + + /* fill panelsort array */ + ps= panelsort; + for(pa= sa->panels.first; pa; pa= pa->next) { + if(pa->active && pa->paneltab==NULL) { + ps->pa= MEM_dupallocN(pa); + ps->orig= pa; + ps++; + } + } + + if(sbuts->align==BUT_VERTICAL) + qsort(panelsort, tot, sizeof(PanelSort), find_highest_panel); + else + qsort(panelsort, tot, sizeof(PanelSort), find_leftmost_panel); + + + /* no smart other default start loc! this keeps switching f5/f6/etc compatible */ + ps= panelsort; + ps->pa->ofsx= 0; + ps->pa->ofsy= 0; + + for(a=0 ; a<tot-1; a++, ps++) { + psnext= ps+1; + + if(sbuts->align==BUT_VERTICAL) { + psnext->pa->ofsx = ps->pa->ofsx; + psnext->pa->ofsy = get_panel_real_ofsy(ps->pa) - psnext->pa->sizey-PNL_HEADER-PNL_DIST; + } + else { + psnext->pa->ofsx = get_panel_real_ofsx(ps->pa)+PNL_DIST; + psnext->pa->ofsy = ps->pa->ofsy; + } + } + + /* we interpolate */ + done= 0; + ps= panelsort; + for(a=0; a<tot; a++, ps++) { + if( (ps->pa->flag & PNL_SELECT)==0) { + if( (ps->orig->ofsx != ps->pa->ofsx) || (ps->orig->ofsy != ps->pa->ofsy)) { + ps->orig->ofsx= floor(0.5 + fac*ps->pa->ofsx + (1.0-fac)*ps->orig->ofsx); + ps->orig->ofsy= floor(0.5 + fac*ps->pa->ofsy + (1.0-fac)*ps->orig->ofsy); + done= 1; + } + } + } + + /* copy locations to tabs */ + for(pa= sa->panels.first; pa; pa= pa->next) { + if(pa->paneltab && pa->active) { + copy_panel_offset(pa, pa->paneltab); + } + } + + /* free panelsort array */ + ps= panelsort; + for(a=0; a<tot; a++, ps++) { + MEM_freeN(ps->pa); + } + MEM_freeN(panelsort); + + return done; +} + + +static void ui_animate_panels(ScrArea *sa) +{ + double time=0, ltime; + float result= 0.0, fac= 0.2; + + ltime = PIL_check_seconds_timer(); + + /* for max 1 second, interpolate positions */ + while(TRUE) { + + if( uiAlignPanelStep(sa, fac) ) { + /* warn: this re-allocs uiblocks! */ + scrarea_do_windraw(curarea); + ui_redraw_select_panel(curarea); + screen_swapbuffers(); + } + else { + addqueue(curarea->win, REDRAW,1 ); // because 'Animate' is also called as redraw + break; + } + + if(result >= 1.0) break; + + if(result==0.0) { // firsttime + time = PIL_check_seconds_timer()-ltime; + if(time > 0.5) fac= 0.7; + else if(time > 0.2) fac= 0.5; + else if(time > 0.1) fac= 0.4; + else if(time > 0.05) fac= 0.3; // 11 steps + } + + result= fac + (1.0-fac)*result; + + if(result > 0.98) { + result= 1.0; + fac= 1.0; + } + } +} + +/* only draws blocks with panels */ +void uiDrawBlocksPanels(ScrArea *sa, int re_align) +{ + uiBlock *block; + Panel *panot, *panew, *patest; + + /* scaling contents */ + block= sa->uiblocks.first; + while(block) { + if(block->panel) ui_scale_panel_block(block); + block= block->next; + } + + /* consistancy; are panels not made, whilst they have tabs */ + for(panot= sa->panels.first; panot; panot= panot->next) { + if(panot->active==0) { // not made + + for(panew= sa->panels.first; panew; panew= panew->next) { + if(panew->active) { + if(panew->paneltab==panot) { // panew is tab in notmade pa + break; + } + } + } + /* now panew can become the new parent, check all other tabs */ + if(panew) { + for(patest= sa->panels.first; patest; patest= patest->next) { + if(patest->paneltab == panot) { + patest->paneltab= panew; + } + } + panot->paneltab= panew; + panew->paneltab= NULL; + addqueue(sa->win, REDRAW, 1); // the buttons panew were not made + } + } + } + + /* re-align */ + if(re_align) uiAlignPanelStep(sa, 1.0); + + /* draw */ + block= sa->uiblocks.first; + while(block) { + if(block->panel) uiDrawBlock(block); + block= block->next; + } + +} + + + +/* ------------ panel merging ---------------- */ + +static void check_panel_overlap(ScrArea *sa, Panel *panel) +{ + Panel *pa= sa->panels.first; + + /* also called with panel==NULL for clear */ + + while(pa) { + pa->flag &= ~PNL_OVERLAP; + if(panel && (pa != panel)) { + if(pa->paneltab==NULL && pa->active) { + float safex= 0.2, safey= 0.2; + + if( pa->flag & PNL_CLOSEDX) safex= 0.05; + else if(pa->flag & PNL_CLOSEDY) safey= 0.05; + else if( panel->flag & PNL_CLOSEDX) safex= 0.05; + else if(panel->flag & PNL_CLOSEDY) safey= 0.05; + + if( pa->ofsx > panel->ofsx- safex*panel->sizex) + if( pa->ofsx+pa->sizex < panel->ofsx+ (1.0+safex)*panel->sizex) + if( pa->ofsy > panel->ofsy- safey*panel->sizey) + if( pa->ofsy+pa->sizey < panel->ofsy+ (1.0+safey)*panel->sizey) + pa->flag |= PNL_OVERLAP; + } + } + + pa= pa->next; + } +} + +static void test_add_new_tabs(ScrArea *sa) +{ + Panel *pa, *pasel=NULL, *palap=NULL; + /* search selected and overlapped panel */ + + pa= sa->panels.first; + while(pa) { + if(pa->active) { + if(pa->flag & PNL_SELECT) pasel= pa; + if(pa->flag & PNL_OVERLAP) palap= pa; + } + pa= pa->next; + } + + if(pasel && palap==NULL) { + + /* copy locations */ + pa= sa->panels.first; + while(pa) { + if(pa->paneltab==pasel) { + copy_panel_offset(pa, pasel); + } + pa= pa->next; + } + } + + if(pasel==NULL || palap==NULL) return; + + /* the overlapped panel becomes a tab */ + palap->paneltab= pasel; + + /* the selected panel gets coords of overlapped one */ + copy_panel_offset(pasel, palap); + + /* and its tabs */ + pa= sa->panels.first; + while(pa) { + if(pa->paneltab == pasel) { + copy_panel_offset(pa, palap); + } + pa= pa->next; + } + + /* but, the overlapped panel already can have tabs too! */ + pa= sa->panels.first; + while(pa) { + if(pa->paneltab == palap) { + pa->paneltab = pasel; + } + pa= pa->next; + } +} + +/* ------------ panel drag ---------------- */ + + +void ui_drag_panel(uiBlock *block) +{ + Panel *panel= block->panel; + short align=0, first=1, ofsx, ofsy, dx=0, dy=0, dxo=0, dyo=0, mval[2], mvalo[2]; + + if(curarea->spacetype==SPACE_BUTS) { + SpaceButs *sbuts= curarea->spacedata.first; + align= sbuts->align; + } + + uiGetMouse(block->win, mvalo); + ofsx= block->panel->ofsx; + ofsy= block->panel->ofsy; + + panel->flag |= PNL_SELECT; + + while(TRUE) { + + if( !(get_mbut() & L_MOUSE) ) break; + + /* first clip for window, no dragging outside */ + getmouseco_areawin(mval); + if( mval[0]>0 && mval[0]<curarea->winx && mval[1]>0 && mval[1]<curarea->winy) { + uiGetMouse(mywinget(), mval); + dx= (mval[0]-mvalo[0]) & ~(PNL_GRID-1); + dy= (mval[1]-mvalo[1]) & ~(PNL_GRID-1); + } + + if(dx!=dxo || dy!=dyo || first || align) { + dxo= dx; dyo= dy; + first= 0; + + panel->ofsx = ofsx+dx; + panel->ofsy = ofsy+dy; + + check_panel_overlap(curarea, panel); + + if(align) uiAlignPanelStep(curarea, 0.2); + + /* warn: this re-allocs blocks! */ + scrarea_do_windraw(curarea); + ui_redraw_select_panel(curarea); + screen_swapbuffers(); + + /* so, we find the new block */ + block= curarea->uiblocks.first; + while(block) { + if(block->panel == panel) break; + block= block->next; + } + // temporal debug + if(block==NULL) { + printf("block null while panel drag, should not happen\n"); + } + + /* restore */ + Mat4CpyMat4(UIwinmat, block->winmat); + + /* idle for align */ + if(dx==dxo && dy==dyo) PIL_sleep_ms(30); + } + /* idle for this poor code */ + else PIL_sleep_ms(30); + } + + test_add_new_tabs(curarea); // also copies locations of tabs in dragged panel + + panel->flag &= ~PNL_SELECT; + check_panel_overlap(curarea, NULL); // clears + + if(align==0) addqueue(block->win, REDRAW, 1); + else ui_animate_panels(curarea); +} + + +static void ui_panel_untab(uiBlock *block) +{ + Panel *panel= block->panel, *pa, *panew=NULL; + short nr, mval[2], mvalo[2]; + + /* while hold mouse, check for movement, then untab */ + + uiGetMouse(block->win, mvalo); + while(TRUE) { + + if( !(get_mbut() & L_MOUSE) ) break; + uiGetMouse(mywinget(), mval); + + if( abs(mval[0]-mvalo[0]) + abs(mval[1]-mvalo[1]) > 6 ) { + /* find new parent panel */ + nr= 0; + pa= curarea->panels.first; + while(pa) { + if(pa->paneltab==panel) { + panew= pa; + nr++; + } + pa= pa->next; + } + + /* make old tabs point to panew */ + if(panew==NULL) printf("panel untab: shouldnt happen\n"); + panew->paneltab= NULL; + + pa= curarea->panels.first; + while(pa) { + if(pa->paneltab==panel) { + pa->paneltab= panew; + } + pa= pa->next; + } + + ui_drag_panel(block); + break; + + } + /* idle for this poor code */ + else PIL_sleep_ms(50); + + } + +} + +/* ------------ panel events ---------------- */ + + +static void panel_clicked_tabs(uiBlock *block, int mousex) +{ + Panel *pa, *tabsel=NULL, *panel= block->panel; + int nr= 1, a, width; + + /* count */ + pa= curarea->panels.first; + while(pa) { + if(pa!=panel) { + if(pa->paneltab==panel) nr++; + } + pa= pa->next; + } + + if(nr==1) return; + + /* find clicked tab, mouse in panel coords */ + a= 0; + width= (panel->sizex - 3- 2*PNL_ICON)/nr; + pa= curarea->panels.first; + while(pa) { + if(pa==panel || pa->paneltab==panel) { + if( (mousex > PNL_ICON+a*width) && (mousex < PNL_ICON+(a+1)*width) ) { + tabsel= pa; + } + a++; + } + pa= pa->next; + } + + if(tabsel) { + + if(tabsel == panel) { + ui_panel_untab(block); + } + else { + /* tabsel now becomes parent for all others */ + panel->paneltab= tabsel; + tabsel->paneltab= NULL; + + pa= curarea->panels.first; + while(pa) { + if(pa->paneltab == panel) pa->paneltab = tabsel; + pa= pa->next; + } + + addqueue(curarea->win, REDRAW, 1); + } + } + +} + + +/* this function is supposed to call general window drawing too */ +/* also it supposes a block has panel, and isnt a menu */ +void ui_do_panel(uiBlock *block, uiEvent *uevent) +{ + Panel *pa; + int align= 0; + + if(curarea->spacetype==SPACE_BUTS) { + SpaceButs *sbuts= curarea->spacedata.first; + align= sbuts->align; + } + + /* mouse coordinates in panel space! */ + + if(uevent->event==LEFTMOUSE && block->panel->paneltab==NULL) { + int button= 0; + + /* check open/closed button */ + if(block->panel->flag & PNL_CLOSEDX) { + if(uevent->mval[1] >= block->maxy) button= 1; + } + else if(uevent->mval[0] <= block->minx+PNL_ICON+3) button= 1; + + if(button) { + if(block->panel->flag & PNL_CLOSED) block->panel->flag &= ~PNL_CLOSED; + else if(align==BUT_HORIZONTAL) block->panel->flag |= PNL_CLOSEDX; + else block->panel->flag |= PNL_CLOSEDY; + + for(pa= curarea->panels.first; pa; pa= pa->next) { + if(pa->paneltab==block->panel) { + if(block->panel->flag & PNL_CLOSED) pa->flag |= PNL_CLOSED; + else pa->flag &= ~PNL_CLOSED; + } + } + if(align==0) addqueue(block->win, REDRAW, 1); + else ui_animate_panels(curarea); + + } + else if(block->panel->flag & PNL_CLOSED) { + ui_drag_panel(block); + } + /* check if clicked in tabbed area */ + else if(uevent->mval[0] < block->maxx-PNL_ICON-3 && panel_has_tabs(block->panel)) { + panel_clicked_tabs(block, uevent->mval[0]); + } + else { + ui_drag_panel(block); + } + } +} + + diff --git a/source/blender/src/seqaudio.c b/source/blender/src/seqaudio.c index ddd28fa839d..a9c0d3d5b32 100644 --- a/source/blender/src/seqaudio.c +++ b/source/blender/src/seqaudio.c @@ -82,7 +82,6 @@ #include "BSE_seqaudio.h" #include "mydevice.h" -#include "interface.h" #include "blendef.h" #include "render.h" diff --git a/source/blender/src/sequence.c b/source/blender/src/sequence.c index fa9f5a0ad2b..6db18a7ed19 100644 --- a/source/blender/src/sequence.c +++ b/source/blender/src/sequence.c @@ -70,7 +70,6 @@ #include "BSE_headerbuttons.h" #include "BSE_sequence.h" -#include "interface.h" /* for INT and FLO types */ #include "blendef.h" #include "render.h" diff --git a/source/blender/src/space.c b/source/blender/src/space.c index 223adae170b..eee8efe3f84 100644 --- a/source/blender/src/space.c +++ b/source/blender/src/space.c @@ -131,7 +131,6 @@ #include "BLO_readfile.h" /* for BLO_blendhandle_close */ -#include "interface.h" #include "mydevice.h" #include "blendef.h" #include "datatoc.h" diff --git a/source/blender/src/toets.c b/source/blender/src/toets.c index efd7da94e5b..8647d658d97 100644 --- a/source/blender/src/toets.c +++ b/source/blender/src/toets.c @@ -94,7 +94,6 @@ #include "BSE_headerbuttons.h" #include "blendef.h" -#include "interface.h" #include "render.h" #include "IMB_imbuf.h" diff --git a/source/blender/src/toolbox.c b/source/blender/src/toolbox.c index 0a62353715a..6b317fa2903 100644 --- a/source/blender/src/toolbox.c +++ b/source/blender/src/toolbox.c @@ -31,6 +31,7 @@ */ #define PY_TOOLBOX 1 + #include <math.h> #include <ctype.h> #include <stdlib.h> @@ -100,8 +101,6 @@ #include "mydevice.h" #include "blendef.h" - -#include "interface.h" #include "render.h" diff --git a/source/blender/src/usiblender.c b/source/blender/src/usiblender.c index 949f58e2095..ce2e39d2bbc 100644 --- a/source/blender/src/usiblender.c +++ b/source/blender/src/usiblender.c @@ -109,7 +109,6 @@ #include "BPY_extern.h" #include "blendef.h" -#include "interface.h" #include "radio.h" #include "render.h" #include "datatoc.h" |