UI: Terminal-Kopierfunktion (Kontextmenue) + Jobs-Toolstrip (via Designer)
- TerminalView: ContextMenuStrip (Kopieren/Alles auswaehlen/Alles kopieren/Terminal leeren) am rtbTerminal - macht das Kopieren entdeckbar (Ctrl+C funktioniert zusaetzlich nativ). - JobsView: ToolStrip 'toolStripJobs' (docked Top) mit Starter-Button 'Aktualisieren' (dgvJobs.Refresh) - weitere Job-Steuerelemente folgen nach und nach. Beide via Designer (.Designer.cs), Logik im Code-Behind. Build 0 Fehler, --smoke-ui ok. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
4df07bd3d2
commit
0aedddabe8
Generated
+25
@@ -25,7 +25,10 @@ namespace PolyTraderSharp.Ui.Views
|
|||||||
this.col_dgv_jobs_Enabled = new System.Windows.Forms.DataGridViewCheckBoxColumn();
|
this.col_dgv_jobs_Enabled = new System.Windows.Forms.DataGridViewCheckBoxColumn();
|
||||||
this.col_dgv_jobs_Run = new System.Windows.Forms.DataGridViewButtonColumn();
|
this.col_dgv_jobs_Run = new System.Windows.Forms.DataGridViewButtonColumn();
|
||||||
this.colDescription = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
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();
|
((System.ComponentModel.ISupportInitialize)(this.dgvJobs)).BeginInit();
|
||||||
|
this.toolStripJobs.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// dgvJobs
|
// dgvJobs
|
||||||
@@ -104,15 +107,35 @@ namespace PolyTraderSharp.Ui.Views
|
|||||||
this.colDescription.Name = "colDescription";
|
this.colDescription.Name = "colDescription";
|
||||||
this.colDescription.ReadOnly = true;
|
this.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;
|
||||||
|
//
|
||||||
|
// 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).";
|
||||||
|
//
|
||||||
// JobsView
|
// JobsView
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.Controls.Add(this.dgvJobs);
|
this.Controls.Add(this.dgvJobs);
|
||||||
|
this.Controls.Add(this.toolStripJobs);
|
||||||
this.ClientSize = new System.Drawing.Size(1000, 500);
|
this.ClientSize = new System.Drawing.Size(1000, 500);
|
||||||
this.Name = "JobsView";
|
this.Name = "JobsView";
|
||||||
this.Text = "Server Jobs";
|
this.Text = "Server Jobs";
|
||||||
((System.ComponentModel.ISupportInitialize)(this.dgvJobs)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.dgvJobs)).EndInit();
|
||||||
|
this.toolStripJobs.ResumeLayout(false);
|
||||||
|
this.toolStripJobs.PerformLayout();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,5 +149,7 @@ namespace PolyTraderSharp.Ui.Views
|
|||||||
private System.Windows.Forms.DataGridViewCheckBoxColumn col_dgv_jobs_Enabled;
|
private System.Windows.Forms.DataGridViewCheckBoxColumn col_dgv_jobs_Enabled;
|
||||||
private System.Windows.Forms.DataGridViewButtonColumn col_dgv_jobs_Run;
|
private System.Windows.Forms.DataGridViewButtonColumn col_dgv_jobs_Run;
|
||||||
private System.Windows.Forms.DataGridViewTextBoxColumn colDescription;
|
private System.Windows.Forms.DataGridViewTextBoxColumn colDescription;
|
||||||
|
private System.Windows.Forms.ToolStrip toolStripJobs;
|
||||||
|
private System.Windows.Forms.ToolStripButton tsJobsRefresh;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ namespace PolyTraderSharp.Ui.Views
|
|||||||
colLastRun.DefaultCellStyle.Format = "HH:mm:ss";
|
colLastRun.DefaultCellStyle.Format = "HH:mm:ss";
|
||||||
colNextRun.DefaultCellStyle.Format = "HH:mm:ss";
|
colNextRun.DefaultCellStyle.Format = "HH:mm:ss";
|
||||||
dgvJobs.CellContentClick += DgvJobs_CellContentClick;
|
dgvJobs.CellContentClick += DgvJobs_CellContentClick;
|
||||||
|
tsJobsRefresh.Click += (_, _) => dgvJobs.Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Initialize(JobManager jobManager)
|
public void Initialize(JobManager jobManager)
|
||||||
|
|||||||
Generated
+52
@@ -18,12 +18,20 @@ namespace PolyTraderSharp.Ui.Views
|
|||||||
|
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
|
this.components = new System.ComponentModel.Container();
|
||||||
this.pnlTop = new System.Windows.Forms.Panel();
|
this.pnlTop = new System.Windows.Forms.Panel();
|
||||||
this.btnAutoscroll = new System.Windows.Forms.Button();
|
this.btnAutoscroll = new System.Windows.Forms.Button();
|
||||||
this.cbLogLevel = new System.Windows.Forms.ComboBox();
|
this.cbLogLevel = new System.Windows.Forms.ComboBox();
|
||||||
this.lblFilter = new System.Windows.Forms.Label();
|
this.lblFilter = new System.Windows.Forms.Label();
|
||||||
this.rtbTerminal = new System.Windows.Forms.RichTextBox();
|
this.rtbTerminal = new System.Windows.Forms.RichTextBox();
|
||||||
|
this.contextMenuTerminal = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||||
|
this.miCopy = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.miSelectAll = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.miCopyAll = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.miSep1 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
|
this.miClear = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.pnlTop.SuspendLayout();
|
this.pnlTop.SuspendLayout();
|
||||||
|
this.contextMenuTerminal.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// pnlTop
|
// pnlTop
|
||||||
@@ -83,6 +91,43 @@ namespace PolyTraderSharp.Ui.Views
|
|||||||
this.rtbTerminal.Size = new System.Drawing.Size(900, 464);
|
this.rtbTerminal.Size = new System.Drawing.Size(900, 464);
|
||||||
this.rtbTerminal.TabIndex = 1;
|
this.rtbTerminal.TabIndex = 1;
|
||||||
this.rtbTerminal.Text = "";
|
this.rtbTerminal.Text = "";
|
||||||
|
this.rtbTerminal.ContextMenuStrip = this.contextMenuTerminal;
|
||||||
|
//
|
||||||
|
// contextMenuTerminal
|
||||||
|
//
|
||||||
|
this.contextMenuTerminal.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.miCopy,
|
||||||
|
this.miSelectAll,
|
||||||
|
this.miCopyAll,
|
||||||
|
this.miSep1,
|
||||||
|
this.miClear});
|
||||||
|
this.contextMenuTerminal.Name = "contextMenuTerminal";
|
||||||
|
//
|
||||||
|
// miCopy
|
||||||
|
//
|
||||||
|
this.miCopy.Name = "miCopy";
|
||||||
|
this.miCopy.ShortcutKeyDisplayString = "Strg+C";
|
||||||
|
this.miCopy.Text = "Kopieren";
|
||||||
|
//
|
||||||
|
// miSelectAll
|
||||||
|
//
|
||||||
|
this.miSelectAll.Name = "miSelectAll";
|
||||||
|
this.miSelectAll.ShortcutKeyDisplayString = "Strg+A";
|
||||||
|
this.miSelectAll.Text = "Alles auswählen";
|
||||||
|
//
|
||||||
|
// miCopyAll
|
||||||
|
//
|
||||||
|
this.miCopyAll.Name = "miCopyAll";
|
||||||
|
this.miCopyAll.Text = "Alles kopieren";
|
||||||
|
//
|
||||||
|
// miSep1
|
||||||
|
//
|
||||||
|
this.miSep1.Name = "miSep1";
|
||||||
|
//
|
||||||
|
// miClear
|
||||||
|
//
|
||||||
|
this.miClear.Name = "miClear";
|
||||||
|
this.miClear.Text = "Terminal leeren";
|
||||||
//
|
//
|
||||||
// TerminalView
|
// TerminalView
|
||||||
//
|
//
|
||||||
@@ -95,6 +140,7 @@ namespace PolyTraderSharp.Ui.Views
|
|||||||
this.Text = "Terminal / Logs";
|
this.Text = "Terminal / Logs";
|
||||||
this.pnlTop.ResumeLayout(false);
|
this.pnlTop.ResumeLayout(false);
|
||||||
this.pnlTop.PerformLayout();
|
this.pnlTop.PerformLayout();
|
||||||
|
this.contextMenuTerminal.ResumeLayout(false);
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,5 +151,11 @@ namespace PolyTraderSharp.Ui.Views
|
|||||||
private System.Windows.Forms.ComboBox cbLogLevel;
|
private System.Windows.Forms.ComboBox cbLogLevel;
|
||||||
private System.Windows.Forms.Button btnAutoscroll;
|
private System.Windows.Forms.Button btnAutoscroll;
|
||||||
private System.Windows.Forms.RichTextBox rtbTerminal;
|
private System.Windows.Forms.RichTextBox rtbTerminal;
|
||||||
|
private System.Windows.Forms.ContextMenuStrip contextMenuTerminal;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem miCopy;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem miSelectAll;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem miCopyAll;
|
||||||
|
private System.Windows.Forms.ToolStripSeparator miSep1;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem miClear;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,22 @@ namespace PolyTraderSharp.Ui.Views
|
|||||||
if (cbLogLevel.Items.Count > 0) cbLogLevel.SelectedIndex = 0;
|
if (cbLogLevel.Items.Count > 0) cbLogLevel.SelectedIndex = 0;
|
||||||
btnAutoscroll.Click += (_, _) => ToggleAutoscroll();
|
btnAutoscroll.Click += (_, _) => ToggleAutoscroll();
|
||||||
_uiLogTimer.Tick += ProcessLogQueue;
|
_uiLogTimer.Tick += ProcessLogQueue;
|
||||||
|
|
||||||
|
// Kontextmenü: Text aus dem Terminal kopieren (Ctrl+C funktioniert zusätzlich nativ).
|
||||||
|
miCopy.Click += (_, _) => { if (rtbTerminal.SelectionLength > 0) rtbTerminal.Copy(); };
|
||||||
|
miSelectAll.Click += (_, _) => rtbTerminal.SelectAll();
|
||||||
|
miCopyAll.Click += (_, _) => CopyAllToClipboard();
|
||||||
|
miClear.Click += (_, _) => rtbTerminal.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CopyAllToClipboard()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(rtbTerminal.Text))
|
||||||
|
Clipboard.SetText(rtbTerminal.Text);
|
||||||
|
}
|
||||||
|
catch { /* Zwischenablage kann kurzzeitig belegt sein – bewusst ignorieren */ }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Verbindet die View mit dem Logger (Laufzeit-DI).</summary>
|
/// <summary>Verbindet die View mit dem Logger (Laufzeit-DI).</summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user