415 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			415 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* 
 | |
|  * $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 )
 | |
| {
 | |
| 	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" );
 | |
| 	}
 | |
| 
 | |
| 	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( (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 )
 | |
| {
 | |
| 	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" );
 | |
| 	}
 | |
| 
 | |
| 	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( (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,
 | |
| 	 "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 "<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
 | |
| };
 |