X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d9ee52e4f0fbe9a1ae00d0e66f9e6f0a07fa319f..92929c357751afc31f7f1acbe3e724bdf307cf23:/lib/gui/elistbox.h diff --git a/lib/gui/elistbox.h b/lib/gui/elistbox.h index 9ec94665..00736535 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: @@ -12,7 +15,7 @@ public: /* indices go from 0 to size(). the end is reached when the cursor is on size(), i.e. one after the last entry (this mimics - stl behaviour) + stl behavior) cursors never invalidate - they can become invalid when stuff is removed. Cursors will always try @@ -21,7 +24,9 @@ public: anyway. */ #ifndef SWIG protected: + iListboxContent(); friend class eListbox; + virtual void updateClip(gRegion &){ }; virtual void cursorHome()=0; virtual void cursorEnd()=0; virtual int cursorMove(int count=1)=0; @@ -34,6 +39,8 @@ protected: virtual int size()=0; + virtual int currentCursorSelectable(); + void setListbox(eListbox *lb); // void setOutputDevice ? (for allocating colors, ...) .. requires some work, though @@ -42,30 +49,88 @@ 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 }; +#ifndef SWIG +struct eListboxStyle +{ + ePtr m_background, m_selection; + int m_transparent_background; + gRGB m_background_color, m_background_color_selected, m_foreground_color, m_foreground_color_selected; + int m_background_color_set, m_foreground_color_set, m_background_color_selected_set, m_foreground_color_selected_set; + + /* + {m_transparent_background m_background_color_set m_background} + {0 0 0} use global background color + {0 1 x} use background color + {0 0 p} use background picture + {1 x 0} use transparent background + {1 x p} use transparent background picture + */ +}; +#endif + class eListbox: public eWidget { + void updateScrollBar(); public: eListbox(eWidget *parent); - void setContent(iListboxContent *content); - - void moveSelection(int how); + ~eListbox(); + + PSignal0 selectionChanged; + enum { + showOnDemand, + showAlways, + showNever + }; + void setScrollbarMode(int mode); + void setWrapAround(bool); + + void setContent(iListboxContent *content); + +/* enum Movement { moveUp, moveDown, moveTop, moveEnd, justCheck + }; */ + + int getCurrentIndex(); + void moveSelection(long how); + void moveSelectionTo(int index); + void moveToEnd(); + bool atBegin(); + bool atEnd(); + + enum ListboxActions { + moveUp, + moveDown, + moveTop, + moveEnd, + pageUp, + pageDown, + justCheck }; -protected: - int event(int event, void *data=0, void *data2=0); - void recalcSize(); -private: - friend class iListboxContent; - + + void setItemHeight(int h); + void setSelectionEnable(int en); + + void setBackgroundColor(gRGB &col); + void setBackgroundColorSelected(gRGB &col); + void setForegroundColor(gRGB &col); + void setForegroundColorSelected(gRGB &col); + void setBackgroundPicture(ePtr &pixmap); + void setSelectionPicture(ePtr &pixmap); + +#ifndef SWIG + struct eListboxStyle *getLocalStyle(void); + /* entryAdded: an entry was added *before* the given index. it's index is the given number. */ void entryAdded(int index); /* entryRemoved: an entry with the given index was removed. */ @@ -73,12 +138,27 @@ private: /* 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); + + int getEntryTop(); + void invalidate(const gRegion ®ion = gRegion::invalidRegion()); +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; + eListboxStyle m_style; +#endif }; #endif