/// <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;
        }
Exemple #4
0
        /// <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;
        }
Exemple #8
0
        /// <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;
 }
Exemple #10
0
        /// <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);
        }
Exemple #11
0
        /// <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);
        }
Exemple #12
0
        /// <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);
        }
Exemple #13
0
        /// <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;
        }
Exemple #15
0
        /// <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);
                    }
                }

            }
        }
Exemple #20
0
 public AuthorizationCondition(AddInElement element)
 {
     addInPath = element.Path + "/" + element.Id;
     command   = element.Command;
 }