#region
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Drawing;
|
using System.Windows.Forms;
|
using CSFrameworkV5.Common;
|
using CSFrameworkV5.Core;
|
using DevExpress.XtraBars;
|
using DevExpress.XtraBars.Ribbon;
|
|
///*************************************************************************/
|
///*
|
///* 文件名 :ToolbarRegister.cs
|
///* 程序说明 : MDI主窗体上的工具条按钮注册器
|
///* 原创作者 :www.csframework.com
|
///*
|
///* Copyright 2006-2021 C/S框架网 www.csframework.com
|
///*
|
///**************************************************************************/
|
|
#endregion
|
|
namespace CSFrameworkV5.Library.CommonClass
|
{
|
/// <summary>
|
/// DevExpress按钮注册器
|
/// </summary>
|
public class DevBarRegister : IToolbarRegister
|
{
|
private Bar _bar;
|
private Form _Owner;
|
|
public DevBarRegister(Form owner, Bar bar)
|
{
|
_Owner = owner;
|
_bar = bar;
|
}
|
|
public IButtonInfo CreateButton(string name, string caption,
|
ToolBarGroup group, Bitmap image, Size size,
|
bool beginGroup, bool isLargeButton, OnButtonClick clickEvent)
|
{
|
return new DevBarButtonInfo(_bar.Manager, name, caption, group,
|
image, beginGroup, isLargeButton,
|
clickEvent);
|
}
|
|
public IButtonInfo CreateListButton(string name, string caption,
|
ToolBarGroup group, Bitmap image, Size size,
|
bool beginGroup, bool isLargeButton, OnButtonClick clickEvent,
|
List<IButtonInfo> subItems)
|
{
|
return new DevBarListButton(_bar.Manager, name, caption, group,
|
beginGroup, isLargeButton, image,
|
clickEvent, subItems);
|
}
|
|
public IButtonInfo CreateSeperator()
|
{
|
//return new DevBarButtonInfo(_bar.Manager, "btn" + Guid.NewGuid().ToStringEx().Replace("-", ""), "-", null, null);
|
return null;
|
}
|
|
public void Dispose()
|
{
|
//
|
}
|
|
public void RegisteButton(IList buttons)
|
{
|
_bar.BeginUpdate();
|
_bar.ItemLinks.Clear();
|
BarItemLink link;
|
foreach (IButtonInfo bi in buttons)
|
{
|
var btn = bi.Button as BarItem;
|
link = _bar.ItemLinks.Add(btn);
|
link.BeginGroup = bi.BeginGroup;
|
}
|
|
_bar.EndUpdate();
|
}
|
}
|
|
public class DevRibbonRegister : IToolbarRegister
|
{
|
public const string GROUP_TAG = "功能组动态创建";
|
public const string GROUP_DEF = "预设功能组";
|
|
private Form _Owner;
|
private RibbonControl _RibbonControl;
|
private RibbonPageGroup _RibbonDefaultPageGroup;
|
private RibbonPage _RibbonPage;
|
|
public DevRibbonRegister(Form owner, RibbonControl ribbonControl,
|
RibbonPage ribbonPage,
|
RibbonPageGroup defaultGroup)
|
{
|
_Owner = owner;
|
_RibbonControl = ribbonControl;
|
_RibbonPage = ribbonPage;
|
_RibbonDefaultPageGroup = defaultGroup;
|
}
|
|
public IButtonInfo CreateButton(string name, string caption,
|
ToolBarGroup group, Bitmap image, Size size,
|
bool beginGroup, bool isLargeButton, OnButtonClick clickEvent)
|
{
|
return new DevBarButtonInfo(_RibbonControl.Manager, name, caption,
|
group, image, beginGroup, isLargeButton,
|
clickEvent);
|
}
|
|
public IButtonInfo CreateListButton(string name, string caption,
|
ToolBarGroup group, Bitmap image, Size size,
|
bool beginGroup, bool isLargeButton, OnButtonClick clickEvent,
|
List<IButtonInfo> subItems)
|
{
|
return new DevBarListButton(_RibbonControl.Manager, name, caption,
|
group, beginGroup, isLargeButton, image,
|
clickEvent, subItems);
|
}
|
|
public IButtonInfo CreateSeperator()
|
{
|
return null;
|
}
|
|
public void Dispose()
|
{
|
//
|
}
|
|
public void RegisteButton(IList buttons)
|
{
|
RibbonPageGroup tmpGroup;
|
BarItem btn;
|
|
//清空动态创建的功能组按钮
|
ClearRegistedButtons();
|
|
foreach (IButtonInfo bi in buttons)
|
{
|
btn = bi.Button as BarItem;
|
btn.RibbonStyle = bi.IsLargeButton
|
? RibbonItemStyles.Large
|
: RibbonItemStyles.Default;
|
|
//未指定分组名称,加到预设的分组
|
if (string.IsNullOrEmpty(bi.GroupName))
|
{
|
if (_RibbonDefaultPageGroup == null)
|
CreateDefaultPageGroup();
|
|
_RibbonDefaultPageGroup.ItemLinks.Add(btn);
|
}
|
else
|
{
|
//根据按钮GroupName属性,将按钮添加到相应的PageGroup
|
tmpGroup = _RibbonControl.GetGroupByName(bi.GroupName);
|
if (tmpGroup != null)
|
{
|
tmpGroup.ItemLinks.Add(btn);
|
}
|
else
|
{
|
var group = new RibbonPageGroup(bi.GroupName);
|
group.ShowCaptionButton = false;
|
group.AllowMinimize = false;
|
group.Tag = GROUP_TAG;
|
group.Name = bi.GroupName;
|
group.ItemLinks.Add(btn);
|
var G = (ToolBarGroup)Enum.Parse(typeof(ToolBarGroup),
|
bi.GroupName);
|
var index = GetGroupIndex(_RibbonPage, G);
|
_RibbonPage.Groups.Insert(index, group);
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 清空动态创建的功能组按钮
|
/// </summary>
|
private void ClearRegistedButtons()
|
{
|
if (_RibbonDefaultPageGroup != null)
|
_RibbonDefaultPageGroup.ItemLinks.Clear();
|
|
var list = new List<RibbonPageGroup>();
|
foreach (RibbonPageGroup p in _RibbonPage.Groups)
|
if (ConvertEx.ToString(p.Tag) == GROUP_TAG)
|
list.Add(p);
|
|
for (var i = 0; i <= list.Count - 1; i++)
|
_RibbonPage.Groups.Remove(list[i]);
|
}
|
|
private void CreateDefaultPageGroup()
|
{
|
_RibbonDefaultPageGroup = new RibbonPageGroup(GROUP_DEF);
|
_RibbonDefaultPageGroup.ShowCaptionButton = false;
|
_RibbonDefaultPageGroup.AllowMinimize = false;
|
_RibbonDefaultPageGroup.Tag = GROUP_TAG;
|
_RibbonDefaultPageGroup.Name = GROUP_DEF;
|
_RibbonDefaultPageGroup.Text = GROUP_DEF;
|
_RibbonPage.Groups.Add(_RibbonDefaultPageGroup);
|
}
|
|
private int GetGroupEnumID(string groupName)
|
{
|
ToolBarGroup G;
|
if (Enum.TryParse(groupName, out G)) return (int)G;
|
|
return 0;
|
}
|
|
private int GetGroupIndex(RibbonPage ribbonPage, ToolBarGroup group)
|
{
|
var groupIndex = (int)group; //当前组的固定序号
|
|
var maxID = -1;
|
int tmp;
|
foreach (RibbonPageGroup G in ribbonPage.Groups)
|
{
|
tmp = GetGroupEnumID(G.Name);
|
if (tmp < groupIndex)
|
if (tmp > maxID)
|
maxID = tmp;
|
}
|
|
return maxID + 1;
|
}
|
}
|
}
|