0568652488dbf585385c326f27ba4a10fcb90519
[blender.git] / source / blender / makesrna / intern / rna_action.c
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  * Contributor(s): Blender Foundation (2008), Roland Hess, Joshua Leung
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #include <stdlib.h>
26
27 #include "RNA_define.h"
28 #include "RNA_types.h"
29
30 #include "rna_internal.h"
31
32 #include "DNA_action_types.h"
33 #include "DNA_scene_types.h"
34
35 #include "MEM_guardedalloc.h"
36
37 #include "WM_types.h"
38
39
40 #ifdef RNA_RUNTIME
41
42 #else
43
44 static void rna_def_dopesheet(BlenderRNA *brna)
45 {
46         StructRNA *srna;
47         PropertyRNA *prop;
48
49         srna= RNA_def_struct(brna, "DopeSheet", NULL);
50         RNA_def_struct_sdna(srna, "bDopeSheet");
51         RNA_def_struct_ui_text(srna, "DopeSheet", "Storage for Dopesheet/Grease-Pencil Editor data.");
52
53         prop= RNA_def_property(srna, "source", PROP_POINTER, PROP_NONE);
54         RNA_def_property_struct_type(prop, "ID");
55         RNA_def_property_ui_text(prop, "Source", "ID-Block representing source data, currently ID_SCE (for Dopesheet), and ID_SC (for Grease Pencil).");
56
57         prop= RNA_def_property(srna, "only_selected", PROP_BOOLEAN, PROP_NONE);
58         RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_ONLYSEL);
59         RNA_def_property_ui_text(prop, "Only Selected", "Only include channels relating to selected Objects.");
60         RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, 0);
61         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
62
63         prop= RNA_def_property(srna, "only_nla", PROP_BOOLEAN, PROP_NONE);
64         RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_ONLYNLA);
65         RNA_def_property_ui_text(prop, "Only NLA", "Only include NLA data from Animation data.");
66         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
67
68         prop= RNA_def_property(srna, "use_filter", PROP_BOOLEAN, PROP_NONE);
69         RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_SELEDIT);
70         RNA_def_property_ui_text(prop, "Use Filter", "Indicates if filtering options must be taken into account.");
71         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
72
73         prop= RNA_def_property(srna, "display_summary", PROP_BOOLEAN, PROP_NONE);
74         RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_SUMMARY);
75         RNA_def_property_ui_text(prop, "Display Summary", "Display an additional 'summary' line.");
76         RNA_def_property_ui_icon(prop, ICON_BORDERMOVE, 0);
77         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
78
79         prop= RNA_def_property(srna, "display_shapekeys", PROP_BOOLEAN, PROP_NONE);
80         RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOSHAPEKEYS);
81         RNA_def_property_ui_text(prop, "Display Shapekeys", "Include visualization of Shapekey related Animation data.");
82         RNA_def_property_ui_icon(prop, ICON_SHAPEKEY_DATA, 0);
83         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
84
85         prop= RNA_def_property(srna, "display_camera", PROP_BOOLEAN, PROP_NONE);
86         RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOCAM);
87         RNA_def_property_ui_text(prop, "Display Camera", "Include visualization of Camera related Animation data.");
88         RNA_def_property_ui_icon(prop, ICON_CAMERA_DATA, 0);
89         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
90
91         prop= RNA_def_property(srna, "display_material", PROP_BOOLEAN, PROP_NONE);
92         RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOMAT);
93         RNA_def_property_ui_text(prop, "Display Material", "Include visualization of Material related Animation data.");
94         RNA_def_property_ui_icon(prop, ICON_MATERIAL_DATA, 0);
95         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
96
97         prop= RNA_def_property(srna, "display_lamp", PROP_BOOLEAN, PROP_NONE);
98         RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOLAM);
99         RNA_def_property_ui_text(prop, "Display Lamp", "Include visualization of Lamp related Animation data.");
100         RNA_def_property_ui_icon(prop, ICON_LAMP_DATA, 0);
101         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
102
103         prop= RNA_def_property(srna, "display_curve", PROP_BOOLEAN, PROP_NONE);
104         RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOCUR);
105         RNA_def_property_ui_text(prop, "Display Curve", "Include visualization of Curve related Animation data.");
106         RNA_def_property_ui_icon(prop, ICON_CURVE_DATA, 0);
107         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
108
109         prop= RNA_def_property(srna, "display_world", PROP_BOOLEAN, PROP_NONE);
110         RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOWOR);
111         RNA_def_property_ui_text(prop, "Display World", "Include visualization of World related Animation data.");
112         RNA_def_property_ui_icon(prop, ICON_WORLD_DATA, 0);
113         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
114
115         prop= RNA_def_property(srna, "display_scene", PROP_BOOLEAN, PROP_NONE);
116         RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOSCE);
117         RNA_def_property_ui_text(prop, "Display Scene", "Include visualization of Scene related Animation data.");
118         RNA_def_property_ui_icon(prop, ICON_SCENE_DATA, 0);
119         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
120
121         prop= RNA_def_property(srna, "display_particle", PROP_BOOLEAN, PROP_NONE);
122         RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOPART);
123         RNA_def_property_ui_text(prop, "Display Particle", "Include visualization of Particle related Animation data.");
124         RNA_def_property_ui_icon(prop, ICON_PARTICLE_DATA, 0);
125         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
126
127         prop= RNA_def_property(srna, "display_metaball", PROP_BOOLEAN, PROP_NONE);
128         RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOMBA);
129         RNA_def_property_ui_text(prop, "Display Metaball", "Include visualization of Metaball related Animation data.");
130         RNA_def_property_ui_icon(prop, ICON_META_DATA, 0);
131         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
132
133         prop= RNA_def_property(srna, "display_armature", PROP_BOOLEAN, PROP_NONE);
134         RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOARM);
135         RNA_def_property_ui_text(prop, "Display Armature", "Include visualization of Armature related Animation data.");
136         RNA_def_property_ui_icon(prop, ICON_ARMATURE_DATA, 0);
137         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
138
139         prop= RNA_def_property(srna, "display_node", PROP_BOOLEAN, PROP_NONE);
140         RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NONTREE);
141         RNA_def_property_ui_text(prop, "Display Node", "Include visualization of Node related Animation data.");
142         RNA_def_property_ui_icon(prop, ICON_NODETREE, 0);
143         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
144
145         prop= RNA_def_property(srna, "include_missing_nla", PROP_BOOLEAN, PROP_NONE);
146         RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NLA_NOACT);
147         RNA_def_property_ui_text(prop, "Include Missing NLA", "Include Animation Data blocks with no NLA data. (NLA Editor only)");
148         RNA_def_property_ui_icon(prop, ICON_ACTION, 0);
149         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
150
151         prop= RNA_def_property(srna, "collapse_summary", PROP_BOOLEAN, PROP_NONE);
152         RNA_def_property_boolean_sdna(prop, NULL, "flag", ADS_FLAG_SUMMARY_COLLAPSED);
153         RNA_def_property_ui_text(prop, "Collapse Summary", "Collapse summary when shown, so all other channels get hidden. (DopeSheet Window Editors Only)");
154         RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
155 }
156
157 static void rna_def_action_group(BlenderRNA *brna)
158 {
159         StructRNA *srna;
160         PropertyRNA *prop;
161         
162         srna= RNA_def_struct(brna, "ActionGroup", NULL);
163         RNA_def_struct_sdna(srna, "bActionGroup");
164         RNA_def_struct_ui_text(srna, "Action Group", "Groups of F-Curves.");
165         
166         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
167         RNA_def_property_ui_text(prop, "Name", "");
168         RNA_def_struct_name_property(srna, prop);
169         
170         /* dna warns not to treat the Action Channel listbase in the Action Group struct like a
171            normal listbase. I'll leave this here but comment out, for Joshua to review. He can 
172            probably shed some more light on why this is */
173         /*prop= RNA_def_property(srna, "channels", PROP_COLLECTION, PROP_NONE);
174         RNA_def_property_collection_sdna(prop, NULL, "channels", NULL);
175         RNA_def_property_struct_type(prop, "FCurve");
176         RNA_def_property_ui_text(prop, "Channels", "F-Curves in this group.");*/
177         
178         prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
179         RNA_def_property_boolean_sdna(prop, NULL, "flag", AGRP_SELECTED);
180         RNA_def_property_ui_text(prop, "Selected", "Action Group is selected.");
181         
182         prop= RNA_def_property(srna, "locked", PROP_BOOLEAN, PROP_NONE);
183         RNA_def_property_boolean_sdna(prop, NULL, "flag", AGRP_PROTECTED);
184         RNA_def_property_ui_text(prop, "Locked", "Action Group is locked.");
185         
186         prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
187         RNA_def_property_boolean_sdna(prop, NULL, "flag", AGRP_EXPANDED);
188         RNA_def_property_ui_text(prop, "Expanded", "Action Group is expanded.");
189         
190         prop= RNA_def_property(srna, "custom_color", PROP_INT, PROP_NONE);
191         RNA_def_property_int_sdna(prop, NULL, "customCol");
192         RNA_def_property_ui_text(prop, "Custom Color", "Index of custom color set.");
193 }
194
195 static void rna_def_action(BlenderRNA *brna)
196 {
197         StructRNA *srna;
198         PropertyRNA *prop;
199
200         srna= RNA_def_struct(brna, "Action", "ID");
201         RNA_def_struct_sdna(srna, "bAction");
202         RNA_def_struct_ui_text(srna, "Action", "A collection of F-Curves for animation.");
203         RNA_def_struct_ui_icon(srna, ICON_ACTION);
204
205         prop= RNA_def_property(srna, "fcurves", PROP_COLLECTION, PROP_NONE);
206         RNA_def_property_collection_sdna(prop, NULL, "curves", NULL);
207         RNA_def_property_struct_type(prop, "FCurve");
208         RNA_def_property_ui_text(prop, "F-Curves", "The individual F-Curves that make up the Action.");
209
210         prop= RNA_def_property(srna, "groups", PROP_COLLECTION, PROP_NONE);
211         RNA_def_property_collection_sdna(prop, NULL, "groups", NULL);
212         RNA_def_property_struct_type(prop, "ActionGroup");
213         RNA_def_property_ui_text(prop, "Groups", "Convenient groupings of F-Curves.");
214
215         prop= RNA_def_property(srna, "pose_markers", PROP_COLLECTION, PROP_NONE);
216         RNA_def_property_collection_sdna(prop, NULL, "markers", NULL);
217         RNA_def_property_struct_type(prop, "TimelineMarker");
218         RNA_def_property_ui_text(prop, "Pose Markers", "Markers specific to this Action, for labeling poses.");
219
220         RNA_api_action(srna);
221 }
222
223 /* --------- */
224
225 void RNA_def_action(BlenderRNA *brna)
226 {
227         rna_def_action(brna);
228         rna_def_action_group(brna);
229         rna_def_dopesheet(brna);
230 }
231
232
233 #endif