/// <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;
        }
Exemple #2
0
        /// <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;
 }