| 
									
										
										
										
											2011-02-23 10:52:22 +00:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2006-11-29 23:31:46 +00:00
										 |  |  |  * This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  |  * modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  |  * as published by the Free Software Foundation; either version 2 | 
					
						
							| 
									
										
										
										
											2008-04-16 22:40:48 +00:00
										 |  |  |  * of the License, or (at your option) any later version. | 
					
						
							| 
									
										
										
										
											2006-11-29 23:31:46 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  |  * along with this program; if not, write to the Free Software Foundation, | 
					
						
							| 
									
										
										
										
											2010-02-12 13:34:04 +00:00
										 |  |  |  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | 
					
						
							| 
									
										
										
										
											2006-11-29 23:31:46 +00:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-11-16 18:56:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-18 08:08:12 +11:00
										 |  |  | /** \file
 | 
					
						
							|  |  |  |  * \ingroup pygen | 
					
						
							| 
									
										
										
										
											2011-02-27 20:10:08 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-07 09:50:34 +02:00
										 |  |  | #pragma once
 | 
					
						
							| 
									
										
										
										
											2006-11-17 04:46:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-28 21:08:24 +11:00
										 |  |  | struct BPy_IDGroup_Iter; | 
					
						
							| 
									
										
										
										
											2006-11-17 04:46:48 +00:00
										 |  |  | struct ID; | 
					
						
							|  |  |  | struct IDProperty; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-31 19:07:25 +00:00
										 |  |  | extern PyTypeObject BPy_IDArray_Type; | 
					
						
							|  |  |  | extern PyTypeObject BPy_IDGroup_Type; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-11 09:40:41 +10:00
										 |  |  | extern PyTypeObject BPy_IDGroup_ViewKeys_Type; | 
					
						
							|  |  |  | extern PyTypeObject BPy_IDGroup_ViewValues_Type; | 
					
						
							|  |  |  | extern PyTypeObject BPy_IDGroup_ViewItems_Type; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern PyTypeObject BPy_IDGroup_IterKeys_Type; | 
					
						
							|  |  |  | extern PyTypeObject BPy_IDGroup_IterValues_Type; | 
					
						
							|  |  |  | extern PyTypeObject BPy_IDGroup_IterItems_Type; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-17 06:17:24 +02:00
										 |  |  | #define BPy_IDArray_Check(v) (PyObject_TypeCheck(v, &BPy_IDArray_Type))
 | 
					
						
							|  |  |  | #define BPy_IDArray_CheckExact(v) (Py_TYPE(v) == &BPy_IDArray_Type)
 | 
					
						
							|  |  |  | #define BPy_IDGroup_Check(v) (PyObject_TypeCheck(v, &BPy_IDGroup_Type))
 | 
					
						
							|  |  |  | #define BPy_IDGroup_CheckExact(v) (Py_TYPE(v) == &BPy_IDGroup_Type)
 | 
					
						
							| 
									
										
										
										
											2012-10-31 19:07:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-11 09:40:41 +10:00
										 |  |  | #define BPy_IDGroup_ViewKeys_Check(v) (PyObject_TypeCheck(v, &BPy_IDGroup_ViewKeys_Type))
 | 
					
						
							|  |  |  | #define BPy_IDGroup_ViewKeys_CheckExact(v) (Py_TYPE(v) == &BPy_IDGroup_ViewKeys_Type)
 | 
					
						
							|  |  |  | #define BPy_IDGroup_ViewValues_Check(v) (PyObject_TypeCheck(v, &BPy_IDGroup_ViewValues_Type))
 | 
					
						
							|  |  |  | #define BPy_IDGroup_ViewValues_CheckExact(v) (Py_TYPE(v) == &BPy_IDGroup_ViewValues_Type)
 | 
					
						
							|  |  |  | #define BPy_IDGroup_ViewItems_Check(v) (PyObject_TypeCheck(v, &BPy_IDGroup_ViewItems_Type))
 | 
					
						
							|  |  |  | #define BPy_IDGroup_ViewItems_CheckExact(v) (Py_TYPE(v) == &BPy_IDGroup_ViewItems_Type)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define BPy_IDGroup_IterKeys_Check(v) (PyObject_TypeCheck(v, &BPy_IDGroup_IterKeys_Type))
 | 
					
						
							|  |  |  | #define BPy_IDGroup_IterKeys_CheckExact(v) (Py_TYPE(v) == &BPy_IDGroup_IterKeys_Type)
 | 
					
						
							|  |  |  | #define BPy_IDGroup_IterValues_Check(v) (PyObject_TypeCheck(v, &BPy_IDGroup_IterValues_Type))
 | 
					
						
							|  |  |  | #define BPy_IDGroup_IterValues_CheckExact(v) (Py_TYPE(v) == &BPy_IDGroup_IterValues_Type)
 | 
					
						
							|  |  |  | #define BPy_IDGroup_IterItems_Check(v) (PyObject_TypeCheck(v, &BPy_IDGroup_IterItems_Type))
 | 
					
						
							|  |  |  | #define BPy_IDGroup_IterItems_CheckExact(v) (Py_TYPE(v) == &BPy_IDGroup_IterItems_Type)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-11-17 04:46:48 +00:00
										 |  |  | typedef struct BPy_IDProperty { | 
					
						
							| 
									
										
										
										
											2021-04-01 11:15:47 +11:00
										 |  |  |   PyObject_VAR_HEAD | 
					
						
							| 
									
										
										
										
											2021-06-14 18:13:19 +02:00
										 |  |  |   struct ID *owner_id;     /* can be NULL */ | 
					
						
							| 
									
										
										
										
											2021-04-01 11:15:47 +11:00
										 |  |  |   struct IDProperty *prop; /* must be second member */ | 
					
						
							| 
									
										
										
										
											2019-04-17 06:17:24 +02:00
										 |  |  |   struct IDProperty *parent; | 
					
						
							| 
									
										
										
										
											2006-11-17 04:46:48 +00:00
										 |  |  | } BPy_IDProperty; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct BPy_IDArray { | 
					
						
							| 
									
										
										
										
											2021-04-01 11:15:47 +11:00
										 |  |  |   PyObject_VAR_HEAD | 
					
						
							| 
									
										
										
										
											2021-06-14 18:13:19 +02:00
										 |  |  |   struct ID *owner_id;     /* can be NULL */ | 
					
						
							| 
									
										
										
										
											2021-04-01 11:15:47 +11:00
										 |  |  |   struct IDProperty *prop; /* must be second member */ | 
					
						
							| 
									
										
										
										
											2006-11-17 04:46:48 +00:00
										 |  |  | } BPy_IDArray; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct BPy_IDGroup_Iter { | 
					
						
							| 
									
										
										
										
											2021-04-01 11:15:47 +11:00
										 |  |  |   PyObject_VAR_HEAD | 
					
						
							|  |  |  |   BPy_IDProperty *group; | 
					
						
							| 
									
										
										
										
											2019-04-17 06:17:24 +02:00
										 |  |  |   struct IDProperty *cur; | 
					
						
							| 
									
										
										
										
											2021-05-11 09:40:41 +10:00
										 |  |  |   /** Use for detecting manipulation during iteration (which is not allowed). */ | 
					
						
							|  |  |  |   int len_init; | 
					
						
							|  |  |  |   /** Iterate in the reverse direction. */ | 
					
						
							|  |  |  |   bool reversed; | 
					
						
							| 
									
										
										
										
											2006-11-17 04:46:48 +00:00
										 |  |  | } BPy_IDGroup_Iter; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-11 09:40:41 +10:00
										 |  |  | /** Use to implement `IDPropertyGroup.keys/values/items` */ | 
					
						
							|  |  |  | typedef struct BPy_IDGroup_View { | 
					
						
							|  |  |  |   PyObject_VAR_HEAD | 
					
						
							|  |  |  |   /** This will be NULL when accessing keys on data that has no ID properties. */ | 
					
						
							|  |  |  |   BPy_IDProperty *group; | 
					
						
							|  |  |  |   bool reversed; | 
					
						
							|  |  |  | } BPy_IDGroup_View; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-11 14:08:22 +00:00
										 |  |  | PyObject *BPy_Wrap_GetKeys(struct IDProperty *prop); | 
					
						
							|  |  |  | PyObject *BPy_Wrap_GetValues(struct ID *id, struct IDProperty *prop); | 
					
						
							|  |  |  | PyObject *BPy_Wrap_GetItems(struct ID *id, struct IDProperty *prop); | 
					
						
							| 
									
										
										
										
											2021-05-11 09:40:41 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | PyObject *BPy_Wrap_GetKeys_View_WithID(struct ID *id, struct IDProperty *prop); | 
					
						
							|  |  |  | PyObject *BPy_Wrap_GetValues_View_WithID(struct ID *id, struct IDProperty *prop); | 
					
						
							|  |  |  | PyObject *BPy_Wrap_GetItems_View_WithID(struct ID *id, struct IDProperty *prop); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-11 14:08:22 +00:00
										 |  |  | int BPy_Wrap_SetMapItem(struct IDProperty *prop, PyObject *key, PyObject *val); | 
					
						
							| 
									
										
										
										
											2009-11-16 20:16:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-14 19:18:50 +10:00
										 |  |  | PyObject *BPy_IDGroup_MapDataToPy(struct IDProperty *prop); | 
					
						
							| 
									
										
										
										
											2011-11-15 10:19:44 +00:00
										 |  |  | PyObject *BPy_IDGroup_WrapData(struct ID *id, struct IDProperty *prop, struct IDProperty *parent); | 
					
						
							| 
									
										
										
										
											2013-10-17 03:18:21 +00:00
										 |  |  | bool BPy_IDProperty_Map_ValidateAndCreate(PyObject *key, struct IDProperty *group, PyObject *ob); | 
					
						
							| 
									
										
										
										
											2009-11-16 20:16:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-11-29 23:31:46 +00:00
										 |  |  | void IDProp_Init_Types(void); | 
					
						
							| 
									
										
										
										
											2006-12-16 23:54:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-15 14:54:15 +00:00
										 |  |  | PyObject *BPyInit_idprop(void); |