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