87 lines
2.5 KiB
C#
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();
|
|
}
|
|
}
|
|
} |