• 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
23bool 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
48bool 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
74bool 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...
81TQString 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
93TQString 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
119PyObject* 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
136long 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
150PyObject* 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
166PyObject* 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
178PyObject* 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
190PyObject* 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
201PyObject* 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
214PyObject* 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
225PyObject* 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
236PyObject* 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
246PyObject* 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
257PyObject* 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
268PyObject* 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
282PyObject* 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
293PyObject* 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
305PyObject* 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
317PyObject* 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
330PyObject* 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
342PyObject* 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
LineParser
Definition: lineparser.h:34
py_show
PyObject * py_show(PyObject *self, PyObject *args)
Misc/show.
Definition: misc_python.cpp:623
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.9.4
This website is maintained by Timothy Pearson.