Beispiel #1
0
        /// <summary>
        /// 通过反射创建插件中的命令(ICommand),设置命令的传入参数
        /// </summary>
        /// <typeparam name="TCmdData"></typeparam>
        /// <param name="plugin"></param>
        /// <param name="inputData"></param>
        /// <returns></returns>
        public static ICommand CreateCommand <TCmdData>(this IPluginItem plugin, TCmdData inputData)
        {
            var cmd = Assembly.LoadFrom(plugin.AssemblyPath).CreateInstance(plugin.TypeName) as ICommand <TCmdData>;

            cmd.InputData = inputData;
            return(plugin.Command = cmd);
        }
Beispiel #2
0
 /// <summary>
 /// 通过反射创建插件中的命令(ICommand),设置命令的传入参数
 /// </summary>
 /// <typeparam name="TCmdData"></typeparam>
 /// <param name="plugin"></param>
 /// <param name="inputData"></param>
 /// <returns></returns>
 public static ICommand CreateCommand<TCmdData>(this IPluginItem plugin, TCmdData inputData)
 {
     var assemblyPath = FileOpt.GetRootPath(plugin.AssemblyPath);
     var objCmd = Assembly.LoadFile(assemblyPath).CreateInstance(plugin.TypeName);
     var cmd = objCmd as ICommand<TCmdData>;
     cmd.InputData = inputData;
     return plugin.Command = cmd;
 }
Beispiel #3
0
        /// <summary>
        /// 获取插件图标
        /// </summary>
        /// <param name="plugin"></param>
        /// <returns></returns>
        public static Image GetImage(this IPluginItem plugin)
        {
            if (!string.IsNullOrWhiteSpace(plugin.IconPath) && !Path.IsPathRooted(plugin.IconPath))
            {
                plugin.IconPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, plugin.IconPath);
            }
            var image = File.Exists(plugin.IconPath) ? Image.FromFile(plugin.IconPath) : null;

            return(image);
        }
Beispiel #4
0
 /// <summary>
 /// 修改插件信息的窗口
 /// </summary>
 /// <param name="plugin"></param>
 public PluginInfoForm(IPluginItem plugin = null)
 {
     InitializeComponent();
     this.cmbShortcutKeys.Items.AddRange(Enum.GetNames(typeof(Shortcut)));
     this.cmbShortcutKeys.SelectedIndex = 0;
     this.cmbInvokeType.Items.AddRange(EnumDescriptionHelper.GetDescriptions <EPluginInvokeType>());
     this.cmbInvokeType.SelectedIndex = 0;
     if (plugin != null)
     {
         Plugin = plugin;
     }
 }
Beispiel #5
0
        /// <summary>
        /// 将插件作为菜单,创建菜单
        /// </summary>
        /// <param name="plugin">插件</param>
        /// <param name="form">插件/菜单所在窗口</param>
        /// <returns></returns>
        private static ToolStripMenuItem CreateMenuItem(IPluginItem plugin, Form form)
        {
            var menuItem = new ToolStripMenuItem
            {
                Text         = plugin.Text,
                ToolTipText  = plugin.Tips,
                Tag          = plugin,
                Image        = plugin.GetIcon(),
                ShortcutKeys = string.IsNullOrWhiteSpace(plugin.ShortcutKeys) ? Keys.None : (Keys)Enum.Parse(typeof(Keys), plugin.ShortcutKeys)
            };

            menuItem.Click += (sender, e) => plugin.Command?.Invoke(form);
            return(menuItem);
        }
Beispiel #6
0
        /// <summary>
        /// 获取插件图标
        /// </summary>
        /// <param name="plugin"></param>
        /// <param name="imageFolderPath">默认插件图标目录,仅在<see cref="PluginItem.IconPath"/>为相对路径时使用该值</param>
        /// <returns></returns>
        public static Bitmap GetIcon(this IPluginItem plugin, string imageFolderPath = null)
        {
            var path = plugin.IconPath;
            if (!string.IsNullOrWhiteSpace(path) && !Path.IsPathRooted(path))
            {
                if (!string.IsNullOrWhiteSpace(imageFolderPath))
                    path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, imageFolderPath, path);
                else
                    path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, path);
            }
            if (!File.Exists(path))
                return null;

            return GetBitmap.FromFile(path);
        }
Beispiel #7
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);
        }
Beispiel #8
0
        private void btnAdd_Click(object sender, EventArgs e)
        {
            TreeNode node = tvPlugins.SelectedNode;

            if (node.Tag is IPluginItem)
            {
                IPluginItem  pluginItem = (IPluginItem)Activator.CreateInstance(node.Tag.GetType());
                ListViewItem lvi        = new ListViewItem(pluginItem.Name);
                lvi.Tag = pluginItem;
                pluginItem.PreviewTextChanged += p => lvi.Text = string.Format("{0}: {1}", pluginItem.Name, p);

                if (lvEffects.SelectedIndices.Count > 0)
                {
                    lvEffects.Items.Insert(lvEffects.SelectedIndices[lvEffects.SelectedIndices.Count - 1] + 1, lvi);
                }
                else
                {
                    lvEffects.Items.Add(lvi);
                    lvEffects.Items[lvEffects.Items.Count - 1].Selected = true;
                }
            }

            UpdatePreview();
        }