From 2693c8351f28ff5521f7edbbc6ca77ba5f6ea51d Mon Sep 17 00:00:00 2001 From: LarsBrubaker Date: Sat, 30 Jan 2021 08:49:06 -0800 Subject: [PATCH] Don't close print menu on support change --- .../GCodeRenderer/GCodeRenderer.cs | 58 +++++++++---------- .../CustomWidgets/DockingTabControl.cs | 2 - .../SliceSettingsTests.cs | 27 +++++++++ .../MatterControl/MatterControlUtilities.cs | 10 +++- 4 files changed, 64 insertions(+), 33 deletions(-) diff --git a/MatterControl.OpenGL/GCodeRenderer/GCodeRenderer.cs b/MatterControl.OpenGL/GCodeRenderer/GCodeRenderer.cs index d8e9fc068..7bce49a22 100644 --- a/MatterControl.OpenGL/GCodeRenderer/GCodeRenderer.cs +++ b/MatterControl.OpenGL/GCodeRenderer/GCodeRenderer.cs @@ -65,9 +65,7 @@ namespace MatterHackers.GCodeVisualizer internal class FeatureSet { - internal List> startIndices = new List>(); - internal List> endIndices = new List>(); - internal List> features = new List>(); + internal List layers = new List(); } private FeatureSet all = new FeatureSet(); @@ -89,7 +87,7 @@ namespace MatterHackers.GCodeVisualizer for (int i = 0; i < gCodeFileToDraw.LayerCount; i++) { - all.features.Add(new List()); + all.layers.Add(new Layer()); } } } @@ -102,13 +100,13 @@ namespace MatterHackers.GCodeVisualizer public void CreateFeaturesForLayerIfRequired(int layerToCreate) { - if (all.features.Count == 0 - || all.features[layerToCreate].Count > 0) + if (all.layers.Count == 0 + || all.layers[layerToCreate].features.Count > 0) { return; } - List renderFeaturesForLayer = all.features[layerToCreate]; + List renderFeaturesForLayer = all.layers[layerToCreate].features; int startRenderIndex = gCodeFileToDraw.GetFirstLayerInstruction(layerToCreate); int endRenderIndex = gCodeFileToDraw.LineCount - 1; @@ -186,7 +184,7 @@ namespace MatterHackers.GCodeVisualizer public int GetNumFeatures(int layerToCountFeaturesOn) { CreateFeaturesForLayerIfRequired(layerToCountFeaturesOn); - return all.features[layerToCountFeaturesOn].Count; + return all.layers[layerToCountFeaturesOn].features.Count; } public RenderFeatureBase this[int layerIndex, int featureIndex] @@ -195,11 +193,11 @@ namespace MatterHackers.GCodeVisualizer { try { - var layer = all.features[layerIndex]; + var features = all.layers[layerIndex].features; - if (featureIndex < layer.Count) + if (featureIndex < features.Count) { - return layer[featureIndex]; + return features[featureIndex]; } } catch @@ -215,11 +213,11 @@ namespace MatterHackers.GCodeVisualizer public void Render(Graphics2D graphics2D, GCodeRenderInfo renderInfo) { - if (all.features.Count > 0) + if (all.layers.Count > 0) { CreateFeaturesForLayerIfRequired(renderInfo.EndLayerIndex); - int featuresOnLayer = all.features[renderInfo.EndLayerIndex].Count; + int featuresOnLayer = all.layers[renderInfo.EndLayerIndex].features.Count; int endFeature = (int)(featuresOnLayer * renderInfo.FeatureToEndOnRatio0To1 + .5); endFeature = Math.Max(0, Math.Min(endFeature, featuresOnLayer)); @@ -247,7 +245,7 @@ namespace MatterHackers.GCodeVisualizer int lastFeature = endFeature - 1; for (int i = startFeature; i < endFeature; i++) { - RenderFeatureBase feature = all.features[renderInfo.EndLayerIndex][i]; + RenderFeatureBase feature = all.layers[renderInfo.EndLayerIndex].features[i]; if (feature != null) { feature.Render(graphics2DGl, renderInfo, highlightFeature: this.GCodeInspector && i == lastFeature); @@ -260,7 +258,7 @@ namespace MatterHackers.GCodeVisualizer { for (int i = startFeature; i < endFeature; i++) { - RenderFeatureBase feature = all.features[renderInfo.EndLayerIndex][i]; + RenderFeatureBase feature = all.layers[renderInfo.EndLayerIndex].features[i]; if (feature != null) { feature.Render(graphics2D, renderInfo); @@ -275,14 +273,15 @@ namespace MatterHackers.GCodeVisualizer var colorVertexData = new VectorPOD(); var vertexIndexArray = new VectorPOD(); - all.startIndices[layerIndex].Clear(); - all.endIndices[layerIndex].Clear(); + var layer = all.layers[layerIndex]; + layer.startIndices.Clear(); + layer.endIndices.Clear(); - for (int i = 0; i < all.features[layerIndex].Count; i++) + for (int i = 0; i < layer.features.Count; i++) { - all.startIndices[layerIndex].Add(vertexIndexArray.Count); + layer.startIndices.Add(vertexIndexArray.Count); - RenderFeatureBase feature = all.features[layerIndex][i]; + RenderFeatureBase feature = layer.features[i]; if (feature != null) { @@ -290,7 +289,7 @@ namespace MatterHackers.GCodeVisualizer feature.CreateRender3DData(colorVertexData, vertexIndexArray, renderInfo); } - all.endIndices[layerIndex].Add(vertexIndexArray.Count); + layer.endIndices.Add(vertexIndexArray.Count); } // Construct and return the new VertexBuffer object with all color/index data @@ -330,8 +329,7 @@ namespace MatterHackers.GCodeVisualizer for (int layerIndex = 0; layerIndex < gCodeFileToDraw.LayerCount; layerIndex++) { layerVertexBuffer.Add(null); - all.startIndices.Add(new List()); - all.endIndices.Add(new List()); + all.layers.Add(new Layer()); } } @@ -346,7 +344,7 @@ namespace MatterHackers.GCodeVisualizer lastRenderType = renderInfo.CurrentRenderType; } - if (all.features.Count > 0) + if (all.layers.Count > 0) { for (int i = renderInfo.EndLayerIndex - 1; i >= renderInfo.StartLayerIndex; i--) { @@ -367,11 +365,12 @@ namespace MatterHackers.GCodeVisualizer { for (int i = renderInfo.StartLayerIndex; i < renderInfo.EndLayerIndex - 1; i++) { - int featuresOnLayer = all.features[i].Count; + var layer = all.layers[i]; + int featuresOnLayer = layer.features.Count; if (featuresOnLayer > 1 && layerVertexBuffer[i] != null) { - layerVertexBuffer[i].RenderRange(0, all.endIndices[i][featuresOnLayer - 1]); + layerVertexBuffer[i].RenderRange(0, layer.endIndices[featuresOnLayer - 1]); } } } @@ -379,7 +378,8 @@ namespace MatterHackers.GCodeVisualizer // draw the partial layer of end-1 from startRatio to endRatio { int layerIndex = renderInfo.EndLayerIndex - 1; - int featuresOnLayer = all.features[layerIndex].Count; + var layer = all.layers[layerIndex]; + int featuresOnLayer = layer.features.Count; int startFeature = (int)(featuresOnLayer * renderInfo.FeatureToStartOnRatio0To1 + .5); startFeature = Math.Max(0, Math.Min(startFeature, featuresOnLayer)); @@ -402,9 +402,9 @@ namespace MatterHackers.GCodeVisualizer if (endFeature > startFeature && layerVertexBuffer[layerIndex] != null) { - int ellementCount = all.endIndices[layerIndex][endFeature - 1] - all.startIndices[layerIndex][startFeature]; + int ellementCount = layer.endIndices[endFeature - 1] - layer.startIndices[startFeature]; - layerVertexBuffer[layerIndex].RenderRange(all.startIndices[layerIndex][startFeature], ellementCount); + layerVertexBuffer[layerIndex].RenderRange(layer.startIndices[startFeature], ellementCount); } } GL.PopAttrib(); diff --git a/MatterControlLib/CustomWidgets/DockingTabControl.cs b/MatterControlLib/CustomWidgets/DockingTabControl.cs index 7fe77479b..a3cc95d97 100644 --- a/MatterControlLib/CustomWidgets/DockingTabControl.cs +++ b/MatterControlLib/CustomWidgets/DockingTabControl.cs @@ -198,8 +198,6 @@ namespace MatterHackers.MatterControl.CustomWidgets public void Rebuild() { - this.Focus(); - foreach (var (key, text, widget) in allTabs) { widget.Parent?.RemoveChild(widget); diff --git a/Tests/MatterControl.AutomationTests/SliceSettingsTests.cs b/Tests/MatterControl.AutomationTests/SliceSettingsTests.cs index be6ba6b4b..5b869cf43 100644 --- a/Tests/MatterControl.AutomationTests/SliceSettingsTests.cs +++ b/Tests/MatterControl.AutomationTests/SliceSettingsTests.cs @@ -128,6 +128,33 @@ namespace MatterHackers.MatterControl.Tests.Automation }, maxTimeToRun: 120); } + [Test, Category("Emulator")] + public async Task MenuStaysOpenOnRebuildSettings() + { + await MatterControlUtilities.RunTest(async (testRunner) => + { + using (var emulator = testRunner.LaunchAndConnectToPrinterEmulator()) + { + var printer = testRunner.FirstPrinter(); + + // open the print menu and prove no oem message + testRunner.OpenPrintPopupMenu(); + var supportWidegtName = SettingsKey.create_per_layer_support.SettingWidgetName(); + Assert.IsTrue(testRunner.NameExists(supportWidegtName, 1), "support option is visible"); + // toggle supports + var supportButton = testRunner.GetWidgetByName(supportWidegtName, out _) as ICheckbox; + for (int i = 0; i < 3; i++) + { + testRunner.ClickByName(supportWidegtName); + testRunner.WaitFor(() => supportButton.Checked); + testRunner.ClickByName(supportWidegtName); + testRunner.WaitFor(() => !supportButton.Checked); + } + Assert.IsTrue(testRunner.NameExists(supportWidegtName, 1), "Print menu should still be open after toggle supports"); + } + }, maxTimeToRun: 120); + } + [Test, Category("Emulator")] public async Task CancelWorksAsExpected() { diff --git a/Tests/MatterControl.Tests/MatterControl/MatterControlUtilities.cs b/Tests/MatterControl.Tests/MatterControl/MatterControlUtilities.cs index 2767bfb05..0fb64c32d 100644 --- a/Tests/MatterControl.Tests/MatterControl/MatterControlUtilities.cs +++ b/Tests/MatterControl.Tests/MatterControl/MatterControlUtilities.cs @@ -1208,11 +1208,17 @@ namespace MatterHackers.MatterControl.Tests.Automation return settingData; } + public static string SettingWidgetName(this string slicerConfigName) + { + var settingData = PrinterSettings.SettingsData[slicerConfigName]; + // Click field + return $"{settingData.PresentationName} Field"; + } + public static void SelectSliceSettingsField(this AutomationRunner testRunner, SettingsLayout.SettingsSection settingsSection, string slicerConfigName) { - var settingData = NavigateToSliceSettingsField(testRunner, settingsSection, slicerConfigName); // Click field - var widgetName = $"{settingData.PresentationName} Field"; + var widgetName = SettingWidgetName(slicerConfigName); var foundWidget = testRunner.GetWidgetByName(widgetName, out _, .2, onlyVisible: false); if (foundWidget == null) {