Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2003-10-15 23:23:54 +0400
committerTon Roosendaal <ton@blender.org>2003-10-15 23:23:54 +0400
commit10333bd1d39460efb2e71930f43342e6b5840c9a (patch)
tree856016c103836bba6030b7852130042cd1d23a66 /source/blender/src
parent478f61563a320d33b51fec02640e41ab4b05f825 (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/blender/src')
-rw-r--r--source/blender/src/buttons.txt246
-rw-r--r--source/blender/src/buttons_editing.c1
-rw-r--r--source/blender/src/buttons_logic.c1
-rw-r--r--source/blender/src/buttons_object.c1
-rw-r--r--source/blender/src/buttons_scene.c1
-rw-r--r--source/blender/src/buttons_script.c1
-rw-r--r--source/blender/src/buttons_shading.c1
-rw-r--r--source/blender/src/drawaction.c1
-rw-r--r--source/blender/src/drawimasel.c1
-rw-r--r--source/blender/src/drawipo.c1
-rw-r--r--source/blender/src/drawnla.c1
-rw-r--r--source/blender/src/drawoops.c2
-rw-r--r--source/blender/src/drawtext.c1
-rw-r--r--source/blender/src/drawview.c1
-rw-r--r--source/blender/src/edit.c2
-rw-r--r--source/blender/src/editaction.c1
-rw-r--r--source/blender/src/editarmature.c1
-rw-r--r--source/blender/src/editconstraint.c1
-rw-r--r--source/blender/src/editcurve.c3
-rw-r--r--source/blender/src/editface.c3
-rw-r--r--source/blender/src/editgroup.c1
-rw-r--r--source/blender/src/editimasel.c1
-rw-r--r--source/blender/src/editipo.c1
-rw-r--r--source/blender/src/editkey.c1
-rw-r--r--source/blender/src/editmesh.c1
-rw-r--r--source/blender/src/editnla.c1
-rw-r--r--source/blender/src/editobject.c2
-rw-r--r--source/blender/src/editoops.c2
-rw-r--r--source/blender/src/editscreen.c1
-rw-r--r--source/blender/src/editseq.c1
-rw-r--r--source/blender/src/editsima.c1
-rw-r--r--source/blender/src/editsound.c1
-rw-r--r--source/blender/src/filesel.c1
-rw-r--r--source/blender/src/header_action.c1
-rw-r--r--source/blender/src/header_buttonswin.c1
-rw-r--r--source/blender/src/header_filesel.c1
-rw-r--r--source/blender/src/header_image.c1
-rw-r--r--source/blender/src/header_imasel.c1
-rw-r--r--source/blender/src/header_info.c1
-rw-r--r--source/blender/src/header_ipo.c1
-rw-r--r--source/blender/src/header_nla.c1
-rw-r--r--source/blender/src/header_oops.c1
-rw-r--r--source/blender/src/header_seq.c1
-rw-r--r--source/blender/src/header_sound.c1
-rw-r--r--source/blender/src/header_text.c1
-rw-r--r--source/blender/src/header_view3d.c1
-rw-r--r--source/blender/src/headerbuttons.c1
-rw-r--r--source/blender/src/headerbuttons.txt8520
-rw-r--r--source/blender/src/interface.c1522
-rw-r--r--source/blender/src/interface_panel.c1463
-rw-r--r--source/blender/src/seqaudio.c1
-rw-r--r--source/blender/src/sequence.c1
-rw-r--r--source/blender/src/space.c1
-rw-r--r--source/blender/src/toets.c1
-rw-r--r--source/blender/src/toolbox.c3
-rw-r--r--source/blender/src/usiblender.c1
56 files changed, 1471 insertions, 10342 deletions
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"