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:
Diffstat (limited to 'source/blender/src/header_ipo.c')
-rw-r--r--source/blender/src/header_ipo.c1408
1 files changed, 0 insertions, 1408 deletions
diff --git a/source/blender/src/header_ipo.c b/source/blender/src/header_ipo.c
deleted file mode 100644
index 4f98e966f8c..00000000000
--- a/source/blender/src/header_ipo.c
+++ /dev/null
@@ -1,1408 +0,0 @@
-/**
- * header_ipo.c oct-2003
- *
- * Functions to draw the "Ipo Curve Editor" window header
- * and handle user events sent to it.
- *
- * $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 <stdio.h>
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "DNA_action_types.h"
-#include "DNA_camera_types.h"
-#include "DNA_curve_types.h"
-#include "DNA_constraint_types.h"
-#include "DNA_ID.h"
-#include "DNA_ipo_types.h"
-#include "DNA_key_types.h"
-#include "DNA_lamp_types.h"
-#include "DNA_material_types.h"
-#include "DNA_object_types.h"
-#include "DNA_object_fluidsim.h"
-#include "DNA_particle_types.h"
-#include "DNA_scene_types.h"
-#include "DNA_screen_types.h"
-#include "DNA_texture_types.h"
-#include "DNA_space_types.h"
-#include "DNA_sequence_types.h"
-#include "DNA_sound_types.h"
-#include "DNA_world_types.h"
-
-#include "BKE_action.h"
-#include "BKE_constraint.h"
-#include "BKE_depsgraph.h"
-#include "BKE_global.h"
-#include "BKE_ipo.h"
-#include "BKE_key.h"
-#include "BKE_main.h"
-#include "BKE_material.h"
-#include "BKE_particle.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
-
-#include "BLI_blenlib.h"
-
-#include "BSE_drawipo.h"
-#include "BSE_editipo_types.h"
-#include "BSE_edit.h"
-#include "BSE_editipo.h"
-#include "BSE_headerbuttons.h"
-#include "BSE_time.h"
-
-#include "BIF_editaction.h"
-#include "BIF_editconstraint.h"
-#include "BIF_interface.h"
-#include "BIF_mainqueue.h"
-#include "BIF_resources.h"
-#include "BIF_screen.h"
-#include "BIF_space.h"
-#include "BIF_toolbox.h"
-
-#include "nla.h"
-
-#include "blendef.h"
-#include "mydevice.h"
-
-extern int totipo_edit, totipo_sel;
-
-/* headerbutton call, assuming full context is set */
-/* it aligns with editipo.c, verify_ipo */
-void spaceipo_assign_ipo(SpaceIpo *si, Ipo *ipo)
-{
- if(si->from==NULL || si->from->lib) return;
-
- if(ipo) ipo->id.us++;
-
- /* first check action ipos */
- if(si->actname && si->actname[0]) {
- Object *ob= (Object *)si->from;
- bActionChannel *achan;
-
- if(ob->action) {
- achan= verify_action_channel(ob->action, si->actname);
-
- if(achan) {
- /* constraint exception */
- if(si->blocktype==ID_CO) {
- bConstraintChannel *conchan= get_constraint_channel(&achan->constraintChannels, si->constname);
- if(conchan) {
- if(conchan->ipo)
- conchan->ipo->id.us--;
- conchan->ipo= ipo;
- }
- }
- else {
- if(achan->ipo)
- achan->ipo->id.us--;
- achan->ipo= ipo;
- }
- }
- }
- }
- else {
- switch(GS(si->from->name)) {
- case ID_OB:
- {
- Object *ob= (Object *)si->from;
- /* constraint exception */
- if(si->blocktype==ID_CO) {
- /* check the local constraint ipo */
- if(si->bonename && si->bonename[0] && ob->pose) {
- bPoseChannel *pchan= get_pose_channel(ob->pose, si->bonename);
- bConstraint *con;
-
- for(con= pchan->constraints.first; con; con= con->next)
- if(strcmp(con->name, si->constname)==0)
- break;
- if(con) {
- if(con->ipo)
- con->ipo->id.us--;
- con->ipo= ipo;
- }
- }
- else {
- bConstraintChannel *conchan= get_constraint_channel(&ob->constraintChannels, si->constname);
- if(conchan) {
- if(conchan->ipo)
- conchan->ipo->id.us--;
- conchan->ipo= ipo;
- }
- }
- }
- else if(si->blocktype==ID_FLUIDSIM) { // NT
- if( (ob->fluidsimSettings) &&
- (ob->fluidsimSettings->ipo) ) {
- // decrement users counter
- ob->fluidsimSettings->ipo->id.us--;
- }
- ob->fluidsimSettings->ipo = ipo;
- }
- else if(si->blocktype==ID_PA) {
- ParticleSystem *psys=psys_get_current(ob);
- if(psys){
- if(psys->part->ipo){
- psys->part->ipo->id.us--;
- }
- psys->part->ipo = ipo;
- }
- }
- else if(si->blocktype==ID_OB) {
- if(ob->ipo)
- ob->ipo->id.us--;
- ob->ipo= ipo;
- }
- }
- break;
- case ID_MA:
- {
- Material *ma= (Material *)si->from;
-
- if(ma->ipo)
- ma->ipo->id.us--;
- ma->ipo= ipo;
- }
- break;
- case ID_TE:
- {
- Tex *tex= (Tex *)si->from;
-
- if(tex->ipo)
- tex->ipo->id.us--;
- tex->ipo= ipo;
- }
- break;
- case ID_SEQ:
- {
- Sequence *seq= (Sequence *)si->from; /* note, sequence is mimicing Id */
-
- if((seq->type & SEQ_EFFECT)
- || (seq->type == SEQ_RAM_SOUND)
- || (seq->type == SEQ_HD_SOUND)) {
- if(seq->ipo)
- seq->ipo->id.us--;
- seq->ipo= ipo;
- }
- }
- break;
- case ID_CU:
- {
- Curve *cu= (Curve *)si->from;
-
- if(cu->ipo)
- cu->ipo->id.us--;
- cu->ipo= ipo;
- }
- break;
- case ID_KE:
- {
- Key *key= (Key *)si->from;
-
- if(key->ipo)
- key->ipo->id.us--;
- key->ipo= ipo;
- }
- break;
- case ID_WO:
- {
- World *wo= (World *)si->from;
-
- if(wo->ipo)
- wo->ipo->id.us--;
- wo->ipo= ipo;
- }
- break;
- case ID_LA:
- {
- Lamp *la= (Lamp *)si->from;
-
- if(la->ipo)
- la->ipo->id.us--;
- la->ipo= ipo;
- }
- break;
- case ID_CA:
- {
- Camera *ca= (Camera *)si->from;
-
- if(ca->ipo)
- ca->ipo->id.us--;
- ca->ipo= ipo;
- }
- break;
- case ID_SO:
- {
- bSound *snd= (bSound *)si->from;
-
- if(snd->ipo)
- snd->ipo->id.us--;
- snd->ipo= ipo;
- }
- }
- }
-
- allqueue(REDRAWVIEW3D, 0);
- allqueue(REDRAWIPO, 0);
- allqueue(REDRAWACTION, 0);
- allqueue(REDRAWNLA, 0);
- allqueue(REDRAWBUTSALL, 0);
-
-}
-
-
-static void do_ipo_editmenu_transformmenu(void *arg, int event)
-{
- switch(event)
- {
- case 0: /* grab/move */
- transform_ipo('g');
- break;
- case 1: /* rotate */
- transform_ipo('r');
- break;
- case 2: /* scale */
- transform_ipo('s');
- break;
- }
-}
-
-static uiBlock *ipo_editmenu_transformmenu(void *arg_unused)
-{
- uiBlock *block;
- short yco= 0, menuwidth=120;
-
- block= uiNewBlock(&curarea->uiblocks, "ipo_editmenu_transformmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
- uiBlockSetButmFunc(block, do_ipo_editmenu_transformmenu, NULL);
-
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
-
- uiBlockSetDirection(block, UI_RIGHT);
- uiTextBoundsBlock(block, 60);
-
- return block;
-}
-
-static void do_ipo_editmenu_snapmenu(void *arg, int event)
-{
- switch(event) {
- case 1: /* Horizontal */
- case 2: /* To Next */
- case 3: /* To Frame */
- case 4: /* To Current Frame */
- ipo_snap(event);
- break;
- }
- allqueue(REDRAWVIEW3D, 0);
-}
-
-static uiBlock *ipo_editmenu_snapmenu(void *arg_unused)
-{
- uiBlock *block;
- short yco = 20, menuwidth = 120;
-
- block= uiNewBlock(&curarea->uiblocks, "ipo_editmenu_snapmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
- uiBlockSetButmFunc(block, do_ipo_editmenu_snapmenu, NULL);
-
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Horizontal|Shift S, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Next|Shift S, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Frame|Shift S, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Current Frame|Shift S, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
-
- uiBlockSetDirection(block, UI_RIGHT);
- uiTextBoundsBlock(block, 60);
- return block;
-}
-
-static void do_ipo_editmenu_mirrormenu(void *arg, int event)
-{
- switch(event) {
- case 1: /* mirror over current frame */
- case 2: /* mirror over frame 0 */
- case 3: /* mirror over horizontal axis */
- ipo_mirror(event);
- break;
- }
- allqueue(REDRAWVIEW3D, 0);
-}
-
-static uiBlock *ipo_editmenu_mirrormenu(void *arg_unused)
-{
- uiBlock *block;
- short yco = 20, menuwidth = 120;
-
- block= uiNewBlock(&curarea->uiblocks, "ipo_editmenu_mirrormenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
- uiBlockSetButmFunc(block, do_ipo_editmenu_mirrormenu, NULL);
-
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Over Current Frame|Shift M, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Over Vertical Axis|Shift M, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Over Horizontal Axis|Shift M, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
-
- uiBlockSetDirection(block, UI_RIGHT);
- uiTextBoundsBlock(block, 60);
- return block;
-}
-
-static void do_ipo_editmenu_joinmenu(void *arg, int event)
-{
- switch(event) {
- case 1: /* All Selected */
- case 2: /* Selected Doubles */
- join_ipo(event);
- break;
- }
- allqueue(REDRAWVIEW3D, 0);
-}
-
-static uiBlock *ipo_editmenu_joinmenu(void *arg_unused)
-{
- uiBlock *block;
- short yco = 20, menuwidth = 120;
-
- block= uiNewBlock(&curarea->uiblocks, "ipo_editmenu_joinmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
- uiBlockSetButmFunc(block, do_ipo_editmenu_joinmenu, NULL);
-
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All Selected|Ctrl J, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Doubles|Ctrl J, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
-
- uiBlockSetDirection(block, UI_RIGHT);
- uiTextBoundsBlock(block, 60);
- return block;
-}
-
-static void do_ipo_editmenu_keymenu(void *arg, int event)
-{
- Key *key;
- KeyBlock *kb;
- Object *ob= OBACT;
-
- if(G.sipo->blocktype==ID_KE && totipo_edit==0 && totipo_sel==0) {
- key= ob_get_key((Object *)G.sipo->from);
- if(key==NULL) return;
-
- kb= BLI_findlink(&key->block, ob->shapenr-1);
- kb->type= 0;
- switch(event){
- case 0:
- kb->type= KEY_LINEAR;
- break;
- case 1:
- kb->type= KEY_CARDINAL;
- break;
- case 2:
- kb->type= KEY_BSPLINE;
- break;
- }
- }
-}
-
-static uiBlock *ipo_editmenu_keymenu(void *arg_unused)
-{
- uiBlock *block;
- short yco= 0, menuwidth=120;
-
- block= uiNewBlock(&curarea->uiblocks, "ipo_editmenu_keymenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
- uiBlockSetButmFunc(block, do_ipo_editmenu_keymenu, NULL);
-
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linear|T, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cardinal|T, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "BSpline|T, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
-
- uiBlockSetDirection(block, UI_RIGHT);
- uiTextBoundsBlock(block, 60);
-
- return block;
-
-}
-
-static void do_ipo_editmenu_handlemenu(void *arg, int event)
-{
- switch(event){
- case 0:
- sethandles_ipo(HD_AUTO);
- break;
- case 1:
- case 2:
- sethandles_ipo(HD_ALIGN);
- break;
- case 3:
- sethandles_ipo(HD_VECT);
- break;
- case 4:
- sethandles_ipo(HD_AUTO_ANIM);
- break;
- }
-}
-
-static uiBlock *ipo_editmenu_handlemenu(void *arg_unused)
-{
- uiBlock *block;
- short yco= 0, menuwidth=120;
-
- block= uiNewBlock(&curarea->uiblocks, "ipo_editmenu_handlemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
- uiBlockSetButmFunc(block, do_ipo_editmenu_handlemenu, NULL);
-
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Auto|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Auto Clamped|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Aligned|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Free|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vector|V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
-
- uiBlockSetDirection(block, UI_RIGHT);
- uiTextBoundsBlock(block, 60);
-
- return block;
-}
-
-static void do_ipo_editmenu_intpolmenu(void *arg, int event)
-{
- EditIpo *ei;
- int a;
-
- get_status_editipo();
-
- ei = G.sipo->editipo;
-
- switch(event)
- {
- case 0:
- for(a=0; a<G.sipo->totipo; a++, ei++) {
- if ISPOIN3(ei, flag & IPO_VISIBLE, flag & IPO_SELECT, icu) {
- ei->icu->ipo= IPO_CONST;
- }
- }
- break;
- case 1:
- for(a=0; a<G.sipo->totipo; a++, ei++) {
- if ISPOIN3(ei, flag & IPO_VISIBLE, flag & IPO_SELECT, icu) {
- ei->icu->ipo= IPO_LIN;
- }
- }
- break;
- case 2:
- for(a=0; a<G.sipo->totipo; a++, ei++) {
- if ISPOIN3(ei, flag & IPO_VISIBLE, flag & IPO_SELECT, icu) {
- ei->icu->ipo= IPO_BEZ;
- }
- }
- break;
- }
-
- scrarea_queue_winredraw(curarea);
-}
-
-static uiBlock *ipo_editmenu_intpolmenu(void *arg_unused)
-{
- uiBlock *block;
- short yco= 0, menuwidth=120;
-
- block= uiNewBlock(&curarea->uiblocks, "ipo_editmenu_intpolmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
- uiBlockSetButmFunc(block, do_ipo_editmenu_intpolmenu, NULL);
-
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Constant|T, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linear|T, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bezier|T, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
-
- uiBlockSetDirection(block, UI_RIGHT);
- uiTextBoundsBlock(block, 60);
-
- return block;
-}
-
-static void do_ipo_editmenu_extendmenu(void *arg, int event)
-{
- switch(event)
- {
- case 0:
- do_ipo_buttons(B_IPOCONT);
- break;
- case 1:
- do_ipo_buttons(B_IPOEXTRAP);
- break;
- case 2:
- do_ipo_buttons(B_IPOCYCLIC);
- break;
- case 3:
- do_ipo_buttons(B_IPOCYCLICX);
- break;
- }
-}
-
-static uiBlock *ipo_editmenu_extendmenu(void *arg_unused)
-{
- uiBlock *block;
- short yco= 0, menuwidth=120;
-
- block= uiNewBlock(&curarea->uiblocks, "ipo_editmenu_extendmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
- uiBlockSetButmFunc(block, do_ipo_editmenu_extendmenu, NULL);
-
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Constant", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extrapolation", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cyclic", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cyclic Extrapolation", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
-
- uiBlockSetDirection(block, UI_RIGHT);
- uiTextBoundsBlock(block, 60);
-
- return block;
-}
-
-
-static void do_ipo_editmenu(void *arg, int event)
-{
- switch(event)
- {
- case 0:
- del_ipo(1);
- break;
- case 1:
- add_duplicate_editipo();
- break;
- case 2:
- ipo_record();
- break;
- case 3:
- mainqenter(IKEY, 1);
- break;
- case 4 :
- add_blockhandler(curarea, IPO_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
- break;
- case 5:
- //join_ipo();
- break;
- case 6:
- /*IPO Editmode*/
- set_editflag_editipo();
- break;
- case 7:
- sethandles_ipo(HD_AUTO_ANIM);
- break;
- case 8: /* clean ipo */
- clean_ipo();
- break;
- case 9: /* smooth ipo */
- smooth_ipo();
- break;
- }
-}
-
-static uiBlock *ipo_editmenu(void *arg_unused)
-{
- uiBlock *block;
- EditIpo *ei;
- short yco= 0, menuwidth=120;
- int a,isedit = 0;
-
- get_status_editipo();
-
- ei = G.sipo->editipo;
-
- block= uiNewBlock(&curarea->uiblocks, "ipo_editmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
- uiBlockSetButmFunc(block, do_ipo_editmenu, NULL);
-
- uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
-
- uiDefIconTextBlockBut(block, ipo_editmenu_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
-
- uiDefIconTextBlockBut(block, ipo_editmenu_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
-
- uiDefIconTextBlockBut(block, ipo_editmenu_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, 120, 19, "");
-
- uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
-
- /*Look to see if any ipos are being edited, so there can be a check next to the menu option*/
- for(a=0; a<G.sipo->totipo; a++, ei++) {
- if(ei->icu) {
- if(ei->flag & IPO_VISIBLE) {
- if(totipo_edit && (ei->flag & IPO_EDIT)) {
- isedit = 1;
- break;
- }
- }
- }
- }
- if(isedit)
- uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Edit Selected|TAB", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
- else
- uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Edit Selected|TAB", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
-
- ei = get_active_editipo();
- uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
-
- if(ei && ei->icu && ei->icu->driver)
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert 1:1 Curve...|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
- else
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe...|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
-
- 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, 0, 1, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Record Mouse Movement|Ctrl R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clean IPO Curves|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Smooth IPO Curves|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
- uiDefIconTextBlockBut(block, ipo_editmenu_joinmenu, NULL, ICON_RIGHTARROW_THIN, "Join", 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, "Auto Clamped Handles|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
-
- if (!G.sipo->showkey){
- uiDefIconTextBlockBut(block, ipo_editmenu_extendmenu, NULL, ICON_RIGHTARROW_THIN, "Extend Mode", 0, yco-=20, 120, 19, "");
- uiDefIconTextBlockBut(block, ipo_editmenu_intpolmenu, NULL, ICON_RIGHTARROW_THIN, "Interpolation Mode ", 0, yco-=20, 120, 20, "");
- if(ei != NULL && (ei->flag & IPO_EDIT))
- uiDefIconTextBlockBut(block, ipo_editmenu_handlemenu, NULL, ICON_RIGHTARROW_THIN, "Handle Type", 0, yco-=20, 120, 19, "");
- if(G.sipo->blocktype==ID_KE && totipo_edit==0 && totipo_sel==0)
- uiDefIconTextBlockBut(block, ipo_editmenu_keymenu, NULL, ICON_RIGHTARROW_THIN, "Key Type", 0, yco-=20, 120, 19, "");
- }
-
-
- if(curarea->headertype==HEADERTOP) {
- uiBlockSetDirection(block, UI_DOWN);
- }
- else {
- uiBlockSetDirection(block, UI_TOP);
- uiBlockFlipOrder(block);
- }
-
- uiTextBoundsBlock(block, 50);
-
- return block;
-}
-
-static void do_ipo_viewmenu(void *arg, int event)
-{
- extern int play_anim(int mode);
-
- switch(event)
- {
- case 1:
- do_ipo_buttons(B_IPOHOME);
- break;
- case 2:
- ipo_toggle_showkey();
- scrarea_queue_headredraw(curarea);
- scrarea_queue_winredraw(curarea);
- allqueue(REDRAWVIEW3D, 0);
- break;
- case 3:
- move_to_frame();
- break;
- case 4:
- mainqenter(PADPLUSKEY,1);
- break;
- case 5:
- mainqenter(PADMINUS,1);
- break;
- case 6: /* Play Animation */
- play_anim(0);
- break;
- case 7: /* Play Animation in All */
- play_anim(1);
- break;
- case 8:
- add_blockhandler(curarea, IPO_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
- break;
- case 9:
- G.v2d->flag ^= V2D_VIEWLOCK;
- if(G.v2d->flag & V2D_VIEWLOCK)
- view2d_do_locks(curarea, 0);
- break;
- case 10: /* center view to current frame */
- center_currframe();
- scrarea_queue_winredraw(curarea);
- break;
- case 11:
- do_ipo_buttons(B_IPOVIEWCENTER);
- break;
- }
-}
-
-static uiBlock *ipo_viewmenu(void *arg_unused)
-{
- uiBlock *block;
- EditIpo *ei;
- short yco= 0, menuwidth=120;
-
- ei = get_active_editipo();
-
- block= uiNewBlock(&curarea->uiblocks, "ipo_viewmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
- uiBlockSetButmFunc(block, do_ipo_viewmenu, NULL);
-
- uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Channel Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
-
- if (G.sipo->showkey)
- uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Show Keys|K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
- else
- uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Show Keys|K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
-
- uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
-
- 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, "Zoom In|NumPad +", 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, "");
-
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Animation|Alt A", 0, yco-=20,
- menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Animation in 3D View|Alt Shift A", 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, "Center on Current Frame|Shift C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, "");
- uiDefIconTextBut(block, BUTM, 1, (G.v2d->flag & V2D_VIEWLOCK)?ICON_CHECKBOX_HLT:ICON_CHECKBOX_DEHLT,
- "Lock Time to Other Windows|", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
-
- if (ei != NULL && (ei->flag & IPO_EDIT)) {
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move Current Frame to Selected|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
- }
-
- uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
-
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View Selected|NumPad .", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
- 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,20, "");
- else uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 20, "");
-
- if(curarea->headertype==HEADERTOP) {
- uiBlockSetDirection(block, UI_DOWN);
- }
- else {
- uiBlockSetDirection(block, UI_TOP);
- uiBlockFlipOrder(block);
- }
-
- uiTextBoundsBlock(block, 50);
-
- return block;
-}
-
-static void do_ipo_selectmenu(void *arg, int event)
-{
- switch(event)
- {
- case 0:
- borderselect_ipo();
- break;
- case 1:
- swap_selectall_editipo();
- break;
- case 2:
- borderselect_markers();
- allqueue(REDRAWMARKER, 0);
- break;
- case 3:
- deselect_markers(1, 0);
- allqueue(REDRAWMARKER, 0);
- break;
- }
-}
-
-static uiBlock *ipo_selectmenu(void *arg_unused)
-{
- uiBlock *block;
- short yco= 0, menuwidth=120;
-
- block= uiNewBlock(&curarea->uiblocks, "ipo_selectmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
- uiBlockSetButmFunc(block, do_ipo_selectmenu, NULL);
-
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select Markers|Ctrl B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
-
- 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, 0, 1, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All Markers|Ctrl A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
-
- if(curarea->headertype==HEADERTOP) {
- uiBlockSetDirection(block, UI_DOWN);
- }
- else {
- uiBlockSetDirection(block, UI_TOP);
- uiBlockFlipOrder(block);
- }
-
- uiTextBoundsBlock(block, 50);
-
- return block;
-}
-
-static void do_ipo_markermenu(void *arg, int event)
-{
- switch(event)
- {
- case 1:
- add_marker(CFRA);
- break;
- case 2:
- duplicate_marker();
- break;
- case 3:
- remove_marker();
- break;
- case 4:
- rename_marker();
- break;
- case 5:
- transform_markers('g', 0);
- break;
- }
-
- allqueue(REDRAWMARKER, 0);
-}
-
-static uiBlock *ipo_markermenu(void *arg_unused)
-{
- uiBlock *block;
- short yco= 0, menuwidth=120;
-
- block= uiNewBlock(&curarea->uiblocks, "ipo_markermenu",
- UI_EMBOSSP, UI_HELV, curarea->headwin);
- uiBlockSetButmFunc(block, do_ipo_markermenu, NULL);
-
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Marker|M", 0, yco-=20,
- menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Marker|Ctrl Shift D", 0, yco-=20,
- menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Marker|X", 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, "(Re)Name Marker|Ctrl M", 0, yco-=20,
- menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move Marker|Ctrl G", 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 char *ipo_modeselect_pup(void)
-{
- Object *ob= OBACT;
- static char formatstring[] = "|%s %%x%d %%i%d";
- static char string[1024];
- char *str = string;
-
- str += sprintf(str, "Ipo type: %%t");
-
- if(ob)
- str += sprintf(str,formatstring, "Object",ID_OB, ICON_OBJECT);
-
- if(ob && give_current_material(ob, ob->actcol)) // check for material
- str += sprintf(str,formatstring, "Material",ID_MA, ICON_MATERIAL);
-
- if(G.scene->world)
- str += sprintf(str,formatstring, "World",ID_WO, ICON_WORLD);
-
- if(ob && ob->type==OB_CURVE)
- str += sprintf(str,formatstring, "Path",ID_CU, ICON_CURVE);
-
- if(ob && ob->type==OB_CAMERA)
- str += sprintf(str,formatstring, "Camera",ID_CA, ICON_CAMERA);
-
- if(ob && ob->type==OB_LAMP)
- str += sprintf(str,formatstring, "Lamp",ID_LA, ICON_LAMP);
-
- if(ob && give_current_texture(ob, ob->actcol))
- str += sprintf(str,formatstring, "Texture",ID_TE, ICON_TEXTURE);
-
- if(ob){
- if ELEM4(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_LATTICE)
- str += sprintf(str,formatstring, "Shape",ID_KE, ICON_EDIT);
- if (ob->type==OB_ARMATURE)
- str += sprintf(str,formatstring, "Pose",ID_PO, ICON_POSE_HLT);
-#ifdef __CON_IPO
- str += sprintf(str,formatstring, "Constraint",ID_CO, ICON_CONSTRAINT);
-#endif
- if(ob->fluidsimFlag & OB_FLUIDSIM_ENABLE) {
- str += sprintf(str,formatstring,"Fluidsim",ID_FLUIDSIM, ICON_WORLD);
- }
-
- if(ob->particlesystem.first) {
- str += sprintf(str,formatstring,"Particles",ID_PA, ICON_PARTICLES);
- }
- }
-
- str += sprintf(str,formatstring, "Sequence",ID_SEQ, ICON_SEQUENCE);
-
- return (string);
-}
-
-void do_ipo_buttons(short event)
-{
- EditIpo *ei;
- View2D *v2d;
- rcti rect;
- Object *ob= OBACT;
- float xmin, ymin, dx, dy;
- int a, val, first;
- short mval[2];
-
- if(curarea->win==0) return;
-
- switch(event) {
- case B_IPOVIEWCENTER:
- case B_IPOHOME:
-
- /* boundbox */
-
- v2d= &(G.sipo->v2d);
- first= 1;
-
- ei= G.sipo->editipo;
- if(ei==0) return;
-
- /* map ipo-points for drawing if scaled ipo */
- if (OBACT && OBACT->action && G.sipo->pin==0 && G.sipo->actname) {
- actstrip_map_ipo_keys(OBACT, G.sipo->ipo, 0, 0);
- }
-
- for(a=0; a<G.sipo->totipo; a++, ei++) {
- if ISPOIN(ei, flag & IPO_VISIBLE, icu) {
-
- boundbox_ipocurve(ei->icu, (event==B_IPOVIEWCENTER));
-
- if(first) {
- v2d->tot= ei->icu->totrct;
- first= 0;
- }
- else BLI_union_rctf(&(v2d->tot), &(ei->icu->totrct));
- }
- }
-
- /* undo mapping of ipo-points for drawing if scaled ipo */
- if (OBACT && OBACT->action && G.sipo->pin==0 && G.sipo->actname) {
- actstrip_map_ipo_keys(OBACT, G.sipo->ipo, 1, 0);
- }
-
- /* 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);
- view2d_do_locks(curarea, V2D_LOCK_COPY);
- if(G.sipo->ipo) G.sipo->ipo->cur = G.v2d->cur;
-
- scrarea_queue_winredraw(curarea);
- break;
- case B_IPOBORDER:
- val= get_border(&rect, 3);
- 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);
- view2d_do_locks(curarea, V2D_LOCK_COPY);
- 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:
- /* pass 1 to enforce a refresh when there's no Ipo */
- test_editipo(1);
- scrarea_queue_winredraw(curarea);
- scrarea_queue_headredraw(curarea);
- if(ob) ob->ipowin= G.sipo->blocktype;
- 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:
- view2dzoom(event);
- scrarea_queue_headredraw(curarea);
- break;
- case B_IPO_ACTION_OB:
- if(ob && G.sipo->from && G.sipo->pin==0) {
- if(ob->ipoflag & OB_ACTION_OB) { /* check if channel exists, and flip ipo link */
- bActionChannel *achan;
-
- if(has_ipo_code(ob->ipo, OB_LAY))
- notice("Note: Layer Ipo doesn't work in Actions");
-
- if(ob->action==NULL)
- ob->action= add_empty_action("ObAction");
- achan= verify_action_channel(ob->action, "Object");
- if(achan->ipo==NULL && ob->ipo) {
- achan->ipo= ob->ipo;
- ob->ipo= NULL;
- }
-
- /* object constraints */
- if(ob->constraintChannels.first) {
- free_constraint_channels(&achan->constraintChannels);
- achan->constraintChannels= ob->constraintChannels;
- ob->constraintChannels.first= ob->constraintChannels.last= NULL;
- }
- }
- else if(ob->action) {
- bActionChannel *achan= get_action_channel(ob->action, "Object");
- if(achan) {
-
- if(achan->ipo && ob->ipo==NULL) {
- ob->ipo= achan->ipo;
- achan->ipo= NULL;
- }
-
- /* object constraints */
- if(achan->constraintChannels.first) {
- free_constraint_channels(&ob->constraintChannels);
- ob->constraintChannels= achan->constraintChannels;
- achan->constraintChannels.first= achan->constraintChannels.last= NULL;
- }
- }
- }
- allqueue(REDRAWVIEW3D, 0);
- allqueue(REDRAWIPO, 0);
- allqueue(REDRAWACTION, 0);
- allqueue(REDRAWOOPS, 0);
- allqueue(REDRAWNLA, 0);
- }
- break;
-
- case B_IPO_ACTION_KEY:
- if(ob && G.sipo->from && G.sipo->pin==0) {
- Key *key= ob_get_key(ob);
- if(key) {
- if(ob->ipoflag & OB_ACTION_KEY) { /* check if channel exists, and flip ipo link */
- bActionChannel *achan;
-
- if(ob->action==NULL)
- ob->action= add_empty_action("ShapeAction");
- achan= verify_action_channel(ob->action, "Shape");
- if(achan->ipo==NULL && key->ipo) {
- achan->ipo= key->ipo;
- key->ipo= NULL;
- }
- }
- else if(ob->action) {
- bActionChannel *achan= get_action_channel(ob->action, "Shape");
- if(achan) {
- if(achan->ipo && key->ipo==NULL) {
- key->ipo= achan->ipo;
- achan->ipo= NULL;
- }
- }
- }
- allqueue(REDRAWVIEW3D, 0);
- allqueue(REDRAWIPO, 0);
- allqueue(REDRAWACTION, 0);
- allqueue(REDRAWOOPS, 0);
- allqueue(REDRAWNLA, 0);
- }
- }
- break;
- case B_IPOVIEWALL:
- /* set visible active */
- for(a=0, ei=G.sipo->editipo; a<G.sipo->totipo; a++, ei++) {
- if (ei->icu) ei->flag |= IPO_VISIBLE;
- else ei->flag &= ~IPO_VISIBLE;
- }
- break;
- case B_IPOREDRAW:
- DAG_object_flush_update(G.scene, ob, OB_RECALC);
- allqueue(REDRAWVIEW3D, 0);
- allqueue(REDRAWIPO, 0);
- break;
- }
-}
-
-void ipo_buttons(void)
-{
- Object *ob;
- EditIpo *ei;
- uiBlock *block;
- short xco,xmax;
- char naam[20];
- int icon=0, allow_pin= B_IPOPIN;
-
- sprintf(naam, "header %d", curarea->headwin);
- block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSS, UI_HELV, curarea->headwin);
-
- if(area_is_active_area(curarea)) uiBlockSetCol(block, TH_HEADER);
- else uiBlockSetCol(block, TH_HEADERDESEL);
-
- curarea->butspacetype= SPACE_IPO;
-
- xco = 8;
- uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, windowtype_pup(), xco,0,XIC+10,YIC, &(curarea->butspacetype), 1.0, SPACEICONMAX, 0, 0, "Displays Current Window Type. Click for menu of available types.");
- xco+= XIC+14;
-
- test_editipo(0); /* test if current editipo is OK, make_editipo sets v2d->cur */
-
- uiBlockSetEmboss(block, UI_EMBOSSN);
- if(curarea->flag & HEADER_NO_PULLDOWN) {
- uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, B_FLIPINFOMENU, ICON_DISCLOSURE_TRI_RIGHT,
- xco,2,XIC,YIC-2,
- &(curarea->flag), 0, 0, 0, 0, "Enables display of pulldown menus");
- } else {
- uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, B_FLIPINFOMENU, ICON_DISCLOSURE_TRI_DOWN,
- xco,2,XIC,YIC-2,
- &(curarea->flag), 0, 0, 0, 0, "Hides pulldown menus");
- }
- uiBlockSetEmboss(block, UI_EMBOSS);
- xco+=XIC;
-
- /* pull down menus */
- if((curarea->flag & HEADER_NO_PULLDOWN)==0) {
- uiBlockSetEmboss(block, UI_EMBOSSP);
-
- ei = get_active_editipo();
-
- xmax= GetButStringLength("View");
- uiDefPulldownBut(block,ipo_viewmenu, NULL, "View", xco, -2, xmax-3, 24, "");
- xco+=xmax;
-
- xmax= GetButStringLength("Select");
- uiDefPulldownBut(block,ipo_selectmenu, NULL, "Select", xco, -2, xmax-3, 24, "");
- xco+=xmax;
-
- xmax= GetButStringLength("Marker");
- uiDefPulldownBut(block,ipo_markermenu, NULL, "Marker", xco, -2, xmax-3, 24, "");
- xco+=xmax;
-
- if (G.sipo->showkey) {
- xmax= GetButStringLength("Key");
- uiDefPulldownBut(block,ipo_editmenu, NULL, "Key", xco, -2, xmax-3, 24, "");
- }
- else if(ei != NULL && (ei->flag & IPO_EDIT)) {
- xmax= GetButStringLength("Point");
- uiDefPulldownBut(block,ipo_editmenu, NULL, "Point", xco, -2, xmax-3, 24, "");
- }
- else {
- xmax= GetButStringLength("Curve");
- uiDefPulldownBut(block,ipo_editmenu, NULL, "Curve", xco, -2, xmax-3, 24, "");
- }
- xco+=xmax;
- }
-
- /* end of pull down menus */
- uiBlockSetEmboss(block, UI_EMBOSS);
-
- ob= OBACT;
-
- /* action switch option, only when active object is there and no pin */
- uiSetButLock(G.sipo->pin, "Can't change because of pinned data");
-
- /* define whether ipos are on Object or on action */
- if(ob) {
- static short fake1= 1;
-
- uiBlockBeginAlign(block);
-
- if(G.sipo->blocktype==ID_OB) {
- uiDefIconButBitS(block, TOG, OB_ACTION_OB, B_IPO_ACTION_OB, ICON_ACTION, xco,0,XIC,YIC, &(ob->ipoflag), 0, 0, 0, 0, "Sets Ipo to be included in an Action or not");
- xco+= XIC;
- }
- else if(G.sipo->blocktype==ID_KE) {
- uiDefIconButBitS(block, TOG, OB_ACTION_KEY, B_IPO_ACTION_KEY, ICON_ACTION, xco,0,XIC,YIC, &(ob->ipoflag), 0, 0, 0, 0, "Sets Ipo to be included in an Action or not");
- xco+= XIC;
- }
- else if(G.sipo->blocktype==ID_CO) {
-
- if(ob->pose==NULL)
- uiDefIconButBitS(block, TOG, OB_ACTION_OB, B_IPO_ACTION_OB, ICON_ACTION, xco,0,XIC,YIC, &(ob->ipoflag), 0, 0, 0, 0, "Sets Ipo to be included in an Action or not");
- else {
- bConstraint *con= get_active_constraint(ob);
- if(con)
- uiDefIconButBitS(block, TOGN, CONSTRAINT_OWN_IPO, B_IPOREDRAW, ICON_ACTION, xco,0,XIC,YIC, &con->flag, 0, 0, 0, 0,
- (con->flag & CONSTRAINT_OWN_IPO)?"Ipo is connected to Constraint itself":"Ipo is connected to Pose Action"
- );
- }
- xco+= XIC;
- }
- else if(G.sipo->blocktype==ID_PO) { /* only to indicate we have action ipos */
- uiSetButLock(1, "Pose Action Ipo cannot be switched");
- uiDefIconButS(block, TOG, 1, ICON_ACTION, xco,0,XIC,YIC, &fake1, 0, 0, 0, 0, "Ipo is connected to Pose Action");
- xco+= XIC;
- }
- uiClearButLock();
- }
-
- /* ipo muting */
- if (G.sipo->ipo) {
- uiDefIconButS(block, ICONTOG, 1, ICON_MUTE_IPO_OFF, xco,0,XIC,YIC, &(G.sipo->ipo->muteipo), 0, 0, 0, 0, "Mute IPO-block");
- xco += XIC;
- }
-
- /* mainmenu, only when data is there and no pin */
- uiSetButLock(G.sipo->pin, "Can't change because of pinned data");
-
- if (G.sipo->blocktype == ID_OB)
- icon = ICON_OBJECT;
- else if (G.sipo->blocktype == ID_MA)
- icon = ICON_MATERIAL;
- else if (G.sipo->blocktype == ID_WO)
- icon = ICON_WORLD;
- else if (G.sipo->blocktype == ID_CU)
- icon = ICON_ANIM;
- else if (G.sipo->blocktype == ID_CA)
- icon = ICON_CAMERA;
- else if (G.sipo->blocktype == ID_LA)
- icon = ICON_LAMP;
- else if (G.sipo->blocktype == ID_KE)
- icon = ICON_EDIT;
- else if (G.sipo->blocktype == ID_PO)
- icon = ICON_POSE_HLT;
- else if (G.sipo->blocktype == ID_CO)
- icon = ICON_CONSTRAINT;
- else if (G.sipo->blocktype == ID_SEQ)
- icon = ICON_SEQUENCE;
- else if(G.sipo->blocktype == ID_TE)
- icon = ICON_TEXTURE;
- else if(G.sipo->blocktype == ID_FLUIDSIM)
- icon = ICON_WORLD;
- else if(G.sipo->blocktype == ID_PA)
- icon = ICON_PARTICLES;
-
- uiDefIconTextButS(block, MENU, B_IPOMAIN, icon, ipo_modeselect_pup(), xco,0,100,20, &(G.sipo->blocktype), 0, 0, 0, 0, "Show IPO type");
-
- xco += 85;
-
- if(G.sipo->blocktype==ID_MA) {
- uiDefButS(block, NUM, B_IPOMAIN, "", xco+=XIC,0,XIC-4,YIC, &G.sipo->channel, 0.0, MAX_MTEX-1.0, 0, 0, "Channel Number of the active Material texture.");
- xco-= 4;
- }
- if(G.sipo->blocktype==ID_WO) {
- uiDefButS(block, NUM, B_IPOMAIN, "", xco+=XIC,0,XIC-4,YIC, &G.sipo->channel, 0.0, MAX_MTEX-1.0, 0, 0, "Channel Number of the active World texture.");
- xco-= 4;
- }
-
- if(G.sipo->blocktype==ID_LA) {
- uiDefButS(block, NUM, B_IPOMAIN, "", xco+=XIC,0,XIC-4,YIC, &G.sipo->channel, 0.0, MAX_MTEX-1.0, 0, 0, "Channel Number of the active Lamp texture. ");
- xco-= 4;
- }
-
- uiBlockEndAlign(block);
-
- uiClearButLock();
-
- /* if(G.sipo->blocktype==ID_SEQ)
- allow_pin= 0; */
- xco= std_libbuttons(block, (short)(xco+1.5*XIC), 0, allow_pin, &G.sipo->pin, B_IPOBROWSE, ID_IP,
- G.sipo->blocktype, (ID*)G.sipo->ipo, G.sipo->from, &(G.sipo->menunr), B_IPOALONE, B_IPOLOCAL, B_IPODELETE, 0, B_KEEPDATA);
-
- /* COPY PASTE */
- xco-= XIC/2;
- uiBlockBeginAlign(block);
- 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(G.sipo->ipo && G.sipo->ipo->id.lib, ERROR_LIBDATA_MESSAGE);
- 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(G.sipo->ipo && G.sipo->ipo->id.lib, ERROR_LIBDATA_MESSAGE);
- uiDefIconBut(block, BUT, B_IPOPASTE, ICON_PASTEDOWN, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Pastes the curves from the buffer");
- }
- uiBlockEndAlign(block);
- xco+=XIC/2;
-
- uiClearButLock();
-
- /* ZOOMBORDER */
- uiDefIconBut(block, BUT, B_IPOBORDER, ICON_BORDERMOVE, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms view to area");
-
- xco+=XIC/2;
-
- /* 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);
-}