DopeSheet/Graph Editors: Restored Copy/Paste operators
[blender-staging.git] / source / blender / editors / include / ED_keyframes_edit.h
1 /**
2  * $Id:
3  *
4  * ***** BEGIN GPL 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. 
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2008 Blender Foundation.
21  * All rights reserved.
22  *
23  * 
24  * Contributor(s): Joshua Leung
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  */
28
29 #ifndef ED_KEYFRAMES_EDIT_H
30 #define ED_KEYFRAMES_EDIT_H
31
32 struct bAnimContext;
33 struct FCurve;
34 struct BezTriple;
35 struct Scene;
36
37 /* ************************************************ */
38 /* Common Macros and Defines */
39
40 /* --------- BezTriple Selection ------------- */
41
42 #define BEZSELECTED(bezt) ((bezt->f2 & SELECT) || (bezt->f1 & SELECT) || (bezt->f3 & SELECT))
43
44 #define BEZ_SEL(bezt)           { (bezt)->f1 |=  SELECT; (bezt)->f2 |=  SELECT; (bezt)->f3 |=  SELECT; }
45 #define BEZ_DESEL(bezt)         { (bezt)->f1 &= ~SELECT; (bezt)->f2 &= ~SELECT; (bezt)->f3 &= ~SELECT; }
46 #define BEZ_INVSEL(bezt)        { (bezt)->f1 ^=  SELECT; (bezt)->f2 ^=  SELECT; (bezt)->f3 ^=  SELECT; }
47
48 /* --------- Tool Flags ------------ */
49
50 /* bezt validation */
51 typedef enum eEditKeyframes_Validate {
52         BEZT_OK_FRAME   = 1,
53         BEZT_OK_FRAMERANGE,
54         BEZT_OK_SELECTED,
55         BEZT_OK_VALUE,
56         BEZT_OK_VALUERANGE,
57         BEZT_OK_REGION,
58 } eEditKeyframes_Validate;
59
60 /* ------------ */
61
62 /* select tools */
63 typedef enum eEditKeyframes_Select {
64         SELECT_REPLACE  =       (1<<0),
65         SELECT_ADD              =       (1<<1),
66         SELECT_SUBTRACT =       (1<<2),
67         SELECT_INVERT   =       (1<<4),
68 } eEditKeyframes_Select;
69
70 /* snapping tools */
71 typedef enum eEditKeyframes_Snap {
72         SNAP_KEYS_CURFRAME = 1,
73         SNAP_KEYS_NEARFRAME,
74         SNAP_KEYS_NEARSEC,
75         SNAP_KEYS_NEARMARKER,
76         SNAP_KEYS_HORIZONTAL,
77 } eEditKeyframes_Snap;
78
79 /* mirroring tools */
80 typedef enum eEditKeyframes_Mirror {
81         MIRROR_KEYS_CURFRAME = 1,
82         MIRROR_KEYS_YAXIS,
83         MIRROR_KEYS_XAXIS,
84         MIRROR_KEYS_MARKER,
85 } eEditKeyframes_Mirror;
86
87 /* ************************************************ */
88 /* Non-Destuctive Editing API (keyframes_edit.c) */
89
90 /* --- Generic Properties for Bezier Edit Tools ----- */
91
92 typedef struct BeztEditData {
93         ListBase list;                          /* temp list for storing custom list of data to check */
94         struct Scene *scene;            /* pointer to current scene - many tools need access to cfra/etc.  */
95         void *data;                                     /* pointer to custom data - usually 'Object' but also 'rectf', but could be other types too */
96         float f1, f2;                           /* storage of times/values as 'decimals' */
97         int i1, i2;                                     /* storage of times/values/flags as 'whole' numbers */
98 } BeztEditData;
99
100 /* ------- Function Pointer Typedefs ---------------- */
101
102         /* callback function that refreshes the IPO curve after use */
103 typedef void (*FcuEditFunc)(struct FCurve *fcu);
104         /* callback function that operates on the given BezTriple */
105 typedef short (*BeztEditFunc)(BeztEditData *bed, struct BezTriple *bezt);
106
107 /* ---------------- Looping API --------------------- */
108
109 /* functions for looping over keyframes */
110 short ANIM_fcurve_keys_bezier_loop(BeztEditData *bed, struct FCurve *Fcu, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb);
111
112 /* functions for making sure all keyframes are in good order */
113 void ANIM_editkeyframes_refresh(struct bAnimContext *ac);
114
115 /* ----------- BezTriple Callback Getters ---------- */
116
117 /* accessories */
118 BeztEditFunc ANIM_editkeyframes_ok(short mode);
119
120 /* edit */
121 BeztEditFunc ANIM_editkeyframes_snap(short mode);
122 BeztEditFunc ANIM_editkeyframes_mirror(short mode);
123 BeztEditFunc ANIM_editkeyframes_select(short mode);
124 BeztEditFunc ANIM_editkeyframes_handles(short mode);
125 BeztEditFunc ANIM_editkeyframes_ipo(short mode);
126
127 /* ************************************************ */
128 /* Destructive Editing API (keyframes_general.c) */
129
130 void delete_fcurve_key(struct FCurve *fcu, int index, short do_recalc);
131 void delete_fcurve_keys(struct FCurve *fcu);
132 void duplicate_fcurve_keys(struct FCurve *fcu);
133
134 void clean_fcurve(struct FCurve *fcu, float thresh);
135 void smooth_fcurve(struct FCurve *fcu);
136
137 /* ----------- */
138
139 void free_anim_copybuf(void);
140 short copy_animedit_keys(struct bAnimContext *ac, ListBase *anim_data);
141 short paste_animedit_keys(struct bAnimContext *ac, ListBase *anim_data);
142
143 /* ************************************************ */
144
145 #endif /* ED_KEYFRAMES_EDIT_H */