123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /*-------------------------------------------------------------------------
- * 功能描述:GroupButtons
- * 作者:xulisong
- * 创建时间: 2019/3/8 9:23:22
- * 版本号:v1.0
- * -------------------------------------------------------------------------*/
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Autodesk.Revit.UI;
- namespace FWindSoft.Revit.Menu
- {
- public class GroupButtons : List<RevitButton>
- {
- public GroupButtons()
- { }
- public GroupButtons(IEnumerable<RevitButton> source) : base(source)
- { }
- private void Valid()
- {
- if (!IsValid)
- {
- throw new Exception("分组数量不能为零");
- }
- }
- public bool IsValid
- {
- get
- {
- return this.Any();
- }
- }
- public bool IsStack
- {
- get
- {
- return this.Any(r => r.IsStack);
- }
- }
- /// <summary>
- /// 分组的按钮样式
- /// </summary>
- public RevitButtonStyle GroupButtonStyle
- {
- get
- {
- Valid();
- return this.FirstOrDefault().ButtonStyle;
- }
- }
- /// <summary>
- /// 创建按钮数据
- /// </summary>
- /// <returns></returns>
- public List<PushButtonData> CreatePushButtons()
- {
- List<PushButtonData> result = new List<PushButtonData>();
- foreach (RevitButton button in this)
- {
- PushButtonData data = new PushButtonData(button.Name, button.Text, button.AssemblyName, button.ClassName);
- RibbonItemUtil.AppendButtonData(data, button);
- result.Add(data);
- }
- return result;
- }
- /// <summary>
- /// 获取创建按钮的数据
- /// </summary>
- /// <returns></returns>
- public ButtonData GetButtonData()
- {
- Valid();
- var firstButton = this.FirstOrDefault();
- switch (GroupButtonStyle)
- {
- case RevitButtonStyle.Pulldown:
- {
- string name = firstButton.Name;
- string text = firstButton.Text;
- var data= new PulldownButtonData(name, text);
- RibbonItemUtil.AppendButtonData(data, firstButton);
- return data;
- }
- case RevitButtonStyle.Split:
- {
- return new SplitButtonData(firstButton.Name, firstButton.Text);
- }
- case RevitButtonStyle.Push:
- {
- return CreatePushButtons().FirstOrDefault();
- }
- }
- return null;
- }
- /// <summary>
- /// 将子按钮附着单button上
- /// </summary>
- /// <param name="button"></param>
- public void AppendButton(RibbonItem button)
- {
- var buttonDatas = CreatePushButtons();
- RibbonItemUtil.AppendButtons(button, buttonDatas);
- }
- }
- }
|