m_content_changed(false), m_enabled_wrap_around(false), m_top(0), m_selected(0), m_itemheight(25),
m_items_per_page(0), m_selection_enabled(1), m_scrollbar(NULL)
{
+ memset(&m_style, 0, sizeof(m_style));
// setContent(new eListboxStringContent());
ePtr<eActionMap> ptr;
/* redraw the old and newly selected */
gRegion inv = eRect(0, m_itemheight * (m_selected-m_top), size().width(), m_itemheight);
inv |= eRect(0, m_itemheight * (oldsel-m_top), size().width(), m_itemheight);
-
invalidate(inv);
}
}
}
}
+int eListbox::getEntryTop()
+{
+ return (m_selected - m_top) * m_itemheight;
+}
+
int eListbox::event(int event, void *data, void *data2)
{
switch (event)
gRegion entryrect = eRect(0, 0, size().width(), m_itemheight);
const gRegion &paint_region = *(gRegion*)data;
-
+
for (int y = 0, i = 0; i <= m_items_per_page; y += m_itemheight, ++i)
{
gRegion entry_clip_rect = paint_region & entryrect;
if (index == m_selected && m_content)
m_selected = m_content->cursorGet();
- moveSelection(justCheck);
+ if (m_content && m_content->cursorGet() >= m_content->size())
+ moveSelection(moveUp);
+ else
+ moveSelection(justCheck);
if ((m_top <= index) && (index < (m_top + m_items_per_page)))
{
moveSelection(justCheck);
invalidate();
}
+
+void eListbox::setBackgroundColor(gRGB &col)
+{
+ m_style.m_background_color = col;
+ m_style.m_background_color_set = 1;
+}
+
+void eListbox::setBackgroundColorSelected(gRGB &col)
+{
+ m_style.m_background_color_selected = col;
+ m_style.m_background_color_selected_set = 1;
+}
+
+void eListbox::setForegroundColor(gRGB &col)
+{
+ m_style.m_foreground_color = col;
+ m_style.m_foreground_color_set = 1;
+}
+
+void eListbox::setForegroundColorSelected(gRGB &col)
+{
+ m_style.m_foreground_color_selected = col;
+ m_style.m_foreground_color_selected_set = 1;
+}
+
+void eListbox::setBackgroundPicture(ePtr<gPixmap> &pm)
+{
+ m_style.m_background = pm;
+}
+
+void eListbox::setSelectionPicture(ePtr<gPixmap> &pm)
+{
+ m_style.m_selection = pm;
+}
+
+void eListbox::invalidate(const gRegion ®ion)
+{
+ gRegion tmp(region);
+ if (m_content)
+ m_content->updateClip(tmp);
+ eWidget::invalidate(tmp);
+}
+
+struct eListboxStyle *eListbox::getLocalStyle(void)
+{
+ /* transparency is set directly in the widget */
+ m_style.m_transparent_background = isTransparent();
+ return &m_style;
+}