Exemplo n.º 1
0
        // ---------------------------------------------------------------------------------------------------------------------------------------------------------------
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
            }
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
 /// <summary>
 /// Executes the registered change for the specified edit engine.
 /// </summary>
 public abstract void Execute(EntityEditEngine Engine);