• 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  Py_UNICODE* t = PyUnicode_AsUnicode(text);
104  if(sizeof(Py_UNICODE) == 4)
105  qtext = fromUcs4((TQ_UINT32*)t);
106  else
107  qtext = TQString::fromUcs2((TQ_UINT16*)t);
108  }
109  else
110  {
111  // Error raise execption ...
112  }
113  return qtext;
114 }
115 
116 // Converts a TQString to a Python String with Unicode support
117 PyObject* TQString2PyString(TQString string)
118 {
119  PyObject *pyString;
120 
121  const unsigned short* tmp = string.ucs2();
122  bool dofree = false;
123 
124  if(tmp)
125  {
126  #if Py_UNICODE_SIZE == 4
127 
128  Py_UNICODE* buf = new Py_UNICODE[string.length()];
129 
130  for(unsigned int i = 0; i < string.length(); i++)
131  {
132  buf[i] = tmp[i];
133  }
134  dofree = true;
135 
136  #else
137 
138  Py_UNICODE* buf = (Py_UNICODE*) tmp;
139 
140  #endif
141 
142  pyString = PyUnicode_FromUnicode(buf, string.length());
143 
144  if(dofree)
145  {
146  delete [] buf;
147  }
148  }
149 
150  else
151  pyString = PyBytes_FromString("");
152 
153  return pyString;
154 }
155 
156 
157 long getMeter(long widget, char* name)
158 {
159  karamba* theme = (karamba*)widget;
160  TQObjectListIt it( *theme->meterList ); // iterate over meters
161 
162  while ( it != 0 )
163  {
164  if (strcmp(((Meter*) *it)->name(), name) == 0)
165  return (long)*it;
166  ++it;
167  }
168  return 0;
169 }
170 
171 PyObject* py_getThemeMeter(PyObject *, PyObject *args, TQString type)
172 {
173  long widget, meter;
174  char* name;
175  if (!PyArg_ParseTuple(args, (char*)"ls", &widget, &name))
176  return NULL;
177  if (!checkKaramba(widget))
178  return NULL;
179  if(!name)
180  return NULL;
181  meter = getMeter(widget, name);
182  if (!checkMeter(widget, meter, type.ascii()))
183  return NULL;
184  return (Py_BuildValue((char*)"l", meter));
185 }
186 
187 PyObject* py_getSize(PyObject *, PyObject *args, TQString type)
188 {
189  long widget;
190  long meter;
191  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
192  return NULL;
193  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
194  return NULL;
195  return Py_BuildValue((char*)"(i,i)", ((Meter*)meter)->getWidth(),
196  ((Meter*)meter)->getHeight());
197 }
198 
199 PyObject* py_resize(PyObject *, PyObject *args, TQString type)
200 {
201  long widget, meter, x, y;
202  if (!PyArg_ParseTuple(args, (char*)"llll", &widget, &meter, &x, &y))
203  return NULL;
204  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
205  return NULL;
206  ((Meter*)meter)->setSize(((Meter*)meter)->getX(), ((Meter*)meter)->getY(),
207  x, y);
208  return Py_BuildValue((char*)"l", 1);
209 }
210 
211 PyObject* py_getPos(PyObject *, PyObject *args, TQString type)
212 {
213  long widget, meter;
214  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
215  return NULL;
216  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
217  return NULL;
218  return Py_BuildValue((char*)"(i,i)", ((Meter*)meter)->getX(),
219  ((Meter*)meter)->getY());
220 }
221 
222 PyObject* py_move(PyObject *, PyObject *args, TQString type)
223 {
224  long widget, meter, x, y;
225  if (!PyArg_ParseTuple(args, (char*)"llll", &widget, &meter, &x, &y))
226  return NULL;
227  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
228  return NULL;
229  ((Meter*)meter)->setSize(x, y,
230  ((Meter*)meter)->getWidth(),
231  ((Meter*)meter)->getHeight());
232  return Py_BuildValue((char*)"l", 1);
233 }
234 
235 PyObject* py_hide(PyObject *, PyObject *args, TQString type)
236 {
237  long widget, meter;
238  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
239  return NULL;
240  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
241  return NULL;
242  ((Meter*)meter)->hide();
243  return Py_BuildValue((char*)"l", 1);
244 }
245 
246 PyObject* py_show(PyObject *, PyObject *args, TQString type)
247 {
248  long widget, meter;
249  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
250  return NULL;
251  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
252  return NULL;
253  ((Meter*)meter)->show();
254  return Py_BuildValue((char*)"l", 1);
255 }
256 
257 PyObject* py_getValue(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*)"l", ((Meter*)meter)->getValue());
265 }
266 
267 PyObject* py_setValue(PyObject *, PyObject *args, TQString type)
268 {
269  long widget, meter, l;
270  if (!PyArg_ParseTuple(args, (char*)"lll", &widget, &meter, &l))
271  return NULL;
272  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
273  return NULL;
274  ((Meter*)meter)->setValue(l);
275  return Py_BuildValue((char*)"l", ((long)meter));
276 }
277 
278 PyObject* py_getStringValue(PyObject *, PyObject *args, TQString type)
279 {
280  long widget, meter;
281  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
282  return NULL;
283  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
284  return NULL;
285  return Py_BuildValue((char*)"O",
286  TQString2PyString(((Meter*)meter)->getStringValue()));
287 }
288 
289 PyObject* py_setStringValue(PyObject *, PyObject *args, TQString type)
290 {
291  long widget, meter;
292  PyObject* s;
293  if (!PyArg_ParseTuple(args, (char*)"llO", &widget, &meter, &s))
294  return NULL;
295  if (!s)
296  return NULL;
297  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
298  return NULL;
299  ((Meter*)meter)->setValue(PyString2TQString(s));
300  return Py_BuildValue((char*)"l", ((long)meter));
301 }
302 
303 PyObject* py_getMinMax(PyObject *, PyObject *args, TQString type)
304 {
305  long widget, meter;
306  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
307  return NULL;
308  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
309  return NULL;
310  return Py_BuildValue((char*)"(i,i)", ((Meter*)meter)->getMin(),
311  ((Meter*)meter)->getMax());
312 }
313 
314 PyObject* py_setMinMax(PyObject *, PyObject *args, TQString type)
315 {
316  long widget, meter, x, y;
317  if (!PyArg_ParseTuple(args, (char*)"llll", &widget, &meter, &x, &y))
318  return NULL;
319  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
320  return NULL;
321  ((Meter*)meter)->setMin(x);
322  ((Meter*)meter)->setMax(y);
323  return Py_BuildValue((char*)"l", 1);
324 }
325 
326 PyObject* py_getSensor(PyObject *, PyObject *args, TQString type)
327 {
328  long widget, meter;
329  TQString s;
330  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
331  return NULL;
332  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
333  return NULL;
334  return Py_BuildValue((char*)"s",
335  ((karamba*)widget)->getSensor((Meter*)meter).ascii());
336 }
337 
338 PyObject* py_setSensor(PyObject *, PyObject *args, TQString type)
339 {
340  long widget, meter;
341  char* s;
342 
343  if (!PyArg_ParseTuple(args, (char*)"lls", &widget, &meter, &s))
344  return NULL;
345  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
346  return NULL;
347  ((karamba*)widget)->setSensor(LineParser(s), (Meter*)meter);
348  return Py_BuildValue((char*)"l", 1);
349 }
350 
351 PyObject* py_setColor(PyObject *, PyObject *args, TQString type)
352 {
353  long widget, meter;
354  long r, g, b;
355  if (!PyArg_ParseTuple(args, (char*)"lllll", &widget, &meter, &r, &g, &b))
356  return NULL;
357  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
358  return NULL;
359  ((Meter*)meter)->setColor(TQColor(r, g, b));
360  return Py_BuildValue((char*)"l", 1);
361 }
362 
363 PyObject* py_getColor(PyObject *, PyObject *args, TQString type)
364 {
365  long widget, meter;
366  if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
367  return NULL;
368  if (!checkKarambaAndMeter(widget, meter, type.ascii()))
369  return NULL;
370  TQColor color = ((Meter*)meter)->getColor();
371  return Py_BuildValue((char*)"(i,i,i)", color.red(), color.green(), color.blue());
372 }
373 
py_show
PyObject * py_show(PyObject *self, PyObject *args)
Misc/show.
Definition: misc_python.cpp:623
LineParser
Definition: lineparser.h:34
py_hide
PyObject * py_hide(PyObject *self, PyObject *args)
Misc/hide.
Definition: misc_python.cpp:641

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.18
This website is maintained by Timothy Pearson.