using System.ComponentModel;
using System.Reflection;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Platform.Storage;
using SkiaSharp;
using Svg.Skia;
using ZB.MOM.WW.OtOpcUa.Client.UI.ViewModels;
namespace ZB.MOM.WW.OtOpcUa.Client.UI.Views;
public partial class MainWindow : Window
{
/// Initializes a new instance of the MainWindow, loading the application icon.
public MainWindow()
{
InitializeComponent();
LoadIcon();
}
private void LoadIcon()
{
try
{
var assembly = Assembly.GetExecutingAssembly();
using var stream = assembly.GetManifestResourceStream("ZB.MOM.WW.OtOpcUa.Client.UI.Assets.app-icon.svg");
if (stream == null) return;
using var svg = new SKSvg();
svg.Load(stream);
if (svg.Picture == null) return;
var size = 64;
using var bitmap = new SKBitmap(size, size);
using var canvas = new SKCanvas(bitmap);
canvas.Clear(SKColors.Transparent);
var bounds = svg.Picture.CullRect;
var scale = Math.Min(size / bounds.Width, size / bounds.Height);
canvas.Translate((size - bounds.Width * scale) / 2, (size - bounds.Height * scale) / 2);
canvas.Scale(scale);
canvas.DrawPicture(svg.Picture);
using var image = SKImage.FromBitmap(bitmap);
using var data = image.Encode(SKEncodedImageFormat.Png, 100);
using var pngStream = new MemoryStream(data.ToArray());
Icon = new WindowIcon(pngStream);
}
catch
{
// Icon loading is best-effort
}
}
///
protected override void OnLoaded(RoutedEventArgs e)
{
base.OnLoaded(e);
var browseTreeView = this.FindControl("BrowseTreePanel");
var treeView = browseTreeView?.FindControl("BrowseTree");
if (treeView != null) treeView.SelectionChanged += OnTreeSelectionChanged;
var contextMenu = this.FindControl("TreeContextMenu");
if (contextMenu != null) contextMenu.Opening += OnTreeContextMenuOpening;
var subscribeItem = this.FindControl