add early version of DVDBurn plugin. Basic functionality is working, but it needs...
[enigma2.git] / lib / python / Plugins / Extensions / CutListEditor / plugin.py
index 024c88898a7408780e10c1b0542b14e8afef8fa5..7ebc42b5176ddb50a278e77b1b5d828ec2a9e60f 100644 (file)
@@ -4,14 +4,14 @@ from Screens.Screen import Screen
 from Screens.MessageBox import MessageBox
 from Components.ServicePosition import ServicePositionGauge
 from Components.ActionMap import HelpableActionMap
 from Screens.MessageBox import MessageBox
 from Components.ServicePosition import ServicePositionGauge
 from Components.ActionMap import HelpableActionMap
-from Components.MenuList import MenuList
 from Components.MultiContent import MultiContentEntryText
 from Components.MultiContent import MultiContentEntryText
-from Components.ServiceEventTracker import ServiceEventTracker
+from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
 from Components.VideoWindow import VideoWindow
 from Components.VideoWindow import VideoWindow
-from Screens.InfoBarGenerics import InfoBarSeek, InfoBarCueSheetSupport, InfoBarServiceName
+from Screens.InfoBarGenerics import InfoBarSeek, InfoBarCueSheetSupport
 from Components.GUIComponent import GUIComponent
 from enigma import eListboxPythonMultiContent, eListbox, gFont, iPlayableService, RT_HALIGN_RIGHT
 from Screens.FixedMenu import FixedMenu
 from Components.GUIComponent import GUIComponent
 from enigma import eListboxPythonMultiContent, eListbox, gFont, iPlayableService, RT_HALIGN_RIGHT
 from Screens.FixedMenu import FixedMenu
+from Screens.HelpMenu import HelpableScreen
 import bisect
 
 def CutListEntry(where, what):
 import bisect
 
 def CutListEntry(where, what):
@@ -121,6 +121,10 @@ class CutList(GUIComponent):
                instance.setItemHeight(30)
                instance.selectionChanged.get().append(self.selectionChanged)
 
                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 selectionChanged(self):
                for x in self.onSelectionChanged:
                        x()
@@ -140,33 +144,35 @@ class CutList(GUIComponent):
                if self.instance is not None:
                        self.instance.moveSelectionTo(index)
 
                if self.instance is not None:
                        self.instance.moveSelectionTo(index)
 
-class CutListEditor(Screen, InfoBarSeek, InfoBarCueSheetSupport, InfoBarServiceName):
+class CutListEditor(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport, HelpableScreen):
        skin = """
        skin = """
-               <screen position="0,0" size="720,576" flags="wfNoBorder" backgroundColor="#444444">
-                       <eLabel position="360,0" size="360,313" backgroundColor="#ffffff" />
-                       <widget name="Video" position="370,10" size="340,268" backgroundColor="transparent" zPosition="1" />
-
-                       <eLabel position="50,80" size="300,24" text="Name:" font="Regular;20" foregroundColor="#cccccc" transparent="1" />
-
-                       <widget source="CurrentService" render="Label" position="50,110" size="300,60" font="Regular;22" >
-                               <convert type="ServiceName">Name</convert>
-                       </widget>
-
-                       <widget source="CurrentService" render="Label" position="370,278" size="340,25" 
-                               backgroundColor="#000000" foregroundColor="#ffffff" font="Regular;19" zPosition="1" >
-                               <convert type="ServicePosition">PositionDetailed</convert>
-                       </widget>
+       <screen position="0,0" size="720,576" title="Cutlist editor" flags="wfNoBorder">
+               <eLabel text="Cutlist editor" position="65,60" size="300,25" font="Regular;20" />
+               <widget source="global.CurrentTime" render="Label" position="268,60" size="394,20" font="Regular;20" halign="right">
+                       <convert type="ClockToText">Format:%A %B %d, %H:%M</convert>
+               </widget>
+               <eLabel position="268,98" size="394,304" backgroundColor="#505555" />
+               <widget name="Video" position="270,100" zPosition="1" size="390,300" backgroundColor="transparent" />
+               <widget source="session.CurrentService" render="Label" position="135,405" size="450,50" font="Regular;22" halign="center" valign="center">
+                       <convert type="ServiceName">Name</convert>
+               </widget>
+               <widget source="session.CurrentService" render="Label" position="50,450" zPosition="1" size="620,25" font="Regular;20" halign="center" valign="center">
+                       <convert type="ServicePosition">Position,Detailed</convert>
+               </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 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,500" size="620,40" transparent="1"
-                               pointer="/usr/share/enigma2/position_pointer.png:3,5" foregroundColor="#225b7395" />
-                       <widget name="Cutlist" position="50,325" size="620,175" scrollbarMode="showOnDemand" transparent="1" />
-               </screen>"""
        def __init__(self, session, service):
                self.skin = CutListEditor.skin
                Screen.__init__(self, session)
                InfoBarSeek.__init__(self, actionmap = "CutlistSeekActions")
                InfoBarCueSheetSupport.__init__(self)
        def __init__(self, session, service):
                self.skin = CutListEditor.skin
                Screen.__init__(self, session)
                InfoBarSeek.__init__(self, actionmap = "CutlistSeekActions")
                InfoBarCueSheetSupport.__init__(self)
-               InfoBarServiceName.__init__(self)
+               InfoBarBase.__init__(self, steal_current_service = True)
+               HelpableScreen.__init__(self)
                self.old_service = session.nav.getCurrentlyPlayingServiceReference()
                session.nav.playService(service)
 
                self.old_service = session.nav.getCurrentlyPlayingServiceReference()
                session.nav.playService(service)
 
@@ -193,7 +199,7 @@ class CutListEditor(Screen, InfoBarSeek, InfoBarCueSheetSupport, InfoBarServiceN
                                "addMark": (self.__addMark, _("Add a mark")),
                                "removeMark": (self.__removeMark, _("Remove a mark")),
                                "leave": (self.exit, _("Exit editor")),
                                "addMark": (self.__addMark, _("Add a mark")),
                                "removeMark": (self.__removeMark, _("Remove a mark")),
                                "leave": (self.exit, _("Exit editor")),
-                               "showMenu": self.showMenu,
+                               "showMenu": (self.showMenu, _("menu")),
                        }, prio=-4)
 
                self.tutorial_seen = False
                        }, prio=-4)
 
                self.tutorial_seen = False
@@ -212,7 +218,7 @@ class CutListEditor(Screen, InfoBarSeek, InfoBarCueSheetSupport, InfoBarServiceN
                if not self.tutorial_seen:
                        self.tutorial_seen = True
                        self.session.open(MessageBox, 
                if not self.tutorial_seen:
                        self.tutorial_seen = True
                        self.session.open(MessageBox, 
-                               """Welcome to the Cutlist editor. It's still a bit strange to use, but anyway:
+                               """Welcome to the Cutlist editor. 
 
 Seek to the start of the stuff you want to cut away. Press OK, select 'start cut'.
 
 
 Seek to the start of the stuff you want to cut away. Press OK, select 'start cut'.
 
@@ -388,10 +394,10 @@ Then seek to the end, press OK, select 'end cut'. That's it.
                        bisect.insort(self.cut_list, (self.context_position, 1))
                        self.uploadCuesheet()
 
                        bisect.insort(self.cut_list, (self.context_position, 1))
                        self.uploadCuesheet()
 
-       # we modify the "play" behaviour a bit:
+       # we modify the "play" behavior a bit:
        # if we press pause while being in slowmotion, we will pause (and not play)
        def playpauseService(self):
        # if we press pause while being in slowmotion, we will pause (and not play)
        def playpauseService(self):
-               if self.seekstate not in [self.SEEK_STATE_PLAY, self.SEEK_STATE_SM_HALF, self.SEEK_STATE_SM_QUARTER, self.SEEK_STATE_SM_EIGHTH]:
+               if self.seekstate != self.SEEK_STATE_PLAY and not self.isStateSlowMotion(self.seekstate):
                        self.unPauseService()
                else:
                        self.pauseService()
                        self.unPauseService()
                else:
                        self.pauseService()