Пример #1
0
 public MenuEntry(string path, bool enabled, int order, MenuClickHandler handler, object userdata)
 {
     Path     = path;
     Enabled  = enabled;
     Order    = order;
     Handler  = handler;
     Userdata = userdata;
 }
Пример #2
0
        public void AddMenuClickHandler(string key, MenuClickHandler handler)
        {
            if (m_handlers.ContainsKey(key))
            {
                m_handlers.Remove(key);
            }

            m_handlers.Add(key, handler);
        }
Пример #3
0
 public MenuItem(MenuItemGroup parentGroup, string text, Bitmap image, object tag, MenuClickHandler clickHandler)
 {
     this.ParentGroup  = parentGroup;
     this.text         = text;
     this.image        = image;
     this.tag          = tag;
     this.clickHandler = clickHandler;
 }
Пример #4
0
        public void AddMenuClickHandler(string key, MenuClickHandler handler)
        {
            if (m_handlers.ContainsKey(key))
            {
                m_handlers.Remove(key);
            }

            m_handlers.Add(key, handler);
        }
        public MenuEntry[] GetMenuItems()
        {
            if (_updateMenuItems == null || _updateMenuItems.IsCompleted)
            {
                _updateMenuItems = Task.Run(async() =>
                {
                    var items = new List <MenuEntry>();
                    foreach (var ext in _extensionManager.Extensions)
                    {
                        var toRemove = new List <WeakReference <Extension.Extension> >();
                        if (_ignoredExtensions.Any(x =>
                        {
                            Extension.Extension oext;
                            if (x.TryGetTarget(out oext))
                            {
                                return(oext == ext);
                            }
                            else
                            {
                                toRemove.Add(x);
                            }
                            return(false);
                        }))
                        {
                            continue;
                        }
                        _ignoredExtensions.RemoveAll(toRemove.Contains);

                        var client = ext.GetClient <Grpc.ExtensionHost.MenuEntries.MenuEntriesClient>();
                        RepeatedField <Grpc.ExtensionHost.MenuItem> rawItems;
                        try
                        {
                            var result = await client.GetMenuItemsAsync(new Grpc.ExtensionHost.GetMenuItemsRequest());
                            rawItems   = result.MenuItems;
                        }
                        catch (Exception ex)
                        {
                            _consoleHandle.LogError(ex);
                            _ignoredExtensions.Add(new WeakReference <Extension.Extension>(ext));
                            continue;
                        }
                        items.AddRange(rawItems.Select(y =>
                        {
                            MenuClickHandler clickCallback = e =>
                            {
                                Task.Run(async() =>
                                {
                                    try
                                    {
                                        await client.MenuItemClickedAsync(new Grpc.ExtensionHost.MenuItemClickedRequest {
                                            MenuItemId = y.Id
                                        });
                                    }
                                    catch (Exception ex)
                                    {
                                        _consoleHandle.LogError(ex);
                                    }
                                });
                            };
                            return(new MenuEntry(y.Path, y.Enabled, (int)y.Order, clickCallback, null));
                        }));
                    }
                    _menuItems = items.ToArray();
                    await Task.Delay(1000);
                });
            }

            return(_menuItems);
        }