renable callable func to selectable func
[enigma2.git] / lib / gui / elistbox.h
1 #ifndef __lib_listbox_h
2 #define __lib_listbox_h
3
4 #include <lib/gui/ewidget.h>
5 #include <connection.h>
6
7 class eListbox;
8 class eSlider;
9
10 class iListboxContent: public iObject
11 {
12 public:
13         virtual ~iListboxContent()=0;
14         
15                 /* indices go from 0 to size().
16                    the end is reached when the cursor is on size(), 
17                    i.e. one after the last entry (this mimics 
18                    stl behaviour)
19                    
20                    cursors never invalidate - they can become invalid
21                    when stuff is removed. Cursors will always try
22                    to stay on the same data, however when the current
23                    item is removed, this won't work. you'll be notified
24                    anyway. */
25 #ifndef SWIG    
26 protected:
27         iListboxContent();
28         friend class eListbox;
29         virtual void cursorHome()=0;
30         virtual void cursorEnd()=0;
31         virtual int cursorMove(int count=1)=0;
32         virtual int cursorValid()=0;
33         virtual int cursorSet(int n)=0;
34         virtual int cursorGet()=0;
35         
36         virtual void cursorSave()=0;
37         virtual void cursorRestore()=0;
38         
39         virtual int size()=0;
40         
41         virtual int currentCursorSelectable();
42         
43         void setListbox(eListbox *lb);
44         
45         // void setOutputDevice ? (for allocating colors, ...) .. requires some work, though
46         virtual void setSize(const eSize &size)=0;
47         
48                 /* the following functions always refer to the selected item */
49         virtual void paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected)=0;
50         
51         virtual int getItemHeight()=0;
52         
53         eListbox *m_listbox;
54 #endif
55 };
56
57 class eListbox: public eWidget
58 {
59         void updateScrollBar();
60 public:
61         eListbox(eWidget *parent);
62         ~eListbox();
63
64         PSignal0<void> selectionChanged;
65
66         enum {
67                 showOnDemand,
68                 showAlways,
69                 showNever
70         };
71         void setScrollbarMode(int mode);
72         void setWrapAround(bool);
73
74         void setContent(iListboxContent *content);
75         
76 /*      enum Movement {
77                 moveUp,
78                 moveDown,
79                 moveTop,
80                 moveEnd,
81                 justCheck
82         }; */
83
84         int getCurrentIndex();
85         void moveSelection(int how);
86         void moveSelectionTo(int index);
87         void moveToEnd();
88         bool atBegin();
89         bool atEnd();
90
91         enum ListboxActions {
92                 moveUp,
93                 moveDown,
94                 moveTop,
95                 moveEnd,
96                 pageUp,
97                 pageDown,
98                 justCheck
99         };
100
101         void setItemHeight(int h);
102         void setSelectionEnable(int en);
103 #ifndef SWIG
104                 /* entryAdded: an entry was added *before* the given index. it's index is the given number. */
105         void entryAdded(int index);
106                 /* entryRemoved: an entry with the given index was removed. */
107         void entryRemoved(int index);
108                 /* entryChanged: the entry with the given index was changed and should be redrawn. */
109         void entryChanged(int index);
110                 /* the complete list changed. you should not attemp to keep the current index. */
111         void entryReset(bool cursorHome=true);
112
113 protected:
114         int event(int event, void *data=0, void *data2=0);
115         void recalcSize();
116
117 private:
118         int m_scrollbar_mode, m_prev_scrollbar_page;
119         bool m_content_changed;
120         bool m_enabled_wrap_around;
121
122         int m_top, m_selected;
123         int m_itemheight;
124         int m_items_per_page;
125         int m_selection_enabled;
126         ePtr<iListboxContent> m_content;
127         eSlider *m_scrollbar;
128 #endif
129 };
130
131 #endif