- beautified network cursor, added 'selected' argument to __call__
authorFelix Domke <tmbinc@elitedvb.net>
Sat, 3 Sep 2005 21:26:19 +0000 (21:26 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Sat, 3 Sep 2005 21:26:19 +0000 (21:26 +0000)
lib/gui/elistboxcontent.cpp
lib/python/Components/config.py
lib/python/python.cpp

index 1c27f76..fe5f38d 100644 (file)
@@ -1,5 +1,6 @@
 #include <lib/gui/elistbox.h>
 #include <lib/gui/elistboxcontent.h>
+#include <lib/gdi/font.h>
 #include <Python.h>
 
 /*
@@ -421,8 +422,16 @@ void eListboxPythonConfigContent::paint(gPainter &painter, eWindowStyle &style,
                                /* now, handle the value. get 2nd part from tuple*/
                        value = PyTuple_GetItem(item, 1);
                        if (value)
+                       {
+                               PyObject *args = PyTuple_New(1);
+                               PyTuple_SetItem(args, 0, PyInt_FromLong(selected));
+                               
                                        /* CallObject will call __call__ which should return the value tuple */
-                               value = PyObject_CallObject(value, 0);
+                               value = PyObject_CallObject(value, args);
+
+                               Py_DECREF(args);
+                                       /* the PyInt was stolen. */
+                       }
                        
                                /*  check if this is really a tuple */
                        if (PyTuple_Check(value))
@@ -459,6 +468,48 @@ void eListboxPythonConfigContent::paint(gPainter &painter, eWindowStyle &style,
                                                painter.fill(eRect(offset.x() + m_seperation, offset.y() + 5, width, height-10));
                                                
                                                        /* pvalue is borrowed */
+                                       } else if (!strcmp(atype, "mtext"))
+                                       {
+                                               PyObject *pvalue = PyTuple_GetItem(value, 1);
+                                               const char *text = (pvalue && PyString_Check(pvalue)) ? PyString_AsString(pvalue) : "<not-a-string>";
+                                               
+                                               ePtr<eTextPara> para = new eTextPara(eRect(offset + eSize(m_seperation, 0), item_right));
+                                               para->setFont(fnt2);
+                                               para->renderString(text, 0);
+                                               para->realign(eTextPara::dirRight);
+                                               int glyphs = para->size();
+                                               
+                                               PyObject *plist = 0;
+                                               
+                                               if (PyTuple_Size(value) >= 3)
+                                                       plist = PyTuple_GetItem(value, 2);
+                                               
+                                               int entries = 0;
+
+                                               if (plist && PyList_Check(plist))
+                                                       entries = PyList_Size(plist);
+                                               
+                                               for (int i = 0; i < entries; ++i)
+                                               {
+                                                       PyObject *entry = PyList_GetItem(plist, i);
+                                                       int num = PyInt_Check(entry) ? PyInt_AsLong(entry) : -1;
+                                                       
+                                                       if ((num < 0) || (num >= glyphs))
+                                                               eWarning("glyph index %d in PythonConfigList out of bounds!");
+                                                       else
+                                                       {
+                                                               para->setGlyphFlag(num, GS_INVERT);
+                                                               eRect bbox;
+                                                               bbox = para->getGlyphBBox(num);
+                                                               bbox = eRect(bbox.left(), offset.y(), bbox.width(), m_itemsize.height());
+                                                               painter.fill(bbox);
+                                                       }
+                                                               /* entry is borrowed */
+                                               }
+                                               
+                                               painter.renderPara(para, ePoint(0, 0));
+                                                       /* pvalue is borrowed */
+                                                       /* plist is 0 or borrowed */
                                        }
                                }
                                Py_XDECREF(type);
index 2fd0ff1..494d1d8 100644 (file)
@@ -74,8 +74,8 @@ class configSelection:
 
                self.parent.change()    
 
-       def __call__(self):                     #needed by configlist
-               self.checkValues()                      
+       def __call__(self, selected):                   #needed by configlist
+               self.checkValues()
                return ("text", self.parent.vals[self.parent.value])
                
 class configSequence:
@@ -114,24 +114,25 @@ class configSequence:
                #FIXME: dont call when press left/right
                self.parent.change()    
 
-       def __call__(self):                     #needed by configlist
+       def __call__(self, selected):                   #needed by configlist
                value = ""
                mPos = self.markedPos
                print mPos
                for i in self.parent.value:
-                       if value != "": #fixme no heading separator possible
+                       if len(value):  #fixme no heading separator possible
                                value += self.parent.vals[0]
                                if mPos >= len(value) - 1:
                                        mPos += 1
                                
                        diff =  self.parent.vals[1] - len(str(i))
                        if diff > 0:
+                               # if this helps?!
                                value += " " * diff
                        value +=        str(i)
-# or the above code if you have to spare ink
-#              value = ((len(self.parent.value) * ("%0" + str(self.parent.vals[1]) + "d" + self.parent.vals[0]))[0:-1]) % tuple(self.parent.value)
-               value = value[0:mPos] + "_" + value[mPos + 1:]
-               return ("text", value)
+
+                       # only mark cursor when we are selected
+                       # (this code is heavily ink optimized!)
+               return ("mtext"[1-selected:], value, [mPos])
 
 class configValue:
        def __init__(self, obj):
@@ -175,8 +176,8 @@ class ConfigSlider:
                self.checkValues()      
                self.parent.change()    
 
-       def __call__(self):                     #needed by configlist
-               self.checkValues()      
+       def __call__(self, selected):                   #needed by configlist
+               self.checkValues()
                return ("slider", self.parent.value * 10)
 
 class ConfigSubsection:
index 5e3ccc8..642d70b 100644 (file)
@@ -132,7 +132,6 @@ PyObject *ePython::resolve(const std::string &pythonfile, const std::string &fun
                pFunc = PyDict_GetItemString(pDict, funcname.c_str());
                Py_XINCREF(pFunc);
                Py_DECREF(pModule);
-               eDebug("resolved to %p", pFunc);
                return pFunc;
        } else
        {