51eccc293d2c4b3ccbc3a39198a31fbbd6e8dd8b
[blender.git] / source / blender / python / api2_2x / gen_utils.h
1 /* 
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL 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. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA        02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * This is a new part of Blender.
27  *
28  * Contributor(s): Michel Selten, Willian P. Germano, Alex Mole, Joseph Gilbert
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31 */
32
33 #ifndef EXPP_gen_utils_h
34 #define EXPP_gen_utils_h
35
36 #include <Python.h>
37 #include "DNA_ID.h"
38 #include "DNA_scriptlink_types.h"
39 #include "DNA_listBase.h"
40
41 #include "constant.h"
42
43 #define Py_PI  3.14159265358979323846
44 #define Py_WRAP 1024
45 #define Py_NEW  2048
46
47 /* 
48    Py_RETURN_NONE
49    Python 2.4 macro.  
50    defined here until we switch to 2.4
51 */
52 #ifndef Py_RETURN_NONE
53 #define Py_RETURN_NONE  Py_INCREF( Py_None ); return Py_None 
54 #endif
55
56 /* more 2.4 macros..? */
57 #ifndef Py_RETURN_TRUE  
58 #define Py_RETURN_TRUE Py_INCREF( Py_True ); return Py_True 
59 #endif
60
61 #ifndef Py_RETURN_FALSE
62 #define Py_RETURN_FALSE Py_INCREF( Py_False); return Py_False
63 #endif
64
65 PyObject *EXPP_GetModuleConstant(char *module, char *constant);
66
67 int StringEqual( const char *string1, const char *string2 );
68 char *GetIdName( ID * id );
69 ID *GetIdFromList( ListBase * list, char *name );
70
71 PyObject *PythonReturnErrorObject( PyObject * type, char *error_msg );
72 PyObject *PythonIncRef( PyObject * object );
73
74 char *event_to_name( short event );
75
76 float EXPP_ClampFloat( float value, float min, float max );
77 int EXPP_ClampInt( int value, int min, int max );
78
79 void EXPP_incr2( PyObject * ob1, PyObject * ob2 );
80 void EXPP_incr3( PyObject * ob1, PyObject * ob2, PyObject * ob3 );
81 void EXPP_decr2( PyObject * ob1, PyObject * ob2 );
82 void EXPP_decr3( PyObject * ob1, PyObject * ob2, PyObject * ob3 );
83 PyObject *EXPP_incr_ret( PyObject * object );
84 PyObject *EXPP_incr_ret_True(void);
85 PyObject *EXPP_incr_ret_False(void);
86 PyObject *EXPP_ReturnPyObjError( PyObject * type, char *error_msg );
87 int EXPP_ReturnIntError( PyObject * type, char *error_msg );
88
89 PyObject *EXPP_objError(PyObject *type, const char *format, ...);
90 int EXPP_intError(PyObject *type, const char *format, ...);
91
92 int EXPP_check_sequence_consistency( PyObject * seq, PyTypeObject * against );
93 PyObject *EXPP_tuple_repr( PyObject * self, int size );
94
95 /* mapping utilities - see Texture.c for an example of how to use these */
96 typedef struct {
97         const char *sval;
98         int ival;
99 } EXPP_map_pair;
100
101 /* maps must end with a pair that has NULL as sval */
102 int EXPP_map_getIntVal( const EXPP_map_pair * map,
103                         const char *sval, int *ival );
104 int EXPP_map_case_getIntVal( const EXPP_map_pair * map,
105                              const char *sval, int *ival );
106 int EXPP_map_getShortVal( const EXPP_map_pair * map,
107                           const char *sval, short *ival );
108 int EXPP_map_getStrVal( const EXPP_map_pair * map,
109                         int ival, const char **sval );
110
111 /* clamping and range-checking utilities */
112
113 int EXPP_setIValueClamped( PyObject *value, void *param,
114                 int min, int max, char type );
115 int EXPP_setFloatClamped ( PyObject *value, float *param,
116                         float min, float max);
117 int EXPP_setIValueRange( PyObject *value, void *param,
118                 int min, int max, char type );
119 int EXPP_setFloatRange ( PyObject *value, float *param,
120                         float min, float max);
121
122 /* utility routine for PyType attributes setters with module constant */
123
124 int EXPP_setModuleConstant ( BPy_constant *constant, void *param,
125                         char type );
126
127 /* utilities to get/set bits in bitfields */
128
129 PyObject *EXPP_getBitfield( void *param, int setting, char type );
130 int EXPP_setBitfield( PyObject * value, void *param, int setting, char type );
131
132 /*
133  * Procedures to handle older setStuff() methods, which now access 
134  * a PyType's setter attributes using the tp_getset mechanism.
135  */
136
137 PyObject *EXPP_setterWrapper ( PyObject * self, PyObject * args,
138                                 setter func);
139
140 PyObject *EXPP_setterWrapperTuple ( PyObject * self, PyObject * args,
141                                 setter func);
142
143 /* scriplinks-related: */
144 PyObject *EXPP_getScriptLinks(ScriptLink *slink, PyObject *args, int is_scene);
145 PyObject *EXPP_addScriptLink(ScriptLink *slink, PyObject *args, int is_scene);
146 PyObject *EXPP_clearScriptLinks(ScriptLink *slink, PyObject *args);
147
148 /* this queues redraws if we're not in background mode: */
149 void EXPP_allqueue(unsigned short event, short val);
150
151 #endif                          /* EXPP_gen_utils_h */
152