using UnityEngine; using UnityEngine.Experimental.UIElements; namespace UnityEditor.PackageManager.UI { #if !UNITY_2018_3_OR_NEWER internal class PackageAddFromUrlFieldFactory : UxmlFactory { protected override PackageAddFromUrlField DoCreate(IUxmlAttributes bag, CreationContext cc) { return new PackageAddFromUrlField(); } } #endif internal class PackageAddFromUrlField : VisualElement { #if UNITY_2018_3_OR_NEWER internal new class UxmlFactory : UxmlFactory { } #endif private string urlText; private readonly VisualElement root; public PackageAddFromUrlField() { root = Resources.GetTemplate("PackageAddFromUrlField.uxml"); Add(root); UrlTextField.value = urlText; AddButton.SetEnabled(!string.IsNullOrEmpty(urlText)); AddButton.clickable.clicked += OnAddButtonClick; RegisterCallback(OnEnterPanel); RegisterCallback(OnLeavePanel); } private void OnUrlTextFieldChange(ChangeEvent evt) { urlText = evt.newValue; AddButton.SetEnabled(!string.IsNullOrEmpty(urlText)); } private void OnUrlTextFieldFocus(FocusEvent evt) { Show(); } private void OnUrlTextFieldFocusOut(FocusOutEvent evt) { Hide(); } private void OnContainerFocus(FocusEvent evt) { UrlTextField.Focus(); } private void OnContainerFocusOut(FocusOutEvent evt) { Hide(); } private void OnEnterPanel(AttachToPanelEvent evt) { AddFromUrlFieldContainer.RegisterCallback(OnContainerFocus); AddFromUrlFieldContainer.RegisterCallback(OnContainerFocusOut); UrlTextField.RegisterCallback(OnUrlTextFieldFocus); UrlTextField.RegisterCallback(OnUrlTextFieldFocusOut); UrlTextField.RegisterCallback>(OnUrlTextFieldChange); UrlTextField.RegisterCallback(OnKeyDownShortcut); Hide(); } private void OnLeavePanel(DetachFromPanelEvent evt) { AddFromUrlFieldContainer.UnregisterCallback(OnContainerFocus); AddFromUrlFieldContainer.UnregisterCallback(OnContainerFocusOut); UrlTextField.UnregisterCallback(OnUrlTextFieldFocus); UrlTextField.UnregisterCallback(OnUrlTextFieldFocusOut); UrlTextField.UnregisterCallback>(OnUrlTextFieldChange); UrlTextField.UnregisterCallback(OnKeyDownShortcut); } private void OnKeyDownShortcut(KeyDownEvent evt) { switch (evt.keyCode) { case KeyCode.Escape: Hide(); break; case KeyCode.Return: case KeyCode.KeypadEnter: OnAddButtonClick(); break; } } private void OnAddButtonClick() { var path = urlText; if (!string.IsNullOrEmpty(path) && !Package.AddRemoveOperationInProgress) { Package.AddFromLocalDisk(path); Hide(); } } internal void Hide() { UIUtils.SetElementDisplay(this, false); } internal void Show(bool reset = false) { if (reset) Reset(); UIUtils.SetElementDisplay(this, true); } private void Reset() { UrlTextField.value = string.Empty; urlText = string.Empty; AddButton.SetEnabled(false); UrlTextField.Focus(); } private VisualElement AddFromUrlFieldContainer { get { return root.Q("addFromUrlFieldContainer"); }} private TextField UrlTextField { get { return root.Q("urlTextField"); } } private Button AddButton{ get { return root.Q