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();
}
}
}