using System; using System.Linq; using System.Windows.Forms; using Microsoft.Extensions.DependencyInjection; using PolyTrader.Core.Modularity; namespace PolyTraderSharp.Ui { /// /// Schlanke „Startleiste" der PolyTrader.App. Das Layout (ListView, Menü, Button) liegt /// im Designer (LauncherForm.Designer.cs). Zur Laufzeit werden ausschließlich die /// Listeneinträge (Daten) aus den registrierten Views befüllt — keine Steuerelemente. /// Kennt selbst kein Modul. /// public partial 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; InitializeComponent(); PopulateViews(); lstViews.DoubleClick += (_, _) => OpenSelected(); btnOpen.Click += (_, _) => OpenSelected(); miLegacy.Click += (_, _) => OpenLegacy(); miBeenden.Click += (_, _) => Close(); } private void PopulateViews() { lstViews.BeginUpdate(); lstViews.Groups.Clear(); lstViews.Items.Clear(); foreach (var group in _uiHost.Views .GroupBy(v => string.IsNullOrEmpty(v.Group) ? "Allgemein" : v.Group!) .OrderBy(g => g.Key)) { var lvGroup = new ListViewGroup(group.Key) { Header = group.Key }; lstViews.Groups.Add(lvGroup); foreach (var view in group.OrderBy(v => v.Order).ThenBy(v => v.Title)) { lstViews.Items.Add(new ListViewItem(view.Title, lvGroup) { Tag = view }); } } lstViews.EndUpdate(); } private void OpenSelected() { if (lstViews.SelectedItems.Count == 0) return; if (lstViews.SelectedItems[0].Tag is ModuleView view) _uiHost.OpenView(view); } 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(); } } }