1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- using UnityEditor;
- using UnityEngine;
- namespace XNodeEditor {
- /// <summary> Utility for renaming assets </summary>
- public class RenamePopup : EditorWindow {
- private const string inputControlName = "nameInput";
- public static RenamePopup current { get; private set; }
- public Object target;
- public string input;
- private bool firstFrame = true;
- /// <summary> Show a rename popup for an asset at mouse position. Will trigger reimport of the asset on apply.
- public static RenamePopup Show(Object target, float width = 200) {
- RenamePopup window = EditorWindow.GetWindow<RenamePopup>(true, "Rename " + target.name, true);
- if (current != null) current.Close();
- current = window;
- window.target = target;
- window.input = target.name;
- window.minSize = new Vector2(100, 44);
- window.position = new Rect(0, 0, width, 44);
- window.UpdatePositionToMouse();
- return window;
- }
- private void UpdatePositionToMouse() {
- if (Event.current == null) return;
- Vector3 mousePoint = GUIUtility.GUIToScreenPoint(Event.current.mousePosition);
- Rect pos = position;
- pos.x = mousePoint.x - position.width * 0.5f;
- pos.y = mousePoint.y - 10;
- position = pos;
- }
- private void OnLostFocus() {
- // Make the popup close on lose focus
- Close();
- }
- private void OnGUI() {
- if (firstFrame) {
- UpdatePositionToMouse();
- firstFrame = false;
- }
- GUI.SetNextControlName(inputControlName);
- input = EditorGUILayout.TextField(input);
- EditorGUI.FocusTextInControl(inputControlName);
- Event e = Event.current;
- // If input is empty, revert name to default instead
- if (input == null || input.Trim() == "") {
- if (GUILayout.Button("Revert to default") || (e.isKey && e.keyCode == KeyCode.Return)) {
- target.name = NodeEditorUtilities.NodeDefaultName(target.GetType());
- NodeEditor.GetEditor((XNode.Node)target, NodeEditorWindow.current).OnRename();
- AssetDatabase.SetMainObject((target as XNode.Node).graph, AssetDatabase.GetAssetPath(target));
- AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(target));
- Close();
- target.TriggerOnValidate();
- }
- }
- // Rename asset to input text
- else {
- if (GUILayout.Button("Apply") || (e.isKey && e.keyCode == KeyCode.Return)) {
- target.name = input;
- NodeEditor.GetEditor((XNode.Node)target, NodeEditorWindow.current).OnRename();
- AssetDatabase.SetMainObject((target as XNode.Node).graph, AssetDatabase.GetAssetPath(target));
- AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(target));
- Close();
- target.TriggerOnValidate();
- }
- }
- if (e.isKey && e.keyCode == KeyCode.Escape) {
- Close();
- }
- }
- private void OnDestroy() {
- EditorGUIUtility.editingTextField = false;
- }
- }
- }
|