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

78 lines
3.2 KiB
C#

using ImGuiNET;
using T3.Editor.Gui.Graph.Dialogs;
using T3.Editor.Gui.Input;
using T3.Editor.Gui.Styling;
using T3.Editor.Gui.UiHelpers;
using T3.Editor.UiModel;
using T3.Editor.UiModel.Modification;
using T3.Editor.UiModel.ProjectHandling;
namespace T3.Editor.Gui.Dialogs;
internal sealed class CombineToSymbolDialog : ModalDialog
{
public ChangeSymbol.SymbolModificationResults Draw(Guid symbolGuid, ProjectView projectView, ref string nameSpace,
ref string combineName, ref string description)
{
var result = ChangeSymbol.SymbolModificationResults.Nothing;
DialogSize = new Vector2(500, 350);
if (BeginDialog("Combine into symbol"))
{
var selectedChildUis = projectView.NodeSelection.GetSelectedChildUis().ToList();
var selectedSections = projectView.NodeSelection.GetSelectedNodes<Section>().ToList();
if (_projectToCopyTo == null)
{
EditableSymbolProject.TryGetEditableProjectOfNamespace(nameSpace, out _projectToCopyTo);
}
_ = SymbolModificationInputs.DrawProjectDropdown(ref nameSpace, ref _projectToCopyTo);
if (_projectToCopyTo != null)
{
_ = SymbolModificationInputs.DrawSymbolNameAndNamespaceInputs(ref combineName, ref nameSpace, _projectToCopyTo, out var symbolNamesValid);
ImGui.Spacing();
// Description
ImGui.PushFont(Fonts.FontSmall);
ImGui.TextUnformatted("Description");
ImGui.PopFont();
ImGui.SetNextItemWidth(460);
ImGui.InputTextMultiline("##description", ref description, 1024, new Vector2(450, 60));
ImGui.Checkbox("Combine as time clip", ref _shouldBeTimeClip);
FormInputs.AddHint("Combining creates a new operator and can't be undone — this clears the undo history.");
if (CustomComponents.DrawCtaButton("Combine", symbolNamesValid))
{
if(!SymbolUiRegistry.TryGetSymbolUi(symbolGuid, out var compositionSymbolUi))
throw new Exception($"Can't find symbol ui for symbol {symbolGuid}");
Combine.CombineAsNewType(compositionSymbolUi, _projectToCopyTo, selectedChildUis, selectedSections, combineName, nameSpace, description,
_shouldBeTimeClip);
_shouldBeTimeClip = false; // Making timeclips this is normally a one-off operation
result = ChangeSymbol.SymbolModificationResults.StructureChanged;
ImGui.CloseCurrentPopup();
}
ImGui.SameLine();
}
if (CustomComponents.DrawCtaButton("Cancel", Icon.None, CustomComponents.ButtonStates.Emphasized))
{
ImGui.CloseCurrentPopup();
}
EndDialogContent();
}
EndDialog();
return result;
}
private static bool _shouldBeTimeClip;
private EditableSymbolProject _projectToCopyTo;
}