UI-Entwurf umgesetzt, Rocket.Chat-Tool, Deploymentcenter 2.4
Sicherungspunkt vor dem Aufraeumen. Buendelt die Arbeit, die seit dem Abschluss der Avalonia-Portierung im Arbeitsverzeichnis lag. Oberflaeche - Entwurf aus Mockup/ umgesetzt: Theme.axaml (Farben je Thema, Barlow als mitgelieferte Schrift), Icons.axaml (Symbolgeometrien), Shell.axaml (eigene ControlThemes statt Fluent umzufaerben). - Neue Steuerelemente StrokeIcon und BlueprintFrame, Seiten fuer Token-Verbrauch und Agenten-Chats, Werkzeug-Einstellungen als Seite statt eigenem Fenster, Texteditor-Fenster. - ThemeManager mit hellem und dunklem Thema; die beiden Pinsel-Konverter entfallen, weil ein fester Farbwert den Themenwechsel nicht ueberlebt. Rocket.Chat - Neues Tool-Projekt (Client, Konfiguration, Workspace-Dateien) nach der Bauform des Telegram-Tools: rocketchat_poll als Tool-Job, geweckt wird nur, wenn wirklich etwas anliegt. - send_file ist freigabepflichtig, send_message bewusst nicht: Der Raum ist Arbeitsraum, der Schutz sitzt an der Raum-Allowlist. - Konzept-Doc um die Messung gegen die echte Instanz 8.7 ergaenzt; drei Annahmen waren falsch und sind korrigiert. Deploymentcenter - DC6 (Update anwenden) und DC7 (Erstinstallation ueber setup.json) erledigt, DC3 fuer win-x64/dev; deploy/publish.py als Release-Strecke. - AppHost.DisposeAsync gegen doppeltes Herunterfahren gesperrt - sonst ueberschreibt eine zweite Abmeldung den Wartungszustand am Watchdog. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
|
||||
namespace ClawdDotNet.Desktop.Views;
|
||||
|
||||
/// <summary>
|
||||
/// Kleiner Editor für die langen Textfelder eines Agenten (Identity, Soul).
|
||||
///
|
||||
/// <para>Ohne eigenes Ansichtsmodell: Der Dialog hat einen Titel, ein Textfeld und zwei
|
||||
/// Schaltflächen. Ein Ansichtsmodell dafür wäre eine Datei mehr, ohne dass irgendetwas
|
||||
/// prüfbar würde.</para>
|
||||
/// </summary>
|
||||
public partial class TextEditorWindow : Window
|
||||
{
|
||||
private string? _result;
|
||||
|
||||
public TextEditorWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Zeigt den Editor und liefert den bearbeiteten Text — oder <c>null</c>, wenn
|
||||
/// abgebrochen wurde. Das Schließen über das Fensterkreuz gilt als Abbruch: Sonst
|
||||
/// wäre ein weggeklickter Dialog dasselbe wie ein bestätigter.
|
||||
/// </summary>
|
||||
public static async Task<string?> ShowAsync(Window owner, string title, string text)
|
||||
{
|
||||
var window = new TextEditorWindow { Title = title };
|
||||
window.TitleText.Text = title;
|
||||
window.Editor.Text = text;
|
||||
|
||||
await window.ShowDialog(owner);
|
||||
return window._result;
|
||||
}
|
||||
|
||||
private void OnSave(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
_result = Editor.Text ?? "";
|
||||
Close();
|
||||
}
|
||||
|
||||
private void OnCancel(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
_result = null;
|
||||
Close();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user