Files
2026-07-13 13:13:17 +08:00

91 lines
3.3 KiB
C#

using ImGuiNET;
using T3.Core.Operator;
using T3.Core.Operator.Slots;
using T3.Editor.Gui.UiHelpers;
using T3.Editor.UiModel;
namespace T3.Editor.Gui.Dialogs;
public sealed class EditNodeOutputDialog : ModalDialog
{
public void Draw()
{
if (BeginDialog("Edit node output"))
{
ImGui.TextUnformatted("Define the dirty flag behavior for " + _outputDefinition.Name);
var symbolChild = _symbolChildUi.SymbolChild;
var outputEntry = symbolChild.Outputs[_outputDefinition.Id];
var enumType = typeof(DirtyFlagTrigger);
var values = Enum.GetValues(enumType);
var valueNames = Enum.GetNames(enumType);
var currentValueName = Enum.GetName(enumType, outputEntry.DirtyFlagTrigger);
int index = 0;
for (int i = 0; i < values.Length; i++)
{
if (valueNames[i] == currentValueName)
{
index = i;
break;
}
}
if (ImGui.Combo("##dirtyFlagTriggerDropDownParam", ref index, valueNames, valueNames.Length))
{
var trigger = (DirtyFlagTrigger)Enum.Parse(enumType, valueNames[index]);
outputEntry.DirtyFlagTrigger = trigger;
foreach (var instance in _compositionSymbol.InstancesOfSelf)
{
ApplyTriggerToInstanceOutputs(instance);
}
void ApplyTriggerToInstanceOutputs(Instance instance)
{
var outputSlot = (from output in instance.Outputs
where output.Id == _outputDefinition.Id
select output).Single();
outputSlot.DirtyFlag.Trigger = trigger;
}
}
var connectionStyles = new[] { "Default", "Faded Out" };
var connectionStyleIndex = _symbolChildUi.ConnectionStyleOverrides.ContainsKey(_outputDefinition.Id) ? 1 : 0;
if (ImGui.Combo("Connection Style##connectionStyle", ref connectionStyleIndex, connectionStyles, connectionStyles.Length))
{
if (connectionStyleIndex == 0)
{
_symbolChildUi.ConnectionStyleOverrides.Remove(_outputDefinition.Id);
}
else
{
_symbolChildUi.ConnectionStyleOverrides.Add(_outputDefinition.Id, SymbolUi.Child.ConnectionStyles.FadedOut);
}
}
if (ImGui.Button("Close"))
{
ImGui.CloseCurrentPopup();
}
EndDialogContent();
}
EndDialog();
}
public void OpenForOutput(Symbol compositionSymbol, SymbolUi.Child symbolChildUi, Symbol.OutputDefinition outputDefinition)
{
_compositionSymbol = compositionSymbol;
_symbolChildUi = symbolChildUi;
_outputDefinition = outputDefinition;
ShowNextFrame();
}
private SymbolUi.Child _symbolChildUi;
private Symbol.OutputDefinition _outputDefinition;
private Symbol _compositionSymbol;
}