c69790075d1de01a5a8c9720a438445129ea2fb9
[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 PyObject *EXPP_GetModuleConstant(char *module, char *constant);
57
58 int StringEqual( const char *string1, const char *string2 );
59 char *GetIdName( ID * id );
60 ID *GetIdFromList( ListBase * list, char *name );
61
62 PyObject *PythonReturnErrorObject( PyObject * type, char *error_msg );
63 PyObject *PythonIncRef( PyObject * object );
64
65 char *event_to_name( short event );
66
67 float EXPP_ClampFloat( float value, float min, float max );
68 int EXPP_ClampInt( int value, int min, int max );
69
70 void EXPP_incr2( PyObject * ob1, PyObject * ob2 );
71 void EXPP_incr3( PyObject * ob1, PyObject * ob2, PyObject * ob3 );
72 void EXPP_decr2( PyObject * ob1, PyObject * ob2 );
73 void EXPP_decr3( PyObject * ob1, PyObject * ob2, PyObject * ob3 );
74 PyObject *EXPP_incr_ret( PyObject * object );
75 PyObject *EXPP_incr_ret_True(void);
76 PyObject *EXPP_incr_ret_False(void);
77 PyObject *EXPP_ReturnPyObjError( PyObject * type, char *error_msg );
78 int EXPP_ReturnIntError( PyObject * type, char *error_msg );
79
80 PyObject *EXPP_objError(PyObject *type, const char *format, ...);
81 int EXPP_intError(PyObject *type, const char *format, ...);
82
83 int EXPP_check_sequence_consistency( PyObject * seq, PyTypeObject * against );
84 PyObject *EXPP_tuple_repr( PyObject * self, int size );
85
86 /* mapping utilities - see Texture.c for an example of how to use these */
87 typedef struct {
88         const char *sval;
89         int ival;
90 } EXPP_map_pair;
91
92 /* maps must end with a pair that has NULL as sval */
93 int EXPP_map_getIntVal( const EXPP_map_pair * map,
94                         const char *sval, int *ival );
95 int EXPP_map_case_getIntVal( const EXPP_map_pair * map,
96                              const char *sval, int *ival );
97 int EXPP_map_getShortVal( const EXPP_map_pair * map,
98                           const char *sval, short *ival );
99 int EXPP_map_getStrVal( const EXPP_map_pair * map,
100                         int ival, const char **sval );
101
102 /* clamping and range-checking utilities */
103
104 int EXPP_setIValueClamped( PyObject *value, void *param,
105                 int min, int max, char type );
106 int EXPP_setFloatClamped ( PyObject *value, float *param,
107                         float min, float max);
108 int EXPP_setIValueRange( PyObject *value, void *param,
109                 int min, int max, char type );
110 int EXPP_setFloatRange ( PyObject *value, float *param,
111                         float min, float max);
112
113 /* utility routine for PyType attributes setters with module constant */
114
115 int EXPP_setModuleConstant ( BPy_constant *constant, void *param,
116                         char type );
117
118 /* utilities to get/set bits in bitfields */
119
120 PyObject *EXPP_getBitfield( void *param, int setting, char type );
121 int EXPP_setBitfield( PyObject * value, void *param, int setting, char type );
122
123 /*
124  * Procedures to handle older setStuff() methods, which now access 
125  * a PyType's setter attributes using the tp_getset mechanism.
126  */
127
128 PyObject *EXPP_setterWrapper ( PyObject * self, PyObject * args,
129                                 setter func);
130
131 PyObject *EXPP_setterWrapperTuple ( PyObject * self, PyObject * args,
132                                 setter func);
133
134 /* scriplinks-related: */
135 PyObject *EXPP_getScriptLinks(ScriptLink *slink, PyObject *args, int is_scene);
136 PyObject *EXPP_addScriptLink(ScriptLink *slink, PyObject *args, int is_scene);
137 PyObject *EXPP_clearScriptLinks(ScriptLink *slink, PyObject *args);
138
139 /* this queues redraws if we're not in background mode: */
140 void EXPP_allqueue(unsigned short event, short val);
141
142 #endif                          /* EXPP_gen_utils_h */
143