using System.Windows;
namespace DeskCore;
/// Symbol im Infobereich der Taskleiste.
public sealed class Tray : IDisposable
{
private readonly System.Windows.Forms.NotifyIcon _icon;
/// Linksklick
public event Action? Clicked;
/// Rechtsklick – Kontextmenü wird von der WPF-Seite gezeigt (sieht moderner aus)
public event Action? MenuRequested;
public event Action? BalloonClicked;
public Tray()
{
var stream = Application.GetResourceStream(new Uri("pack://application:,,,/app.ico"))!.Stream;
_icon = new System.Windows.Forms.NotifyIcon
{
Icon = new System.Drawing.Icon(stream, System.Windows.Forms.SystemInformation.SmallIconSize),
Text = "DeskCore",
};
_icon.MouseUp += (_, e) =>
{
if (e.Button == System.Windows.Forms.MouseButtons.Left) Clicked?.Invoke();
else if (e.Button == System.Windows.Forms.MouseButtons.Right) MenuRequested?.Invoke();
};
_icon.BalloonTipClicked += (_, _) => BalloonClicked?.Invoke();
}
public bool Visible
{
get => _icon.Visible;
set => _icon.Visible = value;
}
public void Notify(string title, string text)
{
if (!_icon.Visible) return;
_icon.ShowBalloonTip(3000, title, text, System.Windows.Forms.ToolTipIcon.None);
}
public void Dispose()
{
_icon.Visible = false;
_icon.Dispose();
}
}