using ElectronNET.API.Entities; using ElectronNET.API.Extensions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; using System.Collections.Generic; namespace ElectronNET.API { public sealed class Tray { private static Tray _tray; internal Tray() { } internal static Tray Instance { get { if (_tray == null) { _tray = new Tray(); } return _tray; } } public IReadOnlyCollection Items { get { return _items.AsReadOnly(); } } private List _items = new List(); public void Show(string image, MenuItem[] menuItems) { menuItems.AddMenuItemsId(); BridgeConnector.Socket.Emit("create-tray", image, JArray.FromObject(menuItems, _jsonSerializer)); _items.AddRange(menuItems); BridgeConnector.Socket.Off("trayMenuItemClicked"); BridgeConnector.Socket.On("trayMenuItemClicked", (id) => { MenuItem menuItem = _items.GetMenuItem(id.ToString()); menuItem?.Click(); }); } private JsonSerializer _jsonSerializer = new JsonSerializer() { ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore }; } }