using System; using System.Drawing; using Autodesk.Revit.UI; using Szmedi.Toolkit.Extensions; namespace Szmedi.Toolkit.RvExtensions { public static class RibbonExtensions { /// /// 帮助文档链接 /// /// 帮助文档链接或路径 /// public static void CreateContextualHelpUrl(this RibbonItem ribbonItem, string url) { //".\\*.*"中的“.”表示通用类库文件所在的目录(Debug),“..”表示的是上级的目录(bin),“..”\\..,引号表示再上一级目录 var contextualHelp = new ContextualHelp(ContextualHelpType.Url, url); ribbonItem.SetContextualHelp(contextualHelp); } /// /// 把指定名称的Tab放到第一个 /// /// internal static void InsertToFirst(string tabName) { var ribbon = Autodesk.Windows.ComponentManager.Ribbon; Autodesk.Windows.RibbonTab rt = null; foreach (var tab in ribbon.Tabs) { if (tab.Name == tabName) { rt = tab; ribbon.Tabs.Remove(tab); break; } } ribbon.Tabs.Insert(0, rt); } /// /// 添加一个新的RibbonButton /// /// /// public static void AddPushButton(this RibbonPanel panel, string nameText, string tooltip = null, Bitmap bitmap = null, Bitmap bitmap1 = null) where T : IExternalCommand { PushButtonData idCodeData = new($"{typeof(T).Name}_{nameText}", nameText, typeof(RibbonExtensions).Assembly.Location, typeof(T).FullName) { Image = bitmap.ToBitmapSource() ?? null, LargeImage = bitmap1.ToBitmapSource() ?? null, ToolTip = tooltip ?? nameText, }; panel.AddItem(idCodeData); } /// /// 单选框 /// /// /// /// /// public static RadioButtonGroup AddRadioButtonGroup(this RibbonPanel panel, string groupName, params ToggleButtonData[] toggleButtonData) { RadioButtonGroupData groupData = new(groupName); var radioButtonGroup = (RadioButtonGroup)panel.AddItem(groupData); radioButtonGroup.AddItems(toggleButtonData); return radioButtonGroup; } public static ToggleButton AddToggleButton(this RadioButtonGroup group, string name, string assemblyName, string className) { var toggleData = new ToggleButtonData(name, name, assemblyName, className); return group.AddItem(toggleData); } /// /// 创建一个分割记忆按钮。 /// /// /// /// /// public static SplitButton AddSplitButton(this RibbonPanel pnl, SplitButtonData splitButton, params PushButtonData[] array) { if (pnl is null) { throw new ArgumentNullException(nameof(pnl)); } if (splitButton is null) { throw new ArgumentNullException(nameof(splitButton)); } if (array is null) { throw new ArgumentNullException(nameof(array)); } if (pnl.AddItem(splitButton) is not SplitButton result) { throw new InvalidCastException(); } result.ToolTip = splitButton.ToolTip; result.LongDescription = splitButton.LongDescription; result.LargeImage = splitButton.LargeImage; foreach (var buttonData in array) { result.AddPushButton(buttonData); } return result; } } }