Files
tooll3--t3/Editor/UiModel/Commands/Graph/SetInputDefaultCommand.cs
T
2026-07-13 13:13:17 +08:00

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