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