#include <lib/actions/action.h>
eListbox::eListbox(eWidget *parent)
- :eWidget(parent), m_prev_scrollbar_page(-1), m_content_changed(false)
- , m_scrollbar_mode(showNever), m_scrollbar(NULL)
+ :eWidget(parent), m_scrollbar_mode(showNever), m_prev_scrollbar_page(-1)
+ ,m_content_changed(false), m_top(0), m_selected(0), m_itemheight(25)
+ ,m_items_per_page(0), m_selection_enabled(1), m_scrollbar(NULL)
{
setContent(new eListboxStringContent());
ePtr<eActionMap> ptr;
eActionMap::getInstance(ptr);
-
- m_itemheight = 25;
- m_selection_enabled = 1;
-
ptr->bindAction("ListboxActions", 0, 0, this);
}
eListbox::~eListbox()
{
+ if (m_scrollbar)
+ delete m_scrollbar;
+
ePtr<eActionMap> ptr;
eActionMap::getInstance(ptr);
ptr->unbindAction(this, 0);
void eListbox::moveSelectionTo(int index)
{
- m_content->cursorHome();
- m_content->cursorMove(index);
- moveSelection(justCheck);
+ if ( m_content )
+ {
+ m_content->cursorHome();
+ m_content->cursorMove(index);
+ moveSelection(justCheck);
+ }
+}
+
+int eListbox::getCurrentIndex()
+{
+ if ( m_content && m_content->cursorValid() )
+ return m_content->cursorGet();
+ return 0;
}
void eListbox::updateScrollBar()
m_prev_scrollbar_page=-1;
m_content->setSize(eSize(size().width(), m_itemheight));
m_items_per_page = size().height() / m_itemheight;
+
+ if (m_items_per_page < 0) /* TODO: whyever - our size could be invalid, or itemheigh could be wrongly specified. */
+ m_items_per_page = 0;
+
moveSelection(justCheck);
}
}
}
-void eListbox::entryReset()
+void eListbox::entryReset(bool cursorHome)
{
m_content_changed=true;
m_prev_scrollbar_page=-1;
- if (m_content)
- m_content->cursorHome();
- m_top = 0;
- m_selected = 0;
+ if ( cursorHome )
+ {
+ if (m_content)
+ m_content->cursorHome();
+ m_top = 0;
+ m_selected = 0;
+ }
moveSelection(justCheck);
invalidate();
}