Навигация стрелками по полям диалогов
Оба диалога наследуются от FormScreen с action_walk: у Screen нет готового action_focus_next, поэтому биндинг стрелок на него молча ничего не делал. Вверх и вниз ходят по полям, влево и вправо остаются за курсором внутри поля ввода — биндинги намеренно без priority.
This commit is contained in:
+22
-4
@@ -283,6 +283,24 @@ class DumpList(FilterList):
|
||||
# --------------------------------------------------------------------------- модалки
|
||||
|
||||
|
||||
# Стрелки как способ ходить по полям диалога: Tab знают не все, а мышь в консоли не всегда
|
||||
# под рукой. Без priority — внутри Input стрелки вверх/вниз свободны и всплывают сюда сами.
|
||||
FORM_NAV = [
|
||||
Binding("down", "walk(1)", "ниже", show=False),
|
||||
Binding("up", "walk(-1)", "выше", show=False),
|
||||
]
|
||||
|
||||
|
||||
class FormScreen(ModalScreen):
|
||||
"""Диалог, по полям которого ходят стрелками: у Screen нет готового action для фокуса."""
|
||||
|
||||
def action_walk(self, step: int) -> None:
|
||||
if step > 0:
|
||||
self.focus_next()
|
||||
else:
|
||||
self.focus_previous()
|
||||
|
||||
|
||||
class PasswordModal(ModalScreen):
|
||||
"""getpass под запущенным Textual невозможен: пароль спрашивается только отсюда."""
|
||||
|
||||
@@ -310,11 +328,11 @@ class PasswordModal(ModalScreen):
|
||||
self.dismiss(None)
|
||||
|
||||
|
||||
class ConfirmModal(ModalScreen):
|
||||
class ConfirmModal(FormScreen):
|
||||
"""Последний экран перед деструктивной операцией: имя базы, режим и прямая формулировка."""
|
||||
|
||||
BINDINGS = [Binding("escape", "cancel", "отмена"),
|
||||
Binding("ctrl+enter", "start", "начать", priority=True)]
|
||||
Binding("ctrl+enter", "start", "начать", priority=True), *FORM_NAV]
|
||||
|
||||
TITLES = {"sync": "Dump + Restore", "dump": "Dump", "restore": "Restore"}
|
||||
|
||||
@@ -391,7 +409,7 @@ def _split_csv(text: str) -> list:
|
||||
return [part.strip() for part in text.split(",") if part.strip()]
|
||||
|
||||
|
||||
class DbOpModal(ModalScreen):
|
||||
class DbOpModal(FormScreen):
|
||||
"""Что делаем с выбранной базой: параметры дампа и галочка автоподнятия локально.
|
||||
|
||||
Заменяет собой выбор действия: снятый флаг — просто dump, поднятый — dump + restore.
|
||||
@@ -399,7 +417,7 @@ class DbOpModal(ModalScreen):
|
||||
"""
|
||||
|
||||
BINDINGS = [Binding("escape", "cancel", "отмена"),
|
||||
Binding("ctrl+enter", "start", "начать", priority=True)]
|
||||
Binding("ctrl+enter", "start", "начать", priority=True), *FORM_NAV]
|
||||
|
||||
def __init__(self, dbs: list, cfg: dict, defaults: dict) -> None:
|
||||
super().__init__()
|
||||
|
||||
Reference in New Issue
Block a user