# -*- coding: utf-8 -*- import widgetUtils import config from . import wx_ui from . import constants from pubsub import pub class KeystrokeEditor(object): def __init__(self): super(KeystrokeEditor, self).__init__() self.changed = False # Change it if the keyboard shorcuts are reassigned. self.dialog = wx_ui.keystrokeEditorDialog() self.map = config.keymap["keymap"] # we need to copy the keymap before modify it, for unregistering the old keystrokes if is needed. self.hold_map = self.map.copy() self.dialog.put_keystrokes(constants.actions, self.map) widgetUtils.connect_event(self.dialog.edit, widgetUtils.BUTTON_PRESSED, self.edit_keystroke) widgetUtils.connect_event(self.dialog.undefine, widgetUtils.BUTTON_PRESSED, self.undefine_keystroke) widgetUtils.connect_event(self.dialog.execute, widgetUtils.BUTTON_PRESSED, self.execute_action) self.dialog.get_response() def edit_keystroke(self, *args, **kwargs): action = self.dialog.actions[self.dialog.get_action()] edit_dialog = wx_ui.editKeystrokeDialog() self.set_keystroke(self.map[action], edit_dialog) answer = edit_dialog.get_response() if answer == widgetUtils.OK: new_keystroke = self.get_edited_keystroke(edit_dialog) if new_keystroke != self.map[action]: self.changed = True self.map[action] = new_keystroke self.dialog.put_keystrokes(constants.actions, self.map) def undefine_keystroke(self, *args, **kwargs): action = self.dialog.actions[self.dialog.get_action()] keystroke = self.map.get(action) if keystroke == None: return answer = self.dialog.undefine_keystroke_confirmation() if answer == widgetUtils.YES: self.map[action] = "" self.changed = True self.dialog.put_keystrokes(constants.actions, self.map) def set_keystroke(self, keystroke, dialog): for i in keystroke.split("+"): if hasattr(dialog, i): dialog.set(i, True) dialog.set("key", keystroke.split("+")[-1]) def get_edited_keystroke(self, dialog): keys = [] if dialog.get("control") == True: keys.append("control") if dialog.get("win") == True: keys.append("win") if dialog.get("alt") == True: keys.append("alt") if dialog.get("shift") == True: keys.append("shift") if dialog.get("key") != "": keys.append(dialog.get("key")) else: wx_ui.no_key() return return "+".join(keys) def execute_action(self, *args, **kwargs): action = self.dialog.actions[self.dialog.get_action()] pub.sendMessage("execute-action", action=action)