X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/a194b290cad5bfd10126b9a225b08e2c58c5c990..8ea443e11cc862e68ebc092f7c9def2a4b811771:/lib/gui/elistboxcontent.cpp diff --git a/lib/gui/elistboxcontent.cpp b/lib/gui/elistboxcontent.cpp index 67acd83f..ff93eac2 100644 --- a/lib/gui/elistboxcontent.cpp +++ b/lib/gui/elistboxcontent.cpp @@ -260,6 +260,7 @@ eListboxPythonStringContent::eListboxPythonStringContent() eListboxPythonStringContent::~eListboxPythonStringContent() { + Py_XDECREF(m_list); } void eListboxPythonStringContent::cursorHome() @@ -335,12 +336,12 @@ void eListboxPythonStringContent::paint(gPainter &painter, eWindowStyle &style, if (m_list && cursorValid()) { - PyObject *item = PyList_GetItem(m_list, m_cursor); // borrowed reference! + 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)) - item = PyTuple_GetItem(item, 0); + item = PyTuple_GET_ITEM(item, 0); const char *string = PyString_Check(item) ? PyString_AsString(item) : ""; @@ -377,7 +378,7 @@ PyObject *eListboxPythonStringContent::getCurrentSelection() return 0; if (!cursorValid()) return 0; - PyObject *r = PyList_GetItem(m_list, m_cursor); + PyObject *r = PyList_GET_ITEM(m_list, m_cursor); Py_XINCREF(r); return r; } @@ -408,7 +409,7 @@ void eListboxPythonConfigContent::paint(gPainter &painter, eWindowStyle &style, if (m_list && cursorValid()) { /* get current list item */ - PyObject *item = PyList_GetItem(m_list, m_cursor); // borrowed reference! + PyObject *item = PyList_GET_ITEM(m_list, m_cursor); // borrowed reference! PyObject *text = 0, *value = 0; painter.setFont(fnt); @@ -422,7 +423,7 @@ void eListboxPythonConfigContent::paint(gPainter &painter, eWindowStyle &style, { /* handle left part. get item from tuple, convert to string, display. */ - text = PyTuple_GetItem(item, 0); + text = PyTuple_GET_ITEM(item, 0); text = PyObject_Str(text); /* creates a new object - old object was borrowed! */ const char *string = (text && PyString_Check(text)) ? PyString_AsString(text) : ""; eSize item_left = eSize(m_seperation, m_itemsize.height()); @@ -430,12 +431,16 @@ void eListboxPythonConfigContent::paint(gPainter &painter, eWindowStyle &style, painter.renderText(eRect(offset, item_left), string, gPainter::RT_HALIGN_LEFT); Py_XDECREF(text); + /* when we have no label, align value to the left. (FIXME: + don't we want to specifiy this individually?) */ + int value_alignment_left = !*string; + /* now, handle the value. get 2nd part from tuple*/ - value = PyTuple_GetItem(item, 1); + value = PyTuple_GET_ITEM(item, 1); if (value) { PyObject *args = PyTuple_New(1); - PyTuple_SetItem(args, 0, PyInt_FromLong(selected)); + PyTuple_SET_ITEM(args, 0, PyInt_FromLong(selected)); /* CallObject will call __call__ which should return the value tuple */ value = PyObject_CallObject(value, args); @@ -451,22 +456,25 @@ void eListboxPythonConfigContent::paint(gPainter &painter, eWindowStyle &style, if (value && PyTuple_Check(value)) { /* convert type to string */ - PyObject *type = PyTuple_GetItem(value, 0); + PyObject *type = PyTuple_GET_ITEM(value, 0); const char *atype = (type && PyString_Check(type)) ? PyString_AsString(type) : 0; if (atype) { if (!strcmp(atype, "text")) { - PyObject *pvalue = PyTuple_GetItem(value, 1); + PyObject *pvalue = PyTuple_GET_ITEM(value, 1); const char *value = (pvalue && PyString_Check(pvalue)) ? PyString_AsString(pvalue) : ""; painter.setFont(fnt2); - painter.renderText(eRect(offset + eSize(m_seperation, 0), item_right), value, gPainter::RT_HALIGN_RIGHT); + if (value_alignment_left) + painter.renderText(eRect(offset, item_right), value, gPainter::RT_HALIGN_LEFT); + else + painter.renderText(eRect(offset + eSize(m_seperation, 0), item_right), value, gPainter::RT_HALIGN_RIGHT); /* pvalue is borrowed */ } else if (!strcmp(atype, "slider")) { - PyObject *pvalue = PyTuple_GetItem(value, 1); + PyObject *pvalue = PyTuple_GET_ITEM(value, 1); /* convert value to Long. fallback to -1 on error. */ int value = (pvalue && PyInt_Check(pvalue)) ? PyInt_AsLong(pvalue) : -1; @@ -484,19 +492,19 @@ void eListboxPythonConfigContent::paint(gPainter &painter, eWindowStyle &style, /* pvalue is borrowed */ } else if (!strcmp(atype, "mtext")) { - PyObject *pvalue = PyTuple_GetItem(value, 1); + PyObject *pvalue = PyTuple_GET_ITEM(value, 1); const char *text = (pvalue && PyString_Check(pvalue)) ? PyString_AsString(pvalue) : ""; - - ePtr para = new eTextPara(eRect(offset + eSize(m_seperation, 0), item_right)); + int xoffs = value_alignment_left ? 0 : m_seperation; + ePtr para = new eTextPara(eRect(offset + eSize(xoffs, 0), item_right)); para->setFont(fnt2); para->renderString(text, 0); - para->realign(eTextPara::dirRight); + para->realign(value_alignment_left ? eTextPara::dirLeft : eTextPara::dirRight); int glyphs = para->size(); PyObject *plist = 0; if (PyTuple_Size(value) >= 3) - plist = PyTuple_GetItem(value, 2); + plist = PyTuple_GET_ITEM(value, 2); int entries = 0; @@ -505,11 +513,11 @@ void eListboxPythonConfigContent::paint(gPainter &painter, eWindowStyle &style, for (int i = 0; i < entries; ++i) { - PyObject *entry = PyList_GetItem(plist, i); + PyObject *entry = PyList_GET_ITEM(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!"); + eWarning("glyph index %d in PythonConfigList out of bounds!", num); else { para->setGlyphFlag(num, GS_INVERT); @@ -553,7 +561,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c if (m_list && cursorValid()) { - PyObject *items = PyList_GetItem(m_list, m_cursor); // borrowed reference! + PyObject *items = PyList_GET_ITEM(m_list, m_cursor); // borrowed reference! if (!items) { @@ -705,6 +713,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c break; } + case TYPE_PIXMAP_ALPHATEST: case TYPE_PIXMAP: // pixmap { if (!(px && py && pwidth && pheight && pfnt)) @@ -728,7 +737,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c r &= itemrect; painter.clip(r); - painter.blit(pixmap, r.topLeft(), r); + painter.blit(pixmap, r.topLeft(), r, (type == TYPE_PIXMAP_ALPHATEST) ? gPainter::BT_ALPHATEST : 0); painter.clippop(); break;