#region
|
|
using System;
|
using System.Drawing;
|
using System.Windows.Forms;
|
using CSFrameworkV5.Common;
|
using CSFrameworkV5.Core;
|
using DevExpress.Utils;
|
using DevExpress.XtraBars;
|
using DevExpress.XtraBars.Ribbon;
|
using DevExpress.XtraEditors;
|
|
#endregion
|
|
//new 20200202
|
namespace CSFrameworkV5.Library.CommonClass
|
{
|
/// <summary>
|
/// Ribbon样式的模块展示加载器
|
/// </summary>
|
public class RibbonModuleLoader
|
{
|
private ImageCollection _ilModule32;
|
private ModuleManager _ModuleManager;
|
private RibbonControl _Ribbon;
|
|
/// <summary>
|
/// 构造器
|
/// </summary>
|
/// <param name="moduleManager">模块加载器</param>
|
/// <param name="ribbon">主界面的Ribbon组件实例</param>
|
/// <param name="ilModule32">主界面的模块图标</param>
|
public RibbonModuleLoader(ModuleManager moduleManager,
|
RibbonControl ribbon, ImageCollection ilModule32)
|
{
|
_ModuleManager = moduleManager;
|
_Ribbon = ribbon;
|
_ilModule32 = ilModule32;
|
}
|
|
/// <summary>
|
/// BarButtonItem的点击事件
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
private void Btn_ItemClick(object sender, ItemClickEventArgs e)
|
{
|
if (e.Item.Tag != null && e.Item.Tag is ToolStripItem)
|
{
|
var menu = e.Item.Tag as ToolStripItem;
|
menu.PerformClick();
|
}
|
}
|
|
/// <summary>
|
/// 创建BarButtonItem实例
|
/// </summary>
|
/// <param name="item"></param>
|
/// <returns></returns>
|
private BarButtonItem CreateRibbonButtonItem(ToolStripItem item)
|
{
|
var btn = new BarButtonItem();
|
btn.Name = item.Name;
|
btn.Caption = item.Text;
|
btn.ItemClick += Btn_ItemClick;
|
btn.Tag = item;
|
btn.Glyph = GetButtonImage(item.Name); //按钮图片
|
_Ribbon.Items.Add(btn);
|
return btn;
|
}
|
|
/// <summary>
|
/// 创建Ribbon样式的模块展示区
|
/// </summary>
|
/// <param name="moduleMainMenu">系统菜单</param>
|
public void CreateRibbonButtons(MenuStrip moduleMainMenu)
|
{
|
_Ribbon.SelectedPageChanging += Ribbon_SelectedPageChanging;
|
|
foreach (ToolStripMenuItem moduleTopMenu in moduleMainMenu.Items)
|
{
|
if (!moduleTopMenu.Enabled) continue; //顶级菜单荐是禁用状态表示无权限,不创建
|
|
//模块主菜单名称(一级菜单对应模块)
|
var pageModule = new RibbonPage();
|
pageModule.Text = moduleTopMenu.Text;
|
pageModule.Image =
|
_ilModule32.Images[
|
moduleMainMenu.Items.IndexOf(moduleTopMenu)]; //图标顺序
|
pageModule.Tag = moduleTopMenu; //关联菜单标记
|
_Ribbon.Pages.Add(pageModule);
|
|
//增加组--红圈容器
|
var group = new RibbonPageGroup();
|
pageModule.Groups.Add(group);
|
|
//递归加载
|
foreach (ToolStripItem item in moduleTopMenu.DropDownItems)
|
{
|
if (item is ToolStripSeparator) continue; //分隔符菜单项,不加载
|
|
if (!item.Enabled) continue; //菜单是禁止使用状态,无权限,不加载
|
|
if (moduleTopMenu.Text == "常用功能" &&
|
!HasModuleButton(item.Name)) continue; //常用功能特殊处理
|
|
//有2级菜单
|
if (item is ToolStripMenuItem &&
|
(item as ToolStripMenuItem).DropDownItems.Count > 0)
|
{
|
//创建2级菜单
|
var barListItem1 = new BarLinkContainerItem();
|
barListItem1.Name = item.Name;
|
barListItem1.Caption = item.Text;
|
group.ItemLinks.Add(barListItem1);
|
|
LoadRibbonSubItems(_Ribbon, barListItem1,
|
item as ToolStripMenuItem);
|
}
|
else //普通菜单
|
{
|
var btn = CreateRibbonButtonItem(item);
|
group.ItemLinks.Add(btn);
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 获取常用功能的按钮图片
|
/// </summary>
|
/// <param name="menuName">功能菜单名称</param>
|
/// <returns></returns>
|
private Image GetButtonImage(string menuName)
|
{
|
//获取按钮实例
|
var ctl = (MdiTools.MainForm as IMdiForm)
|
.GetModuleMainFormButtonByMenuName("",
|
menuName.Replace("_SHORTCUT_", ""));
|
if (ctl != null) return (ctl as SimpleButton).Image;
|
|
return null;
|
}
|
|
/// <summary>
|
/// 获取常用功能的按钮实例(null表示常用功能无效链接)
|
/// </summary>
|
/// <param name="menuName">功能菜单名称</param>
|
/// <returns></returns>
|
private bool HasModuleButton(string menuName)
|
{
|
//获取按钮实例
|
var ctl = (MdiTools.MainForm as IMdiForm)
|
.GetModuleMainFormButtonByMenuName("",
|
menuName.Replace("_SHORTCUT_", ""));
|
return ctl != null;
|
}
|
|
/// <summary>
|
/// 递归生成BarButtonItem
|
/// </summary>
|
/// <param name="ribbon"></param>
|
/// <param name="itemOwner"></param>
|
/// <param name="menuItem"></param>
|
private void LoadRibbonSubItems(RibbonControl ribbon,
|
BarLinkContainerItem itemOwner,
|
ToolStripMenuItem menuItem)
|
{
|
foreach (ToolStripItem item in menuItem.DropDownItems)
|
{
|
if (item is ToolStripSeparator) continue;
|
|
if (!item.Enabled) continue; //菜单是禁止使用状态,无权限
|
|
if (item is ToolStripMenuItem &&
|
(item as ToolStripMenuItem).DropDownItems.Count > 0)
|
{
|
//创建2级菜单
|
var barListItem1 = new BarLinkContainerItem();
|
barListItem1.Name = item.Name;
|
barListItem1.Caption = item.Text;
|
itemOwner.ItemLinks.Add(barListItem1);
|
|
LoadRibbonSubItems(ribbon, barListItem1,
|
item as ToolStripMenuItem);
|
}
|
else
|
{
|
var btn = CreateRibbonButtonItem(item);
|
itemOwner.ItemLinks.Add(btn);
|
}
|
}
|
}
|
|
/// <summary>
|
/// 激活当前模块
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
private void Ribbon_SelectedPageChanging(object sender,
|
RibbonPageChangingEventArgs e)
|
{
|
try
|
{
|
var menu = (ToolStripItem)e.Page.Tag; //模块的主菜单
|
if (menu != null)
|
_ModuleManager.ActiveModule(menu.Text,
|
menu.Name); //激活显示模块
|
}
|
catch (Exception ex)
|
{
|
Msg.ShowException(ex);
|
}
|
}
|
}
|
}
|