Arbeitsstand gesichert: Deploymentcenter-Integration (D-0 bis D-5) und Einfenster-Shell
Sicherungscommit vor dem Aufraeumen des Repos, damit nachvollziehbar bleibt, welcher Stand vor der Bereinigung galt. Build gruen, 476 Tests gruen. Zwei Straenge, die sich ueber .csproj, Program.cs und appsettings.json ueberschneiden und darum gemeinsam abgelegt werden: Deploymentcenter-Integration (P3c, Plan D-0 bis D-5 code-seitig fertig): - Deploymentcenter.Client 2.5.0 als lokales Paket, Source-Mapping erweitert - DeploymentcenterOptions, DeploymentcenterErrorReporter, LicenseGate/LicenseCli - WatchdogHeartbeatService auf die Deploymentcenter-API umgestellt (version, os, checks, metrics, status stopped) - Security: MasterKeyResolver, SecretRedactor, FilePermissions - Directory.Build.props mit zentraler Version 0.1.0 (Packager-Versionsdisziplin) - deploy/: Packager-Vorlage und systemd-Unit; echte Zugangsdaten bleiben ueber .gitignore aussen vor - setup.json fuer die Erstinstallation - UMSETZUNGSPLAN-Deploymentcenter-Integration.md; ANALYSE-Linux-Portierung.md verweist auf den neuen Plan Einfenster-Shell (UI-Redesign): - ShellWindow + ShellNavModel als Seitenleisten-Shell - WindowMenuBar und WindowMenuModel entfallen - Modul- und Kernfenster auf die Shell-Einbettung angepasst Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,51 +0,0 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:shell="using:PolyTrader.App.Avalonia.Shell"
|
||||
x:Class="PolyTrader.App.Avalonia.Controls.WindowMenuBar"
|
||||
x:DataType="shell:WindowMenuModel">
|
||||
|
||||
<!--
|
||||
Gemeinsame Fenster-Menüleiste, die auf JEDEM PolyTrader-Fenster oben sitzt.
|
||||
Alle Fenster stehen nebeneinander (nicht in einem Untermenü versteckt), das aktuelle
|
||||
fett, offene mit Haken. Die rechte Aktion ist kontextabhängig.
|
||||
|
||||
Vollständig deklarativ: die Einträge kommen als Datenmodell aus WindowMenuModel.Entries,
|
||||
hier wird nur beschrieben, wie ein Eintrag aussieht. Kein Aufbau zur Laufzeit im Code.
|
||||
(Avalonia kennt kein ToolStripItemAlignment.Right — die rechte Ausrichtung entsteht
|
||||
dadurch, dass der letzte Eintrag im DockPanel rechts angedockt wird.)
|
||||
-->
|
||||
<Border Background="{DynamicResource AppSurfaceAltBrush}" BorderBrush="{DynamicResource AppBorderBrush}" BorderThickness="0,0,0,1" Padding="4,2">
|
||||
<ItemsControl ItemsSource="{Binding Entries}">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<StackPanel Orientation="Horizontal" />
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate x:DataType="shell:WindowMenuEntry">
|
||||
<Button Command="{Binding Command}"
|
||||
ToolTip.Tip="{Binding ToolTip}"
|
||||
Background="Transparent"
|
||||
BorderThickness="0"
|
||||
Padding="8,4"
|
||||
Margin="0,0,2,0">
|
||||
<StackPanel Orientation="Horizontal" Spacing="6">
|
||||
<Image Source="{Binding Icon}"
|
||||
Width="20" Height="20"
|
||||
VerticalAlignment="Center"
|
||||
IsVisible="{Binding Icon, Converter={x:Static ObjectConverters.IsNotNull}}" />
|
||||
<TextBlock Text="{Binding CheckMark}"
|
||||
VerticalAlignment="Center"
|
||||
Foreground="{DynamicResource AppPositiveBrush}" />
|
||||
<TextBlock Text="{Binding Title}"
|
||||
VerticalAlignment="Center"
|
||||
FontWeight="{Binding FontWeight}" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</Border>
|
||||
|
||||
</UserControl>
|
||||
@@ -1,30 +0,0 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using PolyTrader.App.Avalonia.Shell;
|
||||
using PolyTrader.Core.Modularity;
|
||||
|
||||
namespace PolyTrader.App.Avalonia.Controls
|
||||
{
|
||||
/// <summary>
|
||||
/// Code-Behind der Fenster-Menüleiste: nur Verdrahtung, kein Layout (siehe Layout-Regel).
|
||||
/// Jedes Fenster ruft <see cref="Attach"/> auf und bekommt damit dieselbe Leiste.
|
||||
/// </summary>
|
||||
public partial class WindowMenuBar : UserControl
|
||||
{
|
||||
private WindowMenuModel? _model;
|
||||
|
||||
public WindowMenuBar() => AvaloniaXamlLoader.Load(this);
|
||||
|
||||
/// <summary>
|
||||
/// Verbindet die Leiste mit der Shell. <paramref name="currentViewId"/> ist <c>null</c> für den
|
||||
/// Launcher (rechte Aktion „Beenden"), sonst die View-ID (rechte Aktion „Fenster schließen").
|
||||
/// Die Event-Registrierung wird beim Entladen wieder gelöst – kein Leak.
|
||||
/// </summary>
|
||||
public void Attach(IModuleUiHost host, string? currentViewId, Window owner)
|
||||
{
|
||||
_model = new WindowMenuModel(host, currentViewId, owner.Close);
|
||||
DataContext = _model;
|
||||
owner.Closed += (_, _) => _model?.Detach();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user