add option to select a keymap for a attached keyboard.
authoracid-burn <acidburn@opendreambox.org>
Wed, 6 May 2009 12:40:48 +0000 (14:40 +0200)
committeracid-burn <acidburn@opendreambox.org>
Wed, 6 May 2009 12:40:48 +0000 (14:40 +0200)
this closes #11

data/menu.xml [changed mode: 0644->0755]
lib/python/Components/Keyboard.py [new file with mode: 0755]
lib/python/Components/Makefile.am [changed mode: 0644->0755]
lib/python/Components/SetupDevices.py [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 8600053..c7fb889
                                        <item level="0" text="Filesystem Check..." entryID="harddisk_check"><screen module="HarddiskSetup" screen="HarddiskFsckSelection"/></item>
                                </menu>
                                <!--<item text="Remote Control"><setup id="rc" /></item>-->
-                               <!--<item text="Keyboard"><setup id="keyboard" /></item>-->
                                <!--<item text="OSD"><setup id="osd" /></item>-->
                                <item requires="Display"><setup level="1" id="lcd" /></item>
                                <item level="0" text="Network..." entryID="network_setup"><screen module="NetworkSetup" screen="NetworkAdapterSelection" /></item>
+                               <item text="Keyboard"><setup id="keyboard" /></item>
                                <!--<menu level="1" text="Network..." entryID="network_setup">
                                        <id val="network" />
                                        <item level="1" text="Device Setup..." entryID="device_setup"><screen module="NetworkSetup" screen="NetworkAdapterSelection"/></item>
diff --git a/lib/python/Components/Keyboard.py b/lib/python/Components/Keyboard.py
new file mode 100755 (executable)
index 0000000..820d103
--- /dev/null
@@ -0,0 +1,47 @@
+from Components.Console import Console
+from os import listdir as os_listdir, path as os_path
+from re import compile as re_compile
+
+class Keyboard:
+       def __init__(self):
+               self.keyboardmaps = []
+               self.readKeyboardMapFiles()
+
+       def readKeyboardMapFiles(self):
+               for keymapfile in os_listdir('/usr/share/keymaps/'):
+                       if (keymapfile.endswith(".info")):
+                               f = open('/usr/share/keymaps/' + keymapfile)
+                               mapfile = None
+                               mapname = None
+                               for line in f:
+                                       m = re_compile('^\s*(\w+)\s*=\s*(.*)\s*$').match(line)
+                                       if m:
+                                               key, val = m.groups()
+                                               if key == 'kmap':
+                                                   mapfile = val
+                                               if key == 'name':
+                                                   mapname = val
+                                               if (mapfile is not None) and (mapname is not None):
+                                                   self.keyboardmaps.append(( mapfile,mapname))
+                               f.close()
+
+               if len(self.keyboardmaps) == 0:
+                       self.keyboardmaps = [('dream-de.kmap', 'Dreambox Keyboard Deutsch'), ('eng.kmap', 'Keyboard English')]
+
+       def activateKeyboardMap(self, index):
+               try:
+                       keymap = self.keyboardmaps[index]
+                       print "Activating keymap:",keymap[1]
+                       keymappath = '/usr/share/keymaps/' + keymap[0]
+                       if os_path.exists(keymappath):
+                               Console().ePopen(("loadkmap < " + str(keymappath)))
+               except:
+                       print "Selected keymap does not exist!"
+
+       def getKeyboardMaplist(self):
+               return self.keyboardmaps
+
+       def getDefaultKeyboardMap(self):
+               return 'eng.kmap'
+
+keyboard = Keyboard()
old mode 100644 (file)
new mode 100755 (executable)
index 67cec18..85e4d3e
@@ -18,4 +18,5 @@ install_PYTHON = \
        MultiContent.py MediaPlayer.py TunerInfo.py VideoWindow.py ChoiceList.py \
        Element.py Playlist.py ParentalControl.py ParentalControlList.py \
        Ipkg.py SelectionList.py Scanner.py SystemInfo.py DreamInfoHandler.py \
-       Task.py language_cache.py Console.py ResourceManager.py TuneTest.py
+       Task.py language_cache.py Console.py ResourceManager.py TuneTest.py \
+       Keyboard.py
old mode 100644 (file)
new mode 100755 (executable)
index 71fb1e4..b037ea7
@@ -1,6 +1,7 @@
 from config import config, ConfigSelection, ConfigSubsection, ConfigOnOff, ConfigText
 from Components.Timezones import timezones
 from Components.Language import language
+from Components.Keyboard import keyboard
 
 def InitSetupDevices():
        
@@ -11,8 +12,12 @@ def InitSetupDevices():
        config.timezone.val = ConfigSelection(default = timezones.getDefaultTimezone(), choices = timezones.getTimezoneList())
        config.timezone.val.addNotifier(timezoneNotifier)
 
+       def keyboardNotifier(configElement):
+               keyboard.activateKeyboardMap(configElement.index)
+
        config.keyboard = ConfigSubsection();
-       config.keyboard.keymap = ConfigSelection(choices = [("en", _("English")), ("de",_("German"))])
+       config.keyboard.keymap = ConfigSelection(default = keyboard.getDefaultKeyboardMap(), choices = keyboard.getKeyboardMaplist())
+       config.keyboard.keymap.addNotifier(keyboardNotifier)
 
        def languageNotifier(configElement):
                language.activateLanguage(configElement.value)