== Action/IPO Editors - Code Cleanup ==
[blender-staging.git] / source / blender / include / BIF_editaction.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  */
32
33 #ifndef BIF_EDITACTION_H
34 #define BIF_EDITACTION_H
35
36 /* some interface related sizes*/
37 #define CHANNELHEIGHT   16
38 #define CHANNELSKIP             2
39 #define NAMEWIDTH       164
40 #define SLIDERWIDTH     125
41 #define ACTWIDTH                (G.saction->actwidth)
42
43 /* Some types for easier type-testing */
44 #define ACTTYPE_NONE            0
45 #define ACTTYPE_ACHAN           1
46 #define ACTTYPE_CONCHAN         2
47 #define ACTTYPE_ICU                     3
48 #define ACTTYPE_FILLIPO         4
49 #define ACTTYPE_FILLCON         5
50 #define ACTTYPE_IPO                     6
51 #define ACTTYPE_SHAPEKEY        7
52
53 /* Macros for easier/more consistant state testing */
54 #define VISIBLE_ACHAN(achan) ((achan->flag & ACHAN_HIDDEN)==0)
55 #define EDITABLE_ACHAN(achan) ((VISIBLE_ACHAN(achan)) && ((achan->flag & ACHAN_PROTECTED)==0))
56 #define EXPANDED_ACHAN(achan) ((VISIBLE_ACHAN(achan)) && (achan->flag & ACHAN_EXPANDED))
57 #define SEL_ACHAN(achan) ((achan->flag & ACHAN_SELECTED) || (achan->flag & ACHAN_HILIGHTED))
58 #define FILTER_IPO_ACHAN(achan) ((achan->flag & ACHAN_SHOWIPO))
59 #define FILTER_CON_ACHAN(achan) ((achan->flag & ACHAN_SHOWCONS))
60
61 #define EDITABLE_CONCHAN(conchan) ((conchan->flag & CONSTRAINT_CHANNEL_PROTECTED)==0)
62 #define SEL_CONCHAN(conchan) (conchan->flag & CONSTRAINT_CHANNEL_SELECT)
63
64 #define EDITABLE_ICU(icu) ((icu->flag & IPO_PROTECT)==0)
65 #define SEL_ICU(icu) (icu->flag & IPO_SELECT)
66
67 #define NLA_ACTION_SCALED (G.saction->pin==0 && OBACT)
68 #define NLA_IPO_SCALED (OBACT && OBACT->action && G.sipo->pin==0 && G.sipo->actname)
69
70 /* constants for setting ipo-interpolation type */
71 #define SET_IPO_POPUP    0
72 #define SET_IPO_CONSTANT 1
73 #define SET_IPO_LINEAR   2
74 #define SET_IPO_BEZIER   3
75
76 /* constants for setting ipo-extrapolation type */
77 #define SET_EXTEND_POPUP                10
78 #define SET_EXTEND_CONSTANT             11
79 #define SET_EXTEND_EXTRAPOLATION        12
80 #define SET_EXTEND_CYCLIC               13
81 #define SET_EXTEND_CYCLICEXTRAPOLATION   14
82
83 struct bAction;
84 struct bActionChannel;
85 struct bPoseChannel;
86 struct Object;
87 struct Ipo;
88 struct BWinEvent;
89 struct Key;
90 struct ListBase;
91
92 /* Key operations */
93 void transform_action_keys(int mode, int dummy);
94 void duplicate_action_keys(void);
95 void snap_action_keys(short mode);
96 void mirror_action_keys(short mode);
97 void insertkey_action(void);
98 void delete_action_keys(void);
99 void delete_action_channels(void);
100 void clean_action(void);
101
102 /* Column/Channel Key select */
103 void column_select_action_keys(int mode);
104 void selectall_action_keys(short mval[], short mode, short selectmode);
105 void markers_selectkeys_between(void);
106
107 /* channel/strip operations */
108 void up_sel_action(void);
109 void down_sel_action(void);
110 void top_sel_action(void);
111 void bottom_sel_action(void);
112
113 /* IPO/Handle Types  */
114 void sethandles_action_keys(int code);
115 void action_set_ipo_flags(int mode);
116
117 /* Select */
118 void borderselect_action(void);
119 void deselect_action_keys(short test, short sel);
120 void deselect_action_channels(short test);
121 void deselect_actionchannels(struct bAction *act, short test);
122 int select_channel(struct bAction *act, struct bActionChannel *achan, int selectmode);
123 void select_actionchannel_by_name (struct bAction *act, char *name, int select);
124
125 /* */
126 struct Key *get_action_mesh_key(void);
127 int get_nearest_key_num(struct Key *key, short *mval, float *x);
128 void *get_nearest_act_channel(short mval[], short *ret_type);
129
130 /* Action */
131 struct bActionChannel *get_hilighted_action_channel(struct bAction* action);
132 struct bAction *add_empty_action(char *name);
133 struct bAction *ob_get_action(struct Object *ob);
134
135 void actdata_filter(ListBase *act_data, int filter_mode, void *data, short datatype);
136 void *get_action_context(short *datatype);
137
138 void remake_action_ipos(struct bAction *act);
139
140 /* event handling */
141 void winqreadactionspace(struct ScrArea *sa, void *spacedata, struct BWinEvent *evt);
142
143 #endif
144