using Avalonia; using Avalonia.Controls; using Avalonia.Input; using Avalonia.Input.Platform; using Avalonia.Interactivity; using Avalonia.Threading; using AgentWikiUi.Core; namespace AgentWikiUi.Gui; partial class MainWindow : Window { public MainWindow() { InitializeComponent(); var vm = new MainViewModel(); DataContext = vm; // proporzioni 16:10 orizzontali: 75% della larghezza utile (max 1440), altezza max 90% var screen = Screens.Primary; if (screen is not null) { var area = screen.WorkingArea; double w = Math.Min(1440, area.Width / screen.Scaling * 3 / 4); var h = Math.Min(w * 10 / 16, area.Height / screen.Scaling * 9 / 10); Width = h * 16 / 10; Height = h; } else { Width = 1280; Height = 800; } WindowStartupLocation = WindowStartupLocation.CenterScreen; vm.CopyText = async text => { if (Clipboard is { } cb) await cb.SetTextAsync(text); }; vm.ConfirmDelete = () => ConfirmDialog.Ask(this, "Eliminare questa chat?"); vm.FocusInput += () => Dispatcher.UIThread.Post(() => InputBox.Focus()); vm.Messages.CollectionChanged += (_, _) => Dispatcher.UIThread.Post(() => Scroll.ScrollToEnd(), DispatcherPriority.Background); // Invio invia, Maiusc+Invio va a capo (tunnel: prima che il TextBox inserisca l'a capo) InputBox.AddHandler(KeyDownEvent, (_, e) => { if (e.Key == Key.Enter && !e.KeyModifiers.HasFlag(KeyModifiers.Shift)) { e.Handled = true; if (vm.SendCommand.CanExecute(null)) vm.SendCommand.Execute(null); } }, RoutingStrategies.Tunnel); Opened += (_, _) => InputBox.Focus(); } }