Example #1
0
 def get_system_keymap(self, machine_type=None):
     if machine_type is None:
         machine_type = self.get_machine_type()
     try:
         machine_class = machine_registry.get(machine_type)
     except:
         log.error("invalid machine type: %s", machine_type, exc_info=True)
         return None
     section = SYSTEM_CONFIG_SECTION % DEFAULT_SYSTEM
     option = SYSTEM_KEYMAP_OPTION % machine_type
     mappings = self._get(section, option, None)
     if mappings is None:
         mappings = system.KEYMAPS.get(machine_type)
     else:
         try:
             mappings = dict(json.loads(mappings))
         except ValueError as e:
             log.error("invalid machine keymap, resetting to default",
                       exc_info=True)
             mappings = system.KEYMAPS.get(machine_type)
             self.set_system_keymap(mappings, machine_type)
     keymap = Keymap(machine_class.get_keys(),
                     system.KEYS + machine_class.get_actions())
     keymap.set_mappings(mappings)
     return keymap
Example #2
0
def machine(request, capture):
    machine = Keyboard({'arpeggiate': request.param})
    keymap = Keymap(Keyboard.KEYS_LAYOUT.split(),
                    system.KEYS + Keyboard.ACTIONS)
    keymap.set_mappings(system.KEYMAPS['Keyboard'])
    machine.set_keymap(keymap)
    return machine
 def __init__(self, _):
   super(TinyMod4Machine, self).__init__()
   keys = self.get_keys()
   self.keymap = Keymap(keys, keys)
   self.keymap.set_mappings(zip(keys, keys))
   self._pressed = False
   self._stack = ForthStack(8, 7)
   self._modeSelectPin = 12
Example #4
0
 def __init__(self):
     # Setup default keymap with no translation of keys.
     keys = self.get_keys()
     self.keymap = Keymap(keys, keys)
     self.keymap.set_mappings(zip(keys, keys))
     self.stroke_subscribers = []
     self.state_subscribers = []
     self.state = STATE_STOPPED
Example #5
0
def test_engine(engine):
    # Config load.
    assert engine.load_config()
    assert engine.events == []
    # Startup.
    engine.start()
    assert engine.events == [
        ('machine_state_changed', ('Fake', 'initializing'), {}),
        ('machine_state_changed', ('Fake', 'connected'), {}),
        ('config_changed', (engine.config, ), {}),
    ]
    assert FakeMachine.instance is not None
    assert not FakeMachine.instance.is_suppressed
    # Output enabled.
    engine.events.clear()
    engine.output = True
    assert engine.events == [
        ('output_changed', (True, ), {}),
    ]
    assert FakeMachine.instance.is_suppressed
    # Machine reconnection.
    engine.events.clear()
    engine.reset_machine()
    assert engine.events == [
        ('machine_state_changed', ('Fake', 'stopped'), {}),
        ('machine_state_changed', ('Fake', 'initializing'), {}),
        ('machine_state_changed', ('Fake', 'connected'), {}),
    ]
    assert FakeMachine.instance is not None
    assert FakeMachine.instance.is_suppressed
    # No machine reset on keymap change.
    engine.events.clear()
    new_keymap = Keymap(system.KEYS, system.KEYS)
    new_keymap.set_mappings(zip(system.KEYS, reversed(system.KEYS)))
    config_update = {'system_keymap': new_keymap}
    assert FakeMachine.instance.keymap != new_keymap
    engine.config = config_update
    assert engine.events == [
        ('config_changed', (config_update, ), {}),
    ]
    assert FakeMachine.instance.keymap == new_keymap
    # Output disabled
    engine.events.clear()
    engine.output = False
    assert engine.events == [
        ('output_changed', (False, ), {}),
    ]
    assert not FakeMachine.instance.is_suppressed
    # Stopped.
    engine.events.clear()
    engine.quit(42)
    assert engine.join() == 42
    assert engine.events == [
        ('machine_state_changed', ('Fake', 'stopped'), {}),
        ('quit', (), {}),
    ]
    assert FakeMachine.instance is None
Example #6
0
 def build_keymap(config, key, mappings=None):
     system = registry.get_plugin('system', key[1]).obj
     machine_class = registry.get_plugin('machine', key[2]).obj
     keymap = Keymap(machine_class.get_keys(), system.KEYS + machine_class.get_actions())
     if mappings is None:
         mappings = system.KEYMAPS.get(key[2])
     if mappings is None:
         if machine_class.KEYMAP_MACHINE_TYPE is not None:
             # Try fallback.
             return build_keymap(config, (key[0], key[1], machine_class.KEYMAP_MACHINE_TYPE))
         # No fallback...
         mappings = {}
     keymap.set_mappings(mappings)
     return keymap
Example #7
0
    def __init__(self, options, parent, config):
        self.config = config
        self.options = options

        pos = (config.get_keyboard_config_frame_x(),
               config.get_keyboard_config_frame_y())
        wx.Dialog.__init__(self, parent, title=DIALOG_TITLE, pos=pos)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer_flags = wx.SizerFlags().Border(wx.ALL, UI_BORDER).Align(
            wx.ALIGN_CENTER_HORIZONTAL)

        instructions = wx.StaticText(self, label=ARPEGGIATE_INSTRUCTIONS)
        sizer.AddF(instructions, sizer_flags.Align(wx.LEFT))
        self.arpeggiate_option = wx.CheckBox(self, label=ARPEGGIATE_LABEL)
        self.arpeggiate_option.SetValue(options.arpeggiate)
        sizer.AddF(self.arpeggiate_option, sizer_flags)

        # editable list for keymap bindings
        self.keymap = Keymap(KeyboardMachine.KEYS_LAYOUT.split(),
                             KeyboardMachine.ACTIONS)
        mappings = config.get_system_keymap('Keyboard')
        if mappings is not None:
            self.keymap.set_mappings(mappings)
        self.keymap_widget = EditKeymapWidget(self)
        self.keymap_widget.set_mappings(self.keymap.get_mappings())
        sizer.AddF(self.keymap_widget, sizer_flags.Expand())

        ok_button = wx.Button(self, id=wx.ID_OK)
        ok_button.SetDefault()
        cancel_button = wx.Button(self, id=wx.ID_CANCEL, label='Cancel')
        reset_button = wx.Button(self,
                                 id=wx.ID_RESET,
                                 label='Reset to default')

        button_sizer = wx.BoxSizer(wx.HORIZONTAL)
        button_sizer.AddF(ok_button, sizer_flags)
        button_sizer.AddF(cancel_button, sizer_flags)
        button_sizer.AddF(reset_button, sizer_flags)
        sizer.AddF(button_sizer, sizer_flags)

        self.SetSizerAndFit(sizer)
        self.SetRect(AdjustRectToScreen(self.GetRect()))

        self.Bind(wx.EVT_MOVE, self.on_move)
        ok_button.Bind(wx.EVT_BUTTON, lambda e: self.EndModal(wx.ID_OK))
        cancel_button.Bind(wx.EVT_BUTTON,
                           lambda e: self.EndModal(wx.ID_CANCEL))
        reset_button.Bind(wx.EVT_BUTTON, self.on_reset)
Example #8
0
 def get_system_keymap(self, machine_type=None, system_name=None):
     if machine_type is None:
         machine_type = self.get_machine_type()
     try:
         machine_class = registry.get_plugin('machine',
                                             machine_type).resolve()
     except:
         log.error("invalid machine type: %s", machine_type, exc_info=True)
         return None
     if system_name is None:
         system_name = self.get_system_name()
     try:
         system = registry.get_plugin('system', system_name).resolve()
     except:
         log.error("invalid system name: %s", system_name, exc_info=True)
         return None
     section = SYSTEM_CONFIG_SECTION % system_name
     option = SYSTEM_KEYMAP_OPTION % machine_type
     mappings = self._get(section, option, None)
     if mappings is None:
         # No user mappings, use system default.
         mappings = system.KEYMAPS.get(machine_type)
     else:
         try:
             mappings = dict(json.loads(mappings))
         except ValueError as e:
             log.error("invalid machine keymap, resetting to default",
                       exc_info=True)
             self.set_system_keymap(None, machine_type)
             mappings = system.KEYMAPS.get(machine_type)
     if mappings is None:
         if machine_class.KEYMAP_MACHINE_TYPE is not None:
             # Try fallback.
             return self.get_system_keymap(
                 machine_type=machine_class.KEYMAP_MACHINE_TYPE,
                 system_name=system_name)
         # No fallback...
         mappings = {}
     keymap = Keymap(machine_class.get_keys(),
                     system.KEYS + machine_class.get_actions())
     keymap.set_mappings(mappings)
     return keymap
Example #9
0
 def __init__(self):
     self.keymap = Keymap(self.KEYS_LAYOUT.split(), self.ACTIONS)
     self.stroke_subscribers = []
     self.state_subscribers = []
     self.state = STATE_STOPPED
Example #10
0
            {'path': short_path, 'enabled': True}
    assert DictionaryConfig(short_path, False).to_dict() == \
            {'path': short_path, 'enabled': False}
    # Test from_dict creation helper.
    assert DictionaryConfig.from_dict({'path': short_path}) == \
            DictionaryConfig(short_path)
    assert DictionaryConfig.from_dict({'path': full_path, 'enabled': False}) == \
            DictionaryConfig(short_path, False)


if sys.platform.startswith('win32'):
    ABS_PATH = os.path.normcase(r'c:/foo/bar')
else:
    ABS_PATH = '/foo/bar'

DEFAULT_KEYMAP = Keymap(Keyboard.get_keys(),
                        english_stenotype.KEYS + Keyboard.get_actions())
DEFAULT_KEYMAP.set_mappings(english_stenotype.KEYMAPS['Keyboard'])

DEFAULTS = {
    'space_placement':
    'Before Output',
    'start_attached':
    False,
    'start_capitalized':
    False,
    'undo_levels':
    config.DEFAULT_UNDO_LEVELS,
    'log_file_name':
    expand_path('strokes.log'),
    'enable_stroke_logging':
    False,
Example #11
0
def new_keymap():
    return Keymap(('k%u' % n for n in range(8)), ('a%u' % n for n in range(4)))
Example #12
0
    def test_decoding(self):
        inputs = [
            binascii.unhexlify(packet) for packet in '''
                  A90020
                  00

                  05464000

                  A904
                  0400

                  0D065000

                  A1008000

                  05
                  820400

                  17
                  00
                  8000

                  05
                  08
                  00
                  00
                  '''.split()
        ]
        # Mi piace mangiare la pizza.
        expected = 'CHRi/PIAce/CHRAh/PCIAre/HRa/PIsh/SPTa/P*'.split('/')
        keymap_mappings = {
            '#': '#',
            'S': 'S-',
            'P': 'T-',
            'C': 'K-',
            'T': 'P-',
            'H': 'W-',
            'V': 'H-',
            'R': 'R-',
            'I': 'A-',
            'A': 'O-',
            '*': '*',
            'E': '-E',
            'O': '-U',
            'c': '-F',
            's': '-R',
            't': '-P',
            'h': '-B',
            'p': '-L',
            'r': '-G',
            'i': '-T',
            'e': '-S',
            'a': '-D',
            'o': '-Z',
        }
        serial_params = {
            name: value[0]
            for name, value in ItalianStentura.get_option_info().items()
        }
        keymap = Keymap(ItalianStentura.KEYS_LAYOUT.split(),
                        keymap_mappings.keys())
        keymap.set_mappings(keymap_mappings)
        with patch('plover.machine.base.serial.Serial', MockSerial) as mock:
            machine = ItalianStentura(serial_params)

            def stroke_callbak(steno_keys):
                self.assertEqual(''.join(steno_keys), expected.pop(0))
                if not expected:
                    machine.stop_capture()

            machine.add_stroke_callback(stroke_callbak)
            machine.set_keymap(keymap)
            mock.inputs = inputs
            mock.machine = machine
            machine.start_capture()
            machine.finished.wait()
        self.assertFalse(bool(expected))