Files
ClawdDotNet/src/ClawdDotNet.Desktop/Views/TextEditorWindow.axaml.cs
T
RichardandClaude Opus 5 33d95a6c3f 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>
2026-08-23 12:16:05 +02:00

49 lines
1.4 KiB
C#

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