Files
agent-wiki-ui/Gui/MainWindow.axaml.cs
T
davideandClaude Sonnet 5.5 941d02110d GUI Avalonia multipiattaforma in solo C# e rinomina in agent-wiki-ui
Sostituisce WinForms, WebView2 e ui.html con una GUI Avalonia (XAML,
ViewModel, tema chiaro/scuro) e un renderer markdown che trasforma l'albero
di Markdig in controlli. Un solo progetto net10.0 per Windows e Linux, con
publish single-file compresso. L'avvio di claude è in un solo punto
(Core/Claude.cs) condiviso da CLI e GUI. Il nome dell'app viene
dall'AssemblyName; ChatStore migra la cartella dati LlmRun alla nuova.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 11:18:46 +02:00

49 lines
1.7 KiB
C#

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();
}
}