RNA
[blender.git] / source / blender / makesrna / intern / rna_internal_types.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  * Contributor(s): Blender Foundation (2008).
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #ifndef RNA_INTERNAL_TYPES
26 #define RNA_INTERNAL_TYPES
27
28 #include "DNA_listBase.h"
29
30 struct BlenderRNA;
31 struct StructRNA;
32 struct PropertyRNA;
33 struct PointerRNA;
34 struct CollectionPropertyIterator;
35 struct bContext;
36
37 /* Function Callbacks */
38
39 typedef void (*PropNotifyFunc)(struct bContext *C, struct PointerRNA *ptr);
40 typedef int (*PropBooleanGetFunc)(struct PointerRNA *ptr);
41 typedef void (*PropBooleanSetFunc)(struct PointerRNA *ptr, int value);
42 typedef int (*PropBooleanArrayGetFunc)(struct PointerRNA *ptr, int index);
43 typedef void (*PropBooleanArraySetFunc)(struct PointerRNA *ptr, int index, int value);
44 typedef int (*PropIntGetFunc)(struct PointerRNA *ptr);
45 typedef void (*PropIntSetFunc)(struct PointerRNA *ptr, int value);
46 typedef int (*PropIntArrayGetFunc)(struct PointerRNA *ptr, int index);
47 typedef void (*PropIntArraySetFunc)(struct PointerRNA *ptr, int index, int value);
48 typedef float (*PropFloatGetFunc)(struct PointerRNA *ptr);
49 typedef void (*PropFloatSetFunc)(struct PointerRNA *ptr, float value);
50 typedef float (*PropFloatArrayGetFunc)(struct PointerRNA *ptr, int index);
51 typedef void (*PropFloatArraySetFunc)(struct PointerRNA *ptr, int index, float value);
52 typedef void (*PropStringGetFunc)(struct PointerRNA *ptr, char *value);
53 typedef int (*PropStringLengthFunc)(struct PointerRNA *ptr);
54 typedef void (*PropStringSetFunc)(struct PointerRNA *ptr, const char *value);
55 typedef int (*PropEnumGetFunc)(struct PointerRNA *ptr);
56 typedef void (*PropEnumSetFunc)(struct PointerRNA *ptr, int value);
57 typedef void* (*PropPointerGetFunc)(struct PointerRNA *ptr);
58 typedef void (*PropPointerSetFunc)(struct PointerRNA *ptr, void *value);
59 typedef struct StructRNA* (*PropPointerTypeFunc)(struct PointerRNA *ptr);
60 typedef void (*PropCollectionBeginFunc)(struct CollectionPropertyIterator *iter, struct PointerRNA *ptr);
61 typedef void (*PropCollectionNextFunc)(struct CollectionPropertyIterator *iter);
62 typedef void (*PropCollectionEndFunc)(struct CollectionPropertyIterator *iter);
63 typedef void* (*PropCollectionGetFunc)(struct CollectionPropertyIterator *iter);
64 typedef struct StructRNA* (*PropCollectionTypeFunc)(struct CollectionPropertyIterator *iter);
65 typedef int (*PropCollectionLengthFunc)(struct PointerRNA *ptr);
66 typedef void* (*PropCollectionLookupIntFunc)(struct PointerRNA *ptr, int key, struct StructRNA **type);
67 typedef void* (*PropCollectionLookupStringFunc)(struct PointerRNA *ptr, const char *key, struct StructRNA **type);
68
69 struct PropertyRNA {
70         struct PropertyRNA *next, *prev;
71
72         /* magic bytes to distinguish with IDProperty */
73         int magic;
74
75         /* unique identifier */
76         const char *identifier;
77         /* various options */
78         int flag;
79
80         /* user readable name */
81         const char *name;
82         /* single line description, displayed in the tooltip for example */
83         const char *description;
84
85         /* property type as it appears to the outside */
86         PropertyType type;
87         /* subtype, 'interpretation' of the property */
88         PropertySubType subtype;
89         /* if an array this is > 0, specifying the length */
90         unsigned int arraylength;
91         
92         /* callback for notifys on change */
93         PropNotifyFunc notify;
94 };
95
96 /* Property Types */
97
98 typedef struct BooleanPropertyRNA {
99         PropertyRNA property;
100
101         PropBooleanGetFunc get;
102         PropBooleanSetFunc set;
103
104         PropBooleanArrayGetFunc getarray;
105         PropBooleanArraySetFunc setarray;
106
107         int defaultvalue;
108         const int *defaultarray;
109 } BooleanPropertyRNA;
110
111 typedef struct IntPropertyRNA {
112         PropertyRNA property;
113
114         PropIntGetFunc get;
115         PropIntSetFunc set;
116
117         PropIntArrayGetFunc getarray;
118         PropIntArraySetFunc setarray;
119
120         int softmin, softmax;
121         int hardmin, hardmax;
122         int step;
123
124         int defaultvalue;
125         const int *defaultarray;
126 } IntPropertyRNA;
127
128 typedef struct FloatPropertyRNA {
129         PropertyRNA property;
130
131         PropFloatGetFunc get;
132         PropFloatSetFunc set;
133
134         PropFloatArrayGetFunc getarray;
135         PropFloatArraySetFunc setarray;
136
137         float softmin, softmax;
138         float hardmin, hardmax;
139         float step;
140         int precision;
141
142         float defaultvalue;
143         const float *defaultarray;
144 } FloatPropertyRNA;
145
146 typedef struct StringPropertyRNA {
147         PropertyRNA property;
148
149         PropStringGetFunc get;
150         PropStringLengthFunc length;
151         PropStringSetFunc set;
152
153         int maxlength;  /* includes string terminator! */
154
155         const char *defaultvalue;
156 } StringPropertyRNA;
157
158 typedef struct EnumPropertyRNA {
159         PropertyRNA property;
160
161         PropEnumGetFunc get;
162         PropEnumSetFunc set;
163
164         const EnumPropertyItem *item;
165         int totitem;
166
167         int defaultvalue;
168 } EnumPropertyRNA;
169
170 typedef struct PointerPropertyRNA {
171         PropertyRNA property;
172
173         PropPointerGetFunc get;
174         PropPointerSetFunc set;
175         PropPointerTypeFunc type;       /* optional */
176
177         struct StructRNA *structtype;
178 } PointerPropertyRNA;
179
180 typedef struct CollectionPropertyRNA {
181         PropertyRNA property;
182
183         PropCollectionBeginFunc begin;
184         PropCollectionNextFunc next;
185         PropCollectionEndFunc end;                                              /* optional */
186         PropCollectionGetFunc get;
187         PropCollectionTypeFunc type;                                    /* optional */
188         PropCollectionLengthFunc length;                                /* optional */
189         PropCollectionLookupIntFunc lookupint;                  /* optional */
190         PropCollectionLookupStringFunc lookupstring;    /* optional */
191
192         struct StructRNA *structtype;
193 } CollectionPropertyRNA;
194
195 struct StructRNA {
196         struct StructRNA *next, *prev;
197
198         /* unique identifier */
199         const char *identifier;
200         /* various options */
201         int flag;
202
203         /* user readable name */
204         const char *name;
205
206         /* property that defines the name */
207         PropertyRNA *nameproperty;
208
209         /* property to iterate over properties */
210         PropertyRNA *iteratorproperty;
211
212         /* properties of this struct */
213         ListBase properties; 
214 };
215
216 /* Blender RNA
217  *
218  * Root RNA data structure that lists all struct types. */
219
220 struct BlenderRNA {
221         ListBase structs;
222 };
223
224 #endif /* RNA_INTERNAL_TYPES */
225