DEFINE_REF(eListboxPythonStringContent);
-eListboxPythonStringContent::eListboxPythonStringContent(): m_itemheight(25), m_cursor(0)
+eListboxPythonStringContent::eListboxPythonStringContent()
+ :m_cursor(0), m_itemheight(25)
{
}
int eListboxPythonStringContent::cursorValid()
{
- return ((unsigned int)m_cursor) < size();
+ return m_cursor < size();
}
int eListboxPythonStringContent::cursorSet(int n)
if (PyTuple_Check(item))
{
/* handle left part. get item from tuple, convert to string, display. */
-
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) : "<not-a-string>";
int value_alignment_left = !*string;
/* now, handle the value. get 2nd part from tuple*/
- value = PyTuple_GET_ITEM(item, 1);
+ if (PyTuple_Size(item) >= 2) // when no 2nd entry is in tuple this is a non selectable entry without config part
+ value = PyTuple_GET_ITEM(item, 1);
+
if (value)
{
ePyObject args = PyTuple_New(1);
}
}
/* type is borrowed */
- } else
+ } else if (value)
eWarning("eListboxPythonConfigContent: second value of tuple is not a tuple.");
if (value)
Py_DECREF(value);
m_listbox->entryChanged(m_cursor);
}
-static void clearRegionHelper(gPainter &painter, eListboxStyle *local_style, const ePoint &offset, ePyObject &pbackColor, bool cursorValid)
+static void clearRegionHelper(gPainter &painter, eListboxStyle *local_style, const ePoint &offset, ePyObject &pbackColor, bool cursorValid, bool clear=true)
{
if (pbackColor)
{
else if (local_style->m_transparent_background)
return;
}
- painter.clear();
+ if (clear)
+ painter.clear();
}
-static void clearRegionSelectedHelper(gPainter &painter, eListboxStyle *local_style, const ePoint &offset, ePyObject &pbackColorSelected, bool cursorValid)
+static void clearRegionSelectedHelper(gPainter &painter, eListboxStyle *local_style, const ePoint &offset, ePyObject &pbackColorSelected, bool cursorValid, bool clear=true)
{
if (pbackColorSelected)
{
return;
}
}
- painter.clear();
+ if (clear)
+ painter.clear();
}
-static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *local_style, ePyObject pforeColor, ePyObject pforeColorSelected, ePyObject pbackColor, ePyObject pbackColorSelected, int selected, gRegion &rc, eRect &sel_clip, const ePoint &offset, bool cursorValid)
+static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *local_style, ePyObject pforeColor, ePyObject pforeColorSelected, ePyObject pbackColor, ePyObject pbackColorSelected, int selected, gRegion &rc, eRect &sel_clip, const ePoint &offset, bool cursorValid, bool clear=true)
{
if (selected && sel_clip.valid())
{
{
painter.clip(part);
style.setStyle(painter, eWindowStyle::styleListboxNormal);
- clearRegionHelper(painter, local_style, offset, pbackColor, cursorValid);
+ clearRegionHelper(painter, local_style, offset, pbackColor, cursorValid, clear);
painter.clippop();
selected = 0;
}
{
painter.clip(part);
style.setStyle(painter, eWindowStyle::styleListboxSelected);
- clearRegionSelectedHelper(painter, local_style, offset, pbackColorSelected, cursorValid);
+ clearRegionSelectedHelper(painter, local_style, offset, pbackColorSelected, cursorValid, clear);
painter.clippop();
selected = 1;
}
else if (selected)
{
style.setStyle(painter, eWindowStyle::styleListboxSelected);
- clearRegionSelectedHelper(painter, local_style, offset, pbackColorSelected, cursorValid);
+ clearRegionSelectedHelper(painter, local_style, offset, pbackColorSelected, cursorValid, clear);
if (local_style && local_style->m_selection)
painter.blit(local_style->m_selection, offset, eRect(), gPainter::BT_ALPHATEST);
}
else
{
style.setStyle(painter, eWindowStyle::styleListboxNormal);
- clearRegionHelper(painter, local_style, offset, pbackColor, cursorValid);
+ clearRegionHelper(painter, local_style, offset, pbackColor, cursorValid, clear);
}
if (selected)
{
gRegion rc(rect);
- clearRegion(painter, style, local_style, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, selected, rc, sel_clip, offset, cursorValid);
+ bool mustClear = (selected && pbackColorSelected) || (!selected && pbackColor);
+ clearRegion(painter, style, local_style, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, selected, rc, sel_clip, offset, cursorValid, mustClear);
}
painter.setFont(m_font[fnt]);
{
gRegion rc(rect);
- clearRegion(painter, style, local_style, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, selected, rc, sel_clip, offset, cursorValid);
+ bool mustClear = (selected && pbackColorSelected) || (!selected && pbackColor);
+ clearRegion(painter, style, local_style, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, selected, rc, sel_clip, offset, cursorValid, mustClear);
}
// border
break;
}
+ case TYPE_PIXMAP_ALPHABLEND:
case TYPE_PIXMAP_ALPHATEST:
case TYPE_PIXMAP: // pixmap
{
{
gRegion rc(rect);
- clearRegion(painter, style, local_style, ePyObject(), ePyObject(), pbackColor, pbackColorSelected, selected, rc, sel_clip, offset, cursorValid);
+ bool mustClear = (selected && pbackColorSelected) || (!selected && pbackColor);
+ clearRegion(painter, style, local_style, ePyObject(), ePyObject(), pbackColor, pbackColorSelected, selected, rc, sel_clip, offset, cursorValid, mustClear);
}
- painter.blit(pixmap, rect.topLeft(), rect, (type == TYPE_PIXMAP_ALPHATEST) ? gPainter::BT_ALPHATEST : 0);
+ painter.blit(pixmap, rect.topLeft(), rect, (type == TYPE_PIXMAP_ALPHATEST) ? gPainter::BT_ALPHATEST : (type == TYPE_PIXMAP_ALPHABLEND) ? gPainter::BT_ALPHABLEND : 0);
painter.clippop();
break;
}