36bb5bb4fb8da71711893f32737c3d13f2738604
[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 class eServiceCenter;
9
10 class eListboxServiceContent: public virtual iListboxContent
11 {
12         DECLARE_REF(eListboxServiceContent);
13 public:
14         eListboxServiceContent();
15         void setRoot(const eServiceReference &ref);
16         void getCurrent(eServiceReference &ref);
17         
18                 /* support for marked services */
19         void initMarked();
20         void addMarked(const eServiceReference &ref);
21         void removeMarked(const eServiceReference &ref);
22         int isMarked(const eServiceReference &ref);
23         
24                 /* this is NOT thread safe! */
25         void markedQueryStart();
26         int markedQueryNext(eServiceReference &ref);
27
28         int lookupService(const eServiceReference &ref);
29         
30 protected:
31         void cursorHome();
32         void cursorEnd();
33         int cursorMove(int count=1);
34         int cursorValid();
35         int cursorSet(int n);
36         int cursorGet();
37         
38         void cursorSave();
39         void cursorRestore();
40         int size();
41         
42         // void setOutputDevice ? (for allocating colors, ...) .. requires some work, though
43         void setSize(const eSize &size);
44         
45                 /* the following functions always refer to the selected item */
46         void paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected);
47 private:
48         typedef std::list<eServiceReference> list;
49         
50         list m_list;
51         list::iterator m_cursor, m_saved_cursor;
52         
53         int m_cursor_number, m_saved_cursor_number;
54         int m_size;
55         
56         eSize m_itemsize;
57         ePtr<eServiceCenter> m_service_center;
58         
59         eServiceReference m_root;
60         
61                 /* support for marked services */
62         std::set<eServiceReference> m_marked;
63         
64         std::set<eServiceReference>::const_iterator m_marked_iterator;
65 };
66
67 #endif