From 890cbc486b77d3085d87e21ae741c365b796733c Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Wed, 4 Nov 2026 13:35:31 -0500 Subject: [PATCH] feat(status-bar): show the material grade in the material label MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The status bar showed only the material name and thickness, so nests of the same material in different grades looked identical there. The grade now follows the name, e.g. "Material: Steel A36 · 0.25 in". Co-Authored-By: Claude Opus 5.5 --- .../Forms/MainStatusBarTests.cs | 27 +++++++++++++++---- OpenNest/Forms/MainStatusBar.cs | 14 ++++++---- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/OpenNest.WinForms.Tests/Forms/MainStatusBarTests.cs b/OpenNest.WinForms.Tests/Forms/MainStatusBarTests.cs index 528c3068..86e8c27c 100644 --- a/OpenNest.WinForms.Tests/Forms/MainStatusBarTests.cs +++ b/OpenNest.WinForms.Tests/Forms/MainStatusBarTests.cs @@ -12,11 +12,28 @@ public class MainStatusBarTests CultureInfo.CurrentCulture = CultureInfo.InvariantCulture; try { - Assert.Equal("Material: A36 · 0.25 in", MainStatusBar.FormatMaterial("A36", 0.25, Units.Inches)); - Assert.Equal("Material: 304 SS · 3 mm", MainStatusBar.FormatMaterial(" 304 SS ", 3, Units.Millimeters)); - Assert.Equal("Material: A36", MainStatusBar.FormatMaterial("A36", 0, Units.Inches)); - Assert.Equal("Material: 0.1875 in", MainStatusBar.FormatMaterial(null, 0.1875, Units.Inches)); - Assert.Equal("Material: (none)", MainStatusBar.FormatMaterial("", 0, Units.Inches)); + Assert.Equal("Material: A36 · 0.25 in", MainStatusBar.FormatMaterial("A36", null, 0.25, Units.Inches)); + Assert.Equal("Material: 304 SS · 3 mm", MainStatusBar.FormatMaterial(" 304 SS ", "", 3, Units.Millimeters)); + Assert.Equal("Material: A36", MainStatusBar.FormatMaterial("A36", null, 0, Units.Inches)); + Assert.Equal("Material: 0.1875 in", MainStatusBar.FormatMaterial(null, null, 0.1875, Units.Inches)); + Assert.Equal("Material: (none)", MainStatusBar.FormatMaterial("", " ", 0, Units.Inches)); + } + finally + { + CultureInfo.CurrentCulture = previous; + } + } + + [Fact] + public void FormatMaterial_ShowsGradeAfterName() + { + var previous = CultureInfo.CurrentCulture; + CultureInfo.CurrentCulture = CultureInfo.InvariantCulture; + try + { + Assert.Equal("Material: Steel A36 · 0.25 in", MainStatusBar.FormatMaterial("Steel", " A36 ", 0.25, Units.Inches)); + Assert.Equal("Material: Aluminum 5052", MainStatusBar.FormatMaterial("Aluminum", "5052", 0, Units.Inches)); + Assert.Equal("Material: 304 · 3 mm", MainStatusBar.FormatMaterial(null, "304", 3, Units.Millimeters)); } finally { diff --git a/OpenNest/Forms/MainStatusBar.cs b/OpenNest/Forms/MainStatusBar.cs index 93aed25c..04b17b5e 100644 --- a/OpenNest/Forms/MainStatusBar.cs +++ b/OpenNest/Forms/MainStatusBar.cs @@ -224,7 +224,7 @@ namespace OpenNest.Forms var nest = form.Nest; machine.Text = FormatMachine(nest.Machine); - material.Text = FormatMaterial(nest.Material?.Name, nest.Thickness, nest.Units); + material.Text = FormatMaterial(nest.Material?.Name, nest.Material?.Grade, nest.Thickness, nest.Units); plateUtil.Text = string.Format( "Util: {0:P1}", @@ -240,12 +240,16 @@ namespace OpenNest.Forms return "Machine: " + (string.IsNullOrWhiteSpace(machine.Name) ? "(unnamed)" : machine.Name.Trim()); } - /// Status text for the nest's material and thickness, e.g. "Material: A36 · 0.25 in". - internal static string FormatMaterial(string name, double thickness, Units units) + /// + /// Status text for the nest's material, grade and thickness, e.g. "Material: Steel A36 · 0.25 in". + /// + internal static string FormatMaterial(string name, string grade, double thickness, Units units) { var parts = new List(); - if (!string.IsNullOrWhiteSpace(name)) - parts.Add(name.Trim()); + var description = string.Join(" ", new[] { name?.Trim(), grade?.Trim() } + .Where(s => !string.IsNullOrEmpty(s))); + if (description.Length > 0) + parts.Add(description); if (thickness > 0) parts.Add(thickness.ToString("0.####", CultureInfo.CurrentCulture) + " " + UnitsHelper.GetShortString(units));