public void BuildChildTree(SDEFListing item, SDEFBase current) { foreach (var entry in current.ChildParameters) { var listing = new SDEFListing(); listing.Entry = entry; listing.Name = listing.ToString(); if (entry.NodeType == NodeType.CustomType) { BuildChildTree(listing, entry); } else if (entry.NodeType == NodeType.CustomTypeArray) { SDEFParamArray array = entry as SDEFParamArray; for (int i = 0; i < array.Values.Count; i++) { SDEFBase element = array.Values[i]; var arrValueListing = new SDEFListing() { Name = $"[{i}] - {array.CustomTypeName}" }; BuildChildTree(arrValueListing, element); listing.Items.Add(arrValueListing); } } else if (entry.NodeType == NodeType.RawValueArray) { SDEFParamArray array = entry as SDEFParamArray; for (int i = 0; i < array.RawValuesArray.Length; i++) { SDEFVariant elem = array.RawValuesArray[i]; var arrValueListing = new SDEFListing() { Name = $"[{i}] - {elem.ToString()}" }; arrValueListing.ArrayElement = elem; arrValueListing.ArrayElementIndex = i; listing.Items.Add(arrValueListing); } } item.Items.Add(listing); } }
private void tv_SDEFListing_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) { var item = (SDEFListing)e.NewValue; CurrentParameter = item; ResetEntryControls(); if (CurrentParameter?.Entry is null && CurrentParameter?.ArrayElement is null) { return; } if (CurrentParameter?.Entry?.NodeType == NodeType.RawValueArray) { return; // Don't need, its the def, not the values } if (CurrentParameter?.Entry?.NodeType == NodeType.CustomType || CurrentParameter?.Entry?.NodeType == NodeType.CustomTypeArray) { paramType.Content = CurrentParameter.Entry.CustomTypeName; if (CurrentParameter.Entry != null) { parameterName.Content = CurrentParameter.Entry.Name; if (ParamDescription.TryGetValue(CurrentParameter.Entry.Name, out string desc)) { parameterDescription.Text = desc; } else { parameterDescription.Text = "No description available"; } } } else { SDEFVariant value = CurrentParameter?.Entry?.NodeType == NodeType.RawValue ? (CurrentParameter.Entry as SDEFParam).RawValue : CurrentParameter.ArrayElement; paramType.Content = value.Type.ToString(); switch (value.Type) { case Entities.ValueType.Byte: param_Byte.IsEnabled = true; param_Byte.Value = value.GetByte(); break; case Entities.ValueType.SByte: param_SByte.IsEnabled = true; param_SByte.Value = value.GetSByte(); break; case Entities.ValueType.Bool: param_Bool.IsEnabled = true; param_Bool.IsChecked = value.GetBool(); break; case Entities.ValueType.Int: param_Integer.IsEnabled = true; param_Integer.Value = value.GetInt(); break; case Entities.ValueType.UInt: param_UInteger.IsEnabled = true; param_UInteger.Value = value.GetUInt(); break; case Entities.ValueType.Float: param_Single.IsEnabled = true; param_Single.Value = value.GetFloat(); break; case Entities.ValueType.Double: param_Double.IsEnabled = true; param_Double.Value = value.GetDouble(); break; case Entities.ValueType.ULong: param_ULong.IsEnabled = true; param_ULong.Value = value.GetULong(); break; case Entities.ValueType.String: param_String.IsEnabled = true; param_String.Text = value.GetString(); break; default: break; } if (CurrentParameter.Entry != null) { parameterName.Content = CurrentParameter.Entry.Name; if (ParamDescription.TryGetValue(CurrentParameter.Entry.Name, out string desc)) { parameterDescription.Text = desc; } else { parameterDescription.Text = "No description available"; } } } }