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>
166 lines
9.9 KiB
XML
166 lines
9.9 KiB
XML
<UserControl xmlns="https://github.com/avaloniaui"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:shell="using:PolyTrader.App.Avalonia.Shell"
|
|
xmlns:vm="using:PolyTrader.App.Avalonia.ViewModels"
|
|
x:Class="PolyTrader.App.Avalonia.Views.LauncherWindow">
|
|
|
|
<!--
|
|
Startseite der Anwendung. Entspricht der bisherigen LauncherForm, ist seit der Umstellung
|
|
auf die Einfenster-Shell aber eine Seite unter vielen: oben die Schnellaktionen
|
|
(Trading-Modi), dann die Kacheln zu den übrigen Ansichten, Account-Übersicht, Modul-KPIs
|
|
und die Live-Überblick-Widgets.
|
|
|
|
Die frühere Statusleiste (Trading / Module / API) steht jetzt einmal zentral in
|
|
Views/ShellWindow.axaml und nicht mehr auf dieser Seite.
|
|
-->
|
|
<DockPanel>
|
|
<Border Classes="toolbar" DockPanel.Dock="Top">
|
|
<StackPanel Orientation="Horizontal" Spacing="4">
|
|
<Button Name="btnLiveTrading" Content="LiveTrading (—)" MinWidth="170" />
|
|
<Button Name="btnDemoTrading" Content="DemoTrading (—)" MinWidth="170" />
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!--
|
|
D-4: Update-Hinweis. Verborgen, solange keine Prüfung lief oder keine neue Version
|
|
vorliegt - erscheint nur, wenn Deploymentcenter:UpdateCheckEnabled gesetzt ist UND
|
|
tatsächlich ein Update gefunden wurde. Installiert NIE automatisch (Leitentscheidung 4).
|
|
-->
|
|
<Border Name="pnlUpdateBanner" DockPanel.Dock="Top" IsVisible="False"
|
|
Background="{DynamicResource AppWarningBrush}" Padding="10,6">
|
|
<DockPanel>
|
|
<StackPanel Orientation="Horizontal" Spacing="10" DockPanel.Dock="Right">
|
|
<Button Name="btnInstallUpdate" Content="Jetzt installieren …" />
|
|
<Button Name="btnDismissUpdate" Content="Später" />
|
|
</StackPanel>
|
|
<TextBlock Name="lblUpdateInfo" Text="—" VerticalAlignment="Center" TextWrapping="Wrap" />
|
|
</DockPanel>
|
|
</Border>
|
|
|
|
<ScrollViewer>
|
|
<StackPanel Margin="0,14,0,0" Spacing="16">
|
|
<TextBlock Text="ANSICHTEN" Classes="kicker" />
|
|
|
|
<ItemsControl Name="windowButtons">
|
|
<ItemsControl.ItemsPanel>
|
|
<ItemsPanelTemplate>
|
|
<WrapPanel Orientation="Horizontal" />
|
|
</ItemsPanelTemplate>
|
|
</ItemsControl.ItemsPanel>
|
|
<ItemsControl.ItemTemplate>
|
|
<DataTemplate x:DataType="shell:ViewTile">
|
|
<Button Command="{Binding Command}"
|
|
MinWidth="190" MinHeight="56"
|
|
Margin="0,0,8,8"
|
|
HorizontalContentAlignment="Left">
|
|
<StackPanel Orientation="Horizontal" Spacing="10">
|
|
<Image Source="{Binding Icon}" Width="28" Height="28"
|
|
VerticalAlignment="Center"
|
|
IsVisible="{Binding Icon, Converter={x:Static ObjectConverters.IsNotNull}}" />
|
|
<StackPanel VerticalAlignment="Center">
|
|
<TextBlock Text="{Binding Title}" FontWeight="{Binding FontWeight}" />
|
|
<TextBlock Text="{Binding CheckMark}" FontSize="11" Foreground="{DynamicResource AppPositiveBrush}" />
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</Button>
|
|
</DataTemplate>
|
|
</ItemsControl.ItemTemplate>
|
|
</ItemsControl>
|
|
|
|
<!-- Account-Übersicht -->
|
|
<HeaderedContentControl Header="Account-Übersicht">
|
|
<DataGrid Name="gridAccounts" x:DataType="vm:AccountOverviewRow" Height="180">
|
|
<DataGrid.Columns>
|
|
<DataGridTextColumn Header="Account" Width="180" Binding="{Binding Name}" />
|
|
<DataGridTextColumn Header="Module" Width="220" Binding="{Binding Modules}" />
|
|
<DataGridTemplateColumn Header="Polymarket" Width="110">
|
|
<DataGridTemplateColumn.CellTemplate>
|
|
<DataTemplate x:DataType="vm:AccountOverviewRow">
|
|
<Button Content="Profil"
|
|
Padding="10,2" Margin="2"
|
|
Click="OnOpenPolymarketProfileClick"
|
|
HorizontalAlignment="Center" VerticalAlignment="Center" />
|
|
</DataTemplate>
|
|
</DataGridTemplateColumn.CellTemplate>
|
|
</DataGridTemplateColumn>
|
|
<DataGridTextColumn Header="Wallet (USDC)" Width="130" Binding="{Binding Balance, StringFormat=\{0:N2\}}" />
|
|
<DataGridTextColumn Header="3T PnL" Width="120" Binding="{Binding Pnl3d, StringFormat=\{0:N2\}}" />
|
|
<DataGridTextColumn Header="3T Winrate %" Width="120" Binding="{Binding WinRate3d, StringFormat=\{0:N1\}}" />
|
|
<DataGridTextColumn Header="Overall P/L" Width="130" Binding="{Binding OverallPnl, StringFormat=\{0:N2\}}" />
|
|
</DataGrid.Columns>
|
|
</DataGrid>
|
|
</HeaderedContentControl>
|
|
|
|
<!-- Modul-KPIs -->
|
|
<HeaderedContentControl Header="Modul-KPIs">
|
|
<ItemsControl Name="kpiTiles">
|
|
<ItemsControl.ItemsPanel>
|
|
<ItemsPanelTemplate>
|
|
<WrapPanel Orientation="Horizontal" />
|
|
</ItemsPanelTemplate>
|
|
</ItemsControl.ItemsPanel>
|
|
<ItemsControl.ItemTemplate>
|
|
<DataTemplate x:DataType="vm:ModuleKpiTile">
|
|
<Border BorderBrush="{DynamicResource AppBorderBrush}"
|
|
BorderThickness="1"
|
|
CornerRadius="4"
|
|
Background="{DynamicResource AppCardBrush}"
|
|
Padding="10,8" Margin="0,0,8,8" Width="250">
|
|
<StackPanel Spacing="4">
|
|
<TextBlock Text="{Binding ModuleName}" FontWeight="SemiBold" FontSize="13" />
|
|
<TextBlock Text="{Binding Text}"
|
|
Foreground="{Binding ForegroundBrush}"
|
|
FontFamily="Consolas,Menlo,monospace"
|
|
FontSize="11" />
|
|
</StackPanel>
|
|
</Border>
|
|
</DataTemplate>
|
|
</ItemsControl.ItemTemplate>
|
|
</ItemsControl>
|
|
</HeaderedContentControl>
|
|
|
|
<!-- Live-Überblick Widgets (3 Spalten) -->
|
|
<Grid ColumnDefinitions="*,8,*,8,*">
|
|
<!-- Auffällige Trades (24h) -->
|
|
<HeaderedContentControl Grid.Column="0" Header="Auffällige Trades (24h)" Height="250">
|
|
<DataGrid Name="gridNotable" x:DataType="vm:NotableTradeRow">
|
|
<DataGrid.Columns>
|
|
<DataGridTextColumn Header="Modul" Width="110" Binding="{Binding Module}" />
|
|
<DataGridTextColumn Header="Markt" Width="*" Binding="{Binding Market}" />
|
|
<DataGridTextColumn Header="PnL" Width="85" Binding="{Binding Pnl, StringFormat=\{0:F2\}}" />
|
|
<DataGridTextColumn Header="PnL %" Width="75" Binding="{Binding PnlPct, StringFormat=\{0:F1\}}" />
|
|
</DataGrid.Columns>
|
|
</DataGrid>
|
|
</HeaderedContentControl>
|
|
|
|
<GridSplitter Grid.Column="1" Background="{DynamicResource AppBorderBrush}" />
|
|
|
|
<!-- Warnungen & Fehler (heute) -->
|
|
<HeaderedContentControl Grid.Column="2" Name="grpAlerts" Header="Warnungen & Fehler (heute)" Height="250">
|
|
<DataGrid Name="gridAlerts" x:DataType="vm:LogAlertRow">
|
|
<DataGrid.Columns>
|
|
<DataGridTextColumn Header="Zeit" Width="75" Binding="{Binding Time}" />
|
|
<DataGridTextColumn Header="Level" Width="80" Binding="{Binding Level}" />
|
|
<DataGridTextColumn Header="Nachricht" Width="*" Binding="{Binding Message}" />
|
|
</DataGrid.Columns>
|
|
</DataGrid>
|
|
</HeaderedContentControl>
|
|
|
|
<GridSplitter Grid.Column="3" Background="{DynamicResource AppBorderBrush}" />
|
|
|
|
<!-- Supervisor-KI (letzter Bericht) -->
|
|
<HeaderedContentControl Grid.Column="4" Header="Supervisor-KI (letzter Bericht)" Height="250">
|
|
<Border BorderBrush="{DynamicResource AppBorderBrush}" BorderThickness="1" Background="{DynamicResource AppCardBrush}" Padding="8">
|
|
<ScrollViewer>
|
|
<SelectableTextBlock Name="txtSupervisor" TextWrapping="Wrap" FontSize="12" FontFamily="Consolas,Menlo,monospace" />
|
|
</ScrollViewer>
|
|
</Border>
|
|
</HeaderedContentControl>
|
|
</Grid>
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</DockPanel>
|
|
|
|
</UserControl>
|