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