Put back button and title on the same line

Wrap ← Back button and screen title in a Horizontal title-bar
container across all screens.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
shuki
2026-03-07 07:05:10 +02:00
parent e575b86869
commit e2d94546bd
11 changed files with 37 additions and 21 deletions

View File

@@ -8,7 +8,8 @@ Screen {
text-style: bold; text-style: bold;
color: #00cc00; color: #00cc00;
padding: 1 0; padding: 1 0;
text-align: center; width: 1fr;
content-align: center middle;
} }
/* Main menu */ /* Main menu */
@@ -175,6 +176,11 @@ SelectionList {
margin: 0 0 0 0; margin: 0 0 0 0;
} }
#title-bar {
height: auto;
align: left middle;
}
/* Button rows */ /* Button rows */
#backup-buttons, #backup-buttons,
#restore-buttons, #restore-buttons,

View File

@@ -18,8 +18,9 @@ class BackupScreen(Screen):
remotes = list_conf_dir("remotes.d") remotes = list_conf_dir("remotes.d")
with Horizontal(classes="screen-with-docs"): with Horizontal(classes="screen-with-docs"):
with Vertical(id="backup-screen"): with Vertical(id="backup-screen"):
yield Button("← Back", id="btn-back", classes="back-btn") with Horizontal(id="title-bar"):
yield Static("Backup", id="screen-title") yield Button("Back", id="btn-back", classes="back-btn")
yield Static("Backup", id="screen-title")
if not targets: if not targets:
yield Static("No sources configured. Add a source first.") yield Static("No sources configured. Add a source first.")
else: else:

View File

@@ -90,8 +90,9 @@ class LogsScreen(Screen):
yield Header(show_clock=True) yield Header(show_clock=True)
with Horizontal(classes="screen-with-docs"): with Horizontal(classes="screen-with-docs"):
with Vertical(id="logs-screen"): with Vertical(id="logs-screen"):
yield Button("← Back", id="btn-back", classes="back-btn") with Horizontal(id="title-bar"):
yield Static("Logs", id="screen-title") yield Button("← Back", id="btn-back", classes="back-btn")
yield Static("Logs", id="screen-title")
yield DataTable(id="logs-table") yield DataTable(id="logs-table")
with Horizontal(id="logs-buttons"): with Horizontal(id="logs-buttons"):
yield Button("View", variant="primary", id="btn-view") yield Button("View", variant="primary", id="btn-view")

View File

@@ -18,8 +18,9 @@ class RemotesScreen(Screen):
yield Header(show_clock=True) yield Header(show_clock=True)
with Horizontal(classes="screen-with-docs"): with Horizontal(classes="screen-with-docs"):
with Vertical(id="remotes-screen"): with Vertical(id="remotes-screen"):
yield Button("← Back", id="btn-back", classes="back-btn") with Horizontal(id="title-bar"):
yield Static("Destinations", id="screen-title") yield Button("← Back", id="btn-back", classes="back-btn")
yield Static("Destinations", id="screen-title")
yield DataTable(id="remotes-table") yield DataTable(id="remotes-table")
with Horizontal(id="remotes-buttons"): with Horizontal(id="remotes-buttons"):
yield Button("Add", variant="primary", id="btn-add") yield Button("Add", variant="primary", id="btn-add")

View File

@@ -21,8 +21,9 @@ class RestoreScreen(Screen):
remotes = list_conf_dir("remotes.d") remotes = list_conf_dir("remotes.d")
with Horizontal(classes="screen-with-docs"): with Horizontal(classes="screen-with-docs"):
with Vertical(id="restore-screen"): with Vertical(id="restore-screen"):
yield Button("← Back", id="btn-back", classes="back-btn") with Horizontal(id="title-bar"):
yield Static("Restore", id="screen-title") yield Button("← Back", id="btn-back", classes="back-btn")
yield Static("Restore", id="screen-title")
if not targets or not remotes: if not targets or not remotes:
yield Static("Both sources and destinations must be configured for restore.") yield Static("Both sources and destinations must be configured for restore.")
else: else:

View File

@@ -21,8 +21,9 @@ class RetentionScreen(Screen):
current_count = conf.get("RETENTION_COUNT", "30") current_count = conf.get("RETENTION_COUNT", "30")
with Horizontal(classes="screen-with-docs"): with Horizontal(classes="screen-with-docs"):
with Vertical(id="retention-screen"): with Vertical(id="retention-screen"):
yield Button("← Back", id="btn-back", classes="back-btn") with Horizontal(id="title-bar"):
yield Static("Retention Cleanup", id="screen-title") yield Button("← Back", id="btn-back", classes="back-btn")
yield Static("Retention Cleanup", id="screen-title")
if not targets: if not targets:
yield Static("No sources configured.") yield Static("No sources configured.")
else: else:

View File

@@ -34,8 +34,9 @@ class RunningTasksScreen(Screen):
yield Header(show_clock=True) yield Header(show_clock=True)
with Horizontal(classes="screen-with-docs"): with Horizontal(classes="screen-with-docs"):
with Vertical(id="running-tasks-screen"): with Vertical(id="running-tasks-screen"):
yield Button("← Back", id="btn-back", classes="back-btn") with Horizontal(id="title-bar"):
yield Static("Running Tasks", id="screen-title") yield Button("← Back", id="btn-back", classes="back-btn")
yield Static("Running Tasks", id="screen-title")
yield DataTable(id="rt-table") yield DataTable(id="rt-table")
with Horizontal(id="rt-buttons"): with Horizontal(id="rt-buttons"):
yield Button("View Log", variant="primary", id="btn-rt-view") yield Button("View Log", variant="primary", id="btn-rt-view")

View File

@@ -21,8 +21,9 @@ class ScheduleScreen(Screen):
yield Header(show_clock=True) yield Header(show_clock=True)
with Horizontal(classes="screen-with-docs"): with Horizontal(classes="screen-with-docs"):
with Vertical(id="schedule-screen"): with Vertical(id="schedule-screen"):
yield Button("← Back", id="btn-back", classes="back-btn") with Horizontal(id="title-bar"):
yield Static("Schedules", id="screen-title") yield Button("← Back", id="btn-back", classes="back-btn")
yield Static("Schedules", id="screen-title")
yield DataTable(id="sched-table") yield DataTable(id="sched-table")
with Horizontal(id="sched-buttons"): with Horizontal(id="sched-buttons"):
yield Button("Add", variant="primary", id="btn-add") yield Button("Add", variant="primary", id="btn-add")

View File

@@ -21,8 +21,9 @@ class SettingsScreen(Screen):
settings = AppSettings.from_conf(conf) settings = AppSettings.from_conf(conf)
with Horizontal(classes="screen-with-docs"): with Horizontal(classes="screen-with-docs"):
with Vertical(id="settings-screen"): with Vertical(id="settings-screen"):
yield Button("← Back", id="btn-back", classes="back-btn") with Horizontal(id="title-bar"):
yield Static("Settings", id="screen-title") yield Button("← Back", id="btn-back", classes="back-btn")
yield Static("Settings", id="screen-title")
with Vertical(classes="settings-section", id="section-general"): with Vertical(classes="settings-section", id="section-general"):
yield Static("Log Level:") yield Static("Log Level:")
yield Select( yield Select(

View File

@@ -32,8 +32,9 @@ class SnapshotsScreen(Screen):
remotes = list_conf_dir("remotes.d") remotes = list_conf_dir("remotes.d")
with Horizontal(classes="screen-with-docs"): with Horizontal(classes="screen-with-docs"):
with Vertical(id="snapshots-screen"): with Vertical(id="snapshots-screen"):
yield Button("← Back", id="btn-back", classes="back-btn") with Horizontal(id="title-bar"):
yield Static("Snapshots Browser", id="screen-title") yield Button("← Back", id="btn-back", classes="back-btn")
yield Static("Snapshots Browser", id="screen-title")
if not targets or not remotes: if not targets or not remotes:
yield Static("Sources and destinations must be configured to browse snapshots.") yield Static("Sources and destinations must be configured to browse snapshots.")
else: else:

View File

@@ -16,8 +16,9 @@ class TargetsScreen(Screen):
yield Header(show_clock=True) yield Header(show_clock=True)
with Horizontal(classes="screen-with-docs"): with Horizontal(classes="screen-with-docs"):
with Vertical(id="targets-screen"): with Vertical(id="targets-screen"):
yield Button("← Back", id="btn-back", classes="back-btn") with Horizontal(id="title-bar"):
yield Static("Sources", id="screen-title") yield Button("← Back", id="btn-back", classes="back-btn")
yield Static("Sources", id="screen-title")
yield DataTable(id="targets-table") yield DataTable(id="targets-table")
with Horizontal(id="targets-buttons"): with Horizontal(id="targets-buttons"):
yield Button("Add", variant="primary", id="btn-add") yield Button("Add", variant="primary", id="btn-add")