Skip to content

shortcuts

sleap.gui.dialogs.shortcuts

GUI for viewing/modifying keyboard shortcuts.

Classes:

Name Description
ShortcutDialog

Dialog window for reviewing and modifying the keyboard shortcuts.

ShortcutDialog

Bases: QDialog

Dialog window for reviewing and modifying the keyboard shortcuts.

Methods:

Name Description
accept

Triggered when form is accepted; saves the shortcuts.

info_msg

Display information about changes.

load_shortcuts

Load shortcuts object.

make_buttons_widget

Make the form buttons.

make_column_widget

Make a single column of shortcut fields.

make_form

Creates the form with fields for all shortcuts.

make_shortcuts_widget

Make the widget will fields for all shortcuts.

reset

Reset to defaults.

Source code in sleap/gui/dialogs/shortcuts.py
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
class ShortcutDialog(QtWidgets.QDialog):
    """
    Dialog window for reviewing and modifying the keyboard shortcuts.
    """

    _column_len = 14

    def __init__(self, *args, **kwargs):
        super(ShortcutDialog, self).__init__(*args, **kwargs)

        self.setWindowTitle("Keyboard Shortcuts")
        self.load_shortcuts()
        self.make_form()

    def accept(self):
        """Triggered when form is accepted; saves the shortcuts."""
        for action, widget in self.key_widgets.items():
            self.shortcuts[action] = widget.keySequence().toString()
        self.shortcuts.save()
        self.info_msg()
        super(ShortcutDialog, self).accept()

    def info_msg(self):
        """Display information about changes."""
        msg = QtWidgets.QMessageBox()
        msg.setText(
            "Application must be restarted before changes to keyboard shortcuts "
            "take effect."
        )
        msg.exec_()

    def reset(self):
        """Reset to defaults."""
        self.shortcuts.reset_to_default()
        self.info_msg()
        super(ShortcutDialog, self).accept()

    def load_shortcuts(self):
        """Load shortcuts object."""
        self.shortcuts = Shortcuts()

    def make_form(self):
        """Creates the form with fields for all shortcuts."""
        self.key_widgets = dict()  # dict to store QKeySequenceEdit widgets

        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(self.make_shortcuts_widget())
        layout.addWidget(self.make_buttons_widget())
        self.setLayout(layout)

    def make_buttons_widget(self) -> QtWidgets.QDialogButtonBox:
        """Make the form buttons."""
        buttons = QtWidgets.QDialogButtonBox()
        save = QtWidgets.QPushButton("Save")
        save.clicked.connect(self.accept)
        buttons.addButton(save, QtWidgets.QDialogButtonBox.AcceptRole)

        cancel = QtWidgets.QPushButton("Cancel")
        cancel.clicked.connect(self.reject)
        buttons.addButton(cancel, QtWidgets.QDialogButtonBox.RejectRole)

        reset = QtWidgets.QPushButton("Reset to defaults")
        reset.clicked.connect(self.reset)
        buttons.addButton(reset, QtWidgets.QDialogButtonBox.ActionRole)

        return buttons

    def make_shortcuts_widget(self) -> QtWidgets.QWidget:
        """Make the widget will fields for all shortcuts."""
        shortcuts = self.shortcuts

        widget = QtWidgets.QWidget()
        layout = QtWidgets.QHBoxLayout()

        # show shortcuts in columns
        for a in range(0, len(shortcuts), self._column_len):
            b = min(len(shortcuts), a + self._column_len)
            column_widget = self.make_column_widget(shortcuts[a:b])
            layout.addWidget(column_widget)
        widget.setLayout(layout)
        return widget

    def make_column_widget(self, shortcuts: List) -> QtWidgets.QWidget:
        """Make a single column of shortcut fields.

        Args:
            shortcuts: The list of shortcuts to include in this column.

        Returns:
            The widget.
        """
        column_widget = QtWidgets.QWidget()
        column_layout = QtWidgets.QFormLayout()
        for action in shortcuts:
            item = QtWidgets.QKeySequenceEdit(shortcuts[action])
            column_layout.addRow(action.title(), item)
            self.key_widgets[action] = item
        column_widget.setLayout(column_layout)
        return column_widget

accept()

Triggered when form is accepted; saves the shortcuts.

Source code in sleap/gui/dialogs/shortcuts.py
26
27
28
29
30
31
32
def accept(self):
    """Triggered when form is accepted; saves the shortcuts."""
    for action, widget in self.key_widgets.items():
        self.shortcuts[action] = widget.keySequence().toString()
    self.shortcuts.save()
    self.info_msg()
    super(ShortcutDialog, self).accept()

info_msg()

Display information about changes.

Source code in sleap/gui/dialogs/shortcuts.py
34
35
36
37
38
39
40
41
def info_msg(self):
    """Display information about changes."""
    msg = QtWidgets.QMessageBox()
    msg.setText(
        "Application must be restarted before changes to keyboard shortcuts "
        "take effect."
    )
    msg.exec_()

load_shortcuts()

Load shortcuts object.

Source code in sleap/gui/dialogs/shortcuts.py
49
50
51
def load_shortcuts(self):
    """Load shortcuts object."""
    self.shortcuts = Shortcuts()

make_buttons_widget()

Make the form buttons.

Source code in sleap/gui/dialogs/shortcuts.py
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
def make_buttons_widget(self) -> QtWidgets.QDialogButtonBox:
    """Make the form buttons."""
    buttons = QtWidgets.QDialogButtonBox()
    save = QtWidgets.QPushButton("Save")
    save.clicked.connect(self.accept)
    buttons.addButton(save, QtWidgets.QDialogButtonBox.AcceptRole)

    cancel = QtWidgets.QPushButton("Cancel")
    cancel.clicked.connect(self.reject)
    buttons.addButton(cancel, QtWidgets.QDialogButtonBox.RejectRole)

    reset = QtWidgets.QPushButton("Reset to defaults")
    reset.clicked.connect(self.reset)
    buttons.addButton(reset, QtWidgets.QDialogButtonBox.ActionRole)

    return buttons

make_column_widget(shortcuts)

Make a single column of shortcut fields.

Parameters:

Name Type Description Default
shortcuts List

The list of shortcuts to include in this column.

required

Returns:

Type Description
QWidget

The widget.

Source code in sleap/gui/dialogs/shortcuts.py
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
def make_column_widget(self, shortcuts: List) -> QtWidgets.QWidget:
    """Make a single column of shortcut fields.

    Args:
        shortcuts: The list of shortcuts to include in this column.

    Returns:
        The widget.
    """
    column_widget = QtWidgets.QWidget()
    column_layout = QtWidgets.QFormLayout()
    for action in shortcuts:
        item = QtWidgets.QKeySequenceEdit(shortcuts[action])
        column_layout.addRow(action.title(), item)
        self.key_widgets[action] = item
    column_widget.setLayout(column_layout)
    return column_widget

make_form()

Creates the form with fields for all shortcuts.

Source code in sleap/gui/dialogs/shortcuts.py
53
54
55
56
57
58
59
60
def make_form(self):
    """Creates the form with fields for all shortcuts."""
    self.key_widgets = dict()  # dict to store QKeySequenceEdit widgets

    layout = QtWidgets.QVBoxLayout()
    layout.addWidget(self.make_shortcuts_widget())
    layout.addWidget(self.make_buttons_widget())
    self.setLayout(layout)

make_shortcuts_widget()

Make the widget will fields for all shortcuts.

Source code in sleap/gui/dialogs/shortcuts.py
79
80
81
82
83
84
85
86
87
88
89
90
91
92
def make_shortcuts_widget(self) -> QtWidgets.QWidget:
    """Make the widget will fields for all shortcuts."""
    shortcuts = self.shortcuts

    widget = QtWidgets.QWidget()
    layout = QtWidgets.QHBoxLayout()

    # show shortcuts in columns
    for a in range(0, len(shortcuts), self._column_len):
        b = min(len(shortcuts), a + self._column_len)
        column_widget = self.make_column_widget(shortcuts[a:b])
        layout.addWidget(column_widget)
    widget.setLayout(layout)
    return widget

reset()

Reset to defaults.

Source code in sleap/gui/dialogs/shortcuts.py
43
44
45
46
47
def reset(self):
    """Reset to defaults."""
    self.shortcuts.reset_to_default()
    self.info_msg()
    super(ShortcutDialog, self).accept()