Files
ShrlAlgoToolkit/ShrlAlgoToolkit.RevitAddins/UIRibbon/TabManagerApp.cs
2026-02-20 16:47:26 +08:00

153 lines
5.0 KiB
C#

using Autodesk.Windows;
using ShrlAlgoToolkit.RevitAddins.Extensions;
using ShrlAlgoToolkit.RevitAddins.Properties;
namespace ShrlAlgoToolkit.RevitAddins.UIRibbon;
public class TabManagerApp
{
public TabManagerApp(UIControlledApplication application)
{
var tab = RibbonControl.Tabs.First(t => t.Name == RevitAddins.Properties.Settings.Default.TabName);
SetTabControl(tab);
application.ViewActivating += Application_ViewActivating;
application.ControlledApplication.ApplicationInitialized += ControlledApplication_ApplicationInitialized;
}
private Autodesk.Windows.RibbonPanel addInManagerPanel;
private static RibbonControl RibbonControl => ComponentManager.Ribbon;
private void InsertQuickAccessAndHidePanel()
{
var tab = RibbonControl.FindTab(RevitAddins.Properties.Settings.Default.TabName);
if (tab != null && addInManagerPanel != null)
{
var checklistButton = addInManagerPanel.Source.Items.FirstOrDefault();
ComponentManager.QuickAccessToolBar.AddStandardItem(checklistButton);
//移除面板
tab.Panels.Remove(addInManagerPanel);
}
}
private void SetTabControl(RibbonTab customRibbonTab)
{
addInManagerPanel = new Autodesk.Windows.RibbonPanel { FloatingOrientation = System.Windows.Controls.Orientation.Horizontal };
//面板资源
RibbonPanelSource panelSource = new() { Id = "ID_AddIns_Panel", Title = "插件管理" };
//面板源设置
addInManagerPanel.Source = panelSource;
RibbonChecklistButton checklist =
new()
{
Id = "Id_AddIns_CL",
Text = "插件管理",
Name = "插件管理",
Description = "控制插件在Revit界面上的显示",
Image = Resources.addin_16px.ToBitmapSource(),
LargeImage = Resources.addin_32px.ToBitmapSource(),
ShowText = true,
ShowImage = true,
ToolTip = "控制插件在Revit界面上的显示",
IsToolTipEnabled = true,
IsVisible = true,
IsEnabled = true,
Size = RibbonItemSize.Standard,
AllowInToolBar = true,
AllowInStatusBar = true,
IsCheckable = true
};
var ribbon = ComponentManager.Ribbon;
foreach (var tab in ribbon.Tabs)
{
if (tab.GetType() == typeof(RibbonTab) && tab.Title != RevitAddins.Properties.Settings.Default.TabName)
{
RibbonToggleButton ribbonToggleButton =
new()
{
//Image = ConvertFromBitmap(Properties.Resources.Select_View_16px),
//LargeImage = ConvertFromBitmap(Properties.Resources.Select_View_32px),
//ShowImage = true,
Size = RibbonItemSize.Standard,
ShowText = true,
Id = $"Id_{tab.Title}_Tg",
Name = tab.Title,
Text = tab.Title,
IsEnabled = true,
IsVisible = true,
IsCheckable = true,
IsThreeState = false,
IsChecked = true
//CheckStateBinding = new System.Windows.Data.Binding()
//{
// Source = tab,
// Path = new PropertyPath(tab.IsVisible),
//},
//CommandHandler = new RelayCommand<object>((obj) =>
//{
// if (obj is Autodesk.Windows.RibbonButton rb)
// {
// string tabName = rb.CommandParameter.ToString();
// var ribbonTab = ribbon.FindAwTab(tabName);
// ribbonTab.IsVisible = true;
// }
//}),
//CommandParameter = tab.Name
//Orientation = System.Windows.Controls.Orientation.Horizontal
};
ribbonToggleButton.CheckStateChanged += RibbonToggleButton_CheckStateChanged;
checklist.Items.Add(ribbonToggleButton);
}
}
////布局
//RibbonRowPanel ribbonRowPanel = new RibbonRowPanel();
////按钮添加到流布局
//ribbonRowPanel.Items.Add(checklist);
//添加到绑定源
panelSource.Items.Add(checklist);
customRibbonTab.Panels.Add(addInManagerPanel);
//source.AddStandardItem(checklist);
}
//如果是族文档,在激活视图时,隐藏面板
private static void SetTabEnabled(string tabName, bool isVisible)
{
//Autodesk.Windows.RibbonTab revitRibbonTab = UIFramework.RevitRibbonControl.RibbonControl.FindAwTab(Properties.Settings.Default.TabName);
//revitRibbonTab.IsVisible = false;
var ribbon = ComponentManager.Ribbon;
var ribbonTab = ribbon.FindTab(tabName);
ribbonTab.IsVisible = isVisible;
//foreach (Autodesk.Windows.RibbonTab tab in ribbon.Tabs)
//{
// if (tab.Title == Properties.Settings.Default.TabName)
// {
// tab.IsVisible = isVisible;
// }
//}
}
//如果是族文档,在激活视图时,隐藏面板
private void Application_ViewActivating(object sender, Autodesk.Revit.UI.Events.ViewActivatingEventArgs e)
{
SetTabEnabled(RevitAddins.Properties.Settings.Default.TabName, !e.NewActiveView.Document.IsFamilyDocument);
}
private void ControlledApplication_ApplicationInitialized(object sender, Autodesk.Revit.DB.Events.ApplicationInitializedEventArgs e)
{
InsertQuickAccessAndHidePanel();
}
private void RibbonToggleButton_CheckStateChanged(object sender, EventArgs e)
{
if (sender is RibbonToggleButton toggleButton)
{
var tabName = toggleButton.Name;
var tab = TabManagerApp.RibbonControl.FindTab(tabName);
tab.IsVisible = toggleButton.IsChecked;
}
}
}