diff options
author | Campbell Barton <ideasman42@gmail.com> | 2007-03-18 07:46:54 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2007-03-18 07:46:54 +0300 |
commit | 90eb851d50508913dd34e7a7376309b7d4b98383 (patch) | |
tree | f64b869fc34cedad1afd7e72c272412b0d5ac0fc /source/blender/python | |
parent | 41aac13d9eb1c39f34b2b8471f349471ee2f0f5b (diff) |
added bpy.config, more configuration options still need adding.
Diffstat (limited to 'source/blender/python')
-rw-r--r-- | source/blender/python/api2_2x/Config.c | 429 | ||||
-rw-r--r-- | source/blender/python/api2_2x/Config.h | 52 | ||||
-rw-r--r-- | source/blender/python/api2_2x/Main.c | 11 |
3 files changed, 491 insertions, 1 deletions
diff --git a/source/blender/python/api2_2x/Config.c b/source/blender/python/api2_2x/Config.c new file mode 100644 index 00000000000..cd081a3a4aa --- /dev/null +++ b/source/blender/python/api2_2x/Config.c @@ -0,0 +1,429 @@ +/* + * $Id$ + * + * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** + * + * 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 + * of the License, or (at your option) any later version. The Blender + * Foundation also sells licenses for use in proprietary software under + * the Blender License. See http://www.blender.org/BL/ for information + * about this. + * + * 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, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * This is a new part of Blender. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL/BL DUAL LICENSE BLOCK ***** +*/ + +/* python types */ +#include "DNA_userdef_types.h" +#include "gen_utils.h" +#include "Config.h" + +enum conf_consts { + /*string*/ + EXPP_CONF_ATTR_PATH_YF_EXPORT = 0, + EXPP_CONF_ATTR_PATH_FONT, + EXPP_CONF_ATTR_PATH_RENDER, + EXPP_CONF_ATTR_PATH_TEXTURE, + EXPP_CONF_ATTR_PATH_PYTHON, + EXPP_CONF_ATTR_PATH_TEX_PLUGIN, + EXPP_CONF_ATTR_PATH_SOUND, + EXPP_CONF_ATTR_PATH_SEQ_PLUGIN, + EXPP_CONF_ATTR_PATH_TEMP, + + /*int*/ + EXPP_CONF_ATTR_UNDOSTEPS, + EXPP_CONF_ATTR_TEX_TIMEOUT, + EXPP_CONF_ATTR_TEX_COLLECT_RATE, + EXPP_CONF_ATTR_MEM_CACHE_LIMIT, + EXPP_CONF_ATTR_FONT_SIZE +}; + +PyObject *Config_CreatePyObject( ) +{ + BPy_Config *conf = PyObject_NEW( BPy_Config, &Config_Type); + return (PyObject *)conf; +} + +/* + * repr function + * callback functions building meaninful string to representations + */ +static PyObject *Config_repr( BPy_Config * self ) +{ + return PyString_FromFormat( "[Blender Configuration Data]"); +} + + +/*-----------------------Config module Init())-----------------------------*/ +/* see Main.c */ +/* +static struct PyMethodDef BPy_Config_methods[] = { + {"new", (PyCFunction)MainSeq_new, METH_VARARGS, + "(name) - Create a new object in this scene from the obdata given and return a new object"}, + {"load", (PyCFunction)MainSeq_load, METH_VARARGS, + "(filename) - loads the given filename for image, font and sound types"}, + {"unlink", (PyCFunction)MainSeq_unlink, METH_VARARGS, + "unlinks the object from the scene"}, + {NULL, NULL, 0, NULL} +};*/ + +/* + * get integer attributes + */ +static PyObject *getStrAttr( BPy_Config *self, void *type ) +{ + PyObject *attr = NULL; + char *param = NULL; + + + switch( (int)type ) { + case EXPP_CONF_ATTR_PATH_YF_EXPORT: + param = U.yfexportdir; + break; + case EXPP_CONF_ATTR_PATH_FONT: + param = U.fontdir; + break; + case EXPP_CONF_ATTR_PATH_RENDER: + param = U.renderdir; + break; + case EXPP_CONF_ATTR_PATH_TEXTURE: + param = U.textudir; + break; + case EXPP_CONF_ATTR_PATH_PYTHON: + param = U.pythondir; + break; + case EXPP_CONF_ATTR_PATH_TEX_PLUGIN: + param = U.plugtexdir; + break; + case EXPP_CONF_ATTR_PATH_SOUND: + param = U.sounddir; + break; + case EXPP_CONF_ATTR_PATH_SEQ_PLUGIN: + param = U.plugseqdir; + break; + case EXPP_CONF_ATTR_PATH_TEMP: + param = U.tempdir; + break; + + default: + return EXPP_ReturnPyObjError( PyExc_RuntimeError, + "undefined type in getStrAttr" ); + } + + attr = PyString_FromString( param ); + + if( attr ) + return attr; + + return EXPP_ReturnPyObjError( PyExc_MemoryError, + "PyString_FromString() failed!" ); +} + +/* + * set integer attributes which require clamping + */ + +static int setStrAttr( BPy_Config *self, PyObject *value, void *type ) +{ + char *param; + int len=160; + char *str = PyString_AsString(value); + + if (!str) + return EXPP_ReturnIntError( PyExc_TypeError, + "error, must assign a python string for setStrAttr"); + + switch( (int)type ) { + case EXPP_CONF_ATTR_PATH_YF_EXPORT: + param = U.yfexportdir; + break; + case EXPP_CONF_ATTR_PATH_FONT: + param = U.fontdir; + break; + case EXPP_CONF_ATTR_PATH_RENDER: + param = U.renderdir; + break; + case EXPP_CONF_ATTR_PATH_TEXTURE: + param = U.textudir; + break; + case EXPP_CONF_ATTR_PATH_PYTHON: + param = U.pythondir; + break; + case EXPP_CONF_ATTR_PATH_TEX_PLUGIN: + param = U.plugtexdir; + break; + case EXPP_CONF_ATTR_PATH_SOUND: + param = U.sounddir; + break; + case EXPP_CONF_ATTR_PATH_SEQ_PLUGIN: + param = U.plugseqdir; + break; + case EXPP_CONF_ATTR_PATH_TEMP: + param = U.tempdir; + break; + + default: + return EXPP_ReturnIntError( PyExc_RuntimeError, + "undefined type in setStrAttr"); + } + + strncpy(param, str, len); + return 0; +} + + +/* + * get integer attributes + */ + +static PyObject *getIntAttr( BPy_Config *self, void *type ) +{ + PyObject *attr = NULL; + int param; + + switch( (int)type ) { + case EXPP_CONF_ATTR_UNDOSTEPS: + param = (int)U.undosteps; + break; + case EXPP_CONF_ATTR_TEX_TIMEOUT: + param = U.textimeout; + break; + case EXPP_CONF_ATTR_TEX_COLLECT_RATE: + param = U.texcollectrate; + break; + case EXPP_CONF_ATTR_MEM_CACHE_LIMIT: + param = U.memcachelimit; + break; + case EXPP_CONF_ATTR_FONT_SIZE: + param = U.fontsize; + break; + + default: + return EXPP_ReturnPyObjError( PyExc_RuntimeError, + "undefined type in getIntAttr" ); + } + + attr = PyInt_FromLong( param ); + + if( attr ) + return attr; + + return EXPP_ReturnPyObjError( PyExc_MemoryError, + "PyInt_FromLong() failed!" ); +} + +/* + * set integer attributes which require clamping + */ + +static int setIntAttrClamp( BPy_Config *self, PyObject *value, void *type ) +{ + void *param; + int min, max, size; + + switch( (int)type ) { + case EXPP_CONF_ATTR_UNDOSTEPS: + min = 0; + max = 64; + size = 'h'; + param = (void *)&U.undosteps; + break; + case EXPP_CONF_ATTR_TEX_TIMEOUT: + min = 1; + max = 3600; + size = 'i'; + param = (void *)&U.textimeout; + break; + case EXPP_CONF_ATTR_TEX_COLLECT_RATE: + min = 1; + max = 3600; + size = 'i'; + param = (void *)&U.texcollectrate; + break; + case EXPP_CONF_ATTR_MEM_CACHE_LIMIT: + min = 1; + max = 1024; + size = 'i'; + param = (void *)&U.memcachelimit; + break; + case EXPP_CONF_ATTR_FONT_SIZE: + min = 8; + max = 16; + size = 'i'; + param = (void *)&U.fontsize; + break; + + default: + return EXPP_ReturnIntError( PyExc_RuntimeError, + "undefined type in setIntAttrClamp"); + } + return EXPP_setIValueClamped( value, param, min, max, size ); +} + +static PyGetSetDef Config_getseters[] = { + + /* ints & shorts */ + {"undoSteps", + (getter)getIntAttr, (setter)setIntAttrClamp, + "undo steps", + (void *)EXPP_CONF_ATTR_UNDOSTEPS}, + {"textureTimeout", + (getter)getIntAttr, (setter)setIntAttrClamp, + "undo steps", + (void *)EXPP_CONF_ATTR_TEX_TIMEOUT}, + {"textureCollectRate", + (getter)getIntAttr, (setter)setIntAttrClamp, + "undo steps", + (void *)EXPP_CONF_ATTR_TEX_COLLECT_RATE}, + {"sequenceMemCacheLimit", + (getter)getIntAttr, (setter)setIntAttrClamp, + "undo steps", + (void *)EXPP_CONF_ATTR_MEM_CACHE_LIMIT}, + {"fontSize", + (getter)getIntAttr, (setter)setIntAttrClamp, + "undo steps", + (void *)EXPP_CONF_ATTR_FONT_SIZE}, + + /* Paths */ + {"yfExportDir", + (getter)getStrAttr, (setter)setStrAttr, + "yafray export path", + (void *)EXPP_CONF_ATTR_PATH_YF_EXPORT}, + {"fontDir", + (getter)getStrAttr, (setter)setStrAttr, + "default font path", + (void *)EXPP_CONF_ATTR_PATH_FONT}, + {"renderDir", + (getter)getStrAttr, (setter)setStrAttr, + "default render path", + (void *)EXPP_CONF_ATTR_PATH_RENDER}, + {"textureDir", + (getter)getStrAttr, (setter)setStrAttr, + "default texture path", + (void *)EXPP_CONF_ATTR_PATH_TEXTURE}, + {"userScriptsDir", + (getter)getStrAttr, (setter)setStrAttr, + "user scripts path", + (void *)EXPP_CONF_ATTR_PATH_PYTHON}, + {"texturePluginsDir", + (getter)getStrAttr, (setter)setStrAttr, + "default texture plugins path", + (void *)EXPP_CONF_ATTR_PATH_TEX_PLUGIN}, + {"soundDir", + (getter)getStrAttr, (setter)setStrAttr, + "default sound path", + (void *)EXPP_CONF_ATTR_PATH_SOUND}, + {"sequencePluginsDir", + (getter)getStrAttr, (setter)setStrAttr, + "sequencer plugins path", + (void *)EXPP_CONF_ATTR_PATH_SEQ_PLUGIN}, + {"tempDir", + (getter)getStrAttr, (setter)setStrAttr, + "temporary file path", + (void *)EXPP_CONF_ATTR_PATH_TEMP}, + + {NULL,NULL,NULL,NULL,NULL} /* Sentinel */ +}; + + +/* + * Python Config_Type structure definition + */ +PyTypeObject Config_Type = { + PyObject_HEAD_INIT( NULL ) /* required py macro */ + 0, /* ob_size */ + /* For printing, in format "<module>.<name>" */ + "Blender Config", /* char *tp_name; */ + sizeof( BPy_Config ), /* int tp_basicsize; */ + 0, /* tp_itemsize; For allocation */ + + /* Methods to implement standard operations */ + + NULL, /* destructor tp_dealloc; */ + NULL, /* printfunc tp_print; */ + NULL, /* getattrfunc tp_getattr; */ + NULL, /* setattrfunc tp_setattr; */ + NULL, /* cmpfunc tp_compare; */ + (reprfunc)Config_repr, /* reprfunc tp_repr; */ + + /* Method suites for standard classes */ + + NULL, /* PyNumberMethods *tp_as_number; */ + NULL, /* PySequenceMethods *tp_as_sequence; */ + NULL, /* PyMappingMethods *tp_as_mapping; */ + + /* More standard operations (here for binary compatibility) */ + + NULL, /* hashfunc tp_hash; */ + NULL, /* ternaryfunc tp_call; */ + NULL, /* reprfunc tp_str; */ + NULL, /* getattrofunc tp_getattro; */ + NULL, /* setattrofunc tp_setattro; */ + + /* Functions to access object as input/output buffer */ + NULL, /* PyBufferProcs *tp_as_buffer; */ + + /*** Flags to define presence of optional/expanded features ***/ + Py_TPFLAGS_DEFAULT, /* long tp_flags; */ + + NULL, /* char *tp_doc; Documentation string */ + /*** Assigned meaning in release 2.0 ***/ + /* call function for all accessible objects */ + NULL, /* traverseproc tp_traverse; */ + + /* delete references to contained objects */ + NULL, /* inquiry tp_clear; */ + + /*** Assigned meaning in release 2.1 ***/ + /*** rich comparisons ***/ + NULL, /* richcmpfunc tp_richcompare; */ + + /*** weak reference enabler ***/ + 0, /* long tp_weaklistoffset; */ + + /*** Added in release 2.2 ***/ + /* Iterators */ + NULL, /* getiterfunc tp_iter; */ + NULL, /* iternextfunc tp_iternext; */ + + /*** Attribute descriptor and subclassing stuff ***/ + NULL, /*BPy_Config_methods*/ /* struct PyMethodDef *tp_methods; */ + NULL, /* struct PyMemberDef *tp_members; */ + Config_getseters, /* struct PyGetSetDef *tp_getset; */ + NULL, /* struct _typeobject *tp_base; */ + NULL, /* PyObject *tp_dict; */ + NULL, /* descrgetfunc tp_descr_get; */ + NULL, /* descrsetfunc tp_descr_set; */ + 0, /* long tp_dictoffset; */ + NULL, /* initproc tp_init; */ + NULL, /* allocfunc tp_alloc; */ + NULL, /* newfunc tp_new; */ + /* Low-level free-memory routine */ + NULL, /* freefunc tp_free; */ + /* For PyObject_IS_GC */ + NULL, /* inquiry tp_is_gc; */ + NULL, /* PyObject *tp_bases; */ + /* method resolution order */ + NULL, /* PyObject *tp_mro; */ + NULL, /* PyObject *tp_cache; */ + NULL, /* PyObject *tp_subclasses; */ + NULL, /* PyObject *tp_weaklist; */ + NULL +}; diff --git a/source/blender/python/api2_2x/Config.h b/source/blender/python/api2_2x/Config.h new file mode 100644 index 00000000000..61580a023b4 --- /dev/null +++ b/source/blender/python/api2_2x/Config.h @@ -0,0 +1,52 @@ +/* + * $Id$ + * + * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** + * + * 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 + * of the License, or (at your option) any later version. The Blender + * Foundation also sells licenses for use in proprietary software under + * the Blender License. See http://www.blender.org/BL/ for information + * about this. + * + * 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, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * This is a new part of Blender. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL/BL DUAL LICENSE BLOCK ***** +*/ + +#ifndef EXPP_CONFIG_H +#define EXPP_CONFIG_H + +#include <Python.h> + +/* The Main PyType Object defined in Main.c */ +extern PyTypeObject Config_Type; + +#define BPy_Config_Check(v) \ + ((v)->ob_type == &Config_Type) + +/* Main sequence, iterate on the libdatas listbase*/ +typedef struct { + PyObject_VAR_HEAD /* required python macro */ +} BPy_Config; + +PyObject *Config_CreatePyObject(); + + +#endif /* EXPP_CONFIG_H */ diff --git a/source/blender/python/api2_2x/Main.c b/source/blender/python/api2_2x/Main.c index f25ef8bcf0e..4eddea59ab0 100644 --- a/source/blender/python/api2_2x/Main.c +++ b/source/blender/python/api2_2x/Main.c @@ -106,6 +106,9 @@ #include "Main.h" #include "Scene.h" + +#include "Config.h" /* config pydata */ + /* used only for texts.active */ #include "BIF_screen.h" #include "DNA_space_types.h" @@ -746,9 +749,12 @@ PyObject *Main_Init( void ) if( PyType_Ready( &MainSeq_Type ) < 0 ) return NULL; - + if( PyType_Ready( &Config_Type ) < 0 ) /* see Config.c */ + return NULL; + submodule = Py_InitModule3( "Blender.Main", NULL, M_Main_doc ); + /* Python Data Types */ PyModule_AddObject( submodule, "scenes", MainSeq_CreatePyObject(NULL, ID_SCE) ); PyModule_AddObject( submodule, "objects", MainSeq_CreatePyObject(NULL, ID_OB) ); PyModule_AddObject( submodule, "meshes", MainSeq_CreatePyObject(NULL, ID_ME) ); @@ -769,5 +775,8 @@ PyObject *Main_Init( void ) PyModule_AddObject( submodule, "armatures", MainSeq_CreatePyObject(NULL, ID_AR) ); PyModule_AddObject( submodule, "actions", MainSeq_CreatePyObject(NULL, ID_AC) ); + /* Other Types */ + PyModule_AddObject( submodule, "config", Config_CreatePyObject() ); + return submodule; } |