Source code for sleap.gui.dialogs.shortcuts

"""
GUI for viewing/modifying keyboard shortcuts.
"""

from typing import List

from PySide2 import QtWidgets

from sleap.gui.shortcuts import Shortcuts


[docs]class ShortcutDialog(QtWidgets.QDialog): """ Dialog window for reviewing and modifying the keyboard shortcuts. """ _column_len = 13 def __init__(self, *args, **kwargs): super(ShortcutDialog, self).__init__(*args, **kwargs) self.setWindowTitle("Keyboard Shortcuts") self.load_shortcuts() self.make_form()
[docs] 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() super(ShortcutDialog, self).accept()
[docs] def load_shortcuts(self): """Loads shortcuts object.""" self.shortcuts = Shortcuts()
[docs] 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( QtWidgets.QLabel( "Any changes to keyboard shortcuts will not take effect " "until you quit and re-open the application." ) ) layout.addWidget(self.make_buttons_widget()) self.setLayout(layout)
[docs] def make_buttons_widget(self) -> QtWidgets.QDialogButtonBox: """Makes the form buttons.""" buttons = QtWidgets.QDialogButtonBox( QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel ) buttons.accepted.connect(self.accept) buttons.rejected.connect(self.reject) return buttons
[docs] def make_shortcuts_widget(self) -> QtWidgets.QWidget: """Makes 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
[docs] def make_column_widget(self, shortcuts: List) -> QtWidgets.QWidget: """Makes 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