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