void iListboxContent::setListbox(eListbox *lb)
{
m_listbox = lb;
+ m_listbox->setItemHeight(getItemHeight());
}
int iListboxContent::currentCursorSelectable()
DEFINE_REF(eListboxPythonStringContent);
-eListboxPythonStringContent::eListboxPythonStringContent()
+eListboxPythonStringContent::eListboxPythonStringContent(): m_itemheight(25)
{
}
Py_DECREF(m_buildFunc);
}
+void eListboxPythonMultiContent::setSelectionClip(eRect &rect, bool update)
+{
+ if (update && m_selection_clip.valid())
+ {
+// redraw old selection
+ m_temp_clip = m_selection_clip;
+ m_selection_clip = eRect();
+ if (m_listbox)
+ m_listbox->entryChanged(m_cursor);
+// redraw new selection
+ m_selection_clip = rect;
+ m_temp_clip = rect;
+ if (m_listbox)
+ m_listbox->entryChanged(m_cursor);
+ m_temp_clip = eRect();
+ }
+ else
+ m_selection_clip = rect;
+}
+
void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected)
{
eRect itemrect(offset, m_itemsize);
+ if (m_temp_clip.valid())
+ {
+ eRect tmp = m_temp_clip;
+ tmp.moveBy(offset);
+ itemrect &= tmp;
+ }
+
painter.clip(itemrect);
- style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal);
+ style.setStyle(painter, selected && !m_selection_clip.valid() ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal);
painter.clear();
+ if (selected && m_selection_clip.valid())
+ {
+ eRect tmp = m_selection_clip;
+ tmp.moveBy(offset);
+ painter.clip(tmp);
+ style.setStyle(painter, eWindowStyle::styleListboxSelected );
+ painter.clear();
+ painter.clippop();
+ }
ePyObject items;
goto error_out;
}
- ePyObject px, py, pwidth, pheight, pfnt, pstring, pflags, pcolor;
+ ePyObject px, py, pwidth, pheight, pfnt, pstring, pflags, pcolor, pfillColor, pborderWidth, pborderColor;
/*
we have a list of tuples:
pstring = PyTuple_GET_ITEM(item, 7);
}
if (size > 8)
+ {
pcolor = PyTuple_GET_ITEM(item, 8);
+ if (pcolor == Py_None)
+ pcolor=ePyObject();
+ }
+ if (size > 9)
+ {
+ pfillColor = PyTuple_GET_ITEM(item, 9);
+ if (pfillColor == Py_None)
+ pfillColor=ePyObject();
+ }
+ if (size > 10)
+ pborderWidth = PyTuple_GET_ITEM(item, 10);
+ if (size > 11)
+ pborderColor = PyTuple_GET_ITEM(item, 11);
}
switch (type)
int height = PyInt_AsLong(pheight);
int flags = PyInt_AsLong(pflags);
int fnt = PyInt_AsLong(pfnt);
-
+ int bwidth = pborderWidth ? PyInt_AsLong(pborderWidth) : 0;
+
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);
goto error_out;
}
-
- eRect r = eRect(x, y, width, height);
- r.moveBy(offset);
- r &= itemrect;
-
+
+ eRect rc = eRect(x+bwidth, y+bwidth, width-bwidth*2, height-bwidth*2);
+ rc.moveBy(offset);
+ rc &= itemrect;
+ painter.clip(rc);
+
+ if (pfillColor && !selected)
+ {
+ int color = PyInt_AsLong(pfillColor);
+ painter.setBackgroundColor(gRGB(color));
+ painter.clear();
+ }
+
painter.setFont(m_font[fnt]);
-
- painter.clip(r);
- painter.renderText(r, string, flags);
+ painter.renderText(rc, string, flags);
painter.clippop();
+
+ // draw border
+ if (bwidth)
+ {
+ rc.setRect(x, y, width, height);
+ rc.moveBy(offset);
+ rc &= itemrect;
+ painter.clip(rc);
+ if (pborderColor)
+ {
+ int color = PyInt_AsLong(pborderColor);
+ painter.setForegroundColor(gRGB(color));
+ }
+ else if (pcolor)
+ style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal);
+
+ rc.setRect(x, y, width, bwidth);
+ rc.moveBy(offset);
+ painter.fill(rc);
+
+ rc.setRect(x, y+bwidth, bwidth, height-bwidth);
+ rc.moveBy(offset);
+ painter.fill(rc);
+
+ rc.setRect(x+bwidth, y+height-bwidth, width-bwidth, bwidth);
+ rc.moveBy(offset);
+ painter.fill(rc);
+
+ rc.setRect(x+width-bwidth, y+bwidth, bwidth, height-bwidth);
+ rc.moveBy(offset);
+ painter.fill(rc);
+
+ painter.clippop();
+ }
+
break;
}
case TYPE_PROGRESS: // Progress
int height = PyInt_AsLong(pheight);
int filled = PyInt_AsLong(pfnt);
- eRect r = eRect(x, y, width, height);
- r.moveBy(offset);
- r &= itemrect;
+ eRect rc = eRect(x, y, width, height);
+ rc.moveBy(offset);
+ rc &= itemrect;
- painter.clip(r);
+ painter.clip(rc);
int bwidth=2; // borderwidth hardcoded yet
// border
- eRect rc = eRect(x, y, width, bwidth);
+ rc.setRect(x, y, width, bwidth);
rc.moveBy(offset);
painter.fill(rc);
- rc = eRect(x, y+bwidth, bwidth, height-bwidth);
+ rc.setRect(x, y+bwidth, bwidth, height-bwidth);
rc.moveBy(offset);
painter.fill(rc);
- rc = eRect(x+bwidth, y+height-bwidth, width-bwidth, bwidth);
+ rc.setRect(x+bwidth, y+height-bwidth, width-bwidth, bwidth);
rc.moveBy(offset);
painter.fill(rc);
- rc = eRect(x+width-bwidth, y+bwidth, bwidth, height-bwidth);
+ rc.setRect(x+width-bwidth, y+bwidth, bwidth, height-bwidth);
rc.moveBy(offset);
painter.fill(rc);
// progress
- rc = eRect(x+bwidth, y+bwidth, (width-bwidth*2) * filled / 100, height-bwidth*2);
+ rc.setRect(x+bwidth, y+bwidth, (width-bwidth*2) * filled / 100, height-bwidth*2);
rc.moveBy(offset);
painter.fill(rc);
goto error_out;
}
- if (pcolor)
+ if (pcolor || pborderColor || pfillColor)
style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal);
}
}
else
m_font.erase(fnt);
}
+
+void eListboxPythonMultiContent::setItemHeight(int height)
+{
+ m_itemheight = height;
+ if (m_listbox)
+ m_listbox->setItemHeight(height);
+}