add ability to enable wrap around in listbox
[enigma2.git] / lib / gui / elistbox.h
index 9ec94665317d9f550473fe2d1dcda3d82807a745..76ad82081ce8c41c87ad8ff352123456f8acff09 100644 (file)
@@ -4,6 +4,9 @@
 #include <lib/gui/ewidget.h>
 #include <connection.h>
 
+class eListbox;
+class eSlider;
+
 class iListboxContent: public iObject
 {
 public:
@@ -21,6 +24,7 @@ public:
                   anyway. */
 #ifndef SWIG   
 protected:
+       iListboxContent();
        friend class eListbox;
        virtual void cursorHome()=0;
        virtual void cursorEnd()=0;
@@ -48,24 +52,51 @@ protected:
 
 class eListbox: public eWidget
 {
+       void updateScrollBar();
 public:
        eListbox(eWidget *parent);
+       ~eListbox();
+
+       PSignal0<void> 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(int how);
-       enum {
+       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);
+#ifndef SWIG
                /* 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 +104,24 @@ 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);
+
+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<iListboxContent> m_content;
+       eSlider *m_scrollbar;
+#endif
 };
 
 #endif