text edit patch #5 by Anders Holst
authorFelix Domke <tmbinc@elitedvb.net>
Mon, 11 Feb 2008 23:42:08 +0000 (23:42 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Mon, 11 Feb 2008 23:42:08 +0000 (23:42 +0000)
data/keymap.xml
lib/python/Components/ConfigList.py
lib/python/Components/config.py
lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py
lib/python/Screens/ChannelSelection.py
lib/python/Screens/InputBox.py
lib/python/Screens/MinuteInput.py
lib/python/Screens/SleepTimerEdit.py

index 560e523cfd2748f0e8e15214c90912361d3062eb..61145209686acb2a4b1ca607e01481bca385bcce 100644 (file)
        </map>
        
        <map context="KeyboardInputActions">
        </map>
        
        <map context="KeyboardInputActions">
-               <key id="KEY_LEFT" mapto="moveLeft" flags="mr" />
-               <key id="KEY_RIGHT" mapto="moveRight" flags="mr" />
-               <key id="KEY_HOME" mapto="moveHome" flags="mr" />
-               <key id="KEY_END" mapto="moveEnd" flags="mr" />
-               <key id="KEY_BACK" mapto="moveHome" flags="mr" />
-               <key id="KEY_FORWARD" mapto="moveEnd" flags="mr" />
+               <key id="KEY_LEFT" mapto="left" flags="mr" />
+               <key id="KEY_RIGHT" mapto="right" flags="mr" />
+               <key id="KEY_HOME" mapto="home" flags="mr" />
+               <key id="KEY_END" mapto="end" flags="mr" />
+               <key id="KEY_BACK" mapto="home" flags="mr" />
+               <key id="KEY_FORWARD" mapto="end" flags="mr" />
                <key id="KEY_DELETE" mapto="deleteForward" flags="mr" />
                <key id="KEY_BACKSPACE" mapto="deleteBackward" flags="mr" />
                <key id="KEY_TAB" mapto="tab" flags="mr" />
                <key id="KEY_INSERT" mapto="toggleOverwrite" flags="m" />
                <key id="KEY_DELETE" mapto="deleteForward" flags="mr" />
                <key id="KEY_BACKSPACE" mapto="deleteBackward" flags="mr" />
                <key id="KEY_TAB" mapto="tab" flags="mr" />
                <key id="KEY_INSERT" mapto="toggleOverwrite" flags="m" />
-               <key id="KEY_ENTER" mapto="accept" flags="m" />
        </map>
 
        <map context="SetupActions">
        </map>
 
        <map context="SetupActions">
        </map>
 
        <map context="InputAsciiActions">
        </map>
 
        <map context="InputAsciiActions">
-               <key id="KEY_ASCII" mapto="gotAsciiCode" flags="mr" />
+               <device name="dreambox ir keyboard">
+                       <key id="KEY_ASCII" mapto="gotAsciiCode" flags="mr" />
+               </device>
        </map>
 
        <map context="InputBoxActions">
        </map>
 
        <map context="InputBoxActions">
index a54d27b1fbe750bf2721f5a2e1525decf45d3558..f42d6a96318aaad2699b432fd56388c255ee8486 100644 (file)
@@ -14,8 +14,7 @@ class ConfigList(HTMLComponent, GUIComponent, object):
                self.list = list
                self.onSelectionChanged = [ ]
                self.current = None
                self.list = list
                self.onSelectionChanged = [ ]
                self.current = None
-               self.help_window = None
-               self.setHelpWindowSession(session)
+               self.session = session
 
        def execBegin(self):
                rcinput = eRCInput.getInstance()
 
        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)
 
                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()
        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 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)
 
                        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):
        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):
                for x in self.onSelectionChanged:
                        x()
 
        def postWidgetCreate(self, instance):
-               instance.setContent(self.l)
                instance.selectionChanged.get().append(self.selectionChanged)
                instance.selectionChanged.get().append(self.selectionChanged)
+               instance.setContent(self.l)
        
        def preWidgetRemove(self, instance):
        
        def preWidgetRemove(self, instance):
+               if self.current:
+                       self.current[1].onDeselect(self.session)
                instance.selectionChanged.get().remove(self.selectionChanged)
        
        def setList(self, l):
                instance.selectionChanged.get().remove(self.selectionChanged)
        
        def setList(self, l):
@@ -119,13 +108,10 @@ class ConfigListScreen:
                {
                        "gotAsciiCode": self.keyGotAscii,
                        "ok": self.keyOK,
                {
                        "gotAsciiCode": self.keyGotAscii,
                        "ok": self.keyOK,
-                       "accept": self.keyOK,
                        "left": self.keyLeft,
                        "right": self.keyRight,
                        "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,
                        "deleteForward": self.keyDelete,
                        "deleteBackward": self.keyBackspace,
                        "toggleOverwrite": self.keyToggleOW,
index f8ef0ec86a5708305e2241eef0d6e49b1de82adc..861e70bf61945545ba40cc730733a08269ea9991 100644 (file)
@@ -98,8 +98,11 @@ class ConfigElement(object):
        def __call__(self, selected):
                return self.getMulti(selected)
 
        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
 
 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.visible_width = visible_width
                self.offset = 0
                self.overwrite = fixed_size
-
+               self.help_window = None
                self.value = self.default = default
 
        def validateMarker(self):
                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()
                        self.insertChar(newChar, self.marked_pos, owr)
                elif key == KEY_TIMEOUT:
                        self.timeout()
+                       if self.help_window:
+                               self.help_window.update(self)
                        return
 
                        return
 
+               if self.help_window:
+                       self.help_window.update(self)
                self.validateMarker()
                self.changed()
 
                self.validateMarker()
                self.changed()
 
@@ -708,9 +715,19 @@ class ConfigText(ConfigElement, NumericalTextInput):
                                mark = [self.marked_pos]
                        return ("mtext"[1-selected:], self.value+" ", mark)
 
                                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 '<input type="text" name="' + id + '" value="' + self.value + '" /><br>\n'
 
        def getHTML(self, id):
                return '<input type="text" name="' + id + '" value="' + self.value + '" /><br>\n'
index c283dd04957028cc5eabebe2922b0f1a48f01113..c0fbe74052aad6b1b8e7a4c28ac776d88714c323 100644 (file)
@@ -90,12 +90,16 @@ class IPKGSource(Screen):
                
                self["text"] = Input(sources[0], maxSize=False, type=Input.TEXT)
                                
                
                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,
                {
                        "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,
                        "1": self.keyNumberGlobal,
                        "2": self.keyNumberGlobal,
                        "3": self.keyNumberGlobal,
@@ -120,6 +124,18 @@ class IPKGSource(Screen):
        def keyRight(self):
                self["text"].right()
        
        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)
        def keyNumberGlobal(self, number):
                print "pressed", number
                self["text"].number(number)
index c122e62e3b65deadf8c69fa13615de335d57d414..e1402aeab93c66a41d17276c556f6246fa945d3d 100644 (file)
@@ -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 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
 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.bouquetNumOffsetCache = { }
 
-               self["ChannelSelectBaseActions"] = NumberActionMap(["ChannelSelectBaseActions", "NumberActions"],
+               self["ChannelSelectBaseActions"] = NumberActionMap(["ChannelSelectBaseActions", "NumberActions", "InputAsciiActions"],
                        {
                                "showFavourites": self.showFavourites,
                                "showAllServices": self.showAllServices,
                        {
                                "showFavourites": self.showFavourites,
                                "showAllServices": self.showAllServices,
@@ -658,6 +658,7 @@ class ChannelSelectionBase(Screen):
                                "prevBouquet": self.prevBouquet,
                                "nextMarker": self.nextMarker,
                                "prevMarker": self.prevMarker,
                                "prevBouquet": self.prevBouquet,
                                "nextMarker": self.nextMarker,
                                "prevMarker": self.prevMarker,
+                               "gotAsciiCode": self.keyAsciiCode,
                                "1": self.keyNumberGlobal,
                                "2": self.keyNumberGlobal,
                                "3": self.keyNumberGlobal,
                                "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])
 
                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()
 
        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.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()
 
        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()
                        root = self.getRoot()
                        if not root or not (root.flags & eServiceReference.isGroup):
                                self.zap()
+                               self.asciiOff()
                                self.close(ref)
 
        #called from infoBar and channelSelected
                                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
                elif self.revertMode == MODE_RADIO:
                        self.setModeRadio()
                self.revertMode = None
+               self.asciiOff()
                self.close(None)
 
 from Screens.InfoBarGenerics import InfoBarEvent, InfoBarServiceName
                self.close(None)
 
 from Screens.InfoBarGenerics import InfoBarEvent, InfoBarServiceName
index fe21ea0ab5136185f7d2d0b4c5dcb5020584dcc0..16fadf3d365f5030a341ac999dab606d94e5964d 100644 (file)
@@ -22,15 +22,12 @@ class InputBox(Screen):
                        "back": self.cancel,
                        "left": self.keyLeft,
                        "right": self.keyRight,
                        "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,
                        "deleteForward": self.keyDelete,
                        "deleteBackward": self.keyBackspace,
                        "tab": self.keyTab,
                        "toggleOverwrite": self.keyInsert,
-                       "accept": self.go,
                        "1": self.keyNumberGlobal,
                        "2": self.keyNumberGlobal,
                        "3": self.keyNumberGlobal,
                        "1": self.keyNumberGlobal,
                        "2": self.keyNumberGlobal,
                        "3": self.keyNumberGlobal,
@@ -42,8 +39,9 @@ class InputBox(Screen):
                        "9": self.keyNumberGlobal,
                        "0": self.keyNumberGlobal
                }, -1)
                        "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())
 
        def gotAsciiCode(self):
                self["input"].handleAscii(getPrevAsciiCode())
index 53e337350920411b562cf466203080e468a431af..f01fbbecc16ddb4f05e7330117ad94e10c31cc47 100644 (file)
@@ -8,7 +8,7 @@ class MinuteInput(Screen):
                                                
                        self["minutes"] = Input(str(basemins), type=Input.NUMBER)
                        
                                                
                        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,
                        {
                                "1": self.keyNumberGlobal,
                                "2": self.keyNumberGlobal,
@@ -22,6 +22,10 @@ class MinuteInput(Screen):
                                "0": self.keyNumberGlobal,
                                "left": self.left,
                                "right": self.right,
                                "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,
                                "up": self.up,
                                "down": self.down,
                                "ok": self.ok,
@@ -37,7 +41,19 @@ class MinuteInput(Screen):
                        
                def right(self):
                        self["minutes"].right()
                        
                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()
                
                def up(self):
                        self["minutes"].up()
                
index f724bc5f7bbf369f6c3ec5df4cab00816cf9312a..54dd7e14c6c96c91cfe639cf910ccb8fd5f502e6 100644 (file)
@@ -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["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,
                {
                        "exit": self.cancel,
                        "select": self.select,
@@ -41,6 +41,12 @@ class SleepTimerEdit(Screen):
                        "0": self.keyNumberGlobal,
                        "selectLeft": self.selectLeft,
                        "selectRight": self.selectRight,
                        "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
                        "disableTimer": self.disableTimer,
                        "toggleAction": self.toggleAction,
                        "toggleAsk": self.toggleAsk
@@ -85,6 +91,18 @@ class SleepTimerEdit(Screen):
        def selectRight(self):
                self["input"].right()
 
        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()
        def disableTimer(self):
                self.is_active = not self.is_active
                self.updateColors()