fix all the bugs (but one or two) in instant recording ChoiceBox
[enigma2.git] / lib / gui / elistboxcontent.cpp
index cce9b614514fc138fe708ea3cc5be02669cc5384..cec1ea8c2f0b5a84a3e3a95e07b52d0248cf2b28 100644 (file)
@@ -105,10 +105,9 @@ int eListboxPythonStringContent::currentCursorSelectable()
        if (m_list && cursorValid())
        {
                PyObject *item = PyList_GET_ITEM(m_list, m_cursor);
        if (m_list && cursorValid())
        {
                PyObject *item = PyList_GET_ITEM(m_list, m_cursor);
-               if (PyTuple_Check(item))
-                       item = PyTuple_GET_ITEM(item, 0);
-               
-               if (item != Py_None)
+               if (!PyTuple_Check(item))
+                       return 1;
+               if (PyTuple_Size(item) >= 2)
                        return 1;
        }
        return 0;
                        return 1;
        }
        return 0;
@@ -145,12 +144,17 @@ void eListboxPythonStringContent::paint(gPainter &painter, eWindowStyle &style,
 
        if (m_list && cursorValid())
        {
 
        if (m_list && cursorValid())
        {
+               int gray = 0;
                PyObject *item = PyList_GET_ITEM(m_list, m_cursor); // borrowed reference!
                painter.setFont(fnt);
 
                        /* the user can supply tuples, in this case the first one will be displayed. */         
                if (PyTuple_Check(item))
                PyObject *item = PyList_GET_ITEM(m_list, m_cursor); // borrowed reference!
                painter.setFont(fnt);
 
                        /* the user can supply tuples, in this case the first one will be displayed. */         
                if (PyTuple_Check(item))
+               {
+                       if (PyTuple_Size(item) == 1)
+                               gray = 1;
                        item = PyTuple_GET_ITEM(item, 0);
                        item = PyTuple_GET_ITEM(item, 0);
+               }
                
                if (item == Py_None)
                {
                
                if (item == Py_None)
                {
@@ -161,6 +165,8 @@ void eListboxPythonStringContent::paint(gPainter &painter, eWindowStyle &style,
                {
                        const char *string = PyString_Check(item) ? PyString_AsString(item) : "<not-a-string>";
                        ePoint text_offset = offset + (selected ? ePoint(2, 2) : ePoint(1, 1));
                {
                        const char *string = PyString_Check(item) ? PyString_AsString(item) : "<not-a-string>";
                        ePoint text_offset = offset + (selected ? ePoint(2, 2) : ePoint(1, 1));
+                       if (gray)
+                               painter.setForegroundColor(gRGB(0x808080));
                        painter.renderText(eRect(text_offset, m_itemsize), string);
                }
                
                        painter.renderText(eRect(text_offset, m_itemsize), string);
                }
                
@@ -592,20 +598,17 @@ error_out:
 
 int eListboxPythonMultiContent::currentCursorSelectable()
 {
 
 int eListboxPythonMultiContent::currentCursorSelectable()
 {
+               /* each list-entry is a list of tuples. if the first of these is none, it's not selectable */
        if (m_list && cursorValid())
        {
                PyObject *item = PyList_GET_ITEM(m_list, m_cursor);
        if (m_list && cursorValid())
        {
                PyObject *item = PyList_GET_ITEM(m_list, m_cursor);
-
                if (PyList_Check(item))
                if (PyList_Check(item))
-               {
-                       item = PyList_GET_ITEM(item, 0);
-                       if (PyTuple_Check(item))
+                       if (PyList_Check(item))
                        {
                        {
-                               item = PyTuple_GET_ITEM(item, 0);
+                               item = PyList_GET_ITEM(item, 0);
                                if (item != Py_None)
                                        return 1;
                        }
                                if (item != Py_None)
                                        return 1;
                        }
-               }
        }
        return 0;
 }
        }
        return 0;
 }