a742b061ffde88bfb625fca0e158879a913d3686
[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 #include <set>
7
8 class eListboxServiceContent: public virtual iListboxContent
9 {
10         DECLARE_REF(eListboxServiceContent);
11 public:
12         eListboxServiceContent();
13
14         void setIgnoreService( const eServiceReference &service );
15         void setRoot(const eServiceReference &ref);
16         void getCurrent(eServiceReference &ref);
17         
18         int getNextBeginningWithChar(char c);
19
20                 /* support for marked services */
21         void initMarked();
22         void addMarked(const eServiceReference &ref);
23         void removeMarked(const eServiceReference &ref);
24         int isMarked(const eServiceReference &ref);
25
26                 /* this is NOT thread safe! */
27         void markedQueryStart();
28         int markedQueryNext(eServiceReference &ref);
29
30         int lookupService(const eServiceReference &ref);
31         void setCurrent(const eServiceReference &ref);
32
33         enum {
34                 visModeSimple,
35                 visModeComplex
36         };
37         
38         void setVisualMode(int mode);
39         
40                 /* only in complex mode: */
41         enum {
42                 celIcon,
43                 celServiceNumber,
44                 celServiceName,
45                 celServiceInfo, // "now" event
46                 celElements
47         };
48         
49         void setElementPosition(int element, eRect where);
50         void setElementFont(int element, gFont *font);
51         
52         void sort();
53
54         int setCurrentMarked(bool);
55
56         void setNumberOffset(int offset) { m_numberoffset = offset; }
57 protected:
58         void cursorHome();
59         void cursorEnd();
60         int cursorMove(int count=1);
61         int cursorValid();
62         int cursorSet(int n);
63         int cursorGet();
64
65         void cursorSave();
66         void cursorRestore();
67         int size();
68         
69         // void setOutputDevice ? (for allocating colors, ...) .. requires some work, though
70         void setSize(const eSize &size);
71         
72                 /* the following functions always refer to the selected item */
73         void paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected);
74         
75         int m_visual_mode;
76                 /* for complex mode */
77         eRect m_element_position[celElements];
78         ePtr<gFont> m_element_font[celElements];
79 private:
80         typedef std::list<eServiceReference> list;
81         
82         list m_list;
83         list::iterator m_cursor, m_saved_cursor;
84         
85         int m_cursor_number, m_saved_cursor_number;
86         int m_size;
87         
88         eSize m_itemsize;
89         ePtr<iServiceHandler> m_service_center;
90         
91         eServiceReference m_root;
92
93                 /* support for marked services */
94         std::set<eServiceReference> m_marked;
95         std::set<eServiceReference>::const_iterator m_marked_iterator;
96
97                 /* support for movemode */
98         bool m_current_marked;
99
100         int m_numberoffset;
101
102         eServiceReference m_is_playable_ignore;
103 };
104
105 #endif