X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/5d4117d8e413629c17fee5c13589375a3f1cc2bd..31ae4773f86fa2732b81d60c8d8def4321d9fb9e:/lib/gui/elistbox.h diff --git a/lib/gui/elistbox.h b/lib/gui/elistbox.h index a7ed637d..7538170c 100644 --- a/lib/gui/elistbox.h +++ b/lib/gui/elistbox.h @@ -4,6 +4,9 @@ #include #include +class eListbox; +class eSlider; + class iListboxContent: public iObject { public: @@ -35,6 +38,8 @@ protected: virtual int size()=0; + virtual int currentCursorSelectable(); + void setListbox(eListbox *lb); // void setOutputDevice ? (for allocating colors, ...) .. requires some work, though @@ -43,15 +48,29 @@ protected: /* the following functions always refer to the selected item */ virtual void paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected)=0; + virtual int getItemHeight()=0; + eListbox *m_listbox; #endif }; class eListbox: public eWidget { + void updateScrollBar(); public: eListbox(eWidget *parent); ~eListbox(); + + PSignal0 selectionChanged; + + enum { + showOnDemand, + showAlways, + showNever + }; + void setScrollbarMode(int mode); + void setWrapAround(bool); + void setContent(iListboxContent *content); /* enum Movement { @@ -61,8 +80,13 @@ public: moveEnd, justCheck }; */ - + + int getCurrentIndex(); void moveSelection(int how); + void moveSelectionTo(int index); + void moveToEnd(); + bool atBegin(); + bool atEnd(); enum ListboxActions { moveUp, @@ -73,10 +97,9 @@ public: pageDown, justCheck }; - + void setItemHeight(int h); void setSelectionEnable(int en); - #ifndef SWIG /* entryAdded: an entry was added *before* the given index. it's index is the given number. */ void entryAdded(int index); @@ -85,20 +108,24 @@ public: /* entryChanged: the entry with the given index was changed and should be redrawn. */ void entryChanged(int index); /* the complete list changed. you should not attemp to keep the current index. */ - void entryReset(); + void entryReset(bool cursorHome=true); protected: int event(int event, void *data=0, void *data2=0); void recalcSize(); private: + int m_scrollbar_mode, m_prev_scrollbar_page; + bool m_content_changed; + bool m_enabled_wrap_around; + int m_top, m_selected; int m_itemheight; int m_items_per_page; int m_selection_enabled; ePtr m_content; + eSlider *m_scrollbar; #endif - }; #endif