Files
PolyTraderSharp/Ui/ShutdownConfirmDialog.cs
T
RichardandClaude Opus 4.8 039bc240f8 UI Slice 5: Menueleiste (Fenster nebeneinander), sicheres Beenden, Modul-Aktivierung
- Fenster-Menue: WindowMenu fuellt die oberste MenuStrip mit Top-Level-Eintraegen
  nebeneinander (mit Icon) statt Untermenue "Fenster"; ModuleView.Icon zentral in der
  App zugewiesen (AssignMenuIcons). Kein miFenster mehr im Launcher-Designer.
- Sicheres Beenden: ShutdownConfirmDialog (10s-Timer sperrt "Jetzt beenden", Abbrechen
  jederzeit) via IModuleUiHost.RequestShutdown(). Nur der Launcher (Hauptprozess) bietet
  "Beenden"; andere Fenster nur "Fenster schliessen" (kein App-Shutdown, Module laufen
  weiter). Launcher-Schliessen-X routet ueber dieselbe Abfrage.
- Modul-Aktivierung (restart-basiert): ServerSettings.DisabledModules, in Program.Main
  vor der DI-Registrierung gefiltert -> deaktivierte Module werden nicht geladen.
  Dashboard-Tab "Module" zeigt Status + schaltet um (Hinweis: greift nach Neustart).
  Optionaler IPolyTraderModule.GetActivationBlocker fuer "nicht aktivierbar"-Info.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 18:46:09 +02:00

63 lines
2.0 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Windows.Forms;
namespace PolyTraderSharp.Ui
{
/// <summary>
/// Sicherheitsabfrage vor dem Herunterfahren. Die Beenden-Schaltfläche ist erst nach Ablauf eines
/// kurzen Timers klickbar (verhindert versehentliches Beenden, z.B. während auf eine API-Antwort
/// gewartet wird); „Abbrechen" ist jederzeit möglich. Bei Bestätigung liefert der Dialog
/// <see cref="DialogResult.OK"/> das eigentliche geordnete Herunterfahren übernimmt der Aufrufer.
/// </summary>
public partial class ShutdownConfirmDialog : Form
{
private int _remaining;
/// <param name="delaySeconds">Sekunden, bis „Beenden" freigeschaltet wird (Standard 10).</param>
public ShutdownConfirmDialog(int delaySeconds = 10)
{
InitializeComponent();
_remaining = Math.Max(0, delaySeconds);
UpdateCountdownUi();
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
if (_remaining <= 0)
{
EnableConfirm();
return;
}
countdownTimer.Start();
}
private void CountdownTimer_Tick(object? sender, EventArgs e)
{
_remaining--;
if (_remaining <= 0)
{
countdownTimer.Stop();
EnableConfirm();
return;
}
UpdateCountdownUi();
}
private void UpdateCountdownUi()
{
lblCountdown.Text = $"Beenden möglich in {_remaining} s …";
btnConfirm.Text = $"Beenden ({_remaining} s)";
}
private void EnableConfirm()
{
btnConfirm.Enabled = true;
btnConfirm.Text = "Jetzt beenden";
lblCountdown.Text = "PolyTrader kann jetzt beendet werden.";
lblCountdown.ForeColor = System.Drawing.Color.ForestGreen;
btnConfirm.Focus();
}
}
}