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