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 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="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>
                                <!--<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 \
        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 config import config, ConfigSelection, ConfigSubsection, ConfigOnOff, ConfigText
 from Components.Timezones import timezones
 from Components.Language import language
+from Components.Keyboard import keyboard
 
 def InitSetupDevices():
        
 
 def InitSetupDevices():
        
@@ -11,8 +12,12 @@ def InitSetupDevices():
        config.timezone.val = ConfigSelection(default = timezones.getDefaultTimezone(), choices = timezones.getTimezoneList())
        config.timezone.val.addNotifier(timezoneNotifier)
 
        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 = 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)
 
        def languageNotifier(configElement):
                language.activateLanguage(configElement.value)