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
+95 -94
View File
@@ -17,126 +17,127 @@ namespace PolyTraderSharp.Ui.Views
private void InitializeComponent()
{
this.dgvJobs = new System.Windows.Forms.DataGridView();
this.colJobName = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.colStatus = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.colLastRun = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.colNextRun = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.col_dgv_jobs_Enabled = new System.Windows.Forms.DataGridViewCheckBoxColumn();
this.col_dgv_jobs_Run = new System.Windows.Forms.DataGridViewButtonColumn();
this.colDescription = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.toolStripJobs = new System.Windows.Forms.ToolStrip();
this.tsJobsRefresh = new System.Windows.Forms.ToolStripButton();
((System.ComponentModel.ISupportInitialize)(this.dgvJobs)).BeginInit();
this.toolStripJobs.SuspendLayout();
this.SuspendLayout();
//
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(JobsView));
dgvJobs = new DataGridView();
colJobName = new DataGridViewTextBoxColumn();
colStatus = new DataGridViewTextBoxColumn();
colLastRun = new DataGridViewTextBoxColumn();
colNextRun = new DataGridViewTextBoxColumn();
col_dgv_jobs_Enabled = new DataGridViewCheckBoxColumn();
col_dgv_jobs_Run = new DataGridViewButtonColumn();
colDescription = new DataGridViewTextBoxColumn();
toolStripJobs = new ToolStrip();
tsJobsRefresh = new ToolStripButton();
((System.ComponentModel.ISupportInitialize)dgvJobs).BeginInit();
toolStripJobs.SuspendLayout();
SuspendLayout();
//
// dgvJobs
//
this.dgvJobs.AllowUserToAddRows = false;
this.dgvJobs.AllowUserToDeleteRows = false;
this.dgvJobs.AutoGenerateColumns = false;
this.dgvJobs.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dgvJobs.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.colJobName,
this.colStatus,
this.colLastRun,
this.colNextRun,
this.col_dgv_jobs_Enabled,
this.col_dgv_jobs_Run,
this.colDescription});
this.dgvJobs.Dock = System.Windows.Forms.DockStyle.Fill;
this.dgvJobs.Location = new System.Drawing.Point(0, 0);
this.dgvJobs.Name = "dgvJobs";
this.dgvJobs.RowHeadersVisible = false;
this.dgvJobs.Size = new System.Drawing.Size(900, 500);
this.dgvJobs.TabIndex = 0;
//
dgvJobs.AllowUserToAddRows = false;
dgvJobs.AllowUserToDeleteRows = false;
dgvJobs.AutoGenerateColumns = false;
dgvJobs.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgvJobs.Columns.AddRange(new DataGridViewColumn[] { colJobName, colStatus, colLastRun, colNextRun, col_dgv_jobs_Enabled, col_dgv_jobs_Run, colDescription });
dgvJobs.Dock = DockStyle.Fill;
dgvJobs.Location = new Point(0, 34);
dgvJobs.Margin = new Padding(4, 5, 4, 5);
dgvJobs.Name = "dgvJobs";
dgvJobs.RowHeadersVisible = false;
dgvJobs.RowHeadersWidth = 62;
dgvJobs.Size = new Size(1429, 799);
dgvJobs.TabIndex = 0;
//
// colJobName
//
this.colJobName.DataPropertyName = "JobName";
this.colJobName.HeaderText = "Job Name";
this.colJobName.Name = "colJobName";
this.colJobName.ReadOnly = true;
this.colJobName.Width = 150;
colJobName.DataPropertyName = "JobName";
colJobName.HeaderText = "Job Name";
colJobName.Name = "colJobName";
colJobName.ReadOnly = true;
colJobName.Width = 150;
//
// colStatus
//
this.colStatus.DataPropertyName = "StatusText";
this.colStatus.HeaderText = "Status";
this.colStatus.Name = "colStatus";
this.colStatus.ReadOnly = true;
this.colStatus.Width = 150;
colStatus.DataPropertyName = "StatusText";
colStatus.HeaderText = "Status";
colStatus.Name = "colStatus";
colStatus.ReadOnly = true;
colStatus.Width = 150;
//
// colLastRun
//
this.colLastRun.DataPropertyName = "LastRun";
this.colLastRun.HeaderText = "Zuletzt ausgeführt";
this.colLastRun.Name = "colLastRun";
this.colLastRun.ReadOnly = true;
this.colLastRun.Width = 130;
colLastRun.DataPropertyName = "LastRun";
colLastRun.HeaderText = "Zuletzt ausgeführt";
colLastRun.Name = "colLastRun";
colLastRun.ReadOnly = true;
colLastRun.Width = 130;
//
// colNextRun
//
this.colNextRun.DataPropertyName = "NextRun";
this.colNextRun.HeaderText = "Nächster Lauf";
this.colNextRun.Name = "colNextRun";
this.colNextRun.ReadOnly = true;
this.colNextRun.Width = 130;
colNextRun.DataPropertyName = "NextRun";
colNextRun.HeaderText = "Nächster Lauf";
colNextRun.Name = "colNextRun";
colNextRun.ReadOnly = true;
colNextRun.Width = 130;
//
// col_dgv_jobs_Enabled
//
this.col_dgv_jobs_Enabled.DataPropertyName = "IsEnabled";
this.col_dgv_jobs_Enabled.HeaderText = "Aktiv";
this.col_dgv_jobs_Enabled.Name = "col_dgv_jobs_Enabled";
this.col_dgv_jobs_Enabled.Width = 60;
col_dgv_jobs_Enabled.DataPropertyName = "IsEnabled";
col_dgv_jobs_Enabled.HeaderText = "Aktiv";
col_dgv_jobs_Enabled.Name = "col_dgv_jobs_Enabled";
col_dgv_jobs_Enabled.Width = 60;
//
// col_dgv_jobs_Run
//
this.col_dgv_jobs_Run.HeaderText = "Aktion";
this.col_dgv_jobs_Run.Name = "col_dgv_jobs_Run";
this.col_dgv_jobs_Run.Text = "Run Now";
this.col_dgv_jobs_Run.UseColumnTextForButtonValue = true;
this.col_dgv_jobs_Run.Width = 90;
col_dgv_jobs_Run.HeaderText = "Aktion";
col_dgv_jobs_Run.MinimumWidth = 8;
col_dgv_jobs_Run.Name = "col_dgv_jobs_Run";
col_dgv_jobs_Run.Text = "Run Now";
col_dgv_jobs_Run.UseColumnTextForButtonValue = true;
col_dgv_jobs_Run.Width = 90;
//
// colDescription
//
this.colDescription.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.colDescription.DataPropertyName = "Description";
this.colDescription.HeaderText = "Beschreibung";
this.colDescription.Name = "colDescription";
this.colDescription.ReadOnly = true;
colDescription.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
colDescription.DataPropertyName = "Description";
colDescription.HeaderText = "Beschreibung";
colDescription.Name = "colDescription";
colDescription.ReadOnly = true;
//
// toolStripJobs
//
this.toolStripJobs.ImageScalingSize = new System.Drawing.Size(24, 24);
this.toolStripJobs.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsJobsRefresh});
this.toolStripJobs.Location = new System.Drawing.Point(0, 0);
this.toolStripJobs.Name = "toolStripJobs";
this.toolStripJobs.Size = new System.Drawing.Size(1000, 25);
this.toolStripJobs.TabIndex = 1;
//
//
toolStripJobs.ImageScalingSize = new Size(24, 24);
toolStripJobs.Items.AddRange(new ToolStripItem[] { tsJobsRefresh });
toolStripJobs.Location = new Point(0, 0);
toolStripJobs.Name = "toolStripJobs";
toolStripJobs.Padding = new Padding(0, 0, 3, 0);
toolStripJobs.Size = new Size(1429, 34);
toolStripJobs.TabIndex = 1;
//
// tsJobsRefresh
//
this.tsJobsRefresh.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.tsJobsRefresh.Name = "tsJobsRefresh";
this.tsJobsRefresh.Text = "Aktualisieren";
this.tsJobsRefresh.ToolTipText = "Job-Liste neu zeichnen (Status/Zeiten aktualisieren).";
//
//
tsJobsRefresh.DisplayStyle = ToolStripItemDisplayStyle.Text;
tsJobsRefresh.Name = "tsJobsRefresh";
tsJobsRefresh.Size = new Size(116, 29);
tsJobsRefresh.Text = "Aktualisieren";
tsJobsRefresh.ToolTipText = "Job-Liste neu zeichnen (Status/Zeiten aktualisieren).";
//
// JobsView
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.dgvJobs);
this.Controls.Add(this.toolStripJobs);
this.ClientSize = new System.Drawing.Size(1000, 500);
this.Name = "JobsView";
this.Text = "Server Jobs";
((System.ComponentModel.ISupportInitialize)(this.dgvJobs)).EndInit();
this.toolStripJobs.ResumeLayout(false);
this.toolStripJobs.PerformLayout();
this.ResumeLayout(false);
//
AutoScaleDimensions = new SizeF(10F, 25F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1429, 833);
Controls.Add(dgvJobs);
Controls.Add(toolStripJobs);
Icon = (Icon)resources.GetObject("$this.Icon");
Margin = new Padding(4, 5, 4, 5);
Name = "JobsView";
Text = "Server Jobs";
((System.ComponentModel.ISupportInitialize)dgvJobs).EndInit();
toolStripJobs.ResumeLayout(false);
toolStripJobs.PerformLayout();
ResumeLayout(false);
PerformLayout();
}
#endregion