58 lines
2.0 KiB
C#
58 lines
2.0 KiB
C#
using T3.Core.Operator;
|
|
using T3.Core.Operator.Slots;
|
|
|
|
namespace T3.Editor.UiModel.Commands.Graph;
|
|
|
|
internal sealed class SetInputDefaultCommand : ICommand
|
|
{
|
|
public string Name => "Set current value as default";
|
|
public bool IsUndoable => true;
|
|
|
|
internal SetInputDefaultCommand(Symbol parentComposition, Guid symbolChildId, Symbol.Child.Input input)
|
|
{
|
|
_parentCompositionId = parentComposition.Id;
|
|
_childId = symbolChildId;
|
|
_inputId = input.InputDefinition.Id;
|
|
|
|
_previousDefault = input.InputDefinition.DefaultValue.Clone();
|
|
_newDefault = input.Value.Clone();
|
|
_wasDefault = input.IsDefault;
|
|
}
|
|
|
|
public void Do() => Apply(_newDefault, isDefaultAfter: true);
|
|
public void Undo() => Apply(_previousDefault, isDefaultAfter: _wasDefault);
|
|
|
|
private void Apply(InputValue targetDefault, bool isDefaultAfter)
|
|
{
|
|
if (!SymbolUiRegistry.TryGetSymbolUi(_parentCompositionId, out var parentSymbolUi))
|
|
return;
|
|
|
|
var parentSymbol = parentSymbolUi.Symbol;
|
|
if (!parentSymbol.Children.TryGetValue(_childId, out var symbolChild))
|
|
return;
|
|
|
|
if (!symbolChild.Inputs.TryGetValue(_inputId, out var input))
|
|
return;
|
|
|
|
var definition = input.InputDefinition;
|
|
if (definition.DefaultValue.IsEditableInputReferenceType)
|
|
definition.DefaultValue.AssignClone(targetDefault);
|
|
else
|
|
definition.DefaultValue.Assign(targetDefault);
|
|
|
|
input.IsDefault = isDefaultAfter;
|
|
|
|
symbolChild.Symbol.InvalidateInputDefaultInInstances(_inputId);
|
|
|
|
if (SymbolUiRegistry.TryGetSymbolUi(symbolChild.Symbol.Id, out var definingSymbolUi))
|
|
definingSymbolUi.FlagAsModified();
|
|
}
|
|
|
|
private readonly InputValue _previousDefault;
|
|
private readonly InputValue _newDefault;
|
|
private readonly bool _wasDefault;
|
|
private readonly Guid _parentCompositionId;
|
|
private readonly Guid _childId;
|
|
private readonly Guid _inputId;
|
|
}
|