• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • superkaramba
 

superkaramba

  • superkaramba
  • src
meter_python.cpp
1 /***************************************************************************
2  * Copyright (C) 2003-2004 Adam Geitgey <adam@rootnode.org> *
3  * Copyright (C) 2003 Hans Karlsson <karlsson.h@home.se> *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) any later version. *
9  ***************************************************************************/
10 
11 #ifdef _XOPEN_SOURCE
12 #undef _XOPEN_SOURCE
13 #endif
14 
15 #include <Python.h>
16 #include <tqobject.h>
17 #include "karamba.h"
18 #include "karambaapp.h"
19 #include "meter.h"
20 #include "meter_python.h"
21 #include "lineparser.h"
22 
23 bool checkKaramba(long widget)
24 {
25 /*
26  if (!karambaApp)
27  {
28  PyErr_SetString(PyExc_ValueError, "app pointer was 0.");
29  return false;
30  }
31 */
32  if (!widget)
33  {
34  PyErr_SetString(PyExc_ValueError, "widget pointer was 0.");
35  return false;
36  }
37  if (!karambaApp->hasKaramba((karamba*)widget))
38  {
39  TQString tmp;
40 
41  tmp.sprintf("no %x widget found.", (unsigned int)widget);
42  PyErr_SetString(PyExc_ValueError, tmp.ascii());
43  return false;
44  }
45  return true;
46 }
47 
48 bool checkMeter(long widget, long meter, const char* type)
49 {
50  if (!meter)
51  {
52  PyErr_SetString(PyExc_ValueError, "meter pointer was 0.");
53  return false;
54  }
55  if (!((karamba*)widget)->hasMeter((Meter*)meter))
56  {
57  TQString tmp;
58 
59  tmp.sprintf("widget does not have meter %x.", (unsigned int)meter);
60  PyErr_SetString(PyExc_ValueError, tmp.ascii());
61  return false;
62  }
63  if (!((TQObject*)meter)->isA(type))
64  {
65  TQString tmp;
66 
67  tmp.sprintf("meter is not type of %s.", type);
68  PyErr_SetString(PyExc_TypeError, tmp.ascii());
69  return false;
70  }
71  return true;
72 }
73 
74 bool checkKarambaAndMeter(long widget, long meter, const char* type)
75 {
76  return checkKaramba(widget) && checkMeter(widget, meter, type);
77 }
78 
79 // This just throws awya extra bytes.
80 // I guess there is a better way to do this...
81 TQString fromUcs4(TQ_UINT32* ucs4)
82 {
83  TQString result = "";
84  while(*ucs4 != 0)
85  {
86  result += TQChar((TQ_UINT16)*ucs4);
87  ++ucs4;
88  }
89  return result;
90 }
91 
92 // Converts a Python String to a TQString with Unicode support
93 TQString PyString2TQString(PyObject* text)
94 {
95  TQString qtext;
96  if (PyBytes_CheckExact(text))
97  {
98  char* t = PyBytes_AsString(text);
99  qtext.setAscii(t);
100  }
101  else if (PyUnicode_CheckExact(text))
102  {
103  int uniSize = PyUnicode_KIND(text);
104  if (uniSize == PyUnicode_4BYTE_KIND)
105  qtext = fromUcs4((TQ_UINT32*)PyUnicode_4BYTE_DATA(text));
106  else if (uniSize == PyUnicode_2BYTE_KIND)
107  qtext = TQString::fromUcs2((TQ_UINT16*)PyUnicode_2BYTE_DATA(text));
108  else if (uniSize == PyUnicode_1BYTE_KIND)
109  qtext.setAscii((char*)PyUnicode_1BYTE_DATA(text));
110  }
111  else
112  {
113  // Error raise execption ...
114  }
115  return qtext;
116 }
117 
118 // Converts a TQString to a Python String with Unicode support
119 PyObject* TQString2PyString(TQString string)
120 {
121  PyObject *pyString;
122 
123  const unsigned short* tmp = string.ucs2();
124 
125  if(tmp)
126  {
127  pyString = PyUnicode_FromKindAndData(PyUnicode_2BYTE_KIND, tmp, string.length());
128  }
129  else
130  pyString = PyBytes_FromString("");
131 
132  return pyString;
133 }
134 
135 
136 long getMeter(long widget, char* name)
137 {
138  karamba* theme = (karamba*)widget;
139  TQObjectListIt it( *theme->meterList ); // iterate over meters
140 
141  while ( it != 0 )
142  {
143  if (strcmp(((Meter*) *it)->name(), name) == 0)
144  return (long)*it;
145  ++it;
146  }
147  return 0;
148 }
149 
150 PyObject* py_getThemeMeter(PyObject *, PyObject *args, TQString type)
151 {
152  long widget, meter;
153  char* name;
154  if (!PyArg_ParseTuple(args, (char*)"ls", &widget, &name))
155  return NULL;
156  if (!checkKaramba(widget))
157  return NULL;
158  if(!name)
159  return NULL;
160  meter = getMeter(widget, name);
161  if (!checkMeter(widget, meter, type.ascii()))
162  return NULL;
163  return (Py_BuildValue((char*)"l", meter));
164 }
165 
166 PyObject* py_getSize(PyObject *, PyObject *args, TQString type)
167 {
168  long widget;
169  long meter;
170  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
171  return NULL;
172  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
173  return NULL;
174  return Py_BuildValue((char*)"(i,i)", ((Meter*)meter)->getWidth(),
175  ((Meter*)meter)->getHeight());
176 }
177 
178 PyObject* py_resize(PyObject *, PyObject *args, TQString type)
179 {
180  long widget, meter, x, y;
181  if (!PyArg_ParseTuple(args, (char*)"llll", &widget, &meter, &x, &y))
182  return NULL;
183  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
184  return NULL;
185  ((Meter*)meter)->setSize(((Meter*)meter)->getX(), ((Meter*)meter)->getY(),
186  x, y);
187  return Py_BuildValue((char*)"l", 1);
188 }
189 
190 PyObject* py_getPos(PyObject *, PyObject *args, TQString type)
191 {
192  long widget, meter;
193  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
194  return NULL;
195  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
196  return NULL;
197  return Py_BuildValue((char*)"(i,i)", ((Meter*)meter)->getX(),
198  ((Meter*)meter)->getY());
199 }
200 
201 PyObject* py_move(PyObject *, PyObject *args, TQString type)
202 {
203  long widget, meter, x, y;
204  if (!PyArg_ParseTuple(args, (char*)"llll", &widget, &meter, &x, &y))
205  return NULL;
206  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
207  return NULL;
208  ((Meter*)meter)->setSize(x, y,
209  ((Meter*)meter)->getWidth(),
210  ((Meter*)meter)->getHeight());
211  return Py_BuildValue((char*)"l", 1);
212 }
213 
214 PyObject* py_hide(PyObject *, PyObject *args, TQString type)
215 {
216  long widget, meter;
217  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
218  return NULL;
219  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
220  return NULL;
221  ((Meter*)meter)->hide();
222  return Py_BuildValue((char*)"l", 1);
223 }
224 
225 PyObject* py_show(PyObject *, PyObject *args, TQString type)
226 {
227  long widget, meter;
228  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
229  return NULL;
230  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
231  return NULL;
232  ((Meter*)meter)->show();
233  return Py_BuildValue((char*)"l", 1);
234 }
235 
236 PyObject* py_getValue(PyObject *, PyObject *args, TQString type)
237 {
238  long widget, meter;
239  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
240  return NULL;
241  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
242  return NULL;
243  return Py_BuildValue((char*)"l", ((Meter*)meter)->getValue());
244 }
245 
246 PyObject* py_setValue(PyObject *, PyObject *args, TQString type)
247 {
248  long widget, meter, l;
249  if (!PyArg_ParseTuple(args, (char*)"lll", &widget, &meter, &l))
250  return NULL;
251  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
252  return NULL;
253  ((Meter*)meter)->setValue(l);
254  return Py_BuildValue((char*)"l", ((long)meter));
255 }
256 
257 PyObject* py_getStringValue(PyObject *, PyObject *args, TQString type)
258 {
259  long widget, meter;
260  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
261  return NULL;
262  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
263  return NULL;
264  return Py_BuildValue((char*)"O",
265  TQString2PyString(((Meter*)meter)->getStringValue()));
266 }
267 
268 PyObject* py_setStringValue(PyObject *, PyObject *args, TQString type)
269 {
270  long widget, meter;
271  PyObject* s;
272  if (!PyArg_ParseTuple(args, (char*)"llO", &widget, &meter, &s))
273  return NULL;
274  if (!s)
275  return NULL;
276  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
277  return NULL;
278  ((Meter*)meter)->setValue(PyString2TQString(s));
279  return Py_BuildValue((char*)"l", ((long)meter));
280 }
281 
282 PyObject* py_getMinMax(PyObject *, PyObject *args, TQString type)
283 {
284  long widget, meter;
285  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
286  return NULL;
287  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
288  return NULL;
289  return Py_BuildValue((char*)"(i,i)", ((Meter*)meter)->getMin(),
290  ((Meter*)meter)->getMax());
291 }
292 
293 PyObject* py_setMinMax(PyObject *, PyObject *args, TQString type)
294 {
295  long widget, meter, x, y;
296  if (!PyArg_ParseTuple(args, (char*)"llll", &widget, &meter, &x, &y))
297  return NULL;
298  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
299  return NULL;
300  ((Meter*)meter)->setMin(x);
301  ((Meter*)meter)->setMax(y);
302  return Py_BuildValue((char*)"l", 1);
303 }
304 
305 PyObject* py_getSensor(PyObject *, PyObject *args, TQString type)
306 {
307  long widget, meter;
308  TQString s;
309  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
310  return NULL;
311  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
312  return NULL;
313  return Py_BuildValue((char*)"s",
314  ((karamba*)widget)->getSensor((Meter*)meter).ascii());
315 }
316 
317 PyObject* py_setSensor(PyObject *, PyObject *args, TQString type)
318 {
319  long widget, meter;
320  char* s;
321 
322  if (!PyArg_ParseTuple(args, (char*)"lls", &widget, &meter, &s))
323  return NULL;
324  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
325  return NULL;
326  ((karamba*)widget)->setSensor(LineParser(s), (Meter*)meter);
327  return Py_BuildValue((char*)"l", 1);
328 }
329 
330 PyObject* py_setColor(PyObject *, PyObject *args, TQString type)
331 {
332  long widget, meter;
333  long r, g, b;
334  if (!PyArg_ParseTuple(args, (char*)"lllll", &widget, &meter, &r, &g, &b))
335  return NULL;
336  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
337  return NULL;
338  ((Meter*)meter)->setColor(TQColor(r, g, b));
339  return Py_BuildValue((char*)"l", 1);
340 }
341 
342 PyObject* py_getColor(PyObject *, PyObject *args, TQString type)
343 {
344  long widget, meter;
345  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
346  return NULL;
347  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
348  return NULL;
349  TQColor color = ((Meter*)meter)->getColor();
350  return Py_BuildValue((char*)"(i,i,i)", color.red(), color.green(), color.blue());
351 }
352 
py_hide
PyObject * py_hide(PyObject *self, PyObject *args)
Misc/hide.
Definition: misc_python.cpp:641
py_show
PyObject * py_show(PyObject *self, PyObject *args)
Misc/show.
Definition: misc_python.cpp:623
LineParser
Definition: lineparser.h:33

superkaramba

Skip menu "superkaramba"
  • Main Page
  • Alphabetical List
  • Class List
  • File List
  • Class Members

superkaramba

Skip menu "superkaramba"
  • kcalc
  •   knumber
  • superkaramba
Generated for superkaramba by doxygen 1.8.13
This website is maintained by Timothy Pearson.