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