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 }); }
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(); }