BGE Python API
[blender.git] / source / gameengine / Expressions / ListValue.h
1 /*
2  * ListValue.h: interface for the CListValue class.
3  * $Id$
4  * Copyright (c) 1996-2000 Erwin Coumans <coockie@acm.org>
5  *
6  * Permission to use, copy, modify, distribute and sell this software
7  * and its documentation for any purpose is hereby granted without fee,
8  * provided that the above copyright notice appear in all copies and
9  * that both that copyright notice and this permission notice appear
10  * in supporting documentation.  Erwin Coumans makes no
11  * representations about the suitability of this software for any
12  * purpose.  It is provided "as is" without express or implied warranty.
13  *
14  */
15
16 #if !defined _LISTVALUE_H
17 #define _LISTVALUE_H
18
19 #include "Value.h"
20
21 class CListValue : public CPropValue  
22 {
23         Py_Header;
24         //PLUGIN_DECLARE_SERIAL (CListValue,CValue)
25
26 public:
27         CListValue(PyTypeObject *T = &Type);
28         virtual ~CListValue();
29
30         void AddConfigurationData(CValue* menuvalue);
31         void Configure(CValue* menuvalue);
32         void Add(CValue* value);
33
34         /** @attention not implemented yet :( */
35         virtual CValue* Calc(VALUE_OPERATOR op,CValue *val);
36         virtual CValue* CalcFinal(VALUE_DATA_TYPE dtype,
37                                                           VALUE_OPERATOR op,
38                                                           CValue* val);
39         virtual double GetNumber();
40         virtual CValue* GetReplica();
41
42 public:
43         void MergeList(CListValue* otherlist);
44         bool RemoveValue(CValue* val);
45         void SetReleaseOnDestruct(bool bReleaseContents);
46         bool SearchValue(CValue* val);
47         
48         CValue* FindValue(const STR_String & name);
49
50         void ReleaseAndRemoveAll();
51         virtual void SetModified(bool bModified);
52         virtual inline bool IsModified();
53         void Remove(int i);
54         void Resize(int num);
55         void SetValue(int i,CValue* val);
56         CValue* GetValue(int i){        assertd(i < m_pValueArray.size());      return m_pValueArray[i];}
57         int GetCount() { return m_pValueArray.size();};
58         virtual const STR_String & GetText();
59
60         bool CheckEqual(CValue* first,CValue* second);
61
62         virtual PyObject* py_getattro(PyObject* attr);
63         virtual PyObject* py_repr(void) {
64                 PyObject *py_proxy= this->GetProxy();
65                 PyObject *py_list= PySequence_List(py_proxy);
66                 PyObject *py_string= PyObject_Repr(py_list);
67                 Py_DECREF(py_list);
68                 Py_DECREF(py_proxy);
69                 return py_string;
70         }
71
72         KX_PYMETHOD_O(CListValue,append);
73         KX_PYMETHOD_NOARGS(CListValue,reverse);
74         KX_PYMETHOD_O(CListValue,index);
75         KX_PYMETHOD_O(CListValue,count);
76         KX_PYMETHOD_O(CListValue,from_id);
77
78         
79 private:
80
81         std::vector<CValue*> m_pValueArray;
82         bool    m_bReleaseContents;
83 };
84
85 #endif // !defined _LISTVALUE_H
86