diff options
author | Campbell Barton <ideasman42@gmail.com> | 2007-04-18 18:40:01 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2007-04-18 18:40:01 +0400 |
commit | 3e1a5ce7a2596ebc135455f9934d128223cc089a (patch) | |
tree | e9d12a0e39c1de8e33e2b32965a91d8bd90a18c1 /source/blender/python/api2_2x/bpy_config.c | |
parent | a59f7c08cef1fd4f0ce60463fe93eb53a8dadffa (diff) |
PyAPI.
moved bpy into bpy.data and bpy will be eventually replace the root level 'Blender' module.
currently we have bpy.library bpy.config and bpy.data
Diffstat (limited to 'source/blender/python/api2_2x/bpy_config.c')
-rw-r--r-- | source/blender/python/api2_2x/bpy_config.c | 429 |
1 files changed, 429 insertions, 0 deletions
diff --git a/source/blender/python/api2_2x/bpy_config.c b/source/blender/python/api2_2x/bpy_config.c new file mode 100644 index 00000000000..bdb5e3c3b47 --- /dev/null +++ b/source/blender/python/api2_2x/bpy_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 "../api2_2x/gen_utils.h" +#include "bpy_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 +}; |