• 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 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
117PyObject* 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
157long 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
171PyObject* 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
187PyObject* 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
199PyObject* 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
211PyObject* 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
222PyObject* 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
235PyObject* 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
246PyObject* 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
257PyObject* 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
267PyObject* 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
278PyObject* 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
289PyObject* 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
303PyObject* 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
314PyObject* 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
326PyObject* 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
338PyObject* 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
351PyObject* 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
363PyObject* 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
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.