UI Slice 4: Launcher-Live-Widgets + VS-Re-Serialisierungs-Regressionen behoben

Slice 4 - Launcher-Live-Ueberblick (LauncherWidgetsPanel, isoliertes UserControl, rechts angedockt,
30s-Refresh; minimaler Eingriff ins von Richard bearbeitete Launcher-Designer):
- Modul-PnL/Winrate-Kacheln (je Modul + Gesamt: Heute/7T/30T, gruen/rot) via TradeAnalytics.
- Supervisor-KI-Kurzfassung (letzter sup_report).
- Warnungen & Fehler (heutige JSONL-Logs, Error/Warning).
- Auffaellige Trades (24h, nach |PnL| sortiert).

Regressionen aus VS-Re-Serialisierung behoben (VS liess hand-erstellte DataGridView-Spalten fallen
-> col* null -> NRE beim Oeffnen):
- DashboardView (dgvTrades): Spalten-Instanziierung + AutoGenerateColumns=false + Columns.AddRange
  + Spalten-Konfig wiederhergestellt.
- JobsView (dgvJobs): dito (nur Button-Spalte hatte ueberlebt).
- Smoke-UI dauerhaft um JobsView/TerminalView/SettingsView erweitert -> faengt diese Regressionsklasse
  kuenftig ab.

Enthaelt ausserdem Richards zwischenzeitliche UI-Arbeit (Launcher-Icons cross_reference/emotion_batman/
file_start_workflow, Designer-Re-Serialisierungen, .ico-Sammlung, Modul-Form-.resx). Persoenliche
Notizdatei bewusst NICHT committet.

Build 0 Fehler, 396 Tests gruen, --smoke-ui alle 9 Views/Forms gruen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-07-23 09:31:59 +02:00
co-authored by Claude Opus 4.8
parent 936144c318
commit 3c8ea3534e
52 changed files with 3860 additions and 2217 deletions
+60 -42
View File
@@ -24,11 +24,12 @@ namespace PolyTraderSharp.Ui
btn_settings = new ToolStripButton();
btn_terminal = new ToolStripButton();
btn_jobs = new ToolStripButton();
btn_accounting = new ToolStripButton();
toolStripSeparator1 = new ToolStripSeparator();
toolStripSeparator2 = new ToolStripSeparator();
btn_copytrading = new ToolStripButton();
btn_resolutionfarming = new ToolStripButton();
btn_supervisor = new ToolStripButton();
btn_accounting = new ToolStripButton();
toolstrip_quickbar = new ToolStrip();
btn_liveTrading = new ToolStripButton();
btn_demoTrading = new ToolStripButton();
@@ -44,6 +45,7 @@ namespace PolyTraderSharp.Ui
colAccPnl3d = new DataGridViewTextBoxColumn();
colAccWin3d = new DataGridViewTextBoxColumn();
colAccOverall = new DataGridViewTextBoxColumn();
launcherWidgets = new LauncherWidgetsPanel();
menuStrip.SuspendLayout();
toolstrip_windows.SuspendLayout();
toolstrip_quickbar.SuspendLayout();
@@ -60,18 +62,18 @@ namespace PolyTraderSharp.Ui
menuStrip.Padding = new Padding(9, 3, 0, 3);
menuStrip.Size = new Size(2599, 35);
menuStrip.TabIndex = 0;
//
//
// miFenster
//
//
miFenster.Name = "miFenster";
miFenster.Size = new Size(69, 29);
miFenster.Size = new Size(85, 29);
miFenster.Text = "Fenster";
//
//
// toolstrip_windows
//
toolstrip_windows.AutoSize = false;
toolstrip_windows.ImageScalingSize = new Size(64, 64);
toolstrip_windows.Items.AddRange(new ToolStripItem[] { btn_dashboard, btn_settings, btn_terminal, btn_jobs, toolStripSeparator1, btn_copytrading, btn_resolutionfarming, btn_supervisor, btn_accounting });
toolstrip_windows.Items.AddRange(new ToolStripItem[] { btn_dashboard, btn_settings, btn_terminal, btn_jobs, btn_accounting, btn_supervisor, toolStripSeparator1, toolStripSeparator2, btn_copytrading, btn_resolutionfarming });
toolstrip_windows.Location = new Point(0, 35);
toolstrip_windows.Name = "toolstrip_windows";
toolstrip_windows.Size = new Size(2599, 70);
@@ -116,39 +118,9 @@ namespace PolyTraderSharp.Ui
btn_jobs.Size = new Size(106, 65);
btn_jobs.Text = "Server Jobs";
btn_jobs.TextImageRelation = TextImageRelation.ImageAboveText;
//
// btn_copytrading
//
btn_copytrading.Image = Properties.Resources.money_dollar;
btn_copytrading.ImageScaling = ToolStripItemImageScaling.None;
btn_copytrading.ImageTransparentColor = Color.Magenta;
btn_copytrading.Name = "btn_copytrading";
btn_copytrading.Size = new Size(120, 65);
btn_copytrading.Text = "CopyTrading";
btn_copytrading.TextImageRelation = TextImageRelation.ImageAboveText;
//
// btn_resolutionfarming
//
btn_resolutionfarming.Image = Properties.Resources.refresh_all;
btn_resolutionfarming.ImageScaling = ToolStripItemImageScaling.None;
btn_resolutionfarming.ImageTransparentColor = Color.Magenta;
btn_resolutionfarming.Name = "btn_resolutionfarming";
btn_resolutionfarming.Size = new Size(150, 65);
btn_resolutionfarming.Text = "ResolutionFarming";
btn_resolutionfarming.TextImageRelation = TextImageRelation.ImageAboveText;
//
// btn_supervisor
//
btn_supervisor.Image = Properties.Resources.token_quantifier;
btn_supervisor.ImageScaling = ToolStripItemImageScaling.None;
btn_supervisor.ImageTransparentColor = Color.Magenta;
btn_supervisor.Name = "btn_supervisor";
btn_supervisor.Size = new Size(110, 65);
btn_supervisor.Text = "Supervisor";
btn_supervisor.TextImageRelation = TextImageRelation.ImageAboveText;
//
//
// btn_accounting
//
//
btn_accounting.Image = Properties.Resources.coins_in_hand;
btn_accounting.ImageScaling = ToolStripItemImageScaling.None;
btn_accounting.ImageTransparentColor = Color.Magenta;
@@ -156,12 +128,48 @@ namespace PolyTraderSharp.Ui
btn_accounting.Size = new Size(106, 65);
btn_accounting.Text = "Accounting";
btn_accounting.TextImageRelation = TextImageRelation.ImageAboveText;
//
//
// toolStripSeparator1
//
toolStripSeparator1.Name = "toolStripSeparator1";
toolStripSeparator1.Size = new Size(6, 70);
//
// toolStripSeparator2
//
toolStripSeparator2.Margin = new Padding(20, 0, 0, 0);
toolStripSeparator2.Name = "toolStripSeparator2";
toolStripSeparator2.Size = new Size(6, 70);
//
// btn_copytrading
//
btn_copytrading.Image = Properties.Resources.cross_reference;
btn_copytrading.ImageScaling = ToolStripItemImageScaling.None;
btn_copytrading.ImageTransparentColor = Color.Magenta;
btn_copytrading.Name = "btn_copytrading";
btn_copytrading.Size = new Size(116, 65);
btn_copytrading.Text = "CopyTrading";
btn_copytrading.TextImageRelation = TextImageRelation.ImageAboveText;
//
// btn_resolutionfarming
//
btn_resolutionfarming.Image = Properties.Resources.file_start_workflow;
btn_resolutionfarming.ImageScaling = ToolStripItemImageScaling.None;
btn_resolutionfarming.ImageTransparentColor = Color.Magenta;
btn_resolutionfarming.Name = "btn_resolutionfarming";
btn_resolutionfarming.Size = new Size(163, 65);
btn_resolutionfarming.Text = "ResolutionFarming";
btn_resolutionfarming.TextImageRelation = TextImageRelation.ImageAboveText;
//
// btn_supervisor
//
btn_supervisor.Image = Properties.Resources.emotion_batman;
btn_supervisor.ImageScaling = ToolStripItemImageScaling.None;
btn_supervisor.ImageTransparentColor = Color.Magenta;
btn_supervisor.Name = "btn_supervisor";
btn_supervisor.Size = new Size(100, 65);
btn_supervisor.Text = "Supervisor";
btn_supervisor.TextImageRelation = TextImageRelation.ImageAboveText;
//
// toolstrip_quickbar
//
toolstrip_quickbar.ImageScalingSize = new Size(24, 24);
@@ -294,18 +302,26 @@ namespace PolyTraderSharp.Ui
colAccOverall.Name = "colAccOverall";
colAccOverall.ReadOnly = true;
colAccOverall.Width = 133;
//
//
// launcherWidgets
//
launcherWidgets.Dock = DockStyle.Right;
launcherWidgets.Location = new Point(2039, 139);
launcherWidgets.Name = "launcherWidgets";
launcherWidgets.Size = new Size(560, 498);
launcherWidgets.TabIndex = 7;
//
// LauncherForm
//
//
AutoScaleDimensions = new SizeF(10F, 25F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(2599, 669);
Controls.Add(dgv_accountlist);
Controls.Add(launcherWidgets);
Controls.Add(statusStrip_info);
Controls.Add(toolstrip_quickbar);
Controls.Add(toolstrip_windows);
Controls.Add(menuStrip);
FormBorderStyle = FormBorderStyle.Sizable;
MainMenuStrip = menuStrip;
Margin = new Padding(4, 5, 4, 5);
MinimumSize = new Size(1280, 720);
@@ -355,5 +371,7 @@ namespace PolyTraderSharp.Ui
private DataGridViewTextBoxColumn colAccPnl3d;
private DataGridViewTextBoxColumn colAccWin3d;
private DataGridViewTextBoxColumn colAccOverall;
private ToolStripSeparator toolStripSeparator2;
private LauncherWidgetsPanel launcherWidgets;
}
}