From 23520a98a3357c5f5d474cb24c839b3b3b6d8ec9 Mon Sep 17 00:00:00 2001 From: Ivo Petrov Date: Mon, 9 Dec 2024 10:20:12 +0000 Subject: [PATCH 1/3] Update ColorRange.cs --- src/Libraries/CoreNodeModels/ColorRange.cs | 71 +++++++++++++++++++++- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/src/Libraries/CoreNodeModels/ColorRange.cs b/src/Libraries/CoreNodeModels/ColorRange.cs index 1da8aec539a..1b1b4848406 100644 --- a/src/Libraries/CoreNodeModels/ColorRange.cs +++ b/src/Libraries/CoreNodeModels/ColorRange.cs @@ -32,6 +32,15 @@ namespace CoreNodeModels [AlsoKnownAs("DSCoreNodesUI.ColorRange")] public class ColorRange : NodeModel { + private List _defaultColors; + private List DefaultColors => _defaultColors ??= DefaultColorRanges.Analysis.ToList(); + + private AssociativeNode _defaultColorsNode; + private AssociativeNode DefaultColorsNode => _defaultColorsNode ??= CreateDefaultColorsNode(DefaultColors); + + private AssociativeNode _defaultIndicesNode; + private AssociativeNode DefaultIndicesNode => _defaultIndicesNode ??= CreateDefaultIndicesNode(DefaultColors); + public event Action RequestChangeColorRange; protected virtual void OnRequestChangeColorRange() { @@ -42,6 +51,18 @@ protected virtual void OnRequestChangeColorRange() [JsonConstructor] private ColorRange(IEnumerable inPorts, IEnumerable outPorts) : base(inPorts, outPorts) { + if (inPorts.Count() == 3 && outPorts.Count() == 1) + { + inPorts.ElementAt(0).DefaultValue = DefaultColorsNode; + inPorts.ElementAt(1).DefaultValue = DefaultIndicesNode; + } + else + { + // If information from json does not look correct, clear the default ports and add ones with default value + InPorts.Clear(); + InitializePorts(); + } + this.PropertyChanged += ColorRange_PropertyChanged; foreach (var port in InPorts) { @@ -51,6 +72,8 @@ private ColorRange(IEnumerable inPorts, IEnumerable outPor public ColorRange() { + // Initialize default values of the ports + InitializePorts(); RegisterAllPorts(); this.PropertyChanged += ColorRange_PropertyChanged; @@ -60,6 +83,14 @@ public ColorRange() } } + private void InitializePorts() + { + InPorts.Add(new PortModel(PortType.Input, this, new PortData("colors", Resources.ColorRangePortDataColorsToolTip, DefaultColorsNode))); + InPorts.Add(new PortModel(PortType.Input, this, new PortData("indices", Resources.ColorRangePortDataIndicesToolTip, DefaultIndicesNode))); + InPorts.Add(new PortModel(PortType.Input, this, new PortData("value", Resources.ColorRangePortDataValueToolTip))); + OutPorts.Add(new PortModel(PortType.Output, this, new PortData("color", Resources.ColorRangePortDataResultToolTip))); + } + void Connectors_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { OnRequestChangeColorRange(); @@ -119,7 +150,7 @@ public ColorRange1D ComputeColorRange(EngineController engine) List parameters; // If there are colors supplied - if (InPorts[0].IsConnected) + if (InPorts[0].Connectors.Any()) { var colorsNode = InPorts[0].Connectors[0].Start.Owner; var colorsIndex = InPorts[0].Connectors[0].Start.Index; @@ -131,10 +162,14 @@ public ColorRange1D ComputeColorRange(EngineController engine) { colors = new List(); colors.AddRange(DefaultColorRanges.Analysis); + + // Create an AssociativeNode for the default colors + InPorts[0].DefaultValue = DefaultColorsNode; + InPorts[0].UsingDefaultValue = true; } // If there are indices supplied - if (InPorts[1].IsConnected) + if (InPorts[1].Connectors.Any()) { var valuesNode = InPorts[1].Connectors[0].Start.Owner; var valuesIndex = InPorts[1].Connectors[0].Start.Index; @@ -145,11 +180,43 @@ public ColorRange1D ComputeColorRange(EngineController engine) else { parameters = CreateParametersForColors(colors); + + // Create an AssociativeNode for the default indices + InPorts[1].DefaultValue = DefaultIndicesNode; + InPorts[1].UsingDefaultValue = true; } return ColorRange1D.ByColorsAndParameters(colors, parameters); } + private AssociativeNode CreateDefaultColorsNode(List defaultColors) + { + return AstFactory.BuildExprList( + defaultColors.Select(color => + AstFactory.BuildFunctionCall( + new Func(DSCore.Color.ByARGB), + new List + { + AstFactory.BuildIntNode(color.Red), + AstFactory.BuildIntNode(color.Green), + AstFactory.BuildIntNode(color.Blue) + } + ) + ).ToList() + ); + } + + private AssociativeNode CreateDefaultIndicesNode(List defaultColors) + { + var parameters = CreateParametersForColors(defaultColors); + + return AstFactory.BuildExprList( + parameters.Select(AstFactory.BuildDoubleNode) + .Cast() + .ToList() + ); + } + private static List CreateParametersForColors(List colors) { var parameters = new List(); From d6e0e0f45189c725ac06103252f4aefa1485fbf5 Mon Sep 17 00:00:00 2001 From: Ivo Petrov Date: Mon, 9 Dec 2024 16:37:05 +0000 Subject: [PATCH 2/3] Update NodeViewTests.cs --- test/DynamoCoreWpfTests/NodeViewTests.cs | 28 ++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/test/DynamoCoreWpfTests/NodeViewTests.cs b/test/DynamoCoreWpfTests/NodeViewTests.cs index d937f2b0f4c..03183dbaf1a 100644 --- a/test/DynamoCoreWpfTests/NodeViewTests.cs +++ b/test/DynamoCoreWpfTests/NodeViewTests.cs @@ -584,8 +584,8 @@ public void TestPortColors_NodeModel() Assert.AreEqual(3, portVMs.Count); Assert.AreEqual(1, outPorts.Count); - Assert.AreEqual(InPortViewModel.PortValueMarkerRed.Color, (portVMs[0] as InPortViewModel).PortValueMarkerColor.Color); - Assert.AreEqual(InPortViewModel.PortValueMarkerRed.Color, (portVMs[1] as InPortViewModel).PortValueMarkerColor.Color); + Assert.AreEqual(InPortViewModel.PortValueMarkerBlue.Color, (portVMs[0] as InPortViewModel).PortValueMarkerColor.Color); + Assert.AreEqual(InPortViewModel.PortValueMarkerBlue.Color, (portVMs[1] as InPortViewModel).PortValueMarkerColor.Color); Assert.AreEqual(InPortViewModel.PortValueMarkerBlue.Color, (portVMs[2] as InPortViewModel).PortValueMarkerColor.Color); Assert.False((outPorts[0] as OutPortViewModel).PortDefaultValueMarkerVisible); @@ -670,5 +670,29 @@ public void TestSelectNeighborPins() Assert.AreEqual(5, countAfter); } + [Test] + public void ColorRange_InputPortsShowBlueIndicatorForDefaultValues() + { + Open(@"UI\color_range_ports.dyn"); + + var colorRangeVM = NodeViewWithGuid("423d7eaf-9308-4129-b11f-14c186fa4279"); + + var inPorts = colorRangeVM.ViewModel.InPorts; + + // Assert that the first two input ports show blue markers on graph loaded. + Assert.AreEqual(InPortViewModel.PortValueMarkerBlue.Color, (inPorts[0] as InPortViewModel).PortValueMarkerColor.Color); + Assert.AreEqual(InPortViewModel.PortValueMarkerBlue.Color, (inPorts[1] as InPortViewModel).PortValueMarkerColor.Color); + Assert.IsTrue((inPorts[0] as InPortViewModel).PortDefaultValueMarkerVisible); + Assert.IsTrue((inPorts[1] as InPortViewModel).PortDefaultValueMarkerVisible); + + Run(); + DispatcherUtil.DoEvents(); + + // Assert that input ports retain default value indicators after graph execution. + Assert.AreEqual(InPortViewModel.PortValueMarkerBlue.Color, (inPorts[0] as InPortViewModel).PortValueMarkerColor.Color); + Assert.AreEqual(InPortViewModel.PortValueMarkerBlue.Color, (inPorts[1] as InPortViewModel).PortValueMarkerColor.Color); + Assert.IsTrue((inPorts[0] as InPortViewModel).PortDefaultValueMarkerVisible); + Assert.IsTrue((inPorts[1] as InPortViewModel).PortDefaultValueMarkerVisible); + } } } From 074826560f276b34e7a92f737638b4a4be001997 Mon Sep 17 00:00:00 2001 From: Ivo Petrov Date: Mon, 9 Dec 2024 19:34:04 +0000 Subject: [PATCH 3/3] Update ColorRange.cs --- src/Libraries/CoreNodeModels/ColorRange.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Libraries/CoreNodeModels/ColorRange.cs b/src/Libraries/CoreNodeModels/ColorRange.cs index 1b1b4848406..1f75e6f4e66 100644 --- a/src/Libraries/CoreNodeModels/ColorRange.cs +++ b/src/Libraries/CoreNodeModels/ColorRange.cs @@ -32,14 +32,14 @@ namespace CoreNodeModels [AlsoKnownAs("DSCoreNodesUI.ColorRange")] public class ColorRange : NodeModel { - private List _defaultColors; - private List DefaultColors => _defaultColors ??= DefaultColorRanges.Analysis.ToList(); + private IEnumerable defaultColors; + private IEnumerable DefaultColors => defaultColors ??= DefaultColorRanges.Analysis.ToList(); - private AssociativeNode _defaultColorsNode; - private AssociativeNode DefaultColorsNode => _defaultColorsNode ??= CreateDefaultColorsNode(DefaultColors); + private AssociativeNode defaultColorsNode; + private AssociativeNode DefaultColorsNode => defaultColorsNode ??= CreateDefaultColorsNode(DefaultColors); - private AssociativeNode _defaultIndicesNode; - private AssociativeNode DefaultIndicesNode => _defaultIndicesNode ??= CreateDefaultIndicesNode(DefaultColors); + private AssociativeNode defaultIndicesNode; + private AssociativeNode DefaultIndicesNode => defaultIndicesNode ??= CreateDefaultIndicesNode(DefaultColors); public event Action RequestChangeColorRange; protected virtual void OnRequestChangeColorRange() @@ -189,7 +189,7 @@ public ColorRange1D ComputeColorRange(EngineController engine) return ColorRange1D.ByColorsAndParameters(colors, parameters); } - private AssociativeNode CreateDefaultColorsNode(List defaultColors) + private AssociativeNode CreateDefaultColorsNode(IEnumerable defaultColors) { return AstFactory.BuildExprList( defaultColors.Select(color => @@ -206,7 +206,7 @@ private AssociativeNode CreateDefaultColorsNode(List defaultColors) ); } - private AssociativeNode CreateDefaultIndicesNode(List defaultColors) + private AssociativeNode CreateDefaultIndicesNode(IEnumerable defaultColors) { var parameters = CreateParametersForColors(defaultColors); @@ -217,7 +217,7 @@ private AssociativeNode CreateDefaultIndicesNode(List defaultColors) ); } - private static List CreateParametersForColors(List colors) + private static List CreateParametersForColors(IEnumerable colors) { var parameters = new List();