add possibility to use ValueRange as ValueEqual Converter
[enigma2.git] / lib / service / listboxservice.h
1 #ifndef __lib_service_listboxservice_h
2 #define __lib_service_listboxservice_h
3
4 #include <lib/gui/elistbox.h>
5 #include <lib/service/iservice.h>
6 #include <set>
7
8 class eListboxServiceContent: public virtual iListboxContent
9 {
10         DECLARE_REF(eListboxServiceContent);
11 public:
12         eListboxServiceContent();
13
14         void addService(const eServiceReference &ref, bool beforeCurrent=false);
15         void removeCurrent();
16         void FillFinished();
17
18         void setIgnoreService( const eServiceReference &service );
19         void setRoot(const eServiceReference &ref, bool justSet=false);
20         void getCurrent(eServiceReference &ref);
21         
22         int getNextBeginningWithChar(char c);
23         int getPrevMarkerPos();
24         int getNextMarkerPos();
25         
26                 /* support for marked services */
27         void initMarked();
28         void addMarked(const eServiceReference &ref);
29         void removeMarked(const eServiceReference &ref);
30         int isMarked(const eServiceReference &ref);
31
32                 /* this is NOT thread safe! */
33         void markedQueryStart();
34         int markedQueryNext(eServiceReference &ref);
35
36         int lookupService(const eServiceReference &ref);
37         void setCurrent(const eServiceReference &ref);
38
39         enum {
40                 visModeSimple,
41                 visModeComplex
42         };
43         
44         void setVisualMode(int mode);
45         
46                 /* only in complex mode: */
47         enum {
48                 celServiceNumber,
49                 celMarkerPixmap,
50                 celFolderPixmap,
51                 celServiceName,
52                 celServiceTypePixmap,
53                 celServiceInfo, // "now" event
54                 celElements
55         };
56
57         enum {
58                 picDVB_S,
59                 picDVB_T,
60                 picDVB_C,
61                 picServiceGroup,
62                 picFolder,
63                 picMarker,
64                 picElements
65         };
66
67         void setElementPosition(int element, eRect where);
68         void setElementFont(int element, gFont *font);
69         void setPixmap(int type, ePtr<gPixmap> &pic);
70         
71         void sort();
72
73         int setCurrentMarked(bool);
74
75         void setNumberOffset(int offset) { m_numberoffset = offset; }
76         
77         int getItemHeight() { return m_itemheight; }
78         int setItemHeight(int height);
79         
80 protected:
81         void cursorHome();
82         void cursorEnd();
83         int cursorMove(int count=1);
84         int cursorValid();
85         int cursorSet(int n);
86         int cursorGet();
87
88         void cursorSave();
89         void cursorRestore();
90         int size();
91         
92         // void setOutputDevice ? (for allocating colors, ...) .. requires some work, though
93         void setSize(const eSize &size);
94         
95                 /* the following functions always refer to the selected item */
96         void paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected);
97         
98         int m_visual_mode;
99                 /* for complex mode */
100         eRect m_element_position[celElements];
101         ePtr<gFont> m_element_font[celElements];
102         ePtr<gPixmap> m_pixmaps[picElements];
103 private:
104         typedef std::list<eServiceReference> list;
105         
106         list m_list;
107         list::iterator m_cursor, m_saved_cursor;
108         
109         int m_cursor_number, m_saved_cursor_number;
110         int m_size;
111         
112         eSize m_itemsize;
113         ePtr<iServiceHandler> m_service_center;
114         ePtr<iListableService> m_lst;
115         
116         eServiceReference m_root;
117
118                 /* support for marked services */
119         std::set<eServiceReference> m_marked;
120         std::set<eServiceReference>::const_iterator m_marked_iterator;
121
122                 /* support for movemode */
123         bool m_current_marked;
124
125         int m_numberoffset;
126
127         eServiceReference m_is_playable_ignore;
128
129         int m_itemheight;
130 };
131
132 #endif