From e66f4bdb5fd20a77e5db713d732275aa32b22af5 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 11 Feb 2008 23:42:08 +0000 Subject: [PATCH] text edit patch #5 by Anders Holst --- data/keymap.xml | 17 ++++----- lib/python/Components/ConfigList.py | 36 ++++++------------- lib/python/Components/config.py | 29 +++++++++++---- .../SystemPlugins/SoftwareUpdate/plugin.py | 18 +++++++++- lib/python/Screens/ChannelSelection.py | 22 ++++++++++-- lib/python/Screens/InputBox.py | 12 +++---- lib/python/Screens/MinuteInput.py | 20 +++++++++-- lib/python/Screens/SleepTimerEdit.py | 20 ++++++++++- 8 files changed, 122 insertions(+), 52 deletions(-) diff --git a/data/keymap.xml b/data/keymap.xml index 560e523c..61145209 100644 --- a/data/keymap.xml +++ b/data/keymap.xml @@ -18,17 +18,16 @@ - - - - - - + + + + + + - @@ -122,7 +121,9 @@ - + + + diff --git a/lib/python/Components/ConfigList.py b/lib/python/Components/ConfigList.py index a54d27b1..f42d6a96 100644 --- a/lib/python/Components/ConfigList.py +++ b/lib/python/Components/ConfigList.py @@ -14,8 +14,7 @@ class ConfigList(HTMLComponent, GUIComponent, object): self.list = list self.onSelectionChanged = [ ] self.current = None - self.help_window = None - self.setHelpWindowSession(session) + self.session = session def execBegin(self): rcinput = eRCInput.getInstance() @@ -27,10 +26,6 @@ class ConfigList(HTMLComponent, GUIComponent, object): rcinput.setKeyboardMode(rcinput.kmNone) self.timer.timeout.get().remove(self.timeout) - def setHelpWindowSession(self, session): - assert self.help_window is None, "you can't move a help window to another session" - self.session = session - def toggle(self): selection = self.getCurrent() selection[1].toggle() @@ -41,8 +36,6 @@ class ConfigList(HTMLComponent, GUIComponent, object): if selection and selection[1].enabled: selection[1].handleKey(key) self.invalidateCurrent() - if self.help_window: - self.help_window.update(selection[1]) if key in KEY_NUMBERS: self.timer.start(1000, 1) @@ -68,25 +61,21 @@ class ConfigList(HTMLComponent, GUIComponent, object): GUI_WIDGET = eListbox def selectionChanged(self): - n = self.getCurrent() - - if self.help_window: - self.session.deleteDialog(self.help_window) - - nh = n and n[1].helpWindow() - if nh is not None and self.session is not None: - self.help_window = self.session.instantiateDialog(*nh) - self.help_window.show() - - self.current = n + if self.current: + self.current[1].onDeselect(self.session) + self.current = self.getCurrent() + if self.current: + self.current[1].onSelect(self.session) for x in self.onSelectionChanged: x() def postWidgetCreate(self, instance): - instance.setContent(self.l) instance.selectionChanged.get().append(self.selectionChanged) + instance.setContent(self.l) def preWidgetRemove(self, instance): + if self.current: + self.current[1].onDeselect(self.session) instance.selectionChanged.get().remove(self.selectionChanged) def setList(self, l): @@ -119,13 +108,10 @@ class ConfigListScreen: { "gotAsciiCode": self.keyGotAscii, "ok": self.keyOK, - "accept": self.keyOK, "left": self.keyLeft, "right": self.keyRight, - "moveLeft": self.keyLeft, - "moveRight": self.keyRight, - "moveHome": self.keyHome, - "moveEnd": self.keyEnd, + "home": self.keyHome, + "end": self.keyEnd, "deleteForward": self.keyDelete, "deleteBackward": self.keyBackspace, "toggleOverwrite": self.keyToggleOW, diff --git a/lib/python/Components/config.py b/lib/python/Components/config.py index f8ef0ec8..861e70bf 100644 --- a/lib/python/Components/config.py +++ b/lib/python/Components/config.py @@ -98,8 +98,11 @@ class ConfigElement(object): def __call__(self, selected): return self.getMulti(selected) - def helpWindow(self): - return None + def onSelect(self, session): + pass + + def onDeselect(self, session): + pass KEY_LEFT = 0 KEY_RIGHT = 1 @@ -558,7 +561,7 @@ class ConfigText(ConfigElement, NumericalTextInput): self.visible_width = visible_width self.offset = 0 self.overwrite = fixed_size - + self.help_window = None self.value = self.default = default def validateMarker(self): @@ -668,8 +671,12 @@ class ConfigText(ConfigElement, NumericalTextInput): self.insertChar(newChar, self.marked_pos, owr) elif key == KEY_TIMEOUT: self.timeout() + if self.help_window: + self.help_window.update(self) return + if self.help_window: + self.help_window.update(self) self.validateMarker() self.changed() @@ -708,9 +715,19 @@ class ConfigText(ConfigElement, NumericalTextInput): mark = [self.marked_pos] return ("mtext"[1-selected:], self.value+" ", mark) - def helpWindow(self): - from Screens.NumericalTextInputHelpDialog import NumericalTextInputHelpDialog - return (NumericalTextInputHelpDialog,self) + def onSelect(self, session): + self.allmarked = (self.value != "") + if session is not None: + from Screens.NumericalTextInputHelpDialog import NumericalTextInputHelpDialog + self.help_window = session.instantiateDialog(NumericalTextInputHelpDialog, self) + self.help_window.show() + + def onDeselect(self, session): + self.marked_pos = 0 + self.offset = 0 + if self.help_window: + session.deleteDialog(self.help_window) + self.help_window = None def getHTML(self, id): return '
\n' diff --git a/lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py b/lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py index c283dd04..c0fbe740 100644 --- a/lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py +++ b/lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py @@ -90,12 +90,16 @@ class IPKGSource(Screen): self["text"] = Input(sources[0], maxSize=False, type=Input.TEXT) - self["actions"] = NumberActionMap(["WizardActions", "InputActions"], + self["actions"] = NumberActionMap(["WizardActions", "InputActions", "TextEntryActions", "KeyboardInputActions"], { "ok": self.go, "back": self.close, "left": self.keyLeft, "right": self.keyRight, + "home": self.keyHome, + "end": self.keyEnd, + "deleteForward": self.deleteForward, + "deleteBackward": self.deleteBackward, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, @@ -120,6 +124,18 @@ class IPKGSource(Screen): def keyRight(self): self["text"].right() + def keyHome(self): + self["text"].home() + + def keyEnd(self): + self["text"].end() + + def keyDeleteForward(self): + self["text"].delete() + + def keyDeleteBackward(self): + self["text"].deleteBackward() + def keyNumberGlobal(self, number): print "pressed", number self["text"].number(number) diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py index c122e62e..e1402aea 100644 --- a/lib/python/Screens/ChannelSelection.py +++ b/lib/python/Screens/ChannelSelection.py @@ -5,7 +5,7 @@ from Components.ActionMap import NumberActionMap, ActionMap, HelpableActionMap from Components.MenuList import MenuList from Components.ServiceEventTracker import ServiceEventTracker from EpgSelection import EPGSelection -from enigma import eServiceReference, eEPGCache, eServiceCenter, eTimer, eDVBDB, iPlayableService, iServiceInformation +from enigma import eServiceReference, eEPGCache, eServiceCenter, eRCInput, eTimer, eDVBDB, iPlayableService, iServiceInformation, getPrevAsciiCode from Components.config import config, ConfigSubsection, ConfigText from Tools.NumericalTextInput import NumericalTextInput from Components.NimManager import nimmanager @@ -648,7 +648,7 @@ class ChannelSelectionBase(Screen): self.bouquetNumOffsetCache = { } - self["ChannelSelectBaseActions"] = NumberActionMap(["ChannelSelectBaseActions", "NumberActions"], + self["ChannelSelectBaseActions"] = NumberActionMap(["ChannelSelectBaseActions", "NumberActions", "InputAsciiActions"], { "showFavourites": self.showFavourites, "showAllServices": self.showAllServices, @@ -658,6 +658,7 @@ class ChannelSelectionBase(Screen): "prevBouquet": self.prevBouquet, "nextMarker": self.nextMarker, "prevMarker": self.prevMarker, + "gotAsciiCode": self.keyAsciiCode, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, @@ -972,6 +973,12 @@ class ChannelSelectionBase(Screen): if len(charstr) == 1: self.servicelist.moveToChar(charstr[0]) + def keyAsciiCode(self): + unichar = unichr(getPrevAsciiCode()) + charstr = unichar.encode("utf-8") + if len(charstr) == 1: + self.servicelist.moveToChar(charstr[0]) + def getRoot(self): return self.servicelist.getRoot() @@ -1087,6 +1094,15 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect self.revertMode = None config.usage.multibouquet.addNotifier(self.multibouquet_config_changed) self.new_service_played = False + self.onExecBegin.append(self.asciiOn) + + def asciiOn(self): + rcinput = eRCInput.getInstance() + rcinput.setKeyboardMode(rcinput.kmAscii) + + def asciiOff(self): + rcinput = eRCInput.getInstance() + rcinput.setKeyboardMode(rcinput.kmNone) def multibouquet_config_changed(self, val): self.recallBouquetMode() @@ -1154,6 +1170,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect root = self.getRoot() if not root or not (root.flags & eServiceReference.isGroup): self.zap() + self.asciiOff() self.close(ref) #called from infoBar and channelSelected @@ -1298,6 +1315,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect elif self.revertMode == MODE_RADIO: self.setModeRadio() self.revertMode = None + self.asciiOff() self.close(None) from Screens.InfoBarGenerics import InfoBarEvent, InfoBarServiceName diff --git a/lib/python/Screens/InputBox.py b/lib/python/Screens/InputBox.py index fe21ea0a..16fadf3d 100644 --- a/lib/python/Screens/InputBox.py +++ b/lib/python/Screens/InputBox.py @@ -22,15 +22,12 @@ class InputBox(Screen): "back": self.cancel, "left": self.keyLeft, "right": self.keyRight, - "moveLeft": self.keyLeft, - "moveRight": self.keyRight, - "moveHome": self.keyHome, - "moveEnd": self.keyEnd, + "home": self.keyHome, + "end": self.keyEnd, "deleteForward": self.keyDelete, "deleteBackward": self.keyBackspace, "tab": self.keyTab, "toggleOverwrite": self.keyInsert, - "accept": self.go, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, @@ -42,8 +39,9 @@ class InputBox(Screen): "9": self.keyNumberGlobal, "0": self.keyNumberGlobal }, -1) - rcinput = eRCInput.getInstance() - rcinput.setKeyboardMode(rcinput.kmAscii) + if self["input"].type == Input.TEXT: + rcinput = eRCInput.getInstance() + rcinput.setKeyboardMode(rcinput.kmAscii) def gotAsciiCode(self): self["input"].handleAscii(getPrevAsciiCode()) diff --git a/lib/python/Screens/MinuteInput.py b/lib/python/Screens/MinuteInput.py index 53e33735..f01fbbec 100644 --- a/lib/python/Screens/MinuteInput.py +++ b/lib/python/Screens/MinuteInput.py @@ -8,7 +8,7 @@ class MinuteInput(Screen): self["minutes"] = Input(str(basemins), type=Input.NUMBER) - self["actions"] = NumberActionMap([ "InputActions" , "MinuteInputActions" ], + self["actions"] = NumberActionMap([ "InputActions" , "MinuteInputActions", "TextEntryActions", "KeyboardInputActions" ], { "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, @@ -22,6 +22,10 @@ class MinuteInput(Screen): "0": self.keyNumberGlobal, "left": self.left, "right": self.right, + "home": self.home, + "end": self.end, + "deleteForward": self.deleteForward, + "deleteBackward": self.deleteBackward, "up": self.up, "down": self.down, "ok": self.ok, @@ -37,7 +41,19 @@ class MinuteInput(Screen): def right(self): self["minutes"].right() - + + def home(self): + self["minutes"].home() + + def end(self): + self["minutes"].end() + + def deleteForward(self): + self["minutes"].delete() + + def deleteBackward(self): + self["minutes"].deleteBackward() + def up(self): self["minutes"].up() diff --git a/lib/python/Screens/SleepTimerEdit.py b/lib/python/Screens/SleepTimerEdit.py index f724bc5f..54dd7e14 100644 --- a/lib/python/Screens/SleepTimerEdit.py +++ b/lib/python/Screens/SleepTimerEdit.py @@ -25,7 +25,7 @@ class SleepTimerEdit(Screen): self["input"] = Input(text = str(self.session.nav.SleepTimer.getCurrentSleepTime()), maxSize = False, type = Input.NUMBER) self["aftertext"] = Label(_("minutes")) - self["actions"] = NumberActionMap(["SleepTimerEditorActions"], + self["actions"] = NumberActionMap(["SleepTimerEditorActions", "TextEntryActions", "KeyboardInputActions"], { "exit": self.cancel, "select": self.select, @@ -41,6 +41,12 @@ class SleepTimerEdit(Screen): "0": self.keyNumberGlobal, "selectLeft": self.selectLeft, "selectRight": self.selectRight, + "left": self.selectLeft, + "right": self.selectRight, + "home": self.selectHome, + "end": self.selectEnd, + "deleteForward": self.deleteForward, + "deleteBackward": self.deleteBackward, "disableTimer": self.disableTimer, "toggleAction": self.toggleAction, "toggleAsk": self.toggleAsk @@ -85,6 +91,18 @@ class SleepTimerEdit(Screen): def selectRight(self): self["input"].right() + def selectHome(self): + self["input"].home() + + def selectEnd(self): + self["input"].end() + + def deleteForward(self): + self["input"].delete() + + def deleteBackward(self): + self["input"].deleteBackward() + def disableTimer(self): self.is_active = not self.is_active self.updateColors() -- 2.30.2