#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
{
///
/// Ribbon样式的模块展示加载器
///
public class RibbonModuleLoader
{
private ImageCollection _ilModule32;
private ModuleManager _ModuleManager;
private RibbonControl _Ribbon;
///
/// 构造器
///
/// 模块加载器
/// 主界面的Ribbon组件实例
/// 主界面的模块图标
public RibbonModuleLoader(ModuleManager moduleManager,
RibbonControl ribbon, ImageCollection ilModule32)
{
_ModuleManager = moduleManager;
_Ribbon = ribbon;
_ilModule32 = ilModule32;
}
///
/// BarButtonItem的点击事件
///
///
///
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();
}
}
///
/// 创建BarButtonItem实例
///
///
///
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;
}
///
/// 创建Ribbon样式的模块展示区
///
/// 系统菜单
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);
}
}
}
}
///
/// 获取常用功能的按钮图片
///
/// 功能菜单名称
///
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;
}
///
/// 获取常用功能的按钮实例(null表示常用功能无效链接)
///
/// 功能菜单名称
///
private bool HasModuleButton(string menuName)
{
//获取按钮实例
var ctl = (MdiTools.MainForm as IMdiForm)
.GetModuleMainFormButtonByMenuName("",
menuName.Replace("_SHORTCUT_", ""));
return ctl != null;
}
///
/// 递归生成BarButtonItem
///
///
///
///
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);
}
}
}
///
/// 激活当前模块
///
///
///
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);
}
}
}
}