/* * $Id$ * * ***** BEGIN GPL 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. * * 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 LICENSE BLOCK ***** */ /* python types */ #include "DNA_userdef_types.h" #include "../api2_2x/gen_utils.h" #include "bpy_config.h" #include "BKE_utildefines.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 ) { char *param = NULL; switch( GET_INT_FROM_POINTER(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" ); } return PyString_FromString( param ); } /* * 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( GET_INT_FROM_POINTER(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 ) { int param; switch( GET_INT_FROM_POINTER(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" ); } return PyInt_FromLong( param ); } /* * set integer attributes which require clamping */ static int setIntAttrClamp( BPy_Config *self, PyObject *value, void *type ) { void *param; int min, max, size; switch( GET_INT_FROM_POINTER(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, "time for textures to stay in openGL memory", (void *)EXPP_CONF_ATTR_TEX_TIMEOUT}, {"textureCollectRate", (getter)getIntAttr, (setter)setIntAttrClamp, "intervel for textures to be tagged as used", (void *)EXPP_CONF_ATTR_TEX_COLLECT_RATE}, {"sequenceMemCacheLimit", (getter)getIntAttr, (setter)setIntAttrClamp, "maximum memory for the sequencer to use as cache", (void *)EXPP_CONF_ATTR_MEM_CACHE_LIMIT}, {"fontSize", (getter)getIntAttr, (setter)setIntAttrClamp, "user interface font size", (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 "." */ "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 };