diff --git a/CHANGELOG.md b/CHANGELOG.md index a4d2607..60e014f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [0.5.7] / 2023-11-17 +### Features +- LargeImage changes `TextBox` Image +- Create `RowLargeStackedItems` with large image and two itens +### Updated +- Update Example `Icons` to get random icon using `UIFrameworkRes` +### Tests +- Test `ComboBox` and `TextBox` Image/LargeImage +- Test `RowLargeStackedItems` with large image and two itens + ## [0.5.6] / 2023-11-08 ### Features - Update Remove and QuickAccess @@ -291,6 +301,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - First Release [vNext]: ../../compare/1.0.0...HEAD +[0.5.7]: ../../compare/0.5.6...0.5.7 [0.5.6]: ../../compare/0.5.5...0.5.6 [0.5.5]: ../../compare/0.5.4...0.5.5 [0.5.4]: ../../compare/0.5.3...0.5.4 diff --git a/README.md b/README.md index b16ad6a..c4f8ebf 100644 --- a/README.md +++ b/README.md @@ -379,8 +379,6 @@ awRibbonPanel.SetDialogLauncher(ribbonCommandItem); This Project is [licensed](LICENSE) under the [MIT Licence](https://en.wikipedia.org/wiki/MIT_License). -Credit to [icons8.com](https://icons8.com/) for the icons on the Example. - --- Do you like this package? Please [star this project on GitHub](../../stargazers)! \ No newline at end of file diff --git a/ricaun.Revit.UI.Example/Models/TestModel.cs b/ricaun.Revit.UI.Example/Models/TestModel.cs index b810185..6a2f507 100644 --- a/ricaun.Revit.UI.Example/Models/TestModel.cs +++ b/ricaun.Revit.UI.Example/Models/TestModel.cs @@ -7,7 +7,7 @@ public class TestModel : NotifyPropertyBase { public string Text { get; set; } = "Test"; public string Title { get; set; } = "Title"; - public object Icon { get; set; } = Proprieties.Icons8.Circled; + public object Icon { get; set; } = Proprieties.Pack.Revit; public ICommand CommandTest { get; set; } public ICommand CommandTest2 { get; set; } } diff --git a/ricaun.Revit.UI.Example/Proprieties/Icons.cs b/ricaun.Revit.UI.Example/Proprieties/Icons.cs new file mode 100644 index 0000000..3849ed4 --- /dev/null +++ b/ricaun.Revit.UI.Example/Proprieties/Icons.cs @@ -0,0 +1,52 @@ +using ricaun.Revit.UI; +using System; +using System.Collections; +using System.Linq; +using System.Reflection; +using System.Windows.Media.Imaging; + +namespace ricaun.Revit.UI.Example.Proprieties +{ + public static class Icons + { + /// + /// Get Icon + /// + public static BitmapSource Icon => GetIcon().GetBitmapSource(); + public static string[] IconResources { get; } = GetIcons(); + private static int IndexResource = 0; + private static string GetIcon() + { + var icon = IconResources[IndexResource]; + IndexResource = (IndexResource + 1) % IconResources.Length; + return icon; + } + private static string AssemblyName => "UIFrameworkRes"; + private static string[] GetIcons() + { + var assembly = AppDomain.CurrentDomain.GetAssemblies() + .FirstOrDefault(e => e.GetName().Name.Equals(AssemblyName, StringComparison.InvariantCultureIgnoreCase)); + + return GetResourceNames(assembly) + .Where(e => e.Contains("ribbon")) + .Where(e => e.EndsWith(".ico")) + .Select(e => $"/{AssemblyName};component/{e}") + .ToArray(); + } + /// + /// GetResourceNames + /// + /// + /// + private static string[] GetResourceNames(Assembly assembly) + { + string resName = assembly.GetName().Name + ".g.resources"; + using (var stream = assembly.GetManifestResourceStream(resName)) + using (var reader = new System.Resources.ResourceReader(stream)) + { + var resources = reader.Cast().Select(entry => (string)entry.Key).OrderBy(e => e).ToArray(); + return resources; + } + } + } +} diff --git a/ricaun.Revit.UI.Example/Proprieties/Icons8.cs b/ricaun.Revit.UI.Example/Proprieties/Icons8.cs deleted file mode 100644 index 18c91d0..0000000 --- a/ricaun.Revit.UI.Example/Proprieties/Icons8.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Runtime.CompilerServices; -using System.Windows.Media.Imaging; -using ricaun.Revit.UI; - -namespace ricaun.Revit.UI.Example.Proprieties -{ - /// - /// https://icons8.com/ - /// https://img.icons8.com/small/32/000000/circled.png - /// https://img.icons8.com/{0}/{1}/{2}/{3}.png - /// - public class Icons8 - { - #region Private - private static string Color => "000000"; - private static string Type => "color"; - private static string Size => "32"; - private static string BaseUri => @"https://img.icons8.com/{0}/{1}/{2}/{3}.png"; - #endregion - - #region Icons - public static BitmapSource Icon([CallerMemberName] string name = null) => string.Format(BaseUri, Type, Size, Color, name.ToLower()).GetBitmapSource(); - public static BitmapSource Ok => Icon(); - public static BitmapSource Document => Icon(); - public static BitmapSource File => Icon(); - public static BitmapSource Support => Icon(); - public static BitmapSource Settings => Icon(); - public static BitmapSource About => Icon(); - public static BitmapSource Restart => Icon(); - public static BitmapSource Filter => Icon(); - public static BitmapSource Search => Icon(); - public static BitmapSource Trash => Icon(); - public static BitmapSource Home => Icon(); - public static BitmapSource Menu => Icon(); - public static BitmapSource Info => Icon(); - public static BitmapSource Circled => Icon(); - public static BitmapSource Checked => Icon(); - public static BitmapSource Cancel => Icon(); - #endregion - } -} diff --git a/ricaun.Revit.UI.Example/Proprieties/Pack.cs b/ricaun.Revit.UI.Example/Proprieties/Pack.cs index 28f76b4..e76e6bb 100644 --- a/ricaun.Revit.UI.Example/Proprieties/Pack.cs +++ b/ricaun.Revit.UI.Example/Proprieties/Pack.cs @@ -10,6 +10,7 @@ public static class Pack private static string BaseUri => @"pack://application:,,,/{0};component/Ribbon/images/{1}.ico"; #endregion public static string Icon([CallerMemberName] string name = null) => string.Format(BaseUri, Assembly, name.ToLower()); + public static string Revit => Icon(); public static string Power => Icon("system_electrical_circuit_power_create"); public static string Communication => Icon("system_electrical_circuit_communication_create"); public static string Control => Icon("system_electrical_circuit_control_create"); @@ -19,6 +20,5 @@ public static class Pack public static string Security => Icon("system_electrical_circuit_security_create"); public static string Telephone => Icon("system_electrical_circuit_telephone_create"); public static string Switch => Icon("system_switch_create"); - } } diff --git a/ricaun.Revit.UI.Example/Revit/App.cs b/ricaun.Revit.UI.Example/Revit/App.cs index 0894aa5..614ba40 100644 --- a/ricaun.Revit.UI.Example/Revit/App.cs +++ b/ricaun.Revit.UI.Example/Revit/App.cs @@ -25,7 +25,7 @@ public Result OnStartup(UIControlledApplication application) ribbonPanel = application.CreatePanel(TabName, PanelName); ribbonPanel.CreatePushButton("Revit") - .SetLargeImage("/UIFrameworkRes;component/ribbon/images/revit.ico"); + .SetLargeImage(Pack.Revit); var button = ribbonPanel.CreatePushButton(); @@ -99,17 +99,17 @@ public Result OnStartup(UIControlledApplication application) .SetText("1") .SetToolTip("One") .SetLongDescription("The One") - .SetLargeImage(Icons8.Document.Scale(0.5)) - .SetToolTipImage(Icons8.Document), + .SetLargeImage(Icons.Icon.Scale(0.5)) + .SetToolTipImage(Icons.Icon), ribbonPanel.NewPushButtonData>() .SetText("2") - .SetLargeImage(Icons8.Document.Scale(0.5)), + .SetLargeImage(Icons.Icon.Scale(0.5)), ribbonPanel.NewPushButtonData>() .SetText("3") - .SetLargeImage(Icons8.Document.Scale(0.5)), + .SetLargeImage(Icons.Icon.Scale(0.5)), ribbonPanel.NewPushButtonData>() .SetText("4") - .SetLargeImage(Icons8.Document.Scale(0.5)) + .SetLargeImage(Icons.Icon.Scale(0.5)) ) .SetToolTip("T"); @@ -123,7 +123,7 @@ public Result OnStartup(UIControlledApplication application) .SetShowImageAsButton() .SetPromptText("Search") .SetValue("Search") - .SetImage(Icons8.Search); + .SetImage(Icons.Icon); textBox.EnterPressed += (s, e) => { @@ -132,9 +132,9 @@ public Result OnStartup(UIControlledApplication application) ribbonPanel.AddStackedItems( ribbonPanel.NewTextBoxData("T1") - .SetImage(Icons8.Search), + .SetImage(Icons.Icon), ribbonPanel.NewTextBoxData("T2") - .SetImage(Icons8.Search) + .SetImage(Icons.Icon) ); #endregion @@ -142,19 +142,19 @@ public Result OnStartup(UIControlledApplication application) #region CreateRadioButtonGroup var radio = ribbonPanel.CreateRadioButtonGroup("Radio", ribbonPanel.NewToggleButtonData("R1") - .SetLargeImage(Icons8.Circled), + .SetLargeImage(Icons.Icon), ribbonPanel.NewToggleButtonData("R2") - .SetLargeImage(Icons8.Checked), + .SetLargeImage(Icons.Icon), ribbonPanel.NewToggleButtonData("R3") - .SetLargeImage(Icons8.Cancel), + .SetLargeImage(Icons.Icon), ribbonPanel.NewToggleButtonData>() .SetText("R4") - .SetLargeImage(Icons8.Trash) + .SetLargeImage(Icons.Icon) ); radio.AddToggleButtons( ribbonPanel.NewToggleButtonData("R5") - .SetLargeImage(Icons8.About) + .SetLargeImage(Icons.Icon) ); #endregion @@ -162,11 +162,11 @@ public Result OnStartup(UIControlledApplication application) var comboBox = ribbonPanel.CreateComboBox("ComboBox", ribbonPanel.NewComboBoxMemberData("C1") - .SetImage(Icons8.Restart), + .SetImage(Icons.Icon), ribbonPanel.NewComboBoxMemberData("C2") - .SetImage(Icons8.Restart), + .SetImage(Icons.Icon), ribbonPanel.NewComboBoxMemberData("C3") - .SetImage(Icons8.Restart) + .SetImage(Icons.Icon) ); comboBox.CurrentChanged += (s, e) => @@ -258,10 +258,10 @@ private void AddNewPanelToMove(UIControlledApplication application) { ribbonPanelMove = application.CreateOrSelectPanel(TabName, PanelName + "0"); var button = ribbonPanelMove.CreatePushButton("Teste") - .SetLargeImage("/UIFrameworkRes;component/ribbon/images/revit.ico"); + .SetLargeImage(Icons.Icon); var splitButtonWithButton = ribbonPanelMove.CreateSplitButton( - ribbonPanelMove.NewPushButtonData("Split"), + ribbonPanelMove.NewPushButtonData("Split").SetLargeImage(Icons.Icon), ribbonPanelMove.NewPushButtonData("Split"), ribbonPanelMove.NewPushButtonData("Split"), ribbonPanelMove.NewPushButtonData(), @@ -272,10 +272,10 @@ private void AddNewPanelToMove(UIControlledApplication application) for (int i = 0; i < 5; i++) { - split.CreatePushButton() - .SetLargeImage("/UIFrameworkRes;component/ribbon/images/revit.ico"); + splitButton.CreatePushButton() + .SetLargeImage(Icons.Icon); split.CreatePushButton() - .SetLargeImage("/UIFrameworkRes;component/ribbon/images/revit.ico"); + .SetLargeImage(Icons.Icon); } //Console.WriteLine($">> {split}"); @@ -369,7 +369,7 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) { Text = "Ok", ToolTip = "This Button gonna be Removed", - LargeImage = Icons8.Ok, + LargeImage = Icons.Icon, Action = (ribbonItem) => { var ri = ribbonItem.GetRibbonItem() as Autodesk.Windows.RibbonButton; @@ -382,7 +382,7 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) new RibbonDescription() { Text = "int", - LargeImage = Icons8.Document + LargeImage = Icons.Icon } ); @@ -390,7 +390,7 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) new RibbonDescription() { Text = "double", - LargeImage = Icons8.File + LargeImage = Icons.Icon } ); @@ -398,7 +398,7 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) new RibbonDescription() { Text = "bool", - LargeImage = Icons8.Support + LargeImage = Icons.Icon } ); @@ -406,21 +406,21 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) new RibbonDescription() { Text = "text", - LargeImage = Icons8.Settings + LargeImage = Icons.Icon } ); setting.Add("PulldownButton", new RibbonDescription() { Text = "Menu", - LargeImage = Icons8.About + LargeImage = Icons.Icon }); setting.Add>(new RibbonDescription() { Text = "UIApplication", - LargeImage = Icons8.Restart, + LargeImage = Icons.Icon, Action = (ribbonItem) => { ribbonItem.SetItemSize(); @@ -431,7 +431,7 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) setting.Add>(new RibbonDescription() { Text = "UIDocument", - LargeImage = Icons8.Filter, + LargeImage = Icons.Icon, Action = (ribbonItem) => { ribbonItem.SetItemSize(); @@ -442,7 +442,7 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) setting.Add>(new RibbonDescription() { Text = "Application", - LargeImage = Icons8.Search, + LargeImage = Icons.Icon, Action = (ribbonItem) => { ribbonItem.SetItemSize(); @@ -453,7 +453,7 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) setting.Add>(new RibbonDescription() { Text = "Document", - LargeImage = Icons8.Trash, + LargeImage = Icons.Icon, Action = (ribbonItem) => { ribbonItem.SetItemSize(); @@ -464,7 +464,7 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) setting.Add>(new RibbonDescription() { Text = "RibbonItem", - LargeImage = Icons8.Home, + LargeImage = Icons.Icon, Action = (ribbonItem) => { ribbonItem.GetRibbonItem().AddQuickAccessToolBar(); @@ -475,7 +475,7 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) setting.Add>(new RibbonDescription() { Text = "RibbonButton", - LargeImage = Icons8.Menu, + LargeImage = Icons.Icon, Action = (ribbonItem) => { ribbonItem.GetRibbonItem().AddQuickAccessToolBar(); @@ -486,7 +486,7 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) setting.Add>(new RibbonDescription() { Text = "RibbonPanel", - LargeImage = Icons8.Info, + LargeImage = Icons.Icon, Action = (ribbonItem) => { ribbonItem.GetRibbonItem().AddQuickAccessToolBar(); @@ -497,7 +497,7 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) setting.Add>(new RibbonDescription() { Text = "Element", - LargeImage = Icons8.Circled, + LargeImage = Icons.Icon, Action = (ribbonItem) => { ribbonItem.SetShowText(); @@ -507,7 +507,7 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) setting.Add>(new RibbonDescription() { Text = "ElementType", - LargeImage = Icons8.Checked, + LargeImage = Icons.Icon, Action = (ribbonItem) => { ribbonItem.SetShowText(); @@ -517,7 +517,7 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) setting.Add>(new RibbonDescription() { Text = "ElementArray", - LargeImage = Icons8.Cancel, + LargeImage = Icons.Icon, Action = (ribbonItem) => { ribbonItem.SetShowText(); @@ -553,16 +553,16 @@ private void UpdateRibbonDescription(RibbonPanel ribbonPanel) combo.AddComboBoxMembers( ribbonPanel.NewComboBoxMemberData("1") .SetText("One") - .SetImage(Icons8.Document) + .SetImage(Icons.Icon) .SetToolTip("One") - .SetToolTipImage(Icons8.Document) + .SetToolTipImage(Icons.Icon) .SetLongDescription("One"), ribbonPanel.NewComboBoxMemberData("2") .SetGroupName("G1") - .SetImage(Icons8.Document), + .SetImage(Icons.Icon), ribbonPanel.NewComboBoxMemberData("3") .SetGroupName("G2") - .SetImage(Icons8.Document) + .SetImage(Icons.Icon) ); } } diff --git a/ricaun.Revit.UI.Example/Revit/AppStacked.cs b/ricaun.Revit.UI.Example/Revit/AppStacked.cs index e2e642c..fb00b36 100644 --- a/ricaun.Revit.UI.Example/Revit/AppStacked.cs +++ b/ricaun.Revit.UI.Example/Revit/AppStacked.cs @@ -1,6 +1,8 @@ using Autodesk.Revit.DB; using Autodesk.Revit.UI; using ricaun.Revit.UI; +using ricaun.Revit.UI.Example.Proprieties; +using ricaun.Revit.UI.Utils; using System.Linq; namespace ricaun.Revit.UI.Example.Revit @@ -28,7 +30,8 @@ RibbonItem[] CreateButtons(int number) .SetToolTip($"{i}") .SetShowText(false) .SetItemSize() - .SetLargeImage("/UIFrameworkRes;component/ribbon/images/revit.ico") + .SetToolTip(Icons.Icon.ToString()) + .SetLargeImage(Icons.Icon) ); return itens.ToArray(); } @@ -36,6 +39,9 @@ RibbonItem[] CreateButtons(int number) ribbonPanel.AddSeparator(); ribbonPanel.RowStackedItems(CreateButtons(9)); + ribbonPanel.AddSeparator(); + ribbonPanel.RowLargeStackedItems(CreateButtons(4)); + ribbonPanel.AddSlideOut(); ribbonPanel.RowStackedItems(CreateButtons(8)); ribbonPanel.AddSeparator(); @@ -55,7 +61,7 @@ RibbonItem[] CreateButtons(int number) ribbonPanel.AddSeparator(); ribbonPanel.RowStackedItems( - ribbonPanel.CreatePushButton(), + ribbonPanel.CreatePushButton("StackedItems"), ribbonPanel.CreateTextBox().AddEnterPressed(AppStacked_EnterPressed).SetShowImageAsButton().SetWidth(100), ribbonPanel.CreateTextBox().AddEnterPressed(AppStacked_EnterPressedNull).SetShowImageAsButton().SetWidth(100) ); diff --git a/ricaun.Revit.UI.Example/ricaun.Revit.UI.Example.csproj b/ricaun.Revit.UI.Example/ricaun.Revit.UI.Example.csproj index 61b9a8d..ed2cd43 100644 --- a/ricaun.Revit.UI.Example/ricaun.Revit.UI.Example.csproj +++ b/ricaun.Revit.UI.Example/ricaun.Revit.UI.Example.csproj @@ -76,7 +76,7 @@ ricaun.Revit.UI.Example - 0.5.6 + 0.5.7 {f736f68f-7101-4640-9093-8715f88ccb95} diff --git a/ricaun.Revit.UI.Tests/Base/BaseImage.cs b/ricaun.Revit.UI.Tests/Base/BaseImage.cs new file mode 100644 index 0000000..80ce54d --- /dev/null +++ b/ricaun.Revit.UI.Tests/Base/BaseImage.cs @@ -0,0 +1,7 @@ +namespace ricaun.Revit.UI.Tests +{ + public class BaseImage + { + public const string Revit = "/UIFrameworkRes;component/ribbon/images/revit.ico"; + } +} \ No newline at end of file diff --git a/ricaun.Revit.UI.Tests/Items/Extensions/RevitCreateItemsImageTests.cs b/ricaun.Revit.UI.Tests/Items/Extensions/RevitCreateItemsImageTests.cs index 8ea60c1..d686db5 100644 --- a/ricaun.Revit.UI.Tests/Items/Extensions/RevitCreateItemsImageTests.cs +++ b/ricaun.Revit.UI.Tests/Items/Extensions/RevitCreateItemsImageTests.cs @@ -3,87 +3,6 @@ namespace ricaun.Revit.UI.Tests.Items.Extensions { - public class RevitImageSourceTests : BaseCreatePanelTests - { - System.Windows.Media.ImageSource imageSource = null; - const string ComponentImage = "/UIFrameworkRes;component/ribbon/images/revit.ico"; - - #region RibbonItem - - [Test] - public void PushButton_SetImage_Should_BeRemoved() - { - var ribbonItem = ribbonPanel.CreatePushButton(); - ribbonItem.SetImage(ComponentImage); - Assert.IsNotNull(ribbonItem.Image); - ribbonItem.SetImage(imageSource); - Assert.IsNull(ribbonItem.Image); - } - - [Test] - public void ComboBox_SetImage_Should_BeRemoved() - { - var ribbonItem = ribbonPanel.CreateComboBox(); - ribbonItem.SetImage(ComponentImage); - Assert.IsNotNull(ribbonItem.Image); - ribbonItem.SetImage(imageSource); - Assert.IsNull(ribbonItem.Image); - } - - [Test] - public void TextBox_SetImage_Should_BeRemoved() - { - var ribbonItem = ribbonPanel.CreateTextBox(); - ribbonItem.SetImage(ComponentImage); - Assert.IsNotNull(ribbonItem.Image); - ribbonItem.SetImage(imageSource); - Assert.IsNull(ribbonItem.Image); - } - #endregion - - #region RibbonItemData - [Test] - public void PushButtonData_SetImage_Should_BeRemoved() - { - var ribbonItem = ribbonPanel.NewPushButtonData(); - ribbonItem.SetImage(ComponentImage); - Assert.IsNotNull(ribbonItem.Image); - ribbonItem.SetImage(imageSource); - Assert.IsNull(ribbonItem.Image); - } - - [Test] - public void ComboBoxData_SetImage_Should_BeRemoved() - { - var ribbonItem = ribbonPanel.NewComboBoxData(); - ribbonItem.SetImage(ComponentImage); - Assert.IsNotNull(ribbonItem.Image); - ribbonItem.SetImage(imageSource); - Assert.IsNull(ribbonItem.Image); - } - - [Test] - public void ComboBoxMemberData_SetImage_Should_BeRemoved() - { - var ribbonItem = ribbonPanel.NewComboBoxMemberData(); - ribbonItem.SetImage(ComponentImage); - Assert.IsNotNull(ribbonItem.Image); - ribbonItem.SetImage(imageSource); - Assert.IsNull(ribbonItem.Image); - } - - [Test] - public void TextBoxData_SetImage_Should_BeRemoved() - { - var ribbonItem = ribbonPanel.NewTextBoxData(); - ribbonItem.SetImage(ComponentImage); - Assert.IsNotNull(ribbonItem.Image); - ribbonItem.SetImage(imageSource); - Assert.IsNull(ribbonItem.Image); - } - #endregion - } - public class RevitCreateItemsImageTests : BaseCreatePanelTests { PushButton pushButton; diff --git a/ricaun.Revit.UI.Tests/Items/Extensions/RevitImageSourceTests.cs b/ricaun.Revit.UI.Tests/Items/Extensions/RevitImageSourceTests.cs new file mode 100644 index 0000000..9523b18 --- /dev/null +++ b/ricaun.Revit.UI.Tests/Items/Extensions/RevitImageSourceTests.cs @@ -0,0 +1,84 @@ +using NUnit.Framework; + +namespace ricaun.Revit.UI.Tests.Items.Extensions +{ + public class RevitImageSourceTests : BaseCreatePanelTests + { + System.Windows.Media.ImageSource imageSource = null; + const string ComponentImage = "/UIFrameworkRes;component/ribbon/images/revit.ico"; + + #region RibbonItem + [Test] + public void PushButton_SetImage_Should_BeRemoved() + { + var ribbonItem = ribbonPanel.CreatePushButton(); + ribbonItem.SetImage(ComponentImage); + Assert.IsNotNull(ribbonItem.Image); + ribbonItem.SetImage(imageSource); + Assert.IsNull(ribbonItem.Image); + } + + [Test] + public void ComboBox_SetImage_Should_BeRemoved() + { + var ribbonItem = ribbonPanel.CreateComboBox(); + ribbonItem.SetImage(ComponentImage); + Assert.IsNotNull(ribbonItem.Image); + ribbonItem.SetImage(imageSource); + Assert.IsNull(ribbonItem.Image); + } + + [Test] + public void TextBox_SetImage_Should_BeRemoved() + { + var ribbonItem = ribbonPanel.CreateTextBox(); + ribbonItem.SetImage(ComponentImage); + Assert.IsNotNull(ribbonItem.Image); + ribbonItem.SetImage(imageSource); + Assert.IsNull(ribbonItem.Image); + } + #endregion + + #region RibbonItemData + [Test] + public void PushButtonData_SetImage_Should_BeRemoved() + { + var ribbonItem = ribbonPanel.NewPushButtonData(); + ribbonItem.SetImage(ComponentImage); + Assert.IsNotNull(ribbonItem.Image); + ribbonItem.SetImage(imageSource); + Assert.IsNull(ribbonItem.Image); + } + + [Test] + public void ComboBoxData_SetImage_Should_BeRemoved() + { + var ribbonItem = ribbonPanel.NewComboBoxData(); + ribbonItem.SetImage(ComponentImage); + Assert.IsNotNull(ribbonItem.Image); + ribbonItem.SetImage(imageSource); + Assert.IsNull(ribbonItem.Image); + } + + [Test] + public void ComboBoxMemberData_SetImage_Should_BeRemoved() + { + var ribbonItem = ribbonPanel.NewComboBoxMemberData(); + ribbonItem.SetImage(ComponentImage); + Assert.IsNotNull(ribbonItem.Image); + ribbonItem.SetImage(imageSource); + Assert.IsNull(ribbonItem.Image); + } + + [Test] + public void TextBoxData_SetImage_Should_BeRemoved() + { + var ribbonItem = ribbonPanel.NewTextBoxData(); + ribbonItem.SetImage(ComponentImage); + Assert.IsNotNull(ribbonItem.Image); + ribbonItem.SetImage(imageSource); + Assert.IsNull(ribbonItem.Image); + } + #endregion + } +} \ No newline at end of file diff --git a/ricaun.Revit.UI.Tests/Items/Items/RevitComboBoxTests.cs b/ricaun.Revit.UI.Tests/Items/Items/RevitComboBoxTests.cs index 05865f2..00aacd8 100644 --- a/ricaun.Revit.UI.Tests/Items/Items/RevitComboBoxTests.cs +++ b/ricaun.Revit.UI.Tests/Items/Items/RevitComboBoxTests.cs @@ -15,6 +15,22 @@ public void CreateComboBox() comboBox = ribbonPanel.CreateComboBox(); } + [Test] + public void SetImage_ShouldBe_Image() + { + Assert.IsNull(comboBox.Image); + comboBox.SetImage(BaseImage.Revit); + Assert.IsNotNull(comboBox.Image); + } + + [Test] + public void SetLargeImage_ShouldBe_Image() + { + Assert.IsNull(comboBox.Image); + comboBox.SetLargeImage(BaseImage.Revit); + Assert.IsNotNull(comboBox.Image); + } + [TestCase(1)] [TestCase(2)] [TestCase(3)] diff --git a/ricaun.Revit.UI.Tests/Items/Items/RevitTextBoxTests.cs b/ricaun.Revit.UI.Tests/Items/Items/RevitTextBoxTests.cs index 7c35f15..55c5e6f 100644 --- a/ricaun.Revit.UI.Tests/Items/Items/RevitTextBoxTests.cs +++ b/ricaun.Revit.UI.Tests/Items/Items/RevitTextBoxTests.cs @@ -14,6 +14,22 @@ public void CreateTextBox() textBox = ribbonPanel.CreateTextBox(); } + [Test] + public void SetImage_ShouldBe_Image() + { + Assert.IsNull(textBox.Image); + textBox.SetImage(BaseImage.Revit); + Assert.IsNotNull(textBox.Image); + } + + [Test] + public void SetLargeImage_ShouldBe_Image() + { + Assert.IsNull(textBox.Image); + textBox.SetLargeImage(BaseImage.Revit); + Assert.IsNotNull(textBox.Image); + } + [TestCase(true)] [TestCase(false)] public void SetShowImageAsButton_Should_Be(bool show) diff --git a/ricaun.Revit.UI.Tests/Items/RevitStackedItemsTests.cs b/ricaun.Revit.UI.Tests/Items/RevitStackedItemsTests.cs index 5646f0e..e4c6df3 100644 --- a/ricaun.Revit.UI.Tests/Items/RevitStackedItemsTests.cs +++ b/ricaun.Revit.UI.Tests/Items/RevitStackedItemsTests.cs @@ -25,6 +25,33 @@ public void CreateRow(int numberOfCommands) Assert.AreEqual(expectadRowPanels, ribbonRowPanel.Length); } + [TestCase(2)] + [TestCase(3)] + [TestCase(4)] + [TestCase(6)] + [TestCase(9)] + [TestCase(20)] + public void CreateRowLarge(int numberOfCommands) + { + var pushButtons = Enumerable.Range(0, numberOfCommands) + .Select(e => ribbonPanel.CreatePushButton()) + .ToArray(); + + var ribbonRowPanel = ribbonPanel.RowLargeStackedItems(pushButtons); + + var expectadRowPanels = Math.Ceiling(numberOfCommands / 2.0); + + Assert.AreEqual(expectadRowPanels, ribbonRowPanel.Length); + + foreach (var rowPanel in ribbonRowPanel) + { + foreach (var item in rowPanel.Items) + { + Assert.AreEqual(item.Size, Autodesk.Windows.RibbonItemSize.Large); + } + } + } + [TestCase(2)] [TestCase(3)] [TestCase(4)] diff --git a/ricaun.Revit.UI/RibbonItemExtension.cs b/ricaun.Revit.UI/RibbonItemExtension.cs index 467a903..ce1503f 100644 --- a/ricaun.Revit.UI/RibbonItemExtension.cs +++ b/ricaun.Revit.UI/RibbonItemExtension.cs @@ -149,7 +149,7 @@ public static TRibbonItem SetToolTipImage(this TRibbonItem ribbonIt #region Set RibbonButton /// - /// Set RibbonButton/ComboBox Image + /// Set RibbonButton/ComboBox/TextBox Image /// /// /// @@ -166,12 +166,13 @@ public static TRibbonItem SetImage(this TRibbonItem ribbonItem, str } /// - /// Set RibbonButton/ComboBox LargeImage + /// Set RibbonButton/ComboBox/TextBox LargeImage /// /// /// /// /// + /// When or does not have LargeImage, the Image is changed instead. public static TRibbonItem SetLargeImage(this TRibbonItem ribbonItem, string largeImage) where TRibbonItem : RibbonItem { var bitmapSource = largeImage?.GetBitmapSource(); @@ -204,12 +205,13 @@ public static TRibbonItem SetImage(this TRibbonItem ribbonItem, Ima } /// - /// Set RibbonButton/ComboBox LargeImage + /// Set RibbonButton/ComboBox/TextBox LargeImage /// /// RibbonButton /// /// /// + /// When or does not have LargeImage, the Image is changed instead. public static TRibbonItem SetLargeImage(this TRibbonItem ribbonItem, ImageSource largeImage) where TRibbonItem : RibbonItem { if (ribbonItem is RibbonButton ribbonButton) @@ -222,6 +224,9 @@ public static TRibbonItem SetLargeImage(this TRibbonItem ribbonItem else if (ribbonItem is ComboBox comboBox) comboBox.SetImage(largeImage); + else if (ribbonItem is TextBox textBox) + textBox.SetImage(largeImage); + return ribbonItem; } #endregion diff --git a/ricaun.Revit.UI/RibbonStackExtension.cs b/ricaun.Revit.UI/RibbonStackExtension.cs index cc62340..b60c8d5 100644 --- a/ricaun.Revit.UI/RibbonStackExtension.cs +++ b/ricaun.Revit.UI/RibbonStackExtension.cs @@ -14,12 +14,24 @@ public static class RibbonStackExtension /// /// /// - /// The is divided into groups of a maximum of 3 in each RibbonRowPanel + /// The is divided into groups of a maximum of 3 in each RibbonRowPanel with Image size. public static Autodesk.Windows.RibbonRowPanel[] RowStackedItems(this RibbonPanel ribbonPanel, params RibbonItem[] ribbonItems) { return ribbonPanel.CreateRowStackedItemsWithMax(ribbonItems); } + /// + /// Create Row Panels and move the to the new panels + /// + /// + /// + /// + /// The is divided into groups of a maximum of 2 in each RibbonRowPanel with LargeImage size. + public static Autodesk.Windows.RibbonRowPanel[] RowLargeStackedItems(this RibbonPanel ribbonPanel, params RibbonItem[] ribbonItems) + { + return ribbonPanel.CreateRowStackedItemsWithMax(2, ribbonItems).SetRibbonItemSize(); + } + /// /// Create Flow Panels and move the to the new panels /// diff --git a/ricaun.Revit.UI/Utils/RibbonItemPanelExtension.cs b/ricaun.Revit.UI/Utils/RibbonItemPanelExtension.cs index 51cffcd..a3b4b59 100644 --- a/ricaun.Revit.UI/Utils/RibbonItemPanelExtension.cs +++ b/ricaun.Revit.UI/Utils/RibbonItemPanelExtension.cs @@ -69,6 +69,40 @@ public static Autodesk.Windows.RibbonRowPanel AddRibbonItem(this Autodesk.Window ribbonRowPanel.Items.Add(UpdateForRibbonRowPanel(ribbonItem)); return ribbonRowPanel; } + /// + /// Set each items to + /// + /// + /// + /// + public static Autodesk.Windows.RibbonRowPanel[] SetRibbonItemSize( + this Autodesk.Windows.RibbonRowPanel[] ribbonRowPanels, + Autodesk.Windows.RibbonItemSize ribbonItemSize = Autodesk.Windows.RibbonItemSize.Large) + { + foreach (var ribbonRowPanel in ribbonRowPanels) + { + ribbonRowPanel.SetRibbonItemSize(ribbonItemSize); + } + return ribbonRowPanels; + } + + /// + /// Set items to + /// + /// + /// + /// + public static Autodesk.Windows.RibbonRowPanel SetRibbonItemSize( + this Autodesk.Windows.RibbonRowPanel ribbonRowPanel, + Autodesk.Windows.RibbonItemSize ribbonItemSize = Autodesk.Windows.RibbonItemSize.Large) + { + foreach (var ribbonItem in ribbonRowPanel.Items) + { + ribbonItem.Size = ribbonItemSize; + } + return ribbonRowPanel; + } + internal static Autodesk.Windows.RibbonItem UpdateForRibbonRowPanel(this Autodesk.Windows.RibbonItem ribbonItem) { ribbonItem.Size = Autodesk.Windows.RibbonItemSize.Standard; diff --git a/ricaun.Revit.UI/ricaun.Revit.UI.csproj b/ricaun.Revit.UI/ricaun.Revit.UI.csproj index 0cd246a..65b4d52 100644 --- a/ricaun.Revit.UI/ricaun.Revit.UI.csproj +++ b/ricaun.Revit.UI/ricaun.Revit.UI.csproj @@ -76,7 +76,7 @@ ricaun.Revit.UI - 0.5.6 + 0.5.7 {2064ba4d-5527-41e9-8b76-0cbfefa35900}