From 7f4dc8b9730d35feb880fa5fadcc017abd8636e3 Mon Sep 17 00:00:00 2001 From: Mika Kuns Date: Thu, 25 Jun 2026 16:49:20 +0200 Subject: [PATCH] feat(ui): open Settings from the Mission Control header --- src/ClaudeDo.Localization/locales/de.json | 3 ++- src/ClaudeDo.Localization/locales/en.json | 3 ++- .../ViewModels/IslandsShellViewModel.cs | 1 + .../ViewModels/MissionControlViewModel.cs | 6 ++++++ .../MissionControl/MissionControlView.axaml | 15 ++++++++++++--- src/ClaudeDo.Ui/Views/WindowDialogService.cs | 16 +++++++++++++++- 6 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/ClaudeDo.Localization/locales/de.json b/src/ClaudeDo.Localization/locales/de.json index 04d0bec..b141009 100644 --- a/src/ClaudeDo.Localization/locales/de.json +++ b/src/ClaudeDo.Localization/locales/de.json @@ -240,7 +240,8 @@ "redock": "Andocken", "windowTitle": "Mission Control", "clearFinished": "Erledigte entfernen", - "empty": "Keine laufenden Aufgaben" + "empty": "Keine laufenden Aufgaben", + "settings": "Einstellungen" }, "modals": { "logVisualizer": { diff --git a/src/ClaudeDo.Localization/locales/en.json b/src/ClaudeDo.Localization/locales/en.json index 7e73a0c..30e5150 100644 --- a/src/ClaudeDo.Localization/locales/en.json +++ b/src/ClaudeDo.Localization/locales/en.json @@ -240,7 +240,8 @@ "redock": "Re-dock", "windowTitle": "Mission Control", "clearFinished": "Clear finished", - "empty": "No running tasks" + "empty": "No running tasks", + "settings": "Settings" }, "modals": { "logVisualizer": { diff --git a/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs b/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs index f9571c8..90bc427 100644 --- a/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs @@ -214,6 +214,7 @@ public sealed partial class IslandsShellViewModel : ViewModelBase, IDisposable MissionControl = missionControl; MissionControl.OpenInApp = id => _ = RevealTaskAsync(id); MissionControl.ShowDetached = (monitor, reDock) => Dialogs?.ShowDetachedMonitor(monitor, reDock); + MissionControl.OpenSettingsRequested = () => Lists.OpenSettingsCommand.Execute(null); _updateCheck = updateCheck; _installerLocator = installerLocator; _workerLocator = workerLocator; diff --git a/src/ClaudeDo.Ui/ViewModels/MissionControlViewModel.cs b/src/ClaudeDo.Ui/ViewModels/MissionControlViewModel.cs index fece879..2c5c2a2 100644 --- a/src/ClaudeDo.Ui/ViewModels/MissionControlViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/MissionControlViewModel.cs @@ -37,6 +37,9 @@ public sealed partial class MissionControlViewModel : ViewModelBase, IDisposable // invoked when that window closes. public Action? ShowDetached { get; set; } + // View-layer seam: open the app Settings modal from the Mission Control window. + public Action? OpenSettingsRequested { get; set; } + public bool HasMonitors => Monitors.Count > 0; public MissionControlViewModel(IDbContextFactory dbFactory, IWorkerClient worker) @@ -115,6 +118,9 @@ public sealed partial class MissionControlViewModel : ViewModelBase, IDisposable } } + [RelayCommand] + private void OpenSettings() => OpenSettingsRequested?.Invoke(); + public void MoveMonitor(TaskMonitorViewModel dragged, TaskMonitorViewModel target) { if (ReferenceEquals(dragged, target)) return; diff --git a/src/ClaudeDo.Ui/Views/MissionControl/MissionControlView.axaml b/src/ClaudeDo.Ui/Views/MissionControl/MissionControlView.axaml index 70730a6..7ea7754 100644 --- a/src/ClaudeDo.Ui/Views/MissionControl/MissionControlView.axaml +++ b/src/ClaudeDo.Ui/Views/MissionControl/MissionControlView.axaml @@ -18,9 +18,18 @@ Text="{loc:Tr missionControl.windowTitle}" Foreground="{DynamicResource TextBrush}" LetterSpacing="1.4" VerticalAlignment="Center" /> - +