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