/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { if (element.Configuration.Attributes["label"] == null) throw new AddInException(String.Format("没有为类型为 \"{0}\" 的插件单元{1}提供label属性。", element.ClassName, element.Id)); string label = element.Configuration.Attributes["label"]; BarManager barManager = context.Items.Get<BarManager>(UIExtensionSiteNames.Shell_Bar_Manager); if (barManager == null) throw new UniframeworkException("未定义框架外壳的工具条管理器。"); Bar item = new Bar(barManager, label); item.BarName = element.Name; item.DockStyle = BarDockStyle.Top; // 默认停靠在顶部 if (element.Configuration.Attributes["dockstyle"] != null) { string dockStyle = element.Configuration.Attributes["dockstyle"]; item.DockStyle = (BarDockStyle)Enum.Parse(typeof(BarDockStyle), dockStyle); } // 是否让工具栏显示整行 if (element.Configuration.Attributes["wholerow"] != null) item.OptionsBar.UseWholeRow = bool.Parse(element.Configuration.Attributes["wholerow"]); if (element.Configuration.Attributes["allowcustomization"] != null) item.OptionsBar.AllowQuickCustomization = bool.Parse(element.Configuration.Attributes["allowcustomization"]); if (element.Configuration.Attributes["register"] != null) { bool register = bool.Parse(element.Configuration.Attributes["register"]); if (register) context.UIExtensionSites.RegisterSite(BuilderUtility.CombinPath(element.Path, element.Id), item); // 此处可能抛出异常 } return item; }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { IContentMenuService cmbService = context.Services.Get<IContentMenuService>(); if (cmbService == null) throw new UniframeworkException(String.Format("未注册IContentMenuBarService无法创建上下文菜单 \"{0}\"。", element.Name)); BarSubItem item = new BarSubItem(); item.Name = element.Name; item.Tag = element.Path; item.Manager = BuilderUtility.GetBarManager(context); // 设置工具栏管理器 string exPath = BuilderUtility.CombinPath(element.Path, element.Id); cmbService.RegisterContentMenu(exPath, item); // 添加插件单元到系统中 if (!String.IsNullOrEmpty(element.Path) && context.UIExtensionSites.Contains(element.Path)) context.UIExtensionSites[element.Path].Add(item); if (!String.IsNullOrEmpty(element.Command)) { Command cmd = BuilderUtility.GetCommand(context, element.Command); if (cmd != null) cmd.AddInvoker(item, "Popup"); } context.UIExtensionSites.RegisterSite(exPath, item); return item; }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { Guard.ArgumentNotNull(context, "插件构建上下文对象"); if (element.Configuration.Attributes["label"] == null) throw new AddInException(String.Format("没有为类型为 \"{0}\" 的插件单元{1}提供label属性。", element.ClassName, element.Id)); string label = element.Configuration.Attributes["label"]; Form shell = context.Items.Get<Form>(UIExtensionSiteNames.Shell); Bar bar = context.Items.Get<Bar>(UIExtensionSiteNames.Shell_Bar_Mainmenu); XtraTabbedMdiManager mdiManager = context.Items.Get<XtraTabbedMdiManager>(UIExtensionSiteNames.Shell_Manager_TabbedMdiManager); Guard.ArgumentNotNull(bar, "Main menu bar."); Guard.ArgumentNotNull(shell, "Shell"); Guard.ArgumentNotNull(mdiManager, "Tabbed mdi manager."); XtraWindowMenu item = new XtraWindowMenu(bar, mdiManager, shell); item.Caption = label; item.Name = element.Name; BarManager barManager = BuilderUtility.GetBarManager(context); if (barManager != null) item.Id = barManager.GetNewItemId(); // 为BarItem设置Id方便正确的保存和恢复其状态 if (!String.IsNullOrEmpty(element.Path) && context.UIExtensionSites.Contains(element.Path)) context.UIExtensionSites[element.Path].Add(item); // 注册插件单元 if (element.Configuration.Attributes["register"] != null) { bool register = bool.Parse(element.Configuration.Attributes["register"]); if (register) context.UIExtensionSites.RegisterSite(BuilderUtility.CombinPath(element.Path, element.Id), item); } return item; }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { IContentMenuService cmbService = context.Services.Get <IContentMenuService>(); if (cmbService == null) { throw new UniframeworkException(String.Format("未注册IContentMenuBarService无法创建上下文菜单 \"{0}\"。", element.Name)); } BarSubItem item = new BarSubItem(); item.Name = element.Name; item.Tag = element.Path; item.Manager = BuilderUtility.GetBarManager(context); // 设置工具栏管理器 string exPath = BuilderUtility.CombinPath(element.Path, element.Id); cmbService.RegisterContentMenu(exPath, item); // 添加插件单元到系统中 if (!String.IsNullOrEmpty(element.Path) && context.UIExtensionSites.Contains(element.Path)) { context.UIExtensionSites[element.Path].Add(item); } if (!String.IsNullOrEmpty(element.Command)) { Command cmd = BuilderUtility.GetCommand(context, element.Command); if (cmd != null) { cmd.AddInvoker(item, "Popup"); } } context.UIExtensionSites.RegisterSite(exPath, item); return(item); }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { Guard.ArgumentNotNull(context, "插件构建上下文对象"); if (element.Configuration.Attributes["label"] == null) { throw new AddInException(String.Format("没有为类型为 \"{0}\" 的插件单元{1}提供label属性。", element.ClassName, element.Id)); } string label = element.Configuration.Attributes["label"]; BarItem item; bool register = false; if (element.Configuration.Attributes["register"] != null) { register = bool.Parse(element.Configuration.Attributes["register"]); } Bar bar = context.Items.Get <Bar>(UIExtensionSiteNames.Shell_Bar_Mainmenu); if (bar == null) { throw new UniframeworkException("没有定义系统主菜单条无法创建系统皮肤菜单项。"); } item = new XtraBarListMenu(bar); item.Caption = label; item.Name = element.Name; BarManager barManager = BuilderUtility.GetBarManager(context); if (barManager != null) { item.Id = barManager.GetNewItemId(); // 为BarItem设置Id方便正确的保存和恢复其状态 } BarItemExtend extend = new BarItemExtend(); if (element.Configuration.Attributes["begingroup"] != null) { bool beginGroup = bool.Parse(element.Configuration.Attributes["begingroup"]); extend.BeginGroup = beginGroup; } if (element.Configuration.Attributes["insertbefore"] != null) { extend.InsertBefore = element.Configuration.Attributes["insertbefore"]; } item.Tag = extend; // 添加插件单元到系统中 if (!String.IsNullOrEmpty(element.Path) && context.UIExtensionSites.Contains(element.Path)) { context.UIExtensionSites[element.Path].Add(item); } // 注册此路径的插件 if (register) { context.UIExtensionSites.RegisterSite(BuilderUtility.CombinPath(element.Path, element.Id), item); } return(item); }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { if (element.Configuration.Attributes["label"] == null) throw new AddInException(String.Format("没有为类型为 \"{0}\" 的插件单元{1}提供label属性。", element.ClassName, element.Id)); string label = element.Configuration.Attributes["label"]; NavBarItem item = new NavBarItem(BuilderUtility.GetStringRES(context, label)); item.Name = element.Name; if (element.Configuration.Attributes["tooltip"] != null) item.Hint = element.Configuration.Attributes["tooltip"]; if (element.Configuration.Attributes["largeimage"] != null) { string largeImage = element.Configuration.Attributes["largeimage"]; item.LargeImage = BuilderUtility.GetBitmap(context, largeImage, 32, 32); } if (element.Configuration.Attributes["imagefile"] != null) { string image = element.Configuration.Attributes["imagefile"]; item.SmallImage = BuilderUtility.GetBitmap(context, image, 16, 16); } if (!String.IsNullOrEmpty(element.Path) && context.UIExtensionSites.Contains(element.Path)) context.UIExtensionSites[element.Path].Add(item); Command cmd = BuilderUtility.GetCommand(context, element.Command); if (cmd != null) cmd.AddInvoker(item, "LinkClicked"); return item; }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { Guard.ArgumentNotNull(context, "插件构建上下文对象"); if (element.Configuration.Attributes["label"] == null) throw new AddInException(String.Format("没有为类型为 \"{0}\" 的插件单元{1}提供label属性。", element.ClassName, element.Id)); string label = element.Configuration.Attributes["label"]; Bar bar = context.Items.Get<Bar>(UIExtensionSiteNames.Shell_Bar_Mainmenu); if (bar == null) throw new UniframeworkException("没有定义系统主菜单条无法创建系统皮肤菜单项。"); XtraSkinMenu item = new XtraSkinMenu(bar); item.Caption = label; item.Name = element.Name; BarManager barManager = BuilderUtility.GetBarManager(context); if (barManager != null) item.Id = barManager.GetNewItemId(); // 为BarItem设置Id方便正确的保存和恢复其状态 BarItemExtend extend = new BarItemExtend(); if (element.Configuration.Attributes["begingroup"] != null) { bool beginGroup = bool.Parse(element.Configuration.Attributes["begingroup"]); extend.BeginGroup = beginGroup; } if (element.Configuration.Attributes["insertbefore"] != null) extend.InsertBefore = element.Configuration.Attributes["insertbefore"]; item.Tag = extend; if (!String.IsNullOrEmpty(element.Path) && context.UIExtensionSites.Contains(element.Path)) context.UIExtensionSites[element.Path].Add(item); return item; }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { if (element.Configuration.Attributes["label"] == null) { throw new AddInException(String.Format("没有为类型为 \"{0}\" 的插件单元{1}提供label属性。", element.ClassName, element.Id)); } if (element.Configuration.Attributes["navipane"] == null) { throw new AddInException(String.Format("没有为类型为 \"{0}\" 的插件单元{1}提供navipane属性。", element.ClassName, element.Id)); } string label = element.Configuration.Attributes["label"]; string navipane = element.Configuration.Attributes["navipane"]; NavBarGroup item = new NavBarGroup(BuilderUtility.GetStringRES(context, label)); item.GroupStyle = NavBarGroupStyle.LargeIconsText; NavBarControl naviPane = context.Items.Get <NavBarControl>(navipane); if (naviPane == null) { throw new UniframeworkException("未定义框架外壳的导航栏管理器。"); } naviPane.Groups.Add(item); // 添加分组条到导航栏 if (element.Configuration.Attributes["tooltip"] != null) { item.Hint = element.Configuration.Attributes["tooltip"]; } // 设置分组栏显示的图像 if (element.Configuration.Attributes["imagefile"] != null) { string image = element.Configuration.Attributes["imagefile"]; item.SmallImage = BuilderUtility.GetBitmap(context, image, 16, 16); } if (element.Configuration.Attributes["largeimage"] != null) { string largeImage = element.Configuration.Attributes["largeimage"]; item.LargeImage = BuilderUtility.GetBitmap(context, largeImage, 32, 32); } if (element.Configuration.Attributes["register"] != null) { bool register = bool.Parse(element.Configuration.Attributes["register"]); if (register) { context.UIExtensionSites.RegisterSite(BuilderUtility.CombinPath(element.Path, element.Id), item); } } return(item); }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { object obj = null; Type type = Type.GetType(element.Configuration.Attributes["type"]); if (type != null) { try { obj = Activator.CreateInstance(type); } catch { return null; } } return obj; }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { if (element.Configuration.Attributes["label"] == null) { throw new AddInException(String.Format("没有为类型为 \"{0}\" 的插件单元{1}提供label属性。", element.ClassName, element.Id)); } string label = element.Configuration.Attributes["label"]; BarManager barManager = context.Items.Get <BarManager>(UIExtensionSiteNames.Shell_Bar_Manager); if (barManager == null) { throw new UniframeworkException("未定义框架外壳的工具条管理器。"); } Bar item = new Bar(barManager, label); item.BarName = element.Name; item.DockStyle = BarDockStyle.Top; // 默认停靠在顶部 if (element.Configuration.Attributes["dockstyle"] != null) { string dockStyle = element.Configuration.Attributes["dockstyle"]; item.DockStyle = (BarDockStyle)Enum.Parse(typeof(BarDockStyle), dockStyle); } // 是否让工具栏显示整行 if (element.Configuration.Attributes["wholerow"] != null) { item.OptionsBar.UseWholeRow = bool.Parse(element.Configuration.Attributes["wholerow"]); } if (element.Configuration.Attributes["allowcustomization"] != null) { item.OptionsBar.AllowQuickCustomization = bool.Parse(element.Configuration.Attributes["allowcustomization"]); } if (element.Configuration.Attributes["register"] != null) { bool register = bool.Parse(element.Configuration.Attributes["register"]); if (register) { context.UIExtensionSites.RegisterSite(BuilderUtility.CombinPath(element.Path, element.Id), item); // 此处可能抛出异常 } } return(item); }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { object obj = null; Type type = Type.GetType(element.Configuration.Attributes["type"]); if (type != null) { try { obj = Activator.CreateInstance(type); } catch { return(null); } } return(obj); }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { Guard.ArgumentNotNull(context, "插件构建上下文对象"); if (element.Configuration.Attributes["label"] == null) { throw new AddInException(String.Format("没有为类型为 \"{0}\" 的插件单元{1}提供label属性。", element.ClassName, element.Id)); } string label = element.Configuration.Attributes["label"]; Form shell = context.Items.Get <Form>(UIExtensionSiteNames.Shell); Bar bar = context.Items.Get <Bar>(UIExtensionSiteNames.Shell_Bar_Mainmenu); XtraTabbedMdiManager mdiManager = context.Items.Get <XtraTabbedMdiManager>(UIExtensionSiteNames.Shell_Manager_TabbedMdiManager); Guard.ArgumentNotNull(bar, "Main menu bar."); Guard.ArgumentNotNull(shell, "Shell"); Guard.ArgumentNotNull(mdiManager, "Tabbed mdi manager."); XtraWindowMenu item = new XtraWindowMenu(bar, mdiManager, shell); item.Caption = label; item.Name = element.Name; BarManager barManager = BuilderUtility.GetBarManager(context); if (barManager != null) { item.Id = barManager.GetNewItemId(); // 为BarItem设置Id方便正确的保存和恢复其状态 } if (!String.IsNullOrEmpty(element.Path) && context.UIExtensionSites.Contains(element.Path)) { context.UIExtensionSites[element.Path].Add(item); } // 注册插件单元 if (element.Configuration.Attributes["register"] != null) { bool register = bool.Parse(element.Configuration.Attributes["register"]); if (register) { context.UIExtensionSites.RegisterSite(BuilderUtility.CombinPath(element.Path, element.Id), item); } } return(item); }
/// <summary> /// 设置当前插件路径 /// </summary> /// <param name="exPath">插件路径</param> /// <param name="configuration">配置项</param> public static void SetUp(ExtensionPath exPath, IConfiguration configuration) { ILog logger = exPath.AddIn.WorkItem.Services.Get <ILog>(); logger.Debug("解析插件路径," + exPath); /// Stack <ICondition> conditionStack = new Stack <ICondition>(); foreach (IConfiguration config in configuration.Children) { if (config.Name == "Condition") { conditionStack.Push(new Condition(config.Name, config)); } else if (config.Name == "ComplexCondition") { conditionStack.Push(new ComplexCondition(config.Name, config)); } else { List <ICondition> conditions = new List <ICondition>(); conditions.AddRange(conditionStack.ToArray()); AddInElement element = new AddInElement(exPath, config, conditions); logger.Debug(" 添加插件单元," + element.ToString()); if (exPath.BuildStartUp) // 立即创建插件单元 { element.BuildSelf(); } exPath.AddInElements.Add(element); if (config.Children.Count > 0) { string pathStr = exPath.Name.EndsWith("/") ? exPath.Name + element.Id : exPath.Name + "/" + element.Id; ExtensionPath subPath = exPath.AddIn.GetExtensionPath(pathStr); subPath.BuildStartUp = exPath.BuildStartUp; subPath.Label = element.Label; SetUp(subPath, config); } } } }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { if (element.Configuration.Attributes["label"] == null) throw new AddInException(String.Format("没有为类型为 \"{0}\" 的插件单元{1}提供label属性。", element.ClassName, element.Id)); if(element.Configuration.Attributes["navipane"] == null) throw new AddInException(String.Format("没有为类型为 \"{0}\" 的插件单元{1}提供navipane属性。", element.ClassName, element.Id)); string label = element.Configuration.Attributes["label"]; string navipane = element.Configuration.Attributes["navipane"]; NavBarGroup item = new NavBarGroup(BuilderUtility.GetStringRES(context, label)); item.GroupStyle = NavBarGroupStyle.LargeIconsText; NavBarControl naviPane = context.Items.Get<NavBarControl>(navipane); if (naviPane == null) throw new UniframeworkException("未定义框架外壳的导航栏管理器。"); naviPane.Groups.Add(item); // 添加分组条到导航栏 if (element.Configuration.Attributes["tooltip"] != null) item.Hint = element.Configuration.Attributes["tooltip"]; // 设置分组栏显示的图像 if (element.Configuration.Attributes["imagefile"] != null) { string image = element.Configuration.Attributes["imagefile"]; item.SmallImage = BuilderUtility.GetBitmap(context, image, 16, 16); } if (element.Configuration.Attributes["largeimage"] != null) { string largeImage = element.Configuration.Attributes["largeimage"]; item.LargeImage = BuilderUtility.GetBitmap(context, largeImage, 32, 32); } if (element.Configuration.Attributes["register"] != null) { bool register = bool.Parse(element.Configuration.Attributes["register"]); if (register) context.UIExtensionSites.RegisterSite(BuilderUtility.CombinPath(element.Path, element.Id), item); } return item; }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { if (element.Configuration.Attributes["label"] == null) { throw new AddInException(String.Format("没有为类型为 \"{0}\" 的插件单元{1}提供label属性。", element.ClassName, element.Id)); } string label = element.Configuration.Attributes["label"]; NavBarItem item = new NavBarItem(BuilderUtility.GetStringRES(context, label)); item.Name = element.Name; if (element.Configuration.Attributes["tooltip"] != null) { item.Hint = element.Configuration.Attributes["tooltip"]; } if (element.Configuration.Attributes["largeimage"] != null) { string largeImage = element.Configuration.Attributes["largeimage"]; item.LargeImage = BuilderUtility.GetBitmap(context, largeImage, 32, 32); } if (element.Configuration.Attributes["imagefile"] != null) { string image = element.Configuration.Attributes["imagefile"]; item.SmallImage = BuilderUtility.GetBitmap(context, image, 16, 16); } if (!String.IsNullOrEmpty(element.Path) && context.UIExtensionSites.Contains(element.Path)) { context.UIExtensionSites[element.Path].Add(item); } Command cmd = BuilderUtility.GetCommand(context, element.Command); if (cmd != null) { cmd.AddInvoker(item, "LinkClicked"); } return(item); }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { if (element.Configuration.Attributes["label"] == null) { throw new AddInException(String.Format("没有为类型为 \"{0}\" 的插件单元{1}提供label属性。", element.ClassName, element.Id)); } string label = element.Configuration.Attributes["label"]; BarItem item; bool register = false; if (element.Configuration.Attributes["register"] != null) { register = bool.Parse(element.Configuration.Attributes["register"]); } if (register) { item = new BarSubItem(); } else { item = new BarButtonItem(); } item.Caption = BuilderUtility.GetStringRES(context, label); item.Name = element.Name; BarManager barManager = BuilderUtility.GetBarManager(context); if (barManager != null) { item.Id = barManager.GetNewItemId(); // 为BarItem设置Id方便正确的保存和恢复其状态 } if (element.Configuration.Attributes["alignment"] != null) { item.Alignment = (BarItemLinkAlignment)Enum.Parse(typeof(BarItemLinkAlignment), element.Configuration.Attributes["alignment"]); } if (element.Configuration.Attributes["paintstyle"] != null) { item.PaintStyle = (BarItemPaintStyle)Enum.Parse(typeof(BarItemPaintStyle), element.Configuration.Attributes["paintstyle"]); } if (element.Configuration.Attributes["tooltip"] != null) { item.Hint = element.Configuration.Attributes["tooltip"]; } else { item.Hint = BuilderUtility.GetStringRES(context, label); } if (element.Configuration.Attributes["largeimage"] != null) { string largeImage = element.Configuration.Attributes["largeimage"]; item.LargeGlyph = BuilderUtility.GetBitmap(context, largeImage, 32, 32); } if (element.Configuration.Attributes["imagefile"] != null) { string image = element.Configuration.Attributes["imagefile"]; item.Glyph = BuilderUtility.GetBitmap(context, image, 16, 16); } if (element.Configuration.Attributes["shortcut"] != null) { string key = element.Configuration.Attributes["shortcut"]; try { item.ItemShortcut = new BarShortcut((Shortcut)Enum.Parse(typeof(Shortcut), key)); } catch { } } BarItemExtend extend = new BarItemExtend(); if (element.Configuration.Attributes["begingroup"] != null) { bool beginGroup = bool.Parse(element.Configuration.Attributes["begingroup"]); extend.BeginGroup = beginGroup; } if (element.Configuration.Attributes["insertbefore"] != null) { extend.InsertBefore = element.Configuration.Attributes["insertbefore"]; } item.Tag = extend; // 设置菜单项/按钮为选择项 if ((element.Configuration.Attributes["checked"] != null) && (item is BarButtonItem)) { ((BarButtonItem)item).ButtonStyle = BarButtonStyle.Check; bool check = bool.Parse(element.Configuration.Attributes["checked"]); ((BarButtonItem)item).Down = check; if (element.Configuration.Attributes["optiongroup"] != null) { ((BarButtonItem)item).GroupIndex = int.Parse(element.Configuration.Attributes["optiongroup"]); } } // 添加插件单元到系统中 if (!String.IsNullOrEmpty(element.Path) && context.UIExtensionSites.Contains(element.Path)) { context.UIExtensionSites[element.Path].Add(item); } Command cmd = BuilderUtility.GetCommand(context, element.Command); if (cmd != null) // 如果操作命令不为空则绑定命令 { cmd.AddInvoker(item, "ItemClick"); } // 注册此路径的插件 if (register) { context.UIExtensionSites.RegisterSite(BuilderUtility.CombinPath(element.Path, element.Id), item); } return(item); }
public AuthorizationCondition(AddInElement element) { addInPath = element.Path + "/" + element.Id; command = element.Command; }
/// <summary> /// 构建插件单元 /// </summary> /// <param name="caller">调用者</param> /// <param name="context">上下文,用于存放在构建时需要的组件</param> /// <param name="element">插件单元</param> /// <param name="subItems">被构建的子对象列表</param> /// <returns>构建好的插件单元</returns> public object BuildItem(object caller, WorkItem context, AddInElement element, ArrayList subItems) { if (element.Configuration.Attributes["label"] == null) throw new AddInException(String.Format("没有为类型为 \"{0}\" 的插件单元{1}提供label属性。", element.ClassName, element.Id)); string label = element.Configuration.Attributes["label"]; BarItem item; bool register = false; if (element.Configuration.Attributes["register"] != null) register = bool.Parse(element.Configuration.Attributes["register"]); if (register) item = new BarSubItem(); else item = new BarButtonItem(); item.Caption = BuilderUtility.GetStringRES(context, label); item.Name = element.Name; BarManager barManager = BuilderUtility.GetBarManager(context); if (barManager != null) item.Id = barManager.GetNewItemId(); // 为BarItem设置Id方便正确的保存和恢复其状态 if (element.Configuration.Attributes["alignment"] != null) item.Alignment = (BarItemLinkAlignment)Enum.Parse(typeof(BarItemLinkAlignment), element.Configuration.Attributes["alignment"]); if (element.Configuration.Attributes["paintstyle"] != null) item.PaintStyle = (BarItemPaintStyle)Enum.Parse(typeof(BarItemPaintStyle), element.Configuration.Attributes["paintstyle"]); if (element.Configuration.Attributes["tooltip"] != null) item.Hint = element.Configuration.Attributes["tooltip"]; else item.Hint = BuilderUtility.GetStringRES(context, label); if (element.Configuration.Attributes["largeimage"] != null) { string largeImage = element.Configuration.Attributes["largeimage"]; item.LargeGlyph = BuilderUtility.GetBitmap(context, largeImage, 32, 32); } if (element.Configuration.Attributes["imagefile"] != null) { string image = element.Configuration.Attributes["imagefile"]; item.Glyph = BuilderUtility.GetBitmap(context, image, 16, 16); } if (element.Configuration.Attributes["shortcut"] != null) { string key = element.Configuration.Attributes["shortcut"]; try { item.ItemShortcut = new BarShortcut((Shortcut)Enum.Parse(typeof(Shortcut), key)); } catch { } } BarItemExtend extend = new BarItemExtend(); if (element.Configuration.Attributes["begingroup"] != null) { bool beginGroup = bool.Parse(element.Configuration.Attributes["begingroup"]); extend.BeginGroup = beginGroup; } if (element.Configuration.Attributes["insertbefore"] != null) extend.InsertBefore = element.Configuration.Attributes["insertbefore"]; item.Tag = extend; // 设置菜单项/按钮为选择项 if ((element.Configuration.Attributes["checked"] != null) && (item is BarButtonItem)) { ((BarButtonItem)item).ButtonStyle = BarButtonStyle.Check; bool check = bool.Parse(element.Configuration.Attributes["checked"]); ((BarButtonItem)item).Down = check; if (element.Configuration.Attributes["optiongroup"] != null) ((BarButtonItem)item).GroupIndex = int.Parse(element.Configuration.Attributes["optiongroup"]); } // 添加插件单元到系统中 if (!String.IsNullOrEmpty(element.Path) && context.UIExtensionSites.Contains(element.Path)) context.UIExtensionSites[element.Path].Add(item); Command cmd = BuilderUtility.GetCommand(context, element.Command); if (cmd != null) // 如果操作命令不为空则绑定命令 cmd.AddInvoker(item, "ItemClick"); // 注册此路径的插件 if (register) context.UIExtensionSites.RegisterSite(BuilderUtility.CombinPath(element.Path, element.Id), item); return item; }
/// <summary> /// 设置当前插件路径 /// </summary> /// <param name="exPath">插件路径</param> /// <param name="configuration">配置项</param> public static void SetUp(ExtensionPath exPath, IConfiguration configuration) { ILog logger = exPath.AddIn.WorkItem.Services.Get<ILog>(); logger.Debug("解析插件路径," + exPath); /// Stack<ICondition> conditionStack = new Stack<ICondition>(); foreach (IConfiguration config in configuration.Children) { if (config.Name == "Condition") conditionStack.Push(new Condition(config.Name, config)); else if (config.Name == "ComplexCondition") conditionStack.Push(new ComplexCondition(config.Name, config)); else { List<ICondition> conditions = new List<ICondition>(); conditions.AddRange(conditionStack.ToArray()); AddInElement element = new AddInElement(exPath, config, conditions); logger.Debug(" 添加插件单元," + element.ToString()); if (exPath.BuildStartUp) // 立即创建插件单元 element.BuildSelf(); exPath.AddInElements.Add(element); if (config.Children.Count > 0) { string pathStr = exPath.Name.EndsWith("/") ? exPath.Name + element.Id : exPath.Name + "/" + element.Id; ExtensionPath subPath = exPath.AddIn.GetExtensionPath(pathStr); subPath.BuildStartUp = exPath.BuildStartUp; subPath.Label = element.Label; SetUp(subPath, config); } } } }