X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/8d1f62f6525ccfdbcb83c64f701dbbc325c37dbd..d6901b1dd88c3215b23fc9f37280f6f112ce7b8b:/lib/gui/elistboxcontent.cpp diff --git a/lib/gui/elistboxcontent.cpp b/lib/gui/elistboxcontent.cpp index fdb270f8..cec1ea8c 100644 --- a/lib/gui/elistboxcontent.cpp +++ b/lib/gui/elistboxcontent.cpp @@ -105,10 +105,9 @@ int eListboxPythonStringContent::currentCursorSelectable() 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; @@ -145,12 +144,17 @@ void eListboxPythonStringContent::paint(gPainter &painter, eWindowStyle &style, 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)) + { + if (PyTuple_Size(item) == 1) + gray = 1; item = PyTuple_GET_ITEM(item, 0); + } if (item == Py_None) { @@ -161,6 +165,8 @@ void eListboxPythonStringContent::paint(gPainter &painter, eWindowStyle &style, { const char *string = PyString_Check(item) ? PyString_AsString(item) : ""; 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); } @@ -409,12 +415,12 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c goto error_out; } - PyObject *px = 0, *py = 0, *pwidth = 0, *pheight = 0, *pfnt = 0, *pstring = 0, *pflags = 0; + PyObject *px = 0, *py = 0, *pwidth = 0, *pheight = 0, *pfnt = 0, *pstring = 0, *pflags = 0, *pcolor = 0; /* we have a list of tuples: - (0, x, y, width, height, fnt, flags, "bla" ), + (0, x, y, width, height, fnt, flags, "bla"[, color] ), or, for a progress: (1, x, y, width, height, filled_percent ) @@ -453,6 +459,8 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c pflags = PyTuple_GET_ITEM(item, 6); pstring = PyTuple_GET_ITEM(item, 7); } + if (size > 8) + pcolor = PyTuple_GET_ITEM(item, 8); } switch (type) @@ -461,7 +469,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c { if (!(px && py && pwidth && pheight && pfnt && pstring)) { - eDebug("eListboxPythonMultiContent received too small tuple (must be (TYPE_TEXT, x, y, width, height, fnt, flags, string[, ...])"); + eDebug("eListboxPythonMultiContent received too small tuple (must be (TYPE_TEXT, x, y, width, height, fnt, flags, string, [color, ]...])"); goto error_out; } @@ -473,6 +481,12 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c int flags = PyInt_AsLong(pflags); int fnt = PyInt_AsLong(pfnt); + if (pcolor) + { + int color = PyInt_AsLong(pcolor); + painter.setForegroundColor(gRGB(color)); + } + if (m_font.find(fnt) == m_font.end()) { eDebug("eListboxPythonMultiContent: specified font %d was not found!", fnt); @@ -569,6 +583,9 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c eWarning("eListboxPythonMultiContent received unknown type (%d)", type); goto error_out; } + + if (pcolor) + style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal); } } @@ -581,7 +598,19 @@ error_out: int eListboxPythonMultiContent::currentCursorSelectable() { - return eListboxPythonStringContent::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 (PyList_Check(item)) + if (PyList_Check(item)) + { + item = PyList_GET_ITEM(item, 0); + if (item != Py_None) + return 1; + } + } + return 0; } void eListboxPythonMultiContent::setFont(int fnt, gFont *font)