svn merge -r 20651:20822 https://svn.blender.org/svnroot/bf-blender/branches/blender2...
[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         CValue* FindValue(const char *name);
50
51         void ReleaseAndRemoveAll();
52         virtual void SetModified(bool bModified);
53         virtual inline bool IsModified();
54         void Remove(int i);
55         void Resize(int num);
56         void SetValue(int i,CValue* val);
57         CValue* GetValue(int i){        assertd(i < m_pValueArray.size());      return m_pValueArray[i];}
58         int GetCount() { return m_pValueArray.size();};
59         virtual const STR_String & GetText();
60
61         bool CheckEqual(CValue* first,CValue* second);
62
63         virtual PyObject* py_getattro(PyObject* attr);
64         virtual PyObject* py_getattro_dict();
65         virtual PyObject* py_repr(void) {
66                 PyObject *py_proxy= this->GetProxy();
67                 PyObject *py_list= PySequence_List(py_proxy);
68                 PyObject *py_string= PyObject_Repr(py_list);
69                 Py_DECREF(py_list);
70                 Py_DECREF(py_proxy);
71                 return py_string;
72         }
73
74         KX_PYMETHOD_O(CListValue,append);
75         KX_PYMETHOD_NOARGS(CListValue,reverse);
76         KX_PYMETHOD_O(CListValue,index);
77         KX_PYMETHOD_O(CListValue,count);
78         KX_PYMETHOD_VARARGS(CListValue,get);
79         KX_PYMETHOD_O(CListValue,has_key);
80         KX_PYMETHOD_O(CListValue,from_id);
81
82         
83 private:
84
85         std::vector<CValue*> m_pValueArray;
86         bool    m_bReleaseContents;
87 };
88
89 #endif // !defined _LISTVALUE_H
90