Show type of entry in cut list (and also color-code them)
authorFelix Domke <tmbinc@elitedvb.net>
Tue, 10 Feb 2009 21:39:36 +0000 (22:39 +0100)
committerFelix Domke <tmbinc@elitedvb.net>
Tue, 10 Feb 2009 21:39:36 +0000 (22:39 +0100)
lib/python/Plugins/Extensions/CutListEditor/plugin.py

index c80bff183182ebe903fe699230512d50a554cb0b..1ef15a53b9e491232858e297d84441a81e5a754f 100644 (file)
@@ -13,10 +13,11 @@ from enigma import eListboxPythonMultiContent, eListbox, gFont, iPlayableService
 from Screens.FixedMenu import FixedMenu
 from Screens.HelpMenu import HelpableScreen
 from ServiceReference import ServiceReference
 from Screens.FixedMenu import FixedMenu
 from Screens.HelpMenu import HelpableScreen
 from ServiceReference import ServiceReference
+from Components.Sources.List import List
+
 import bisect
 
 def CutListEntry(where, what):
 import bisect
 
 def CutListEntry(where, what):
-       res = [ (where, what) ]
        w = where / 90
        ms = w % 1000
        s = (w / 1000) % 60
        w = where / 90
        ms = w % 1000
        s = (w / 1000) % 60
@@ -24,16 +25,17 @@ def CutListEntry(where, what):
        h = w / 3600000
        if what == 0:
                type = "IN"
        h = w / 3600000
        if what == 0:
                type = "IN"
+               type_col = 0x004000
        elif what == 1:
                type = "OUT"
        elif what == 1:
                type = "OUT"
+               type_col = 0x400000
        elif what == 2:
                type = "MARK"
        elif what == 2:
                type = "MARK"
+               type_col = 0x000040
        elif what == 3:
                type = "LAST"
        elif what == 3:
                type = "LAST"
-       res.append(MultiContentEntryText(size=(400, 20), text = "%dh:%02dm:%02ds:%03d" % (h, m, s, ms)))
-       res.append(MultiContentEntryText(pos=(400,0), size=(130, 20), text = type, flags = RT_HALIGN_RIGHT))
-
-       return res
+               type_col = 0x000000
+       return ((where, what), "%dh:%02dm:%02ds:%03d" % (h, m, s, ms), type, type_col)
 
 class CutListContextMenu(FixedMenu):
        RET_STARTCUT = 0
 
 class CutListContextMenu(FixedMenu):
        RET_STARTCUT = 0
@@ -105,50 +107,6 @@ class CutListContextMenu(FixedMenu):
        def grabFrame(self):
                self.close(self.RET_GRABFRAME)
 
        def grabFrame(self):
                self.close(self.RET_GRABFRAME)
 
-class CutList(GUIComponent):
-       def __init__(self, list):
-               GUIComponent.__init__(self)
-               self.l = eListboxPythonMultiContent()
-               self.setList(list)
-               self.l.setFont(0, gFont("Regular", 20))
-               self.onSelectionChanged = [ ]
-
-       def getCurrent(self):
-               return self.l.getCurrentSelection()
-
-       def getCurrentIndex(self):
-               return self.l.getCurrentSelectionIndex()
-
-       GUI_WIDGET = eListbox
-
-       def postWidgetCreate(self, instance):
-               instance.setContent(self.l)
-               instance.setItemHeight(30)
-               instance.selectionChanged.get().append(self.selectionChanged)
-
-       def preWidgetRemove(self, instance):
-               instance.setContent(None)
-               instance.selectionChanged.get().remove(self.selectionChanged)
-
-       def selectionChanged(self):
-               for x in self.onSelectionChanged:
-                       x()
-
-       def invalidateEntry(self, index):
-               self.l.invalidateEntry(index)
-
-       def setIndex(self, index, data):
-               self.list[index] = data
-               self.invalidateEntry(index)
-
-       def setList(self, list):
-               self.list = list
-               self.l.setList(self.list)
-
-       def setSelection(self, index):
-               if self.instance is not None:
-                       self.instance.moveSelectionTo(index)
-
 class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, HelpableScreen):
        skin = """
        <screen position="0,0" size="720,576" title="Cutlist editor" flags="wfNoBorder">
 class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, HelpableScreen):
        skin = """
        <screen position="0,0" size="720,576" title="Cutlist editor" flags="wfNoBorder">
@@ -166,7 +124,17 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                </widget>
                <eLabel position="62,98" size="179,274" backgroundColor="#505555" />
                <eLabel position="64,100" size="175,270" backgroundColor="#000000" />
                </widget>
                <eLabel position="62,98" size="179,274" backgroundColor="#505555" />
                <eLabel position="64,100" size="175,270" backgroundColor="#000000" />
-               <widget name="Cutlist" position="64,100" zPosition="1" size="175,270" scrollbarMode="showOnDemand" transparent="1" />
+               <widget source="cutlist" position="64,100" zPosition="1" size="175,270" scrollbarMode="showOnDemand" transparent="1" render="Listbox" >
+                       <convert type="TemplatedMultiContent">
+                               {"template": [
+                                               MultiContentEntryText(size=(125, 20), text = 1, backcolor = MultiContentTemplateColor(3)),
+                                               MultiContentEntryText(pos=(125,0), size=(50, 20), text = 2, flags = RT_HALIGN_RIGHT, backcolor = MultiContentTemplateColor(3))
+                                       ],
+                                "fonts": [gFont("Regular", 18)],
+                                "itemHeight": 20
+                               }
+                       </convert>
+               </widget>
                <widget name="Timeline" position="50,485" size="615,20" backgroundColor="#505555" pointer="skin_default/position_arrow.png:3,5" foregroundColor="black" />
                <ePixmap pixmap="skin_default/icons/mp_buttons.png" position="305,515" size="109,13" alphatest="on" />
        </screen>"""
                <widget name="Timeline" position="50,485" size="615,20" backgroundColor="#505555" pointer="skin_default/position_arrow.png:3,5" foregroundColor="black" />
                <ePixmap pixmap="skin_default/icons/mp_buttons.png" position="305,515" size="109,13" alphatest="on" />
        </screen>"""
@@ -191,8 +159,8 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                self.downloadCuesheet()
 
                self["Timeline"] = ServicePositionGauge(self.session.nav)
                self.downloadCuesheet()
 
                self["Timeline"] = ServicePositionGauge(self.session.nav)
-               self["Cutlist"] = CutList(self.getCutlist())
-               self["Cutlist"].onSelectionChanged.append(self.selectionChanged)
+               self["cutlist"] = List(self.getCutlist())
+               self["cutlist"].onSelectionChanged.append(self.selectionChanged)
 
                self["Video"] = VideoWindow(decoder = 0)
 
 
                self["Video"] = VideoWindow(decoder = 0)
 
@@ -234,20 +202,20 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
        def setType(self, index, type):
                if len(self.cut_list):
                        self.cut_list[index] = (self.cut_list[index][0], type)
        def setType(self, index, type):
                if len(self.cut_list):
                        self.cut_list[index] = (self.cut_list[index][0], type)
-                       self["Cutlist"].setIndex(index, CutListEntry(*self.cut_list[index]))
+                       self["cutlist"].modifyEntry(index, CutListEntry(*self.cut_list[index]))
 
        def setIn(self):
 
        def setIn(self):
-               m = self["Cutlist"].getCurrentIndex()
+               m = self["cutlist"].getIndex()
                self.setType(m, 0)
                self.uploadCuesheet()
 
        def setOut(self):
                self.setType(m, 0)
                self.uploadCuesheet()
 
        def setOut(self):
-               m = self["Cutlist"].getCurrentIndex()
+               m = self["cutlist"].getIndex()
                self.setType(m, 1)
                self.uploadCuesheet()
 
        def setMark(self):
                self.setType(m, 1)
                self.uploadCuesheet()
 
        def setMark(self):
-               m = self["Cutlist"].getCurrentIndex()
+               m = self["cutlist"].getIndex()
                self.setType(m, 2)
                self.uploadCuesheet()
 
                self.setType(m, 2)
                self.uploadCuesheet()
 
@@ -255,7 +223,7 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                self.toggleMark(onlyadd=True, tolerance=90000) # do not allow two marks in <1s
 
        def __removeMark(self):
                self.toggleMark(onlyadd=True, tolerance=90000) # do not allow two marks in <1s
 
        def __removeMark(self):
-               m = self["Cutlist"].getCurrent()
+               m = self["cutlist"].getCurrent()
                m = m and m[0]
                if m is not None:
                        self.removeMark(m)
                m = m and m[0]
                if m is not None:
                        self.removeMark(m)
@@ -270,7 +238,7 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
                return r
 
        def selectionChanged(self):
                return r
 
        def selectionChanged(self):
-               where = self["Cutlist"].getCurrent()
+               where = self["cutlist"].getCurrent()
                if where is None:
                        print "no selection"
                        return
                if where is None:
                        print "no selection"
                        return
@@ -287,11 +255,11 @@ class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, He
 
                # get the first changed entry, and select it
                new_list = self.getCutlist()
 
                # get the first changed entry, and select it
                new_list = self.getCutlist()
-               self["Cutlist"].setList(new_list)
+               self["cutlist"].list = new_list
 
                for i in range(min(len(new_list), len(self.last_cuts))):
                        if new_list[i] != self.last_cuts[i]:
 
                for i in range(min(len(new_list), len(self.last_cuts))):
                        if new_list[i] != self.last_cuts[i]:
-                               self["Cutlist"].setSelection(i)
+                               self["cutlist"].setIndex(i)
                                break
                self.last_cuts = new_list
 
                                break
                self.last_cuts = new_list