private static InstanceMember CreateInstanceMember(NamedObjectSave instance, IElement container, TypedMemberBase typedMember, AssetTypeInfo ati) { bool shouldBeSkipped = GetIfShouldBeSkipped(typedMember, instance, ati); DataGridItem instanceMember = null; if (!shouldBeSkipped) { var typeConverter = PluginManager.GetTypeConverter( container, instance, typedMember); bool isObjectInFile = typeConverter is IObjectsInFileConverter; var memberType = typedMember.MemberType; VariableDefinition variableDefinition = null; if (ati != null) { variableDefinition = ati.VariableDefinitions.FirstOrDefault(item => item.Name == typedMember.MemberName); } if(isObjectInFile) { var fileInstanceMember = new FileInstanceMember(); instanceMember = fileInstanceMember; fileInstanceMember.View += () => { var rfs = (typeConverter as IObjectsInFileConverter).ReferencedFileSave; if (rfs != null) { var value = fileInstanceMember.Value as string; GlueCommands.Self.SelectCommands.Select( rfs, value); } }; instanceMember.PreferredDisplayer = typeof(FileReferenceComboBox); } else { instanceMember = new DataGridItem(); } instanceMember.FirstGridLength = new System.Windows.GridLength(140); instanceMember.UnmodifiedVariableName = typedMember.MemberName; string displayName = StringFunctions.InsertSpacesInCamelCaseString(typedMember.MemberName); instanceMember.DisplayName = displayName; instanceMember.TypeConverter = typeConverter; instanceMember.CustomRefreshOptions += () => { if (typeConverter != null) { instanceMember.CustomOptions.Clear(); var values = typeConverter.GetStandardValues(); foreach (var value in values) { instanceMember.CustomOptions.Add(value); } } }; instanceMember.CustomGetTypeEvent += (throwaway) => memberType; instanceMember.IsDefault = instance.GetInstructionFromMember(typedMember.MemberName) == null; instanceMember.CustomGetEvent += (throwaway) => { var instruction = instance.GetInstructionFromMember(typedMember.MemberName); if (instruction == null) { if (variableDefinition != null) { var toReturn = variableDefinition.DefaultValue; if (memberType == typeof(bool)) { bool boolToReturn = false; bool.TryParse(variableDefinition.DefaultValue, out boolToReturn); return boolToReturn; } else { return toReturn; } } else { return null; } } else { return instruction.Value; } }; instanceMember.CustomSetEvent += (owner, value) => { NamedObjectVariableChangeLogic.ReactToValueSet(instance, typedMember, value, instanceMember, memberType); }; instanceMember.IsDefaultSet += (owner, args) => { MakeDefault(instance, typedMember.MemberName); }; instanceMember.SetValueError += (newValue) => { if (newValue is string && string.IsNullOrEmpty(newValue as string)) { MakeDefault(instance, typedMember.MemberName); } }; } return instanceMember; }
private static InstanceMember CreateInstanceMemberForSourceName(NamedObjectSave instance) { var instanceMember = new FileInstanceMember(); instanceMember.View += () => { var element = GlueState.Self.CurrentElement; var rfs = element.ReferencedFiles.FirstOrDefault(item => item.Name == instance.SourceFile); if (rfs != null) { GlueCommands.Self.SelectCommands.Select( rfs, instance.SourceNameWithoutParenthesis); } }; instanceMember.FirstGridLength = new System.Windows.GridLength(140); instanceMember.UnmodifiedVariableName = "SourceName"; string fileName = FlatRedBall.IO.FileManager.RemovePath(instance.SourceFile); instanceMember.DisplayName = $"Object in {fileName}:"; // todo: get the type converter from the file var typeConverter = new AvailableNameablesStringConverter(instance); instanceMember.TypeConverter = typeConverter; instanceMember.CustomGetTypeEvent += (throwaway) => typeof(string); instanceMember.PreferredDisplayer = typeof(FileReferenceComboBox); instanceMember.IsDefault = instance.SourceName == null; instanceMember.CustomGetEvent += (throwaway) => { return instance.SourceName; }; instanceMember.CustomSetEvent += (owner, value) => { instanceMember.IsDefault = false; RefreshLogic.IgnoreNextRefresh(); instance.SourceName = value as string; GlueCommands.Self.GluxCommands.SaveGlux(); GlueCommands.Self.RefreshCommands.RefreshPropertyGrid(); GlueCommands.Self.GenerateCodeCommands.GenerateCurrentElementCode(); }; instanceMember.IsDefaultSet += (owner, args) => { instance.SourceName = null; }; instanceMember.SetValueError += (newValue) => { if (newValue is string && string.IsNullOrEmpty(newValue as string)) { MakeDefault(instance, "SourceName"); } }; return instanceMember; }