示例#1
0
        public void Do()
        {
            var metaInput    = InputParent.GetMetaInput(InputToPublish);
            var newMetaInput = metaInput.Clone();

            newMetaInput.Name = _newName;

            var addInputCommand = new AddInputCommand(CompositionOperator, newMetaInput);

            addInputCommand.Do();

            var opPartToUpdate    = CompositionOperator.Inputs[CompositionOperator.Inputs.Count - 1];
            var func              = InputToPublish.Func.Clone() as Utilities.ValueFunction;
            var updateFuncCommand = new UpdateOperatorPartValueFunctionCommand(opPartToUpdate, func.Value);

            updateFuncCommand.Do();

            var connection = new MetaConnection(Guid.Empty, newMetaInput.ID, InputToPublish.Parent.ID, metaInput.ID);
            var insertConnectionCommand = new InsertConnectionCommand(CompositionOperator.Definition, connection, 0);

            insertConnectionCommand.Do();

            _commands.Clear();
            _commands.AddRange(new ICommand[] { addInputCommand, updateFuncCommand, insertConnectionCommand });
        }
示例#2
0
        public void Undo()
        {
            var parent = MetaManager.Instance.GetMetaOperator(_parentMetaID);

            // add ops
            for (var i = 0; i < _deletedOpsMetaIDs.Count; ++i)
            {
                var opToAdd = MetaManager.Instance.GetMetaOperator(_deletedOpsMetaIDs[i]);
                var pos     = _positions[i];
                var width   = _widths[i];
                var visible = _visibilities[i];
                parent.AddOperator(opToAdd, _deletedOpsInstanceIDs[i], pos.X, pos.Y, width, visible);

                var instanceProperties = parent.Operators[_deletedOpsInstanceIDs[i]].Item2;
                foreach (var opStateEntry in _deletedStates[_deletedOpsInstanceIDs[i]])
                {
                    instanceProperties.OperatorPartStates[opStateEntry.Key] = opStateEntry.Value;
                }

                var opToAddInstance = opToAdd.GetOperatorInstance(_deletedOpsInstanceIDs[i]);
                opToAddInstance.Name = _deletedOpName;
                foreach (var deletedOpPart in _deletedOpParts[_deletedOpsInstanceIDs[i]])
                {
                    var opPartToUpdate = (from input in opToAddInstance.Inputs where input.ID == deletedOpPart.Key select input).Single();
                    // this comparison could lead to problems with serialization
                    if ((opPartToUpdate.DefaultFunc as Utilities.ValueFunction).Value != deletedOpPart.Value)
                    {
                        var updateCommand = new UpdateOperatorPartValueFunctionCommand(opPartToUpdate, deletedOpPart.Value);
                        updateCommand.Do();
                    }
                }
            }

            // add connections;
            // todo: add multi input stuff, this here will only work for non multi inputs
            foreach (var con in _connectionsToDeletedOps)
            {
                parent.InsertConnectionAt(con);
            }

            _removeKeyframesCommand.Undo();
        }
示例#3
0
        public SetValueGroupCommand(IEnumerable <Entry> entries, double globalTime, string name = "Set Value Group")
        {
            _name = name;

            foreach (var entry in entries)
            {
                ICommand cmd;

                var isControlAnimated = false;

                OperatorPart animationOpPart = Animation.GetRegardingAnimationOpPart(entry.OpPart);
                isControlAnimated = animationOpPart != null;

                if (isControlAnimated)
                {
                    cmd = new AddOrUpdateKeyframeCommand(globalTime, entry.Value.Val, entry.OpPart);
                }
                else
                {
                    cmd = new UpdateOperatorPartValueFunctionCommand(entry.OpPart, entry.Value);
                }
                _commands.Add(cmd);
            }
        }