-/*
- The basic idea is to have an interface which gives all relevant list
- processing functions, and can be used by the listbox to browse trough
- the list.
-
- The listbox directly uses the implemented cursor. It tries hard to avoid
- iterating trough the (possibly very large) list, so it should be O(1),
- i.e. the performance should not be influenced by the size of the list.
-
- The list interface knows how to draw the current entry to a specified
- offset. Different interfaces can be used to adapt different lists,
- pre-filter lists on the fly etc.
-
- cursorSave/Restore is used to avoid re-iterating the list on redraw.
- The current selection is always selected as cursor position, the
- cursor is then positioned to the start, and then iterated. This gives
- at most 2x m_items_per_page cursor movements per redraw, indepenent
- of the size of the list.
-
- Although cursorSet is provided, it should be only used when there is no
- other way, as it involves iterating trough the list.
- */
-
-class eListboxTestContent: public virtual iListboxContent
-{
- DECLARE_REF;
-public:
- void cursorHome();
- void cursorEnd();
- int cursorMove(int count=1);
- int cursorValid();
- int cursorSet(int n);
- int cursorGet();
-
- void cursorSave();
- void cursorRestore();
- int size();
-
- RESULT connectItemChanged(const Slot0<void> &itemChanged, ePtr<eConnection> &connection);
-
- // void setOutputDevice ? (for allocating colors, ...) .. requires some work, though
- void setSize(const eSize &size);
-
- /* the following functions always refer to the selected item */
- void paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected);
-private:
- int m_cursor, m_saved_cursor;
- eSize m_size;
-};
-
-DEFINE_REF(eListboxTestContent);
-
-void eListboxTestContent::cursorHome()
-{
- m_cursor = 0;
-}
-
-void eListboxTestContent::cursorEnd()
-{
- m_cursor = size();
-}
-
-int eListboxTestContent::cursorMove(int count)
-{
- m_cursor += count;
-
- if (m_cursor < 0)
- cursorHome();
- else if (m_cursor > size())
- cursorEnd();
- return 0;
-}
-
-int eListboxTestContent::cursorValid()
-{
- return m_cursor < size();
-}
-
-int eListboxTestContent::cursorSet(int n)
-{
- m_cursor = n;
-
- if (m_cursor < 0)
- cursorHome();
- else if (m_cursor > size())
- cursorEnd();
- return 0;
-}
-
-int eListboxTestContent::cursorGet()
-{
- return m_cursor;
-}
-
-void eListboxTestContent::cursorSave()
-{
- m_saved_cursor = m_cursor;
-}
-
-void eListboxTestContent::cursorRestore()