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

superkaramba

meter_python.cpp
00001 /***************************************************************************
00002  * Copyright (C) 2003-2004 Adam Geitgey <adam@rootnode.org>                *
00003  * Copyright (C) 2003 Hans Karlsson <karlsson.h@home.se>                   *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  ***************************************************************************/
00010 
00011 #ifdef _XOPEN_SOURCE
00012 #undef _XOPEN_SOURCE
00013 #endif
00014 
00015 #include <Python.h>
00016 #include <tqobject.h>
00017 #include "karamba.h"
00018 #include "karambaapp.h"
00019 #include "meter.h"
00020 #include "meter_python.h"
00021 #include "lineparser.h"
00022 
00023 bool checkKaramba(long widget)
00024 {
00025 /*
00026   if (!karambaApp)
00027   {
00028     PyErr_SetString(PyExc_ValueError, "app pointer was 0.");
00029     return false;
00030   }
00031 */
00032   if (!widget)
00033   {
00034     PyErr_SetString(PyExc_ValueError, "widget pointer was 0.");
00035     return false;
00036   }
00037   if (!karambaApp->hasKaramba((karamba*)widget))
00038   {
00039     TQString tmp;
00040 
00041     tmp.sprintf("no %x widget found.", (unsigned int)widget);
00042     PyErr_SetString(PyExc_ValueError, tmp.ascii());
00043     return false;
00044   }
00045   return true;
00046 }
00047 
00048 bool checkMeter(long widget, long meter, const char* type)
00049 {
00050   if (!meter)
00051   {
00052     PyErr_SetString(PyExc_ValueError, "meter pointer was 0.");
00053     return false;
00054   }
00055   if (!((karamba*)widget)->hasMeter((Meter*)meter))
00056   {
00057     TQString tmp;
00058 
00059     tmp.sprintf("widget does not have meter %x.", (unsigned int)meter);
00060     PyErr_SetString(PyExc_ValueError, tmp.ascii());
00061     return false;
00062   }
00063   if (!((TQObject*)meter)->isA(type))
00064   {
00065     TQString tmp;
00066 
00067     tmp.sprintf("meter is not type of %s.", type);
00068     PyErr_SetString(PyExc_TypeError, tmp.ascii());
00069     return false;
00070   }
00071   return true;
00072 }
00073 
00074 bool checkKarambaAndMeter(long widget, long meter, const char* type)
00075 {
00076   return checkKaramba(widget) && checkMeter(widget, meter, type);
00077 }
00078 
00079 // This just throws awya extra bytes.
00080 // I guess there is a better way to do this...
00081 TQString fromUcs4(TQ_UINT32* ucs4)
00082 {
00083   TQString result = "";
00084   while(*ucs4 != 0)
00085   {
00086     result += TQChar((TQ_UINT16)*ucs4);
00087     ++ucs4;
00088   }
00089   return result;
00090 }
00091 
00092 // Converts a Python String to a TQString with Unicode support
00093 TQString PyString2TQString(PyObject* text)
00094 {
00095     TQString qtext;
00096     if (PyBytes_CheckExact(text))
00097     {
00098         char* t = PyBytes_AsString(text);
00099         qtext.setAscii(t);
00100     }
00101     else if (PyUnicode_CheckExact(text))
00102     {
00103         Py_UNICODE* t = PyUnicode_AsUnicode(text);
00104         if(sizeof(Py_UNICODE) == 4)
00105           qtext = fromUcs4((TQ_UINT32*)t);
00106         else
00107           qtext = TQString::fromUcs2((TQ_UINT16*)t);
00108     }
00109     else
00110     {
00111         // Error raise execption ...
00112     }
00113     return qtext;
00114 }
00115 
00116 // Converts a TQString to a Python String with Unicode support
00117 PyObject* TQString2PyString(TQString string)
00118 {
00119   PyObject *pyString;
00120 
00121   const unsigned short* tmp = string.ucs2();
00122   bool dofree = false;
00123 
00124   if(tmp)
00125   {
00126     #if Py_UNICODE_SIZE == 4
00127 
00128       Py_UNICODE* buf = new Py_UNICODE[string.length()];
00129       
00130       for(unsigned int i = 0; i < string.length(); i++)
00131       {
00132         buf[i] = tmp[i];
00133       }
00134       dofree = true;
00135 
00136     #else
00137 
00138       Py_UNICODE* buf = (Py_UNICODE*) tmp;
00139 
00140     #endif
00141 
00142     pyString = PyUnicode_FromUnicode(buf, string.length());
00143 
00144     if(dofree)
00145     {
00146       delete [] buf;
00147     }
00148   }
00149 
00150   else
00151     pyString = PyBytes_FromString("");
00152 
00153   return pyString;
00154 }
00155 
00156 
00157 long getMeter(long widget, char* name)
00158 {
00159   karamba* theme = (karamba*)widget;
00160   TQObjectListIt it( *theme->meterList ); // iterate over meters
00161 
00162   while ( it != 0 )
00163   {
00164     if (strcmp(((Meter*) *it)->name(), name) == 0)
00165       return (long)*it;
00166     ++it;
00167   }
00168   return 0;
00169 }
00170 
00171 PyObject* py_getThemeMeter(PyObject *, PyObject *args, TQString type)
00172 {
00173   long widget, meter;
00174   char* name;
00175   if (!PyArg_ParseTuple(args, (char*)"ls", &widget, &name))
00176     return NULL;
00177   if (!checkKaramba(widget))
00178     return NULL;
00179   if(!name)
00180     return NULL;
00181   meter = getMeter(widget, name);
00182   if (!checkMeter(widget, meter, type.ascii()))
00183     return NULL;
00184   return (Py_BuildValue((char*)"l", meter));
00185 }
00186 
00187 PyObject* py_getSize(PyObject *, PyObject *args, TQString type)
00188 {
00189   long widget;
00190   long meter;
00191   if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
00192     return NULL;
00193   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00194     return NULL;
00195   return Py_BuildValue((char*)"(i,i)", ((Meter*)meter)->getWidth(),
00196                                 ((Meter*)meter)->getHeight());
00197 }
00198 
00199 PyObject* py_resize(PyObject *, PyObject *args, TQString type)
00200 {
00201   long widget, meter, x, y;
00202   if (!PyArg_ParseTuple(args, (char*)"llll", &widget, &meter, &x, &y))
00203     return NULL;
00204   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00205     return NULL;
00206   ((Meter*)meter)->setSize(((Meter*)meter)->getX(), ((Meter*)meter)->getY(),
00207                            x, y);
00208   return Py_BuildValue((char*)"l", 1);
00209 }
00210 
00211 PyObject* py_getPos(PyObject *, PyObject *args, TQString type)
00212 {
00213   long widget, meter;
00214   if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
00215     return NULL;
00216   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00217     return NULL;
00218   return Py_BuildValue((char*)"(i,i)", ((Meter*)meter)->getX(),
00219                                 ((Meter*)meter)->getY());
00220 }
00221 
00222 PyObject* py_move(PyObject *, PyObject *args, TQString type)
00223 {
00224   long widget, meter, x, y;
00225   if (!PyArg_ParseTuple(args, (char*)"llll", &widget, &meter, &x, &y))
00226     return NULL;
00227   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00228     return NULL;
00229   ((Meter*)meter)->setSize(x, y,
00230                            ((Meter*)meter)->getWidth(),
00231                            ((Meter*)meter)->getHeight());
00232   return Py_BuildValue((char*)"l", 1);
00233 }
00234 
00235 PyObject* py_hide(PyObject *, PyObject *args, TQString type)
00236 {
00237   long widget, meter;
00238   if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
00239     return NULL;
00240   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00241     return NULL;
00242   ((Meter*)meter)->hide();
00243   return Py_BuildValue((char*)"l", 1);
00244 }
00245 
00246 PyObject* py_show(PyObject *, PyObject *args, TQString type)
00247 {
00248   long widget, meter;
00249   if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
00250     return NULL;
00251   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00252     return NULL;
00253   ((Meter*)meter)->show();
00254   return Py_BuildValue((char*)"l", 1);
00255 }
00256 
00257 PyObject* py_getValue(PyObject *, PyObject *args, TQString type)
00258 {
00259   long widget, meter;
00260   if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
00261     return NULL;
00262   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00263     return NULL;
00264   return Py_BuildValue((char*)"l", ((Meter*)meter)->getValue());
00265 }
00266 
00267 PyObject* py_setValue(PyObject *, PyObject *args, TQString type)
00268 {
00269   long widget, meter, l;
00270   if (!PyArg_ParseTuple(args, (char*)"lll", &widget, &meter, &l))
00271     return NULL;
00272   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00273     return NULL;
00274   ((Meter*)meter)->setValue(l);
00275   return Py_BuildValue((char*)"l", ((long)meter));
00276 }
00277 
00278 PyObject* py_getStringValue(PyObject *, PyObject *args, TQString type)
00279 {
00280   long widget, meter;
00281   if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
00282     return NULL;
00283   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00284     return NULL;
00285   return Py_BuildValue((char*)"O",
00286       TQString2PyString(((Meter*)meter)->getStringValue()));
00287 }
00288 
00289 PyObject* py_setStringValue(PyObject *, PyObject *args, TQString type)
00290 {
00291   long widget, meter;
00292   PyObject* s;
00293   if (!PyArg_ParseTuple(args, (char*)"llO", &widget, &meter, &s))
00294     return NULL;
00295   if (!s)
00296     return NULL;
00297   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00298     return NULL;
00299   ((Meter*)meter)->setValue(PyString2TQString(s));
00300   return Py_BuildValue((char*)"l", ((long)meter));
00301 }
00302 
00303 PyObject* py_getMinMax(PyObject *, PyObject *args, TQString type)
00304 {
00305   long widget, meter;
00306   if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
00307     return NULL;
00308   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00309     return NULL;
00310   return Py_BuildValue((char*)"(i,i)", ((Meter*)meter)->getMin(),
00311                                 ((Meter*)meter)->getMax());
00312 }
00313 
00314 PyObject* py_setMinMax(PyObject *, PyObject *args, TQString type)
00315 {
00316   long widget, meter, x, y;
00317   if (!PyArg_ParseTuple(args, (char*)"llll", &widget, &meter, &x, &y))
00318     return NULL;
00319   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00320     return NULL;
00321   ((Meter*)meter)->setMin(x);
00322   ((Meter*)meter)->setMax(y);
00323   return Py_BuildValue((char*)"l", 1);
00324 }
00325 
00326 PyObject* py_getSensor(PyObject *, PyObject *args, TQString type)
00327 {
00328   long widget, meter;
00329   TQString s;
00330   if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
00331     return NULL;
00332   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00333     return NULL;
00334   return Py_BuildValue((char*)"s",
00335                        ((karamba*)widget)->getSensor((Meter*)meter).ascii());
00336 }
00337 
00338 PyObject* py_setSensor(PyObject *, PyObject *args, TQString type)
00339 {
00340   long widget, meter;
00341   char* s;
00342 
00343   if (!PyArg_ParseTuple(args, (char*)"lls", &widget, &meter, &s))
00344     return NULL;
00345   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00346     return NULL;
00347   ((karamba*)widget)->setSensor(LineParser(s), (Meter*)meter);
00348   return Py_BuildValue((char*)"l", 1);
00349 }
00350 
00351 PyObject* py_setColor(PyObject *, PyObject *args, TQString type)
00352 {
00353   long widget, meter;
00354   long r, g, b;
00355   if (!PyArg_ParseTuple(args, (char*)"lllll", &widget, &meter, &r, &g, &b))
00356     return NULL;
00357   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00358     return NULL;
00359   ((Meter*)meter)->setColor(TQColor(r, g, b));
00360   return Py_BuildValue((char*)"l", 1);
00361 }
00362 
00363 PyObject* py_getColor(PyObject *, PyObject *args, TQString type)
00364 {
00365   long widget, meter;
00366   if (!PyArg_ParseTuple(args, (char*)"ll", &widget, &meter))
00367     return NULL;
00368   if (!checkKarambaAndMeter(widget, meter, type.ascii()))
00369     return NULL;
00370   TQColor color = ((Meter*)meter)->getColor();
00371   return Py_BuildValue((char*)"(i,i,i)", color.red(), color.green(), color.blue());
00372 }
00373 

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