public static EntityManagementValues ToModel(MainViewModel viewModel) { EntityManagementValues model = new EntityManagementValues(); model.Name = viewModel.EntityName; model.PropertyManagementMode = viewModel.EntityManagementMode; model.SelectedProperties.AddRange(viewModel.EntityManagedProperties); foreach (var instanceViewModel in viewModel.Instances) { InstanceManagementValues instanceModel = new InstanceManagementValues(); instanceModel.Name = instanceViewModel.Name; instanceModel.PropertyManagementMode = instanceViewModel.PropertyManagementMode; instanceModel.SelectedProperties.AddRange( instanceViewModel.SelectedProperties); model.InstanceManagementValuesList.Add( instanceModel); } return(model); }
public static MainViewModel ToViewModel(EntityManagementValues model) { MainViewModel viewModel = new MainViewModel(); viewModel.Entity = FlatRedBall.Glue.Elements.ObjectFinder.Self.GetEntitySave(model.Name); viewModel.EntityManagementMode = model.PropertyManagementMode; foreach (var propertyName in model.SelectedProperties) { viewModel.EntityManagedProperties.Add(propertyName); } foreach (var instanceModel in model.InstanceManagementValuesList) { var instanceViewModel = new InstanceViewModel(); instanceViewModel.Name = instanceModel.Name; instanceViewModel.PropertyManagementMode = instanceModel.PropertyManagementMode; instanceViewModel.IsContainer = instanceModel.IsContainer; instanceViewModel.SelectedProperties.AddRange(instanceModel.SelectedProperties); viewModel.Instances.Add(instanceViewModel); } return(viewModel); }
private void GenerateEntitySaveUpdateDependencies(ICodeBlock codeBlock, IElement element) { EntityManagementValues managementValues = Values?.EntityManagementValueList?.FirstOrDefault(item => item.Name == element.Name); if (managementValues != null) { var innerCodeBlock = new CodeBlockBase(null); GenerateEntityUpdateDependencies(innerCodeBlock, element, managementValues); GenerateNamedObjectUpdateDependencies(innerCodeBlock, element, managementValues); var doAnyNamedObjectsHaveUpdateDependencies = innerCodeBlock.BodyCodeLines.Any(); if (doAnyNamedObjectsHaveUpdateDependencies) { var ifBlock = codeBlock.If("this.LastDependencyUpdate != currentTime"); // todo - need to call base here if we actually want to update dependencies var shouldCallBase = managementValues.PropertyManagementMode == Enums.PropertyManagementMode.FullyManaged || managementValues.SelectedProperties.Contains("Attachment"); if (shouldCallBase) { ifBlock.Line("base.UpdateDependencies(currentTime);"); } ifBlock.Line("this.mLastDependencyUpdate = currentTime;"); ifBlock.InsertBlock(innerCodeBlock); } } }
private static void AddInstanceManagementValuesFor(EntityManagementValues values, NamedObjectSave instance) { var instanceValues = new InstanceManagementValues(); instanceValues.Name = instance.InstanceName; UpdateInstanceValuesToInstance(instanceValues, instance); values.InstanceManagementValuesList.Add(instanceValues); }
private void GenerateScreenSaveUpdateDependencies(ICodeBlock codeBlock, IElement element) { // Only do top level and lists, not contents of lists, or else they might get update dependencies called 2 times //foreach (var namedObject in element.AllNamedObjects) foreach (var namedObject in element.NamedObjects) { var isEntity = namedObject.SourceType == SourceType.Entity; EntitySave entity = null; bool isList = false; if (isEntity) { entity = ObjectFinder.Self.GetEntitySave(namedObject.SourceClassType); } else if (namedObject.SourceType == SourceType.FlatRedBallType && namedObject.SourceClassType == "PositionedObjectList<T>") { var classType = namedObject.SourceClassGenericType; entity = ObjectFinder.Self.GetEntitySave(classType); if (entity != null) { isList = true; } } if (entity != null) { EntityManagementValues managementValues = Values?.EntityManagementValueList?.FirstOrDefault(item => item.Name == entity.Name); bool shouldCallUpdateDependencies = managementValues != null && managementValues.SelectedProperties.Contains("Attachment"); if (shouldCallUpdateDependencies) { if (isList) { var forBlock = codeBlock.For($"int i = 0; i < {namedObject.FieldName}.Count; i++"); forBlock.Line($"{namedObject.FieldName}[i].UpdateDependencies(currentTime);"); } else { codeBlock.Line($"{namedObject.FieldName}.UpdateDependencies(currentTime);"); } } } } }
private EntityManagementValues GetOrCreateEntityManagementValuesFor(EntitySave entitySave) { EntityManagementValues values = model.EntityManagementValueList.FirstOrDefault(item => item.Name == entitySave.Name); if (values == null) { values = new EntityManagementValues(); values.Name = entitySave.Name; model.EntityManagementValueList.Add(values); foreach (var instance in entitySave.AllNamedObjects) { AddInstanceManagementValuesFor(values, instance); } } if (entitySave.IsManuallyUpdated) { values.PropertyManagementMode = Enums.PropertyManagementMode.SelectManagedProperties; } else { values.PropertyManagementMode = Enums.PropertyManagementMode.FullyManaged; } foreach (var instance in entitySave.AllNamedObjects) { var instanceValues = values.InstanceManagementValuesList.FirstOrDefault( item => item.Name == instance.InstanceName); // Make sure there are no missing instance values if (instanceValues == null) { // an instance was added, but there is no matching model here: AddInstanceManagementValuesFor(values, instance); instanceValues = values.InstanceManagementValuesList.FirstOrDefault( item => item.Name == instance.InstanceName); } UpdateInstanceValuesToInstance(instanceValues, instance); } return(values); }
private void GenerateNamedObjectUpdateDependencies(ICodeBlock codeBlock, IElement element, EntityManagementValues managementValues) { foreach (var namedObject in element.AllNamedObjects) { var isManuallyUpdated = namedObject.IsManuallyUpdated; InstanceManagementValues instanceManagementValues = null; if (isManuallyUpdated) { instanceManagementValues = managementValues.InstanceManagementValuesList.FirstOrDefault(item => item.Name == namedObject.InstanceName); } var shouldGenerateUpdateDependenciesForObject = namedObject.IsContainer == false && instanceManagementValues?.SelectedProperties?.Count > 0; if (shouldGenerateUpdateDependenciesForObject) { GenerateVariableUpdateDependenciesFor(codeBlock, namedObject, instanceManagementValues); } } }
private void GenerateEntityUpdateDependencies(CodeBlockBase codeBlock, IElement element, EntityManagementValues managementValues) { var ati = GetAssetTypeInfoFor(element); string name = "this"; if (ati?.RuntimeTypeName == "Text") { GenerateTextVariableUpdateDependenciesFor(codeBlock, name, managementValues.SelectedProperties); } else if (ati?.RuntimeTypeName == "Sprite") { GenerateSpriteVariableUpdateDependenciesFor(codeBlock, name, managementValues.SelectedProperties); } }