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