using System; using System.Drawing; using System.Linq; using System.Windows.Forms; using Microsoft.Extensions.DependencyInjection; namespace PolyTraderSharp.Ui { /// /// Schlanke „Startleiste" der PolyTrader.App. Rendert Buttons aus den registrierten /// Views (gruppiert) und öffnet je View ein eigenständiges Fenster. Kennt selbst /// kein Modul. Enthält übergangsweise einen Legacy-Button für das alte Tab-frm_main. /// public class LauncherForm : Form { private readonly ShellUiHost _uiHost; private readonly IServiceProvider _services; private frm_main? _legacyForm; public LauncherForm(ShellUiHost uiHost, IServiceProvider services) { _uiHost = uiHost; _services = services; Text = "PolyTrader"; Width = 360; Height = 520; StartPosition = FormStartPosition.CenterScreen; MinimizeBox = true; MaximizeBox = false; FormBorderStyle = FormBorderStyle.FixedSingle; BuildUi(); } private void BuildUi() { var flow = new FlowLayoutPanel { Dock = DockStyle.Fill, FlowDirection = FlowDirection.TopDown, WrapContents = false, AutoScroll = true, Padding = new Padding(12) }; foreach (var group in _uiHost.Views .GroupBy(v => string.IsNullOrEmpty(v.Group) ? "Allgemein" : v.Group) .OrderBy(g => g.Key)) { flow.Controls.Add(MakeHeader(group.Key)); foreach (var view in group.OrderBy(v => v.Order).ThenBy(v => v.Title)) { var captured = view; flow.Controls.Add(MakeButton(view.Title, (_, _) => _uiHost.OpenView(captured))); } } // Übergangs-Zugang zur alten Tab-UI, bis alle Views extrahiert sind. flow.Controls.Add(MakeHeader("Übergang")); flow.Controls.Add(MakeButton("Legacy-UI (alte Tabs)", (_, _) => OpenLegacy())); Controls.Add(flow); } private Label MakeHeader(string text) => new() { Text = text, AutoSize = true, Font = new Font(Font, FontStyle.Bold), Margin = new Padding(0, 10, 0, 4) }; private Button MakeButton(string text, EventHandler onClick) { var btn = new Button { Text = text, Width = 310, Height = 34, Margin = new Padding(0, 2, 0, 2), TextAlign = ContentAlignment.MiddleLeft, UseVisualStyleBackColor = true }; btn.Click += onClick; return btn; } private void OpenLegacy() { if (_legacyForm != null && !_legacyForm.IsDisposed) { if (_legacyForm.WindowState == FormWindowState.Minimized) _legacyForm.WindowState = FormWindowState.Normal; _legacyForm.BringToFront(); _legacyForm.Activate(); return; } _legacyForm = _services.GetRequiredService(); _legacyForm.FormClosed += (_, _) => _legacyForm = null; _legacyForm.Show(); } } }