Esempio n. 1
0
        /// <summary>
        /// 向插件窗口的RibbonControl控件加载插件
        /// </summary>
        /// <param name="container"></param>
        /// <param name="ribbonCtrl"></param>
        private static void LoadPluginContainer(this IPluginContainer container, RibbonControl ribbonCtrl)
        {
            var form            = ribbonCtrl.FindForm();
            var imageCollection = ribbonCtrl.Images == null ? new ImageCollection() : (ImageCollection)ribbonCtrl.LargeImages;

            ribbonCtrl.LargeImages = imageCollection;
            foreach (var pageContainer in container.SubContainers)
            {
                var page = new RibbonPage {
                    Text = pageContainer.Text, Name = pageContainer.Name
                };
                ribbonCtrl.DefaultPageCategory.Pages.Add(page);
                foreach (var groupContainer in pageContainer.SubContainers)
                {
                    var group = new RibbonPageGroup {
                        Text = groupContainer.Text, Name = groupContainer.Name
                    };
                    page.Groups.Add(group);
                    var plugins = groupContainer.Plugins.OrderBy(v => v.Index);
                    foreach (var plugin in plugins)
                    {
                        var image      = plugin.GetImage();
                        int imageIndex = image == null ? -1 : imageCollection.Images.Add(image);
                        var item       = new BarButtonItem
                        {
                            Caption         = plugin.Text,
                            SuperTip        = SuperTipsEx.CreateSuperTips(plugin.Tips, plugin.Text),
                            RibbonStyle     = RibbonItemStyles.All,
                            LargeImageIndex = imageIndex,
                            Tag             = plugin
                        };
                        if (!string.IsNullOrWhiteSpace(plugin.ShortcutKeys))
                        {
                            item.ItemShortcut = new BarShortcut((Keys)Enum.Parse(typeof(Keys), plugin.ShortcutKeys));
                        }

                        item.ItemClick += (sender, e) => plugin.Command.Invoke(form);
                        group.ItemLinks.Add(item);
                    }
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 根据插件创建调用插件的<see cref="BarButtonItem"/>
        /// </summary>
        /// <typeparam name="TCmdData"></typeparam>
        /// <param name="plugin"></param>
        /// <param name="imageCollection"></param>
        /// <param name="caller"></param>
        /// <param name="cmdData"></param>
        /// <returns></returns>
        private static BarButtonItem PluginToButtonItem <TCmdData>(IPluginItem plugin, ImageCollection imageCollection, object caller, string imageDir, TCmdData cmdData)
        {
            var bitmap     = plugin.GetIcon(imageDir);
            int imageIndex = bitmap == null ? -1 : imageCollection.Images.Add(bitmap);
            var item       = new BarButtonItem
            {
                Caption         = plugin.Text,
                SuperTip        = SuperTipsEx.CreateSuperTips(plugin.Tips, plugin.Text),
                RibbonStyle     = RibbonItemStyles.All,
                LargeImageIndex = imageIndex,
                Tag             = plugin,
                Visibility      = plugin.Visible ? BarItemVisibility.Always : BarItemVisibility.Never,
            };

            if (!string.IsNullOrWhiteSpace(plugin.ShortcutKeys))
            {
                item.ItemShortcut = new BarShortcut((Keys)Enum.Parse(typeof(Keys), plugin.ShortcutKeys));
            }

            plugin.CreateCommand(cmdData);
            item.ItemClick += (sender, e) => plugin.Command?.Invoke(caller);
            return(item);
        }