/// <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> /// See <see cref="UIElementAdapter{TUIElement}.Add(TUIElement)"/> for more information. /// </summary> protected override BarItem Add(BarItem uiElement) { itemCollection.Add(uiElement); BarItemLink link = null; BarItemExtend extend = uiElement.Tag as BarItemExtend; if (extend != null && !String.IsNullOrEmpty(extend.InsertBefore)) { link = linkCollection.Insert(GetInsertingIndex(extend.InsertBefore), uiElement); } else { link = linkCollection.Insert(GetInsertingIndex(uiElement), uiElement); } if (link != null && extend != null) { link.BeginGroup = extend.BeginGroup; } return(uiElement); }
/// <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="extPath">路径</param> /// <param name="id">标识</param> /// <param name="text">标题</param> /// <param name="command">命令</param> /// <param name="regisger">是否注册此菜单项以便可以在其下增加子菜单项</param> /// <param name="beginGroup">是否添加分隔条</param> /// <param name="insertBefore">插入位置</param> /// <returns>返回创建好的菜单项/按钮</returns> public BarItem AddButton(string extPath, string id, string text, string command, bool regisger, bool beginGroup, string insertBefore) { BarItem item = CreateButton(extPath, id, text, command, regisger); BarItemExtend extend = new BarItemExtend(); extend.BeginGroup = beginGroup; extend.InsertBefore = insertBefore; item.Tag = extend; if (!String.IsNullOrEmpty(extPath) && WorkItem.UIExtensionSites.Contains(extPath)) WorkItem.UIExtensionSites[extPath].Add(item); return item; }