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">
-               <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_ENTER" mapto="accept" flags="m" />
        </map>
 
        <map context="SetupActions">
        </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">
index a54d27b1fbe750bf2721f5a2e1525decf45d3558..f42d6a96318aaad2699b432fd56388c255ee8486 100644 (file)
@@ -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,
index f8ef0ec86a5708305e2241eef0d6e49b1de82adc..861e70bf61945545ba40cc730733a08269ea9991 100644 (file)
@@ -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 '<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["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)
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 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
index fe21ea0ab5136185f7d2d0b4c5dcb5020584dcc0..16fadf3d365f5030a341ac999dab606d94e5964d 100644 (file)
@@ -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())
index 53e337350920411b562cf466203080e468a431af..f01fbbecc16ddb4f05e7330117ad94e10c31cc47 100644 (file)
@@ -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()
                
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["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()