add enq cancel
[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         void setCurrent(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         void sort();
50
51         int setCurrentMarked(bool);
52
53         void setNumberOffset(int offset) { m_numberoffset = offset; }
54 protected:
55         void cursorHome();
56         void cursorEnd();
57         int cursorMove(int count=1);
58         int cursorValid();
59         int cursorSet(int n);
60         int cursorGet();
61
62         void cursorSave();
63         void cursorRestore();
64         int size();
65         
66         // void setOutputDevice ? (for allocating colors, ...) .. requires some work, though
67         void setSize(const eSize &size);
68         
69                 /* the following functions always refer to the selected item */
70         void paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected);
71         
72         int m_visual_mode;
73                 /* for complex mode */
74         eRect m_element_position[celElements];
75         ePtr<gFont> m_element_font[celElements];
76 private:
77         typedef std::list<eServiceReference> list;
78         
79         list m_list;
80         list::iterator m_cursor, m_saved_cursor;
81         
82         int m_cursor_number, m_saved_cursor_number;
83         int m_size;
84         
85         eSize m_itemsize;
86         ePtr<iServiceHandler> m_service_center;
87         
88         eServiceReference m_root;
89
90                 /* support for marked services */
91         std::set<eServiceReference> m_marked;
92         std::set<eServiceReference>::const_iterator m_marked_iterator;
93
94                 /* support for movemode */
95         bool m_current_marked;
96
97         int m_numberoffset;
98 };
99
100 #endif