using System; using System.Drawing; using Dashboard.Drawing; using Dashboard.Events; using Dashboard.Pal; using Dashboard.Windowing; namespace Dashboard.Controls { public class Form : Container, IForm { private string? _title = "Untitled Form"; public IWindow Window { get; } public Image? WindowIcon { get; set; } public string? Title { get => _title; set { _title = value; Window.Title = _title ?? ""; } } public Brush Background { get; set; } = new SolidColorBrush(Color.SlateGray); public Control? FocusedControl { get; private set; } = null; public override Box2d ClientArea { get => new Box2d(0, 0, Window.ClientSize.Width, Window.ClientSize.Height); set { } } public event EventHandler? Closing; public Form(IWindow window) { Window = window; window.Form = this; Window.Title = _title; } public void Focus(Control control) { if (FocusedControl != null) InvokeFocusLost(this, FocusedControl); FocusedControl = control; InvokeFocusGained(this, control); } public override void OnPaint(DeviceContext dc) { dc.Begin(); var dcb = dc.ExtensionRequire(); dcb.ResetClip(); dcb.ResetScissor(); dcb.ResetTransforms(); dcb.ClearDepth(); if (Background is SolidColorBrush solidColorBrush) dcb.ClearColor(solidColorBrush.Color); foreach (Control child in this) child.SendEvent(this, new PaintEventArgs(dc)); base.OnPaint(dc); dc.End(); } protected virtual void OnClosing(WindowCloseEvent ea) { Closing?.Invoke(this, ea); if (ea.Cancel) return; Dispose(); Window.Dispose(); } protected override void OnEventRaised(object? sender, EventArgs args) { base.OnEventRaised(sender, args); switch (args) { case WindowCloseEvent close: OnClosing(close); break; } } } }