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

95 lines
3.0 KiB
C#

#nullable enable
using ImGuiNET;
using T3.Core.SystemUi;
using T3.Editor.Gui.Graph.Dialogs;
using T3.Editor.Gui.Styling;
using T3.Editor.Gui.UiHelpers;
using T3.Editor.Gui.Windows.SymbolLib;
using T3.Editor.UiModel;
namespace T3.Editor.Gui.Dialogs;
internal sealed class RenameNamespaceDialog : ModalDialog
{
internal void Draw(NamespaceTreeNode subtreeNodeToRename)
{
if (BeginDialog("Move or rename namespace"))
{
if (ImGui.IsWindowAppearing())
{
_node = subtreeNodeToRename;
_nameSpace = _node.Namespace;
EditableSymbolProject.TryGetEditableProjectOfNamespace(_nameSpace, out _projectToCopyFrom);
_projectToCopyTo = _projectToCopyFrom;
}
var hasProjectToCopyFrom = _projectToCopyFrom != null;
if (hasProjectToCopyFrom)
{
SymbolModificationInputs.DrawProjectDropdown(ref _nameSpace, ref _projectToCopyTo);
if (_projectToCopyTo != null)
{
DrawRenameFields();
ImGui.SameLine();
}
}
else
{
ImGui.TextColored(UiColors.StatusError.Rgba, $"No source project found for namespace {_nameSpace}");
}
if (CustomComponents.DrawCtaButton("Cancel", Icon.None, CustomComponents.ButtonStates.Emphasized))
{
Close();
}
EndDialogContent();
}
EndDialog();
}
private static void DrawRenameFields()
{
if (ImGui.IsWindowAppearing())
ImGui.SetKeyboardFocusHere();
if (_projectToCopyTo == null || _node == null || _projectToCopyFrom == null)
{
ImGui.Text("invalid project data");
return;
}
_ = SymbolModificationInputs.DrawNamespaceInput(ref _nameSpace, _projectToCopyTo, false, out var namespaceValid);
CustomComponents.HelpText("Careful now. This operator might affect a lot of operator definitions");
if (CustomComponents.DrawCtaButton("Rename", namespaceValid))
{
if (EditableSymbolProject.RenameNameSpaces(_node, _projectToCopyFrom, _projectToCopyTo, _nameSpace, out var reason))
{
T3Ui.Save(false);
}
else
{
BlockingWindow.Instance.ShowMessageBox(reason, "Could not rename namespace");
}
Close();
}
}
private static void Close()
{
ImGui.CloseCurrentPopup();
_node = null;
_projectToCopyTo = null;
_projectToCopyFrom = null;
}
private static NamespaceTreeNode? _node;
private static string _nameSpace= string.Empty;
private static EditableSymbolProject? _projectToCopyFrom;
private static EditableSymbolProject? _projectToCopyTo;
}