add iSubserviceList interface to iRecordableService
[enigma2.git] / lib / service / listboxservice.h
index 45e5ba71293260a7c25e75c00aed90008ce9b463..5228a2f212db7aa78046c5059f0ee4ba30e20ad3 100644 (file)
@@ -1,18 +1,93 @@
 #ifndef __lib_service_listboxservice_h
 #define __lib_service_listboxservice_h
 
+#include <lib/gdi/gpixmap.h>
 #include <lib/gui/elistbox.h>
 #include <lib/service/iservice.h>
-
-class eServiceCenter;
+#include <set>
 
 class eListboxServiceContent: public virtual iListboxContent
 {
-       DECLARE_REF;
+       DECLARE_REF(eListboxServiceContent);
 public:
        eListboxServiceContent();
-       void setRoot(const eServiceReference &ref);
 
+       void addService(const eServiceReference &ref, bool beforeCurrent=false);
+       void removeCurrent();
+       void FillFinished();
+
+       void setIgnoreService( const eServiceReference &service );
+       void setRoot(const eServiceReference &ref, bool justSet=false);
+       void getCurrent(eServiceReference &ref);
+       
+       int getNextBeginningWithChar(char c);
+       int getPrevMarkerPos();
+       int getNextMarkerPos();
+       
+               /* support for marked services */
+       void initMarked();
+       void addMarked(const eServiceReference &ref);
+       void removeMarked(const eServiceReference &ref);
+       int isMarked(const eServiceReference &ref);
+
+               /* this is NOT thread safe! */
+       void markedQueryStart();
+       int markedQueryNext(eServiceReference &ref);
+
+       int lookupService(const eServiceReference &ref);
+       void setCurrent(const eServiceReference &ref);
+
+       enum {
+               visModeSimple,
+               visModeComplex
+       };
+       
+       void setVisualMode(int mode);
+       
+               /* only in complex mode: */
+       enum {
+               celServiceNumber,
+               celMarkerPixmap,
+               celFolderPixmap,
+               celServiceName,
+               celServiceTypePixmap,
+               celServiceInfo, // "now" event
+               celElements
+       };
+
+       enum {
+               picDVB_S,
+               picDVB_T,
+               picDVB_C,
+               picServiceGroup,
+               picFolder,
+               picMarker,
+               picElements
+       };
+
+       void setElementPosition(int element, eRect where);
+       void setElementFont(int element, gFont *font);
+       void setPixmap(int type, ePtr<gPixmap> &pic);
+       
+       void sort();
+
+       int setCurrentMarked(bool);
+
+       void setNumberOffset(int offset) { m_numberoffset = offset; }
+       
+       int getItemHeight() { return m_itemheight; }
+       void setItemHeight(int height);
+
+       enum {
+               markedForeground,
+               markedForegroundSelected,
+               markedBackground,
+               markedBackgroundSelected,
+               serviceNotAvail,
+               colorElements
+       };
+       
+       void setColor(int color, gRGB &col);
 protected:
        void cursorHome();
        void cursorEnd();
@@ -20,7 +95,7 @@ protected:
        int cursorValid();
        int cursorSet(int n);
        int cursorGet();
-       
+
        void cursorSave();
        void cursorRestore();
        int size();
@@ -30,6 +105,14 @@ protected:
        
                /* the following functions always refer to the selected item */
        void paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected);
+       
+       int m_visual_mode;
+               /* for complex mode */
+       eRect m_element_position[celElements];
+       ePtr<gFont> m_element_font[celElements];
+       ePtr<gPixmap> m_pixmaps[picElements];
+       gRGB m_color[colorElements];
+       bool m_color_set[colorElements];
 private:
        typedef std::list<eServiceReference> list;
        
@@ -40,9 +123,23 @@ private:
        int m_size;
        
        eSize m_itemsize;
-       ePtr<eServiceCenter> m_service_center;
+       ePtr<iServiceHandler> m_service_center;
+       ePtr<iListableService> m_lst;
        
        eServiceReference m_root;
+
+               /* support for marked services */
+       std::set<eServiceReference> m_marked;
+       std::set<eServiceReference>::const_iterator m_marked_iterator;
+
+               /* support for movemode */
+       bool m_current_marked;
+
+       int m_numberoffset;
+
+       eServiceReference m_is_playable_ignore;
+
+       int m_itemheight;
 };
 
 #endif