public PluginItem GetPluginItem(string pluginType) { PluginSelector selector; if (!PluginDicWithTypeKey.TryGetValue(pluginType, out selector)) { return(null); } Dictionary <Guid, PluginItem> activedPlufinItems = new Dictionary <Guid, PluginItem>(); foreach (var i in selector.Plugins) { if (i.Value.Active) { activedPlufinItems[i.Key] = i.Value as PluginItem; } } if (activedPlufinItems.Count == 0) { return(null); } if (selector.DefaultPlugin == null || !selector.DefaultPlugin.Active) { if (activedPlufinItems.Count == 1) { foreach (var obj in activedPlufinItems) { return(obj.Value); } } else { // 弹出窗口选择本次处理要使用的插件 var dsw = new PluginDefaultSelectorWindow(); foreach (var obj in activedPlufinItems) { dsw.PluginItems.Add(obj.Value); } dsw.ShowDialog(); if (dsw.NeverShow) { selector.SetDefaultPlugin(dsw.SelectedItem.Id); return(selector.DefaultPlugin as PluginItem); } else { return(dsw.SelectedItem); } } } else { return(selector.DefaultPlugin as PluginItem); } return(null); }
private async System.Threading.Tasks.Task GenericPluginItemAction(Guid pluginGuid, EditorCommon.PluginAssist.IEditorPlugin pluginValue, EditorCommon.PluginAssist.IEditorPluginData pluginData) { await EngineNS.CEngine.Instance.EventPoster.Post(() => { var item = new PluginItem(pluginGuid, pluginValue, pluginData); item.PluginName = pluginValue.PluginName; item.Version = pluginValue.Version; //if (!plugin.Value.OnActive()) //{ // item.Active = false; // continue; //} var pluginType = pluginValue.GetType(); var atts = pluginType.GetCustomAttributes(typeof(EditorCommon.PluginAssist.PluginMenuItemAttribute), false); if (atts.Length > 0) { var piAtt = (EditorCommon.PluginAssist.PluginMenuItemAttribute)(atts[0]); var menuData = EditorCommon.Menu.MenuItemDataBase.CreateMenuData(piAtt.MenuType, pluginData.PluginType); menuData.MenuNames = piAtt.MenuString; menuData.Count = piAtt.Count; if (piAtt.Icons != null) { menuData.Icons = new ImageSource[piAtt.MenuString.Length]; for (int i = 0; i < piAtt.Icons.Length; i++) { menuData.Icons[i] = new BitmapImage(new Uri(piAtt.Icons[i], UriKind.Relative)); } } if (pluginValue.Icon != null) { if (menuData.Icons.Length == 0) { menuData.Icons = new ImageSource[piAtt.MenuString.Length]; } menuData.Icons[menuData.Icons.Length - 1] = pluginValue.Icon; } menuData.OperationControlType = pluginType; if (menuData.OperationControls == null || menuData.OperationControls.Length != menuData.Count) { menuData.OperationControls = new DockControl.IDockAbleControl[menuData.Count]; } for (int i = 0; i < menuData.Count; i++) { var ctrl = System.Activator.CreateInstance(menuData.OperationControlType) as DockControl.IDockAbleControl; if (ctrl == null) { EngineNS.Profiler.Log.WriteLine(EngineNS.Profiler.ELogTag.Error, "Plugins", $"Plugin item {pluginValue.PluginName} create menus failed"); continue; } if (menuData.Count > 1) { ctrl.Index = i; } menuData.OperationControls[i] = ctrl; } EditorCommon.Menu.GeneralMenuManager.Instance.RegisterMenuItem(menuData); } // 将同类型的插件放入选择器字典表中 EditorCommon.PluginAssist.PluginSelector selector; if (!PluginDicWithTypeKey.TryGetValue(item.PluginData.PluginType, out selector)) { selector = new EditorCommon.PluginAssist.PluginSelector(item.PluginData.PluginType); PluginDicWithTypeKey[item.PluginData.PluginType] = selector; } selector.Plugins[pluginGuid] = item; PluginsDicWithIdKey[pluginGuid] = item; return(true); }, EngineNS.Thread.Async.EAsyncTarget.Main); }