Phase 5-UI: Copytrading-Modul-Views (Master-Trader, Closed Trades, Account-Settings)

- MasterTradersView: Liste + PropertyGrid-Editor + Account-Zuweisung
  (CheckedListBox -> AssignedAccountIds), Neu/Speichern/Loeschen; persistiert
  via ITrackedTraderRepository + synct CopyTradingState.Traders.
- ClosedTradesView: read-only Grid der geschlossenen Copytrades mit
  aufgeloesten Account-/Trader-Namen + Kurzauswertung (ICopyTradeLogRepository).
- AccountSettingsView: Account-Auswahl + PropertyGrid fuer
  CopyTradingAccountSettings, Speichern via Repo + State-Sync.
- IPolyTraderModule.RegisterUi erhaelt jetzt IServiceProvider (Module loesen
  ihre View-Abhaengigkeiten auf); Program uebergibt viewServices.
- CopyTradingModule.RegisterUi registriert die 3 Views (Group "CopyTrading").
- LauncherForm haengt Modul-Views dynamisch als Buttons an toolstrip_windows
  (Core kennt keine Modulnamen; Bindung nur ueber View-IDs).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-07-05 20:09:56 +02:00
co-authored by Claude Opus 4.8
parent b951b912f4
commit 05e0576965
8 changed files with 519 additions and 6 deletions
+23
View File
@@ -44,6 +44,29 @@ namespace PolyTraderSharp.Ui
btn.Click += (_, _) => _uiHost.OpenView(viewId);
}
// Modul-Views dynamisch anhängen (der Launcher kennt keine Modulnamen; er bindet
// nur an registrierte View-IDs). Core-Views sind bereits fest verdrahtet.
var moduleViews = _uiHost.Views
.Where(v => !_viewButtons.ContainsKey(v.Id))
.OrderBy(v => v.Order)
.ToList();
if (moduleViews.Count > 0)
toolstrip_windows.Items.Add(new ToolStripSeparator());
foreach (var view in moduleViews)
{
var btn = new ToolStripButton(view.Title)
{
Name = "btn_" + view.Id,
Overflow = ToolStripItemOverflow.AsNeeded,
TextImageRelation = TextImageRelation.ImageAboveText,
AutoSize = true
};
var viewId = view.Id;
btn.Click += (_, _) => _uiHost.OpenView(viewId);
toolstrip_windows.Items.Add(btn);
_viewButtons[view.Id] = btn;
}
btn_liveTrading.Click += (_, _) => CycleLiveTrading();
btn_demoTrading.Click += (_, _) => CycleDemoTrading();
miBeenden.Click += (_, _) => Close();