|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using System.Windows.Input;
|
|
|
|
|
using MangaReader.Avalonia.Platform.Win.Interop;
|
|
|
|
|
|
|
|
|
|
namespace MangaReader.Avalonia.Platform.Win
|
|
|
|
|
{
|
|
|
|
|
public class WindowsTrayIcon : ITrayIcon
|
|
|
|
|
{
|
|
|
|
|
public ICommand DoubleClickCommand { get; set; }
|
|
|
|
|
|
|
|
|
|
public ICommand BalloonClickedCommand { get; set; }
|
|
|
|
|
|
|
|
|
|
private TaskBarIcon taskBarIcon;
|
|
|
|
|
|
|
|
|
|
private object lastBalloonState;
|
|
|
|
|
|
|
|
|
|
public void SetIcon()
|
|
|
|
|
{
|
|
|
|
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
|
|
|
|
{
|
|
|
|
|
var iconSource = "MangaReader.Avalonia.Assets.main.ico";
|
|
|
|
|
var icon = TaskBarIcon.ToIcon(iconSource);
|
|
|
|
|
taskBarIcon = new TaskBarIcon(icon);
|
|
|
|
|
taskBarIcon.MouseEventHandler += TaskBarIconOnMouseEventHandler;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void ShowBalloon(string text, object state)
|
|
|
|
|
{
|
|
|
|
|
this.lastBalloonState = state;
|
|
|
|
|
taskBarIcon?.ShowBalloonTip(nameof(MangaReader), text, BalloonFlags.Info);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void TaskBarIconOnMouseEventHandler(object sender, MouseEvent e)
|
|
|
|
|
{
|
|
|
|
|
if (e == MouseEvent.IconDoubleClick)
|
|
|
|
|
{
|
|
|
|
|
var command = this.DoubleClickCommand;
|
|
|
|
|
if (command != null && command.CanExecute(null))
|
|
|
|
|
{
|
|
|
|
|
command.Execute(null);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (e == MouseEvent.BalloonToolTipClicked)
|
|
|
|
|
{
|
|
|
|
|
var command = this.BalloonClickedCommand;
|
|
|
|
|
if (command != null && command.CanExecute(lastBalloonState))
|
|
|
|
|
{
|
|
|
|
|
command.Execute(lastBalloonState);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Dispose()
|
|
|
|
|
{
|
|
|
|
|
if (taskBarIcon != null)
|
|
|
|
|
taskBarIcon.MouseEventHandler -= TaskBarIconOnMouseEventHandler;
|
|
|
|
|
taskBarIcon?.Dispose();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|