Files
Cielonos/Packages/io.continis.subassets/Editor/WindowsAndMenus/RenameSubAssetWindow.cs
SoulliesOfficial f26f9fd374 爆更
2026-03-20 12:07:44 -04:00

87 lines
2.5 KiB
C#

using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
namespace SubAssetsToolbox.Editor
{
internal class RenameSubAssetWindow : EditorWindow
{
[SerializeField] private VisualTreeAsset _visualTreeAsset;
private Object _target;
private TextField _nameField;
private Button _renameButton;
public static void Open(Object subAsset)
{
RenameSubAssetWindow window = GetWindow<RenameSubAssetWindow>(true, "Rename Sub-Asset");
window._target = subAsset;
window.minSize = new Vector2(300f, 70f);
window.maxSize = new Vector2(300f, 70f);
window.Populate();
window.Show();
}
private void CreateGUI()
{
VisualElement root = rootVisualElement;
VisualElement template = _visualTreeAsset.Instantiate();
template.style.flexGrow = 1f;
_nameField = template.Q<TextField>("NameField");
_nameField.selectAllOnFocus = true;
_nameField.RegisterValueChangedCallback(_ => UpdateRenameButton());
_nameField.RegisterCallback<KeyUpEvent>(OnKeyUp);
template.Q<Button>("CancelBtn").clicked += Close;
_renameButton = template.Q<Button>("RenameBtn");
_renameButton.clicked += PerformRename;
root.Add(template);
UpdateRenameButton();
}
private void OnKeyUp(KeyUpEvent evt)
{
switch (evt.keyCode)
{
case KeyCode.Return:
case KeyCode.KeypadEnter:
PerformRename();
break;
case KeyCode.Escape:
Close();
break;
}
}
private void Populate()
{
_nameField.value = _target != null ? _target.name : "";
UpdateRenameButton();
_nameField.schedule.Execute(() =>
{
_nameField.Focus();
_nameField.SelectAll();
});
}
private void UpdateRenameButton()
{
bool valid = _target != null
&& !string.IsNullOrWhiteSpace(_nameField.value)
&& _nameField.value != _target.name;
_renameButton.SetEnabled(valid);
}
private void PerformRename()
{
_target.name = _nameField.value;
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Close();
}
}
}