hold red or blue key in movie player to seek x minutes forward or backward
authorStefan Pluecken <stefan.pluecken@multimedia-labs.de>
Fri, 23 Dec 2005 11:54:53 +0000 (11:54 +0000)
committerStefan Pluecken <stefan.pluecken@multimedia-labs.de>
Fri, 23 Dec 2005 11:54:53 +0000 (11:54 +0000)
data/keymap.xml
data/skin.xml
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/Makefile.am
lib/python/Screens/MinuteInput.py [new file with mode: 0644]

index 2462ef6..ab05856 100644 (file)
                <key id="BTN_1" mapto="zapDown" flags="mr" />
        </map>
        
+       <map context="MinuteInputActions">
+               <key id="KEY_UP" mapto="up" flags="mr" />
+               <key id="KEY_DOWN" mapto="down" flags="mr" />
+               <key id="KEY_OK" mapto="ok" flags="mr" />
+               <key id="KEY_EXIT" mapto="cancel" flags="mr" />
+       </map>
+       
        <map context="WizardActions">
                <key id="KEY_LEFT" mapto="left" flags="mr" />
                <key id="KEY_RIGHT" mapto="right" flags="mr" />
                <key id="KEY_YELLOW" mapto="pauseService" flags="m" />
                <key id="KEY_GREEN" mapto="unPauseService" flags="m" />
                <key id="KEY_RED" mapto="seekBack" flags="m" />
+               <key id="KEY_RED" mapto="seekBackUp" flags="b" />
                <key id="KEY_BLUE" mapto="seekFwd" flags="m" />
-
+               <key id="KEY_BLUE" mapto="seekFwdUp" flags="b" />
+               
                <key id="KEY_LEFT" mapto="seekBack" flags="m" />
                <key id="KEY_RIGHT" mapto="seekFwd" flags="m" />
 
index e8e8a9e..4be9475 100644 (file)
                        <widget name="channel" position="50,15" size="110,25" font="Regular;23" />
                        <widget name="number" position="160,15" size="80,25" halign="right" font="Regular;23" />
                </screen>
+               <screen name="MinuteInput" position="200,140" size="280,60" title="Seek">
+                       <widget name="minutes" position="160,15" size="80,25" halign="right" font="Regular;23" />
+               </screen>
                <screen name="Volume" flags="wfNoBorder" position="450,50" size="180,60" title="Volume">
                        <ePixmap position="0,0" zPosition="0" size="180,60" pixmap="/usr/share/enigma2/volumeslider-fs8.png" />
                        
index 96d8587..f8ac8fd 100644 (file)
@@ -21,6 +21,7 @@ from Screens.Mute import Mute
 from Screens.Dish import Dish
 from Screens.Standby import Standby
 from Screens.EventView import EventView
+from Screens.MinuteInput import MinuteInput
 from Components.Harddisk import harddiskmanager
 
 from Tools import Notifications
@@ -477,8 +478,10 @@ class InfoBarPVR:
                                "unPauseService": (self.unPauseService, "continue"),
                                
                                "seekFwd": (self.seekFwd, "skip forward"),
+                               "seekFwdUp": (self.seekFwdUp, "skip forward"),
                                "seekBack": (self.seekBack, "skip backward"),
-                                                         
+                               "seekBackUp": (self.seekBackUp, "skip backward"),
+                                                        
                                "up": (self.showMovies, "movie list"),
                                "down": (self.showMovies, "movie list")
                        })
@@ -488,6 +491,14 @@ class InfoBarPVR:
                self.seekTimer.timeout.get().append(self.seekTimerFired)
                self.skipinterval = 500 # 500ms skip interval
                self.onClose.append(self.delSeekTimer)
+               
+               self.fwdtimer = False
+               self.fwdKeyTimer = eTimer()
+               self.fwdKeyTimer.timeout.get().append(self.fwdTimerFire)
+
+               self.rwdtimer = False
+               self.rwdKeyTimer = eTimer()
+               self.rwdKeyTimer.timeout.get().append(self.rwdTimerFire)
        
        def up(self):
                pass
@@ -565,44 +576,85 @@ class InfoBarPVR:
                seekable.seekTo(90 * seektime)
 
        def seekFwd(self):
-               lookup = {
-                               self.SEEK_STATE_PLAY: self.SEEK_STATE_FF_2X,
-                               self.SEEK_STATE_PAUSE: self.SEEK_STATE_SM_EIGHTH,
-                               self.SEEK_STATE_FF_2X: self.SEEK_STATE_FF_4X,
-                               self.SEEK_STATE_FF_4X: self.SEEK_STATE_FF_8X,
-                               self.SEEK_STATE_FF_8X: self.SEEK_STATE_FF_32X,
-                               self.SEEK_STATE_FF_32X: self.SEEK_STATE_FF_64X,
-                               self.SEEK_STATE_FF_64X: self.SEEK_STATE_FF_128X,
-                               self.SEEK_STATE_FF_128X: self.SEEK_STATE_FF_128X,
-                               self.SEEK_STATE_BACK_4X: self.SEEK_STATE_PLAY,
-                               self.SEEK_STATE_BACK_32X: self.SEEK_STATE_BACK_4X,
-                               self.SEEK_STATE_BACK_64X: self.SEEK_STATE_BACK_32X,
-                               self.SEEK_STATE_BACK_128X: self.SEEK_STATE_BACK_64X,
-                               self.SEEK_STATE_SM_HALF: self.SEEK_STATE_SM_HALF,
-                               self.SEEK_STATE_SM_QUARTER: self.SEEK_STATE_SM_HALF,
-                               self.SEEK_STATE_SM_EIGHTH: self.SEEK_STATE_SM_QUARTER
-                       }
-               self.setSeekState(lookup[self.seekstate]);
-       
+               print "start fwd timer"
+               self.fwdtimer = True
+               self.fwdKeyTimer.start(500)
+
        def seekBack(self):
-               lookup = {
-                               self.SEEK_STATE_PLAY: self.SEEK_STATE_BACK_4X,
-                               self.SEEK_STATE_PAUSE: self.SEEK_STATE_PAUSE,
-                               self.SEEK_STATE_FF_2X: self.SEEK_STATE_PLAY,
-                               self.SEEK_STATE_FF_4X: self.SEEK_STATE_FF_2X,
-                               self.SEEK_STATE_FF_8X: self.SEEK_STATE_FF_4X,
-                               self.SEEK_STATE_FF_32X: self.SEEK_STATE_FF_8X,
-                               self.SEEK_STATE_FF_64X: self.SEEK_STATE_FF_32X,
-                               self.SEEK_STATE_FF_128X: self.SEEK_STATE_FF_64X,
-                               self.SEEK_STATE_BACK_4X: self.SEEK_STATE_BACK_32X,
-                               self.SEEK_STATE_BACK_32X: self.SEEK_STATE_BACK_64X,
-                               self.SEEK_STATE_BACK_64X: self.SEEK_STATE_BACK_128X,
-                               self.SEEK_STATE_BACK_128X: self.SEEK_STATE_BACK_128X,
-                               self.SEEK_STATE_SM_HALF: self.SEEK_STATE_SM_QUARTER,
-                               self.SEEK_STATE_SM_QUARTER: self.SEEK_STATE_SM_EIGHTH,
-                               self.SEEK_STATE_SM_EIGHTH: self.SEEK_STATE_PAUSE
-                       }
-               self.setSeekState(lookup[self.seekstate]);
+               print "start rewind timer"
+               self.rwdtimer = True
+               self.rwdKeyTimer.start(500)
+
+       def seekFwdUp(self):
+               if self.fwdtimer:
+                       self.fwdKeyTimer.stop()
+                       self.fwdtimer = False
+                       lookup = {
+                                       self.SEEK_STATE_PLAY: self.SEEK_STATE_FF_2X,
+                                       self.SEEK_STATE_PAUSE: self.SEEK_STATE_SM_EIGHTH,
+                                       self.SEEK_STATE_FF_2X: self.SEEK_STATE_FF_4X,
+                                       self.SEEK_STATE_FF_4X: self.SEEK_STATE_FF_8X,
+                                       self.SEEK_STATE_FF_8X: self.SEEK_STATE_FF_32X,
+                                       self.SEEK_STATE_FF_32X: self.SEEK_STATE_FF_64X,
+                                       self.SEEK_STATE_FF_64X: self.SEEK_STATE_FF_128X,
+                                       self.SEEK_STATE_FF_128X: self.SEEK_STATE_FF_128X,
+                                       self.SEEK_STATE_BACK_4X: self.SEEK_STATE_PLAY,
+                                       self.SEEK_STATE_BACK_32X: self.SEEK_STATE_BACK_4X,
+                                       self.SEEK_STATE_BACK_64X: self.SEEK_STATE_BACK_32X,
+                                       self.SEEK_STATE_BACK_128X: self.SEEK_STATE_BACK_64X,
+                                       self.SEEK_STATE_SM_HALF: self.SEEK_STATE_SM_HALF,
+                                       self.SEEK_STATE_SM_QUARTER: self.SEEK_STATE_SM_HALF,
+                                       self.SEEK_STATE_SM_EIGHTH: self.SEEK_STATE_SM_QUARTER
+                               }
+                       self.setSeekState(lookup[self.seekstate]);
+       
+       def seekBackUp(self):
+               if self.rwdtimer:
+                       self.rwdKeyTimer.stop()
+                       self.rwdtimer = False
+               
+                       lookup = {
+                                       self.SEEK_STATE_PLAY: self.SEEK_STATE_BACK_4X,
+                                       self.SEEK_STATE_PAUSE: self.SEEK_STATE_PAUSE,
+                                       self.SEEK_STATE_FF_2X: self.SEEK_STATE_PLAY,
+                                       self.SEEK_STATE_FF_4X: self.SEEK_STATE_FF_2X,
+                                       self.SEEK_STATE_FF_8X: self.SEEK_STATE_FF_4X,
+                                       self.SEEK_STATE_FF_32X: self.SEEK_STATE_FF_8X,
+                                       self.SEEK_STATE_FF_64X: self.SEEK_STATE_FF_32X,
+                                       self.SEEK_STATE_FF_128X: self.SEEK_STATE_FF_64X,
+                                       self.SEEK_STATE_BACK_4X: self.SEEK_STATE_BACK_32X,
+                                       self.SEEK_STATE_BACK_32X: self.SEEK_STATE_BACK_64X,
+                                       self.SEEK_STATE_BACK_64X: self.SEEK_STATE_BACK_128X,
+                                       self.SEEK_STATE_BACK_128X: self.SEEK_STATE_BACK_128X,
+                                       self.SEEK_STATE_SM_HALF: self.SEEK_STATE_SM_QUARTER,
+                                       self.SEEK_STATE_SM_QUARTER: self.SEEK_STATE_SM_EIGHTH,
+                                       self.SEEK_STATE_SM_EIGHTH: self.SEEK_STATE_PAUSE
+                               }
+                       self.setSeekState(lookup[self.seekstate]);
+               
+       def fwdTimerFire(self):
+               print "Display seek fwd"
+               self.fwdKeyTimer.stop()
+               self.fwdtimer = False
+               self.session.openWithCallback(self.fwdSeekTo, MinuteInput)
+               
+       def fwdSeekTo(self, minutes):
+               print "Seek", minutes, "minutes forward"
+               service = self.session.nav.getCurrentService()
+               if service is None:
+                       return
+               seekable = service.seek()
+               if seekable is None:
+                       return
+               seekable.seekRelative(1, minutes * 60 * 90000)
+       
+       def rwdTimerFire(self):
+               self.rwdKeyTimer.stop()
+               self.rwdtimer = False
+               self.session.openWithCallback(self.rwdSeekTo, MinuteInput)
+       
+       def rwdSeekTo(self, minutes):
+               self.fwdSeekTo(0 - minutes)
 
 from RecordTimer import parseEvent
 
index d191a5b..03c01e9 100644 (file)
@@ -8,4 +8,4 @@ install_PYTHON = \
        EpgSelection.py EventView.py Mute.py Standby.py ServiceInfo.py \
        AudioSelection.py InfoBarGenerics.py HelpMenu.py Wizard.py __init__.py \
        Dish.py SubserviceSelection.py LanguageSelection.py StartWizard.py \
-       TutorialWizard.py PluginBrowser.py
+       TutorialWizard.py PluginBrowser.py MinuteInput.py
diff --git a/lib/python/Screens/MinuteInput.py b/lib/python/Screens/MinuteInput.py
new file mode 100644 (file)
index 0000000..68909b6
--- /dev/null
@@ -0,0 +1,53 @@
+from Screen import Screen
+from Components.ActionMap import NumberActionMap
+from Components.Label import Label
+from Components.Button import Button
+from Components.Pixmap import Pixmap
+from Components.MenuList import MenuList
+from enigma import eSize, ePoint
+
+class MinuteInput(Screen):
+               def __init__(self, session, basemins = 5):
+                       Screen.__init__(self, session)
+                                               
+                       self["minutes"] = Label()
+                       self.updateValue(basemins)
+                       
+                       self["actions"] = NumberActionMap([ "NumberZapActions", "MinuteInputActions" ],
+                       {
+                               "1": self.keyNumberGlobal,
+                               "2": self.keyNumberGlobal,
+                               "3": self.keyNumberGlobal,
+                               "4": self.keyNumberGlobal,
+                               "5": self.keyNumberGlobal,
+                               "6": self.keyNumberGlobal,
+                               "7": self.keyNumberGlobal,
+                               "8": self.keyNumberGlobal,
+                               "9": self.keyNumberGlobal,
+                               "0": self.keyNumberGlobal,
+                               "up": self.up,
+                               "down": self.down,
+                               "ok": self.ok,
+                               "cancel": self.cancel
+                       })
+                       
+               def updateValue(self, minutes):
+                       self.minutes = minutes
+                       self["minutes"].setText(str(self.minutes) + _(" mins"))
+                       
+               def keyNumberGlobal(self, number):
+                       #self.updateValue(self.minutes * 10 + number)
+                       pass
+                       
+               def up(self):
+                       self.updateValue(self.minutes + 1)
+               
+               def down(self):
+                       if self.minutes > 0:
+                               self.updateValue(self.minutes - 1)
+                               
+               def ok(self):
+                       self.close(self.minutes)
+                       
+               def cancel(self):
+                       self.close(0)
\ No newline at end of file