diff options
| author | Stefan Pluecken <stefan.pluecken@multimedia-labs.de> | 2005-12-23 11:54:53 +0000 |
|---|---|---|
| committer | Stefan Pluecken <stefan.pluecken@multimedia-labs.de> | 2005-12-23 11:54:53 +0000 |
| commit | 0afd2995239e9c831b4e73ba27ec97302337db01 (patch) | |
| tree | c3feb0800e5718d557eae44c63d73913a6255351 | |
| parent | 321f1faf2e536f36dc519cddda2db62a74e4fd48 (diff) | |
| download | enigma2-0afd2995239e9c831b4e73ba27ec97302337db01.tar.gz enigma2-0afd2995239e9c831b4e73ba27ec97302337db01.zip | |
hold red or blue key in movie player to seek x minutes forward or backward
| -rw-r--r-- | data/keymap.xml | 11 | ||||
| -rw-r--r-- | data/skin.xml | 3 | ||||
| -rw-r--r-- | lib/python/Screens/InfoBarGenerics.py | 128 | ||||
| -rw-r--r-- | lib/python/Screens/Makefile.am | 2 | ||||
| -rw-r--r-- | lib/python/Screens/MinuteInput.py | 53 |
5 files changed, 157 insertions, 40 deletions
diff --git a/data/keymap.xml b/data/keymap.xml index 2462ef6e..ab058568 100644 --- a/data/keymap.xml +++ b/data/keymap.xml @@ -66,6 +66,13 @@ <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" /> @@ -141,8 +148,10 @@ <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" /> diff --git a/data/skin.xml b/data/skin.xml index e8e8a9ec..4be94751 100644 --- a/data/skin.xml +++ b/data/skin.xml @@ -210,6 +210,9 @@ <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" /> diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 96d85877..f8ac8fda 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -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 diff --git a/lib/python/Screens/Makefile.am b/lib/python/Screens/Makefile.am index d191a5ba..03c01e9e 100644 --- a/lib/python/Screens/Makefile.am +++ b/lib/python/Screens/Makefile.am @@ -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 index 00000000..68909b61 --- /dev/null +++ b/lib/python/Screens/MinuteInput.py @@ -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 |
