using System.Linq; using Avalonia; using Avalonia.Controls; using Avalonia.Input; using Avalonia.Layout; using Avalonia.Media; using ClaudeDo.Ui.ViewModels; using ClaudeDo.Ui.ViewModels.Islands; using ClaudeDo.Ui.ViewModels.Modals; using ClaudeDo.Ui.Views.Modals; namespace ClaudeDo.Ui.Views; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); KeyDown += OnWindowKeyDown; DataContextChanged += OnDataContextChanged; UpdateMaxIcon(); } protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) { base.OnPropertyChanged(change); if (change.Property == WindowStateProperty) UpdateMaxIcon(); if (change.Property == OffScreenMarginProperty) RootGrid.Margin = OffScreenMargin; } private void UpdateMaxIcon() { var key = WindowState == WindowState.Maximized ? "Icon.WinRestore" : "Icon.WinMax"; if (this.TryFindResource(key, out var geometry) && geometry is Geometry g) MaxIcon.Data = g; } private void OnDataContextChanged(object? sender, EventArgs e) { if (DataContext is IslandsShellViewModel vm) { vm.Dialogs = new WindowDialogService(this); vm.BringToFront = () => { if (WindowState == WindowState.Minimized) WindowState = WindowState.Normal; Activate(); }; } } private void OnWindowKeyDown(object? sender, KeyEventArgs e) { if (e.Key == Key.Space && FocusManager?.GetFocusedElement() is not TextBox && DataContext is IslandsShellViewModel vm) { e.Handled = true; _ = vm.ToggleSelectedDoneAsync(); } } private void OnTitleBarPressed(object? sender, PointerPressedEventArgs e) { if (e.GetCurrentPoint(this).Properties.IsLeftButtonPressed) BeginMoveDrag(e); } private void OnMinimize(object? s, Avalonia.Interactivity.RoutedEventArgs e) => WindowState = WindowState.Minimized; private void OnToggleMax(object? s, Avalonia.Interactivity.RoutedEventArgs e) => WindowState = WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized; private void OnClose(object? s, Avalonia.Interactivity.RoutedEventArgs e) => Close(); protected override void OnSizeChanged(SizeChangedEventArgs e) { base.OnSizeChanged(e); if (DataContext is IslandsShellViewModel vm) vm.WindowWidth = Bounds.Width; } }