RNA
[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
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_constraint_types.h"
34 #include "DNA_scene_types.h"
35
36
37 #ifdef RNA_RUNTIME
38
39 #else
40
41 void rna_def_action_channel(BlenderRNA *brna)
42 {
43         StructRNA *srna;
44         PropertyRNA *prop;
45
46         srna= RNA_def_struct(brna, "ActionChannel", NULL);
47         RNA_def_struct_sdna(srna, "bActionChannel");
48         RNA_def_struct_ui_text(srna, "Action Channel", "A channel for one object or bone's Ipos in an Action.");
49
50         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
51         RNA_def_property_ui_text(prop, "Name", "");
52         RNA_def_struct_name_property(srna, prop);
53
54         prop= RNA_def_property(srna, "group", PROP_POINTER, PROP_NONE);
55         RNA_def_property_pointer_sdna(prop, NULL, "grp");
56         RNA_def_property_struct_type(prop, "ActionGroup");
57         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
58         RNA_def_property_ui_text(prop, "Group", "Action Group that this Action Channel belongs to.");
59
60         prop= RNA_def_property(srna, "ipo", PROP_POINTER, PROP_NEVER_NULL);
61         RNA_def_property_struct_type(prop, "Ipo");
62         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
63         RNA_def_property_ui_text(prop, "Ipo", "Ipo block this Action Channel uses.");   
64
65         /* constraint channel rna not yet implemented */
66         /*prop= RNA_def_property(srna, "constraint_channels", PROP_COLLECTION, PROP_NONE);
67         RNA_def_property_collection_sdna(prop, NULL, "ConstraintChannel", NULL);
68         RNA_def_property_struct_type(prop, "ConstraintChannel");
69         RNA_def_property_ui_text(prop, "Constraint Channels", "Ipos of Constraints attached to this object or bone."); */
70
71         prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
72         RNA_def_property_boolean_sdna(prop, NULL, "flag", ACHAN_SELECTED);
73         RNA_def_property_ui_text(prop, "Selected", "Action Channel is selected.");
74
75         prop= RNA_def_property(srna, "highlighted", PROP_BOOLEAN, PROP_NONE);
76         RNA_def_property_boolean_sdna(prop, NULL, "flag", ACHAN_HILIGHTED);
77         RNA_def_property_ui_text(prop, "Highlighted", "Action Channel is highlighted.");
78
79         prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
80         RNA_def_property_boolean_sdna(prop, NULL, "flag", ACHAN_HIDDEN);
81         RNA_def_property_ui_text(prop, "Hidden", "Action Channel is hidden.");
82
83         prop= RNA_def_property(srna, "protected", PROP_BOOLEAN, PROP_NONE);
84         RNA_def_property_boolean_sdna(prop, NULL, "flag", ACHAN_PROTECTED);
85         RNA_def_property_ui_text(prop, "Protected", "Action Channel is protected.");
86
87         prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
88         RNA_def_property_boolean_sdna(prop, NULL, "flag", ACHAN_EXPANDED);
89         RNA_def_property_ui_text(prop, "Expanded", "Action Channel is expanded.");
90
91         prop= RNA_def_property(srna, "show_ipo", PROP_BOOLEAN, PROP_NONE);
92         RNA_def_property_boolean_sdna(prop, NULL, "flag", ACHAN_SHOWIPO);
93         RNA_def_property_ui_text(prop, "Show Ipo", "Action Channel's Ipos are visible.");
94
95         prop= RNA_def_property(srna, "show_constraints", PROP_BOOLEAN, PROP_NONE);
96         RNA_def_property_boolean_sdna(prop, NULL, "flag", ACHAN_SHOWCONS);
97         RNA_def_property_ui_text(prop, "Show Constraints", "Action Channel's constraints are visible.");
98 }
99
100 void rna_def_action_group(BlenderRNA *brna)
101 {
102         StructRNA *srna;
103         PropertyRNA *prop;
104
105         srna= RNA_def_struct(brna, "ActionGroup", NULL);
106         RNA_def_struct_sdna(srna, "bActionGroup");
107         RNA_def_struct_ui_text(srna, "Action Group", "Groups of Actions Channels.");
108
109         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
110         RNA_def_property_ui_text(prop, "Name", "");
111         RNA_def_struct_name_property(srna, prop);
112
113         /* dna warns not to treat the Action Channel listbase in the Action Group struct like a
114            normal listbase. I'll leave this here but comment out, for Joshua to review. He can 
115            probably shed some more light on why this is */
116         /*prop= RNA_def_property(srna, "channels", PROP_COLLECTION, PROP_NONE);
117         RNA_def_property_collection_sdna(prop, NULL, "channels", NULL);
118         RNA_def_property_struct_type(prop, "ActionChannel");
119         RNA_def_property_ui_text(prop, "Channels", "Action channels in this action.");*/
120
121         prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
122         RNA_def_property_boolean_sdna(prop, NULL, "flag", AGRP_SELECTED);
123         RNA_def_property_ui_text(prop, "Selected", "Action Group is selected.");
124
125         prop= RNA_def_property(srna, "protected", PROP_BOOLEAN, PROP_NONE);
126         RNA_def_property_boolean_sdna(prop, NULL, "flag", AGRP_PROTECTED);
127         RNA_def_property_ui_text(prop, "Protected", "Action Group is protected.");
128
129         prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
130         RNA_def_property_boolean_sdna(prop, NULL, "flag", AGRP_EXPANDED);
131         RNA_def_property_ui_text(prop, "Expanded", "Action Group is expanded.");
132
133         prop= RNA_def_property(srna, "custom_color", PROP_INT, PROP_NONE);
134         RNA_def_property_int_sdna(prop, NULL, "customCol");
135         RNA_def_property_ui_text(prop, "Custom Color", "Index of custom color set.");
136 }
137
138 void RNA_def_action(BlenderRNA *brna)
139 {
140         StructRNA *srna;
141         PropertyRNA *prop;
142
143         rna_def_action_channel(brna);
144         rna_def_action_group(brna);
145
146         srna= RNA_def_struct(brna, "Action", "ID");
147         RNA_def_struct_sdna(srna, "bAction");
148         RNA_def_struct_ui_text(srna, "Action", "A collection of Ipos for animation.");
149
150         prop= RNA_def_property(srna, "channels", PROP_COLLECTION, PROP_NONE);
151         RNA_def_property_collection_sdna(prop, NULL, "chanbase", NULL);
152         RNA_def_property_struct_type(prop, "ActionChannel");
153         RNA_def_property_ui_text(prop, "Channels", "The individual animation channels that make up the Action.");
154
155         prop= RNA_def_property(srna, "groups", PROP_COLLECTION, PROP_NONE);
156         RNA_def_property_collection_sdna(prop, NULL, "groups", NULL);
157         RNA_def_property_struct_type(prop, "ActionGroup");
158         RNA_def_property_ui_text(prop, "Groups", "Convenient groupings of Action Channels.");
159
160         prop= RNA_def_property(srna, "pose_markers", PROP_COLLECTION, PROP_NONE);
161         RNA_def_property_collection_sdna(prop, NULL, "markers", NULL);
162         RNA_def_property_struct_type(prop, "UnknownType"); /* implement when timeline rna is wrapped */
163         RNA_def_property_ui_text(prop, "Pose Markers", "Markers specific to this Action, for labeling poses.");
164 }
165
166 #endif