GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — Electron.NET/src/ElectronNET.API/API/Menu.cs at develop · ElectronNET/Electron.NET Expand file tree/ Copy pathMenu.csMore file actions 133 lines (115 loc) · 4.12 KB / Copy pathMenu.csFile metadata and controls133 lines (115 loc) · 4.12 KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 using ElectronNET.API.Entities; using ElectronNET.API.Extensions; using ElectronNET.API.Serialization; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text.Json; namespace ElectronNET.API { /// <summary> /// Create native application menus and context menus. /// </summary> public sealed class Menu { private static Menu _menu; private static object _syncRoot = new object(); internal Menu() { } internal static Menu Instance { get { if (_menu == null) { lock (_syncRoot) { if (_menu == null) { _menu = new Menu(); } } } return _menu; } } /// <summary> /// Gets the menu items. /// </summary> /// <value> /// The menu items. /// </value> public IReadOnlyCollection<MenuItem> MenuItems { get { return _menuItems.AsReadOnly(); } } private List<MenuItem> _menuItems = new List<MenuItem>(); /// <summary> /// Sets the application menu. /// </summary> /// <param name="menuItems">The menu items.</param> public void SetApplicationMenu(MenuItem[] menuItems) { _menuItems.Clear(); menuItems.AddMenuItemsId(); menuItems.AddSubmenuTypes(); BridgeConnector.Socket.Emit("menu-setApplicationMenu", new[] { menuItems }); _menuItems.AddRange(menuItems); BridgeConnector.Socket.Off("menuItemClicked"); BridgeConnector.Socket.On<string>("menuItemClicked", (id) => { MenuItem menuItem = _menuItems.GetMenuItem(id); menuItem.Click?.Invoke(); }); } /// <summary> /// Gets the context menu items. /// </summary> /// <value> /// The context menu items. /// </value> public IReadOnlyDictionary<int, ReadOnlyCollection<MenuItem>> ContextMenuItems { get; internal set; } private Dictionary<int, List<MenuItem>> _contextMenuItems = new Dictionary<int, List<MenuItem>>(); /// <summary> /// Sets the context menu. /// </summary> /// <param name="browserWindow">The browser window.</param> /// <param name="menuItems">The menu items.</param> public void SetContextMenu(BrowserWindow browserWindow, MenuItem[] menuItems) { menuItems.AddMenuItemsId(); menuItems.AddSubmenuTypes(); BridgeConnector.Socket.Emit("menu-setContextMenu", browserWindow.Id, menuItems); if (!_contextMenuItems.ContainsKey(browserWindow.Id)) { _contextMenuItems.Add(browserWindow.Id, menuItems.ToList()); var x = _contextMenuItems.ToDictionary(kv => kv.Key, kv => kv.Value.AsReadOnly()); ContextMenuItems = new ReadOnlyDictionary<int, ReadOnlyCollection<MenuItem>>(x); } BridgeConnector.Socket.Off("contextMenuItemClicked"); BridgeConnector.Socket.On<JsonElement>("contextMenuItemClicked", (results) => { var arr = results.EnumerateArray(); var e = arr.GetEnumerator(); e.MoveNext(); var id = e.Current.GetString(); e.MoveNext(); var browserWindowId = e.Current.GetInt32(); MenuItem menuItem = _contextMenuItems[browserWindowId].GetMenuItem(id); menuItem.Click?.Invoke(); }); } /// <summary> /// Contexts the menu popup. /// </summary> /// <param name="browserWindow">The browser window.</param> public void ContextMenuPopup(BrowserWindow browserWindow) { BridgeConnector.Socket.Emit("menu-contextMenuPopup", browserWindow.Id); } } } |
| You are visitor 01402520 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |