remove non working indication of playable services in servicelist
[enigma2.git] / lib / service / listboxservice.cpp
index e336dc175dc670291d1bcd5f959d1f88a7b1c7f2..4e20fcb7f53e70cd4125c036faaf92a59664d180 100644 (file)
@@ -2,6 +2,7 @@
 #include <lib/service/service.h>
 #include <lib/gdi/font.h>
 #include <lib/dvb/epgcache.h>
+#include <lib/dvb/pmt.h>
 
 void eListboxServiceContent::setRoot(const eServiceReference &root)
 {
@@ -55,8 +56,18 @@ int eListboxServiceContent::getNextBeginningWithChar(char c)
                m_service_center->info(*i, service_info);
                service_info->getName(*i, text);
 //             printf("%c\n", text.c_str()[0]);
-               if (text.c_str()[0] == c)
-                       return index;
+               int idx=0;
+               int len=text.length();
+               while ( idx <= len )
+               {
+                       char cc = text[idx++];
+                       if ( cc >= 33 && cc < 127)
+                       {
+                               if (cc == c)
+                                       return index;
+                               break;
+                       }
+               }
        }
        return 0;
 }
@@ -142,8 +153,8 @@ void eListboxServiceContent::setElementFont(int element, gFont *font)
 void eListboxServiceContent::sort()
 {
        ePtr<iListableService> lst;
-  if (!m_service_center->list(m_root, lst))
-  {
+       if (!m_service_center->list(m_root, lst))
+       {
                m_list.sort(iListableServiceCompare(lst));
                        /* FIXME: is this really required or can we somehow keep the current entry? */
                cursorHome();
@@ -155,7 +166,7 @@ void eListboxServiceContent::sort()
 DEFINE_REF(eListboxServiceContent);
 
 eListboxServiceContent::eListboxServiceContent()
-       :epgcache(eEPGCache::getInstance()), m_visual_mode(visModeSimple), m_size(0), m_current_marked(false), m_numberoffset(0)
+       :m_visual_mode(visModeSimple), m_size(0), m_current_marked(false), m_numberoffset(0)
 {
        cursorHome();
        eServiceCenter::getInstance(m_service_center);
@@ -288,7 +299,6 @@ int eListboxServiceContent::cursorSet(int n)
 {
        cursorHome();
        cursorMove(n);
-       
        return 0;
 }
 
@@ -325,12 +335,28 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const
 {
        painter.clip(eRect(offset, m_itemsize));
 
+       bool tuneable=true;
+
+#if 0
+       if (m_res_mgr && cursorValid() && !((m_cursor->flags & eServiceReference::flagDirectory) == eServiceReference::flagDirectory))
+       {
+               eServiceReferenceDVB &ref = (eServiceReferenceDVB&) *m_cursor;
+               eDVBChannelID chid;
+               ref.getChannelID(chid);
+               tuneable = m_res_mgr->canAllocateChannel(chid);
+       }
+#endif
+
        if (m_current_marked && selected)
                style.setStyle(painter, eWindowStyle::styleListboxMarked);
        else if (cursorValid() && isMarked(*m_cursor))
                style.setStyle(painter, eWindowStyle::styleListboxMarked);
        else
+       {
                style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal);
+               if (!tuneable)
+                       painter.setForegroundColor(gRGB(0xbbbbbb));
+       }
        painter.clear();
        
        if (cursorValid())
@@ -371,8 +397,7 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const
                        case celServiceInfo:
                        {
                                ePtr<eServiceEvent> evt;
-                               time_t t=-1;
-                               if ( !epgcache->lookupEventTime(*m_cursor, t, evt) )
+                               if ( !service_info->getEvent(*m_cursor, evt) )
                                        text = '(' + evt->getEventName() + ')';
                                else
                                        continue;