]>
Commit | Line | Data |
---|---|---|
e91a9dfc RD |
1 | ///////////////////////////////////////////////////////////////////////////// |
2 | // Name: oglhelpers.cpp | |
3 | // Purpose: Some Helper functions to help in data conversions in OGL | |
4 | // | |
5 | // Author: Robin Dunn | |
6 | // | |
7 | // Created: 3-Sept-1999 | |
8 | // RCS-ID: $Id$ | |
9 | // Copyright: (c) 1998 by Total Control Software | |
10 | // Licence: wxWindows license | |
11 | ///////////////////////////////////////////////////////////////////////////// | |
12 | ||
13 | #include <Python.h> | |
14 | #include "helpers.h" | |
15 | ||
16 | //--------------------------------------------------------------------------- | |
17 | // This one will work for any class for the VERY generic cases, but beyond that | |
18 | // the helper needs to know more about the type. | |
19 | ||
20 | wxList* wxPy_wxListHelper(PyObject* pyList, char* className) { | |
21 | bool doSave = wxPyRestoreThread(); | |
22 | if (!PyList_Check(pyList)) { | |
23 | PyErr_SetString(PyExc_TypeError, "Expected a list object."); | |
24 | wxPySaveThread(doSave); | |
25 | return NULL; | |
26 | } | |
27 | int count = PyList_Size(pyList); | |
28 | wxList* list = new wxList; | |
29 | if (! list) { | |
30 | PyErr_SetString(PyExc_MemoryError, "Unable to allocate wxList object"); | |
31 | wxPySaveThread(doSave); | |
32 | return NULL; | |
33 | } | |
34 | for (int x=0; x<count; x++) { | |
35 | PyObject* pyo = PyList_GetItem(pyList, x); | |
36 | wxObject* wxo = NULL; | |
37 | ||
38 | if (SWIG_GetPtrObj(pyo, (void **)&wxo, className)) { | |
39 | char errmsg[1024]; | |
40 | sprintf(errmsg, "Type error, expected list of %s objects", className); | |
41 | PyErr_SetString(PyExc_TypeError, errmsg); | |
42 | wxPySaveThread(doSave); | |
43 | return NULL; | |
44 | } | |
45 | list->Append(wxo); | |
46 | } | |
47 | wxPySaveThread(doSave); | |
48 | return list; | |
49 | } | |
50 | ||
51 | //--------------------------------------------------------------------------- | |
52 | ||
53 | wxList* wxPy_wxRealPoint_ListHelper(PyObject* pyList) { | |
54 | bool doSave = wxPyRestoreThread(); | |
55 | if (!PyList_Check(pyList)) { | |
56 | PyErr_SetString(PyExc_TypeError, "Expected a list object."); | |
57 | wxPySaveThread(doSave); | |
58 | return NULL; | |
59 | } | |
60 | int count = PyList_Size(pyList); | |
61 | wxList* list = new wxList; | |
62 | if (! list) { | |
63 | PyErr_SetString(PyExc_MemoryError, "Unable to allocate wxList object"); | |
64 | wxPySaveThread(doSave); | |
65 | return NULL; | |
66 | } | |
67 | for (int x=0; x<count; x++) { | |
68 | PyObject* pyo = PyList_GetItem(pyList, x); | |
69 | ||
70 | if (PyTuple_Check(pyo)) { | |
71 | PyObject* o1 = PyNumber_Float(PyTuple_GetItem(pyo, 0)); | |
72 | PyObject* o2 = PyNumber_Float(PyTuple_GetItem(pyo, 1)); | |
73 | ||
74 | double val1 = (o1 ? PyFloat_AsDouble(o1) : 0.0); | |
75 | double val2 = (o2 ? PyFloat_AsDouble(o2) : 0.0); | |
76 | ||
77 | list->Append((wxObject*) new wxRealPoint(val1, val2)); | |
78 | ||
79 | } else { | |
80 | wxRealPoint* wxo = NULL; | |
81 | if (SWIG_GetPtrObj(pyo, (void **)&wxo, "_wxRealPoint_p")) { | |
82 | PyErr_SetString(PyExc_TypeError, "Type error, expected list of wxRealPoint objects or 2-tuples"); | |
83 | wxPySaveThread(doSave); | |
84 | return NULL; | |
85 | } | |
86 | list->Append((wxObject*) new wxRealPoint(*wxo)); | |
87 | } | |
88 | } | |
89 | wxPySaveThread(doSave); | |
90 | return list; | |
91 | } | |
92 | ||
93 | ||
94 | //--------------------------------------------------------------------------- | |
e91a9dfc | 95 | |
e91a9dfc | 96 | |
e91a9dfc | 97 | |
e91a9dfc | 98 | |
e91a9dfc RD |
99 | |
100 | ||
101 | ||
102 | ||
103 |