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 560e523..6114520 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 a54d27b..f42d6a9 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 f8ef0ec..861e70b 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 c283dd0..c0fbe74 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 c122e62..e1402ae 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 fe21ea0..16fadf3 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 53e3373..f01fbbe 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 f724bc5..54dd7e1 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()