doxygen: bge scenegraph and videotexture
[blender-staging.git] / source / gameengine / VideoTexture / BlendType.h
1 /* $Id$
2 -----------------------------------------------------------------------------
3 This source file is part of VideoTexture library
4
5 Copyright (c) 2006 The Zdeno Ash Miklas
6
7 This program is free software; you can redistribute it and/or modify it under
8 the terms of the GNU Lesser General Public License as published by the Free Software
9 Foundation; either version 2 of the License, or (at your option) any later
10 version.
11
12 This program is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public License along with
17 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
18 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
19 http://www.gnu.org/copyleft/lesser.txt.
20 -----------------------------------------------------------------------------
21 */
22
23 /** \file BlendType.h
24  *  \ingroup bgevideotex
25  */
26  
27 #if !defined BLENDTYPE_H
28 #define BLENDTYPE_H
29
30
31 /// class allows check type of blender python object and access its contained object
32 /// MUST ONLY BE USED FOR KX classes that are descendent of PyObjectPlus
33 template <class PyObj> class BlendType
34 {
35 public:
36         /// constructor
37         BlendType (const char * name) : m_name(name) {}
38
39         /// check blender type and return pointer to contained object or NULL (if type is not valid)
40         PyObj * checkType (PyObject * obj)
41         {
42                 // if pointer to type isn't set 
43                 if (m_objType == NULL)
44                 {
45                         // compare names of type
46                         if (strcmp(obj->ob_type->tp_name, m_name) == 0)
47                                 // if name of type match, save pointer to type
48                                 m_objType = obj->ob_type;
49                         else
50                                 // if names of type don't match, return NULL
51                                 return NULL;
52                 }
53                 // if pointer to type is set and don't match to type of provided object, return NULL
54                 else if (obj->ob_type != m_objType) 
55                         return NULL;
56                 // return pointer to object, this class can only be used for KX object =>
57                 // the Py object is actually a proxy
58                 return (PyObj*)BGE_PROXY_REF(obj);
59         }
60
61         /// parse arguments to get object
62         PyObj * parseArg (PyObject * args)
63         {
64                 // parse arguments
65                 PyObject * obj;
66                 if (PyArg_ParseTuple(args, "O", &obj))
67                         // if successfully parsed, return pointer to object
68                         return checkType(obj);
69                 // otherwise return NULL
70                 return NULL;
71         }
72
73 protected:
74         /// name of Python type
75         const char * m_name;
76         /// pointer to Python type
77         PyTypeObject * m_objType;
78 };
79
80
81 #endif