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