#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
{
///
/// DevExpress按钮注册器
///
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 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 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);
}
}
}
}
///
/// 清空动态创建的功能组按钮
///
private void ClearRegistedButtons()
{
if (_RibbonDefaultPageGroup != null)
_RibbonDefaultPageGroup.ItemLinks.Clear();
var list = new List();
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;
}
}
}