// --------------------------------------------------------------------------------------------------------------------------------------------------------------- /// <summary> /// Gets and possibly initializes, for the supplied Entity-Instance, its Edit-Engine based on the specified Current. /// </summary> public static EntityEditEngine ObtainEditEngine(IModelEntity EntityInstance, EntityEditEngine Current) { // IMPORTANT: Do not read Entity.AssignedEditEngine. An infinite-loop may occur. // Instead use the Current parameter. // PENDING: Solve mismatch crash for: // Change of document and immediate copy of objects. if (Current == null && ActiveEntityEditor != null && (ActiveEntityEditor.ExecutionStatus == EExecutionStatus.Running || ActiveEntityEditor.ExecutionStatus == EExecutionStatus.Created)) { EntityInstance.EditEngine = Current = ActiveEntityEditor; // Centralizes store-boxes references // IMPORTANT: The EntityEditor is used because exists while calling Constructors. So, do not use MainEditedEntity (Composition). if (Current != null) { foreach (var PropDef in EntityInstance.ClassDefinition.Properties.Where(prop => prop.IsStoreBoxBased)) { PropDef.GetStoreBoxContainer(EntityInstance).CentralizeReferencesIn(Current.GlobalId); } } } /*T ONLY RELEVANT WHEN MODIFYING VALUES. * SEE RegisterInverseAssignment() and RegisterInverseCollectionChange(). * else*/ /* * if (Current != ActiveEntityEditor) * Console.WriteLine("Active Entity-Editor differs from that of Entity '" + EntityInstance.ToStringAlways() + "'."); */ return(Current); }
/// <summary> /// Executes the registered change for the specified edit engine. /// </summary> public override void Execute(EntityEditEngine Engine) { if (this.Variations.Count < 1 || !(Engine.IsUndoing || Engine.IsRedoing)) { throw new UsageAnomaly("Command Variation is not executable for the specified edit-engine."); } foreach (var ExecVariation in this.Variations) { var Text = ExecVariation.ToString(); if (Text == null) { Console.WriteLine("Executing Variation: NULL"); } ExecVariation.Execute(Engine); } }
/// <summary> /// Executes the registered change for the specified edit engine. /// </summary> public override void Execute(EntityEditEngine Engine) { char InverseAlterCode = '?'; if (this.VariatingCollection.GetType().Name == typeof(EditableList <>).Name) { InverseAlterCode = EntityEditEngine.GenerateInverseListAlterCode(this.VariatingAlterCode); } else { InverseAlterCode = EntityEditEngine.GenerateInverseDictionaryAlterCode(this.VariatingAlterCode); } var InverseParameters = this.VariatingCollection.GetAlterParameters(InverseAlterCode, PassedParameters); EntityEditEngine.RegisterInverseCollectionChange(this.VariatingCollection.VariatingInstance, this.VariatingCollection, InverseAlterCode, InverseParameters); this.VariatingCollection.AlterCollection(this.VariatingAlterCode, this.PassedParameters); }
/// <summary> /// Executes the registered change for the specified edit engine. /// </summary> public override void Execute(EntityEditEngine Engine) { EntityEditEngine.RegisterInverseAssignment(this.VariatingProperty, (IModelEntity)this.VariatingInstance, this.VariatingProperty.Read(this.VariatingInstance)); this.VariatingProperty.Write(this.VariatingInstance, this.VariatingValue); }
/// <summary> /// Executes the registered change for the specified edit engine. /// </summary> public abstract void Execute(EntityEditEngine Engine);