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
+20 -19
View File
@@ -17,6 +17,7 @@ namespace PolyTraderSharp.Ui.Views
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsView));
propertyGrid = new PropertyGrid();
tabControl1 = new TabControl();
tabPage1 = new TabPage();
@@ -42,35 +43,36 @@ namespace PolyTraderSharp.Ui.Views
// propertyGrid
//
propertyGrid.Dock = DockStyle.Fill;
propertyGrid.Location = new Point(3, 37);
propertyGrid.Name = "propertyGrid";
propertyGrid.Size = new Size(1171, 742);
propertyGrid.TabIndex = 1;
//
//
// tabControl1
//
//
tabControl1.Controls.Add(tabPage1);
tabControl1.Controls.Add(tabPage2);
tabControl1.Dock = DockStyle.Fill;
tabControl1.Location = new Point(0, 0);
tabControl1.Name = "tabControl1";
tabControl1.SelectedIndex = 0;
tabControl1.Size = new Size(1185, 800);
tabControl1.Size = new Size(1185, 820);
tabControl1.TabIndex = 3;
//
//
// tabPage1
//
//
tabPage1.Controls.Add(propertyGrid);
tabPage1.Controls.Add(toolStrip2);
tabPage1.Location = new Point(4, 34);
tabPage1.Name = "tabPage1";
tabPage1.Padding = new Padding(3);
tabPage1.Size = new Size(1177, 887);
tabPage1.Size = new Size(1177, 782);
tabPage1.TabIndex = 0;
tabPage1.Text = "General Settings";
tabPage1.UseVisualStyleBackColor = true;
//
// toolStrip2
//
toolStrip2.Dock = DockStyle.Top;
toolStrip2.ImageScalingSize = new Size(24, 24);
toolStrip2.Items.AddRange(new ToolStripItem[] { btn_save, btn_loadsettings, btnGenMasterKey, btnSetOpenRouterKey });
toolStrip2.Location = new Point(3, 3);
@@ -94,23 +96,23 @@ namespace PolyTraderSharp.Ui.Views
btn_loadsettings.Name = "btn_loadsettings";
btn_loadsettings.Size = new Size(223, 29);
btn_loadsettings.Text = "Load Settings from File";
//
//
// btnGenMasterKey
//
//
btnGenMasterKey.DisplayStyle = ToolStripItemDisplayStyle.Text;
btnGenMasterKey.Name = "btnGenMasterKey";
btnGenMasterKey.Size = new Size(200, 29);
btnGenMasterKey.Size = new Size(182, 29);
btnGenMasterKey.Text = "Master-Key erzeugen";
btnGenMasterKey.ToolTipText = "Erzeugt einen zufälligen AES-Master-Key (nur wenn noch keiner existiert).";
//
//
// btnSetOpenRouterKey
//
//
btnSetOpenRouterKey.DisplayStyle = ToolStripItemDisplayStyle.Text;
btnSetOpenRouterKey.Name = "btnSetOpenRouterKey";
btnSetOpenRouterKey.Size = new Size(200, 29);
btnSetOpenRouterKey.Size = new Size(220, 29);
btnSetOpenRouterKey.Text = "OpenRouter-Key setzen …";
btnSetOpenRouterKey.ToolTipText = "Speichert den OpenRouter-API-Key für den Supervisor (gitignorierte Datei openrouter.key).";
//
//
// tabPage2
//
tabPage2.Controls.Add(pgAccount);
@@ -119,7 +121,7 @@ namespace PolyTraderSharp.Ui.Views
tabPage2.Location = new Point(4, 34);
tabPage2.Name = "tabPage2";
tabPage2.Padding = new Padding(3);
tabPage2.Size = new Size(1177, 887);
tabPage2.Size = new Size(1177, 762);
tabPage2.TabIndex = 1;
tabPage2.Text = "Polymarket Accounts";
tabPage2.UseVisualStyleBackColor = true;
@@ -129,7 +131,7 @@ namespace PolyTraderSharp.Ui.Views
pgAccount.Dock = DockStyle.Fill;
pgAccount.Location = new Point(623, 37);
pgAccount.Name = "pgAccount";
pgAccount.Size = new Size(551, 847);
pgAccount.Size = new Size(551, 722);
pgAccount.TabIndex = 2;
//
// dgvAccounts
@@ -145,12 +147,11 @@ namespace PolyTraderSharp.Ui.Views
dgvAccounts.RowHeadersVisible = false;
dgvAccounts.RowHeadersWidth = 62;
dgvAccounts.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgvAccounts.Size = new Size(620, 847);
dgvAccounts.Size = new Size(620, 722);
dgvAccounts.TabIndex = 1;
//
// toolStripAccounts
//
toolStripAccounts.Dock = DockStyle.Top;
toolStripAccounts.ImageScalingSize = new Size(24, 24);
toolStripAccounts.Items.AddRange(new ToolStripItem[] { btnAccNew, btnAccDelete });
toolStripAccounts.Location = new Point(3, 3);
@@ -178,6 +179,7 @@ namespace PolyTraderSharp.Ui.Views
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1185, 820);
Controls.Add(tabControl1);
Icon = (Icon)resources.GetObject("$this.Icon");
Margin = new Padding(4, 5, 4, 5);
Name = "SettingsView";
Text = "Server Settings";
@@ -192,7 +194,6 @@ namespace PolyTraderSharp.Ui.Views
toolStripAccounts.ResumeLayout(false);
toolStripAccounts.PerformLayout();
ResumeLayout(false);
PerformLayout();
}
#endregion