add support for listing satellites and providers
[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 eEPGCache;
9
10 class eListboxServiceContent: public virtual iListboxContent
11 {
12         DECLARE_REF(eListboxServiceContent);
13         eEPGCache *epgcache;
14 public:
15         eListboxServiceContent();
16         void setRoot(const eServiceReference &ref);
17         void getCurrent(eServiceReference &ref);
18         
19         int getNextBeginningWithChar(char c);
20
21                 /* support for marked services */
22         void initMarked();
23         void addMarked(const eServiceReference &ref);
24         void removeMarked(const eServiceReference &ref);
25         int isMarked(const eServiceReference &ref);
26
27                 /* this is NOT thread safe! */
28         void markedQueryStart();
29         int markedQueryNext(eServiceReference &ref);
30
31         int lookupService(const eServiceReference &ref);
32         void setCurrent(const eServiceReference &ref);
33
34         enum {
35                 visModeSimple,
36                 visModeComplex
37         };
38         
39         void setVisualMode(int mode);
40         
41                 /* only in complex mode: */
42         enum {
43                 celIcon,
44                 celServiceNumber,
45                 celServiceName,
46                 celServiceInfo, // "now" event
47                 celElements
48         };
49         
50         void setElementPosition(int element, eRect where);
51         void setElementFont(int element, gFont *font);
52         
53         void sort();
54
55         int setCurrentMarked(bool);
56
57         void setNumberOffset(int offset) { m_numberoffset = offset; }
58 protected:
59         void cursorHome();
60         void cursorEnd();
61         int cursorMove(int count=1);
62         int cursorValid();
63         int cursorSet(int n);
64         int cursorGet();
65
66         void cursorSave();
67         void cursorRestore();
68         int size();
69         
70         // void setOutputDevice ? (for allocating colors, ...) .. requires some work, though
71         void setSize(const eSize &size);
72         
73                 /* the following functions always refer to the selected item */
74         void paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected);
75         
76         int m_visual_mode;
77                 /* for complex mode */
78         eRect m_element_position[celElements];
79         ePtr<gFont> m_element_font[celElements];
80 private:
81         typedef std::list<eServiceReference> list;
82         
83         list m_list;
84         list::iterator m_cursor, m_saved_cursor;
85         
86         int m_cursor_number, m_saved_cursor_number;
87         int m_size;
88         
89         eSize m_itemsize;
90         ePtr<iServiceHandler> m_service_center;
91         
92         eServiceReference m_root;
93
94                 /* support for marked services */
95         std::set<eServiceReference> m_marked;
96         std::set<eServiceReference>::const_iterator m_marked_iterator;
97
98                 /* support for movemode */
99         bool m_current_marked;
100
101         int m_numberoffset;
102 };
103
104 #endif