aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/keymap.xml11
-rw-r--r--data/skin.xml3
-rw-r--r--lib/python/Screens/InfoBarGenerics.py128
-rw-r--r--lib/python/Screens/Makefile.am2
-rw-r--r--lib/python/Screens/MinuteInput.py53
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