Changeset 246


Ignore:
Timestamp:
Jan 17, 2011 10:05:17 AM (8 years ago)
Author:
mbutscher
Message:
  • Option for translating menu accelerators for special keyboard layouts where ctrl-level has other layout than base level
Location:
branches/mbutscher/work
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/mbutscher/work/WikidPad.xrc

    r230 r246  
    23862386        <border>0</border>
    23872387      </object>
     2388      <object class="sizeritem">
     2389        <object class="wxStaticBoxSizer">
     2390          <label></label>
     2391          <orient>wxVERTICAL</orient>
     2392          <object class="sizeritem">
     2393            <object class="wxStaticText">
     2394              <label>Compatibility</label>
     2395              <font>
     2396                <family>normal</family>
     2397                <style>default</style>
     2398                <weight>bold</weight>
     2399                <underlined>0</underlined>
     2400              </font>
     2401            </object>
     2402            <option>0</option>
     2403            <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     2404            <border>5</border>
     2405          </object>
     2406          <object class="sizeritem">
     2407            <object class="wxCheckBox" name="cbEditorUseImeWorkaround">
     2408              <label>Use IME workaround for editor input*</label>
     2409            </object>
     2410            <option>0</option>
     2411            <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     2412            <border>5</border>
     2413          </object>
     2414          <object class="sizeritem">
     2415            <object class="wxCheckBox" name="cbMenuAccelsKbdTranslate">
     2416              <label>Translate menu accelerators for keyboard layout*</label>
     2417            </object>
     2418            <option>0</option>
     2419            <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     2420            <border>5</border>
     2421          </object>
     2422          <object class="sizeritem">
     2423            <object class="wxCheckBox" name="cbSearchDontAllowCancel">
     2424              <label>Forbid cancel on search</label>
     2425            </object>
     2426            <option>0</option>
     2427            <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
     2428            <border>5</border>
     2429          </object>
     2430        </object>
     2431        <option>0</option>
     2432        <flag>wxALL|wxEXPAND</flag>
     2433        <border>0</border>
     2434      </object>
    23882435      <object class="spacer">
    23892436        <size>5,5</size>
     
    24252472          <label>Process auto-generated areas</label>
    24262473          <hidden>1</hidden>
    2427         </object>
    2428         <option>0</option>
    2429         <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
    2430         <border>5</border>
    2431       </object>
    2432       <object class="sizeritem">
    2433         <object class="wxCheckBox" name="cbEditorUseImeWorkaround">
    2434           <label>Use IME workaround for editor input*</label>
    2435         </object>
    2436         <option>0</option>
    2437         <flag>wxALL|wxEXPAND|wxALIGN_CENTRE_VERTICAL</flag>
    2438         <border>5</border>
    2439       </object>
    2440       <object class="sizeritem">
    2441         <object class="wxCheckBox" name="cbSearchDontAllowCancel">
    2442           <label>Forbid cancel on search</label>
    24432474        </object>
    24442475        <option>0</option>
  • branches/mbutscher/work/lib/pwiki/Configuration.py

    r230 r246  
    768768            # semicolon-separated list of recently used time formats
    769769    ("main", "single_process"): "True", # Ensure that only a single process runs per user
     770    ("main", "menu_accels_kbdTranslate"): "False", # Translate menu accelerators to match keyboard layout
     771            # this is only necessary for special layouts where ctrl-level uses fundamentally different layout
     772            # than base and shift level
    770773    ("main", "zombieCheck"): "True", # Check for alread running processes? Only active if "single_process" is True
    771    
     774
    772775    ("main", "tempHandling_preferMemory"): "False", # Prefer to store temporary data in memory where this is possible?
    773776    ("main", "tempHandling_tempMode"): u"system", # Mode for storing of temporary data.
  • branches/mbutscher/work/lib/pwiki/OptionsDialog.py

    r230 r246  
    581581
    582582            ("editor_useImeWorkaround", "cbEditorUseImeWorkaround", "b"),
    583 
     583            ("menu_accels_kbdTranslate", "cbMenuAccelsKbdTranslate", "b"),
    584584
    585585            ("auto_save", "cbAutoSave", "b"),
  • branches/mbutscher/work/lib/pwiki/OsAbstract.py

    r227 r246  
    33"""
    44
    5 import os, shutil, os.path, traceback
     5import os, shutil, os.path, re, traceback
    66import wx
    77
     
    150150       
    151151
     152if WindowsHacks:
     153    _ACCEL_KEY_MAPPING = None
     154   
     155    def translateAcceleratorByKbLayout(accStr):
     156        global _ACCEL_KEY_MAPPING
    152157
     158        cm = re.match(ur"(.+?[\+\-])(.) *$", accStr)
     159        if not cm:
     160            return accStr
     161       
     162        if not _ACCEL_KEY_MAPPING:
     163            # Build mapping
     164           
     165            result = {}
     166           
     167            # The order to scan for matches is important:
     168            # 1. Uppercase letters
     169            # 2. Digits
     170            # 3. Remaining ASCII codes
     171           
     172            for char in range(0x41, 0x5b) + range(0x30, 0x3a) + \
     173                    range(0x20, 0x30) + range(0x3a, 0x41) + range(0x5b, 0x7f):
     174                ks = WindowsHacks.VkKeyScan(unichr(char))
     175                vkCode = ks & 0xff
     176                if vkCode == 0:
     177                    continue
     178               
     179                targetChar = WindowsHacks.MapVirtualKey(vkCode, 2) & 0xffff
     180               
     181                if targetChar == 0:
     182                    continue
     183               
     184                targetChar = unichr(targetChar).upper()
     185               
     186                if targetChar in result:
     187                    continue
     188
     189                result[targetChar] = unichr(char)
     190
     191            _ACCEL_KEY_MAPPING = result
     192
     193        return cm.group(1) + _ACCEL_KEY_MAPPING.get(cm.group(2), cm.group(2))
     194
     195
     196
     197else:
     198    def translateAcceleratorByKbLayout(accStr):
     199        return accStr
  • branches/mbutscher/work/lib/pwiki/PersonalWikiFrame.py

    r234 r246  
    341341        if not wikiToOpen:
    342342            wikiToOpen = self.configuration.get("main", "last_wiki")
     343
     344        # Prepare accelerator translation before initializing GUI
     345        if self.configuration.getboolean("main", "menu_accels_kbdTranslate", False):
     346            self.translateMenuAccelerator = OsAbstract.translateAcceleratorByKbLayout
     347        else:
     348            self.translateMenuAccelerator = lambda x: x
    343349
    344350        # initialize the GUI
     
    667673        lcut = label.split(u"\t", 1)
    668674        if len(lcut) > 1:
     675            lcut[1] = self.translateMenuAccelerator(lcut[1])
    669676            label = lcut[0] + u" \t" + lcut[1]
     677
    670678
    671679        menuitem = wx.MenuItem(menu, menuID, label + u" ", text, kind)
     
    18201828        for i in range(1,7):
    18211829            self.addMenuItem(evaluationMenu,
    1822                     (_(u'Run Function &%i') + u'\tCtrl-%i') % (i, i),
     1830                    _(u'Run Function &%i') % i +
     1831                    self.translateMenuAccelerator(u'\tCtrl-%i' % i),
    18231832                    _(u'Run script function %i') % i,
    18241833                    lambda evt, i=i: self.getActiveEditor().evalScriptBlocks(i))
  • branches/mbutscher/work/lib/pwiki/WindowsHacks.py

    r220 r246  
    193193
    194194
     195MapVirtualKey = _user32dll.MapVirtualKeyW
     196MapVirtualKey.restype = c_uint
     197# UINT MapVirtualKey(UINT uCode,
     198#     UINT uMapType
     199# );
     200
     201
     202VkKeyScan = _user32dll.VkKeyScanW
     203VkKeyScan.argtypes = [ctypes.c_wchar]
     204# SHORT VkKeyScan(          TCHAR ch
     205# );
     206
     207
    195208
    196209WindowProcType = ctypes.WINFUNCTYPE(ctypes.c_uint, ctypes.c_int, ctypes.c_uint,
     
    203216#     LPARAM lParam     // second message parameter
    204217#    );
     218
    205219
    206220
     
    503517        traceback.print_exc()
    504518
     519
     520def virtualKeyToChar(vk):
     521    result = MapVirtualKey(vk, 2)
     522    deadKey = result & 0x80000000
     523    return deadKey, result #& 0xffff
    505524
    506525
Note: See TracChangeset for help on using the changeset viewer.