Merge branch 'bug_587_new_internally_connectable_and_unsupported_tuner_management...
authorStefan Pluecken <stefan.pluecken@multimedia-labs.de>
Wed, 6 Oct 2010 07:00:42 +0000 (09:00 +0200)
committerStefan Pluecken <stefan.pluecken@multimedia-labs.de>
Wed, 6 Oct 2010 07:00:42 +0000 (09:00 +0200)
Conflicts:
lib/python/Components/NimManager.py

RecordTimer.py
ServiceReference.py
data/defaults/Dream/hdbouquets/userbouquet.favourites.tv
data/defaults/Dream/sdbouquets/userbouquet.favourites.tv
lib/gui/epixmap.cpp
lib/gui/epixmap.h
lib/python/Components/NimManager.py
lib/python/Screens/TimerEntry.py

index def7568..4ece9c5 100755 (executable)
@@ -102,7 +102,7 @@ class RecordTimerEntry(timer.TimerEntry, object):
                
                assert isinstance(serviceref, ServiceReference)
                
-               if serviceref.getType() == eServiceReference.idDVB and serviceref.getPath() == "":
+               if serviceref.isRecordable():
                        self.service_ref = serviceref
                else:
                        self.service_ref = ServiceReference(None)
index 5d11ae7..4907fa2 100644 (file)
@@ -10,7 +10,7 @@ class ServiceReference(eServiceReference):
 
        def __str__(self):
                return self.ref.toString()
-       
+
        def getServiceName(self):
                info = self.info()
                return info and info.getName(self.ref) or ""
@@ -20,9 +20,16 @@ class ServiceReference(eServiceReference):
 
        def list(self):
                return self.serviceHandler.list(self.ref)
-       
+
        def getType(self):
                return self.ref.type
-       
+
        def getPath(self):
                return self.ref.getPath()
+
+       def getFlags(self):
+               return self.ref.flags
+
+       def isRecordable(self):
+               ref = self.ref
+               return ref.flags & eServiceReference.isGroup or (ref.type == eServiceReference.idDVB and ref.getPath() == "")
\ No newline at end of file
index 91536b1..b6bc62f 100644 (file)
@@ -11,6 +11,7 @@
 #SERVICE 1:0:1:701:5:85:C00000:0:0:0:\r
 #SERVICE 1:0:1:2F1C:441:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:6D6E:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:308:5:85:C00000:0:0:0:\r
 #SERVICE 1:0:1:2FC:5:85:C00000:0:0:0:\r
 #SERVICE 1:0:1:F98:454:1:C00000:0:0:0:\r
 #SERVICE 1:0:19:2B70:3F3:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:6E42:431:1:C00000:0:0:0:\r
 #SERVICE 1:64:B:0:0:0:0:0:0:0::Doku/Wissen/Themen\r
 #DESCRIPTION Doku/Wissen/Themen\r
-#SERVICE 1:0:1:6DD0:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6F47:445:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:6D6B:437:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:2775:444:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:293:5:85:C00000:0:0:0:\r
 #SERVICE 1:0:1:6D70:437:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:277B:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:49:5:85:C00000:0:0:0:\r
 #SERVICE 1:0:1:332D:45B:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:3139:459:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:2F5A:454:1:C00000:0:0:0:\r
index 5f89c48..1cea366 100644 (file)
@@ -11,6 +11,7 @@
 #SERVICE 1:0:1:701:5:85:C00000:0:0:0:\r
 #SERVICE 1:0:1:2F1C:441:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:6D6E:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:308:5:85:C00000:0:0:0:\r
 #SERVICE 1:0:1:2FC:5:85:C00000:0:0:0:\r
 #SERVICE 1:0:1:F98:454:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:7034:41B:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:6E42:431:1:C00000:0:0:0:\r
 #SERVICE 1:64:B:0:0:0:0:0:0:0::Doku/Wissen/Themen\r
 #DESCRIPTION Doku/Wissen/Themen\r
-#SERVICE 1:0:1:6DD0:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6F47:445:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:6D6B:437:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:2775:444:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:293:5:85:C00000:0:0:0:\r
 #SERVICE 1:0:1:6D70:437:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:277B:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:49:5:85:C00000:0:0:0:\r
 #SERVICE 1:0:1:332D:45B:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:3139:459:1:C00000:0:0:0:\r
 #SERVICE 1:0:1:2F5A:454:1:C00000:0:0:0:\r
index f20c1a9..1768685 100644 (file)
@@ -3,7 +3,7 @@
 #include <lib/gui/ewidgetdesktop.h>
 
 ePixmap::ePixmap(eWidget *parent)
-       :eWidget(parent), m_alphatest(false), m_scale(false)
+        :eWidget(parent), m_alphatest(false), m_scale(false), m_have_border_color(false), m_border_width(0)
 {
 }
 
@@ -46,12 +46,25 @@ void ePixmap::setPixmapFromFile(const char *filename)
        
                // TODO: This only works for desktop 0
        getDesktop(0)->makeCompatiblePixmap(*m_pixmap);
-       event(evtChangedPixmap);
+        event(evtChangedPixmap);
+}
+
+void ePixmap::setBorderWidth(int pixel)
+{
+        m_border_width=pixel;
+        invalidate();
+}
+
+void ePixmap::setBorderColor(const gRGB &color)
+{
+        m_border_color=color;
+        m_have_border_color=true;
+        invalidate();
 }
 
 void ePixmap::checkSize()
 {
-                       /* when we have no pixmap, or a pixmap of different size, we need 
+                        /* when we have no pixmap, or a pixmap of different size, we need 
           to enable transparency in any case. */
        if (m_pixmap && m_pixmap->size() == size() && !m_alphatest)
                setTransparent(0);
@@ -65,12 +78,13 @@ int ePixmap::event(int event, void *data, void *data2)
        switch (event)
        {
        case evtPaint:
-       {
-               ePtr<eWindowStyle> style;
-               
-               getStyle(style);
+        {
+                ePtr<eWindowStyle> style;
+
+                eSize s(size());
+                getStyle(style);
 
-//     we don't clear the background before because of performance reasons.
+//      we don't clear the background before because of performance reasons.
 //     when the pixmap is too small to fit the whole widget area, the widget is
 //     transparent anyway, so the background is already painted.
 //             eWidget::event(event, data, data2); 
@@ -88,12 +102,20 @@ int ePixmap::event(int event, void *data, void *data2)
                        if (m_scale)
                                painter.blitScale(m_pixmap, eRect(ePoint(0, 0), size()), eRect(), flags);
                        else
-                               painter.blit(m_pixmap, ePoint(0, 0), eRect(), flags);
-               }
+                                painter.blit(m_pixmap, ePoint(0, 0), eRect(), flags);
+                }
 
-               return 0;
-       }
-       case evtChangedPixmap:
+// border
+                if (m_have_border_color)
+                        painter.setForegroundColor(m_border_color);
+                painter.fill(eRect(0, 0, s.width(), m_border_width));
+                painter.fill(eRect(0, m_border_width, m_border_width, s.height()-m_border_width));
+                painter.fill(eRect(m_border_width, s.height()-m_border_width, s.width()-m_border_width, m_border_width));
+                painter.fill(eRect(s.width()-m_border_width, m_border_width, m_border_width, s.height()-m_border_width));
+
+                return 0;
+        }
+        case evtChangedPixmap:
                checkSize();
                invalidate();
                return 0;
index 6280fb3..9a6e20d 100644 (file)
@@ -12,18 +12,23 @@ public:
 
        void setPixmap(gPixmap *pixmap);
        void setPixmap(ePtr<gPixmap> &pixmap);
-       void setPixmapFromFile(const char *filename);
-       void setAlphatest(int alphatest); /* 1 for alphatest, 2 for alphablend */
-       void setScale(int scale);
+        void setPixmapFromFile(const char *filename);
+        void setAlphatest(int alphatest); /* 1 for alphatest, 2 for alphablend */
+        void setScale(int scale);
+        void setBorderWidth(int pixel);
+        void setBorderColor(const gRGB &color);
 protected:
-       ePtr<gPixmap> m_pixmap;
-       int event(int event, void *data=0, void *data2=0);
+        ePtr<gPixmap> m_pixmap;
+        int event(int event, void *data=0, void *data2=0);
        void checkSize();
 private:
        enum eLabelEvent
-       {
-               evtChangedPixmap = evtUserWidget,
-       };
+        {
+                evtChangedPixmap = evtUserWidget,
+        };
+        bool m_have_border_color;
+        int m_border_width;
+        gRGB m_border_color;
 };
 
 #endif
index 4d562b9..f934ed5 100644 (file)
@@ -481,7 +481,8 @@ class SecConfigure:
                self.update()
 
 class NIM(object):
-       def __init__(self, slot, type, description, has_outputs = True, internally_connectable = None, multi_type = {}, frontend_id = None):
+       def __init__(self, slot, type, description, has_outputs = True, internally_connectable = None, multi_type = {}, frontend_id = None, i2c = None):
+
                self.slot = slot
 
                if type not in ("DVB-S", "DVB-C", "DVB-T", "DVB-S2", None):
@@ -493,6 +494,7 @@ class NIM(object):
                self.has_outputs = has_outputs
                self.internally_connectable = internally_connectable
                self.multi_type = multi_type
+               self.i2c = i2c
                self.frontend_id = frontend_id
 
        def isCompatible(self, what):
@@ -530,6 +532,9 @@ class NIM(object):
        def getSlotID(self):
                return chr(ord('A') + self.slot)
        
+       def getI2C(self):
+               return self.i2c
+       
        def hasOutputs(self):
                return self.has_outputs
        
@@ -714,6 +719,9 @@ class NimManager:
                                modes = entries[current_slot].get("multi_type", {})
                                modes[split2[1]] = split[1].strip()
                                entries[current_slot]["multi_type"] = modes
+                       elif line.strip().startswith("I2C_Device:"):
+                               input = int(line.strip()[len("I2C_Device:") + 1:])
+                               entries[current_slot]["i2c"] = input
                        elif line.strip().startswith("empty"):
                                entries[current_slot]["type"] = None
                                entries[current_slot]["name"] = _("N/A")
@@ -725,6 +733,8 @@ class NimManager:
                        if not (entry.has_key("name") and entry.has_key("type")):
                                entry["name"] =  _("N/A")
                                entry["type"] = None
+                       if not (entry.has_key("i2c")):
+                               entry["i2c"] = None
                        if not (entry.has_key("has_outputs")):
                                entry["has_outputs"] = True
                        if entry.has_key("frontend_device"): # check if internally connectable
@@ -736,7 +746,8 @@ class NimManager:
                                entry["frontend_device"] = entry["internally_connectable"] = None
                        if not (entry.has_key("multi_type")):
                                entry["multi_type"] = {}
-                       self.nim_slots.append(NIM(slot = id, description = entry["name"], type = entry["type"], has_outputs = entry["has_outputs"], internally_connectable = entry["internally_connectable"], multi_type = entry["multi_type"], frontend_id = entry["frontend_device"]))
+                       self.nim_slots.append(NIM(slot = id, description = entry["name"], type = entry["type"], has_outputs = entry["has_outputs"], internally_connectable = entry["internally_connectable"], multi_type = entry["multi_type"], frontend_id = entry["frontend_device"], i2c = entry["i2c"]))
+
 
        def hasNimType(self, chktype):
                for slot in self.nim_slots:
index 62faf9b..9885e70 100644 (file)
@@ -278,7 +278,7 @@ class TimerEntry(Screen, ConfigListScreen):
                        self.keyGo()
 
        def keyGo(self, result = None):
-               if self.timerentry_service_ref.getType() != eServiceReference.idDVB or self.timerentry_service_ref.getPath() != "":
+               if not self.timerentry_service_ref.isRecordable():
                        self.session.openWithCallback(self.selectChannelSelector, MessageBox, _("You didn't select a channel to record from."), MessageBox.TYPE_ERROR)
                        return
                self.timer.name = self.timerentry_name.value