134 lines
4.3 KiB
C#
134 lines
4.3 KiB
C#
using UnityEngine;
|
|
using UnityEngine.Experimental.UIElements;
|
|
|
|
namespace UnityEditor.PackageManager.UI
|
|
{
|
|
#if !UNITY_2018_3_OR_NEWER
|
|
internal class PackageAddFromUrlFieldFactory : UxmlFactory<PackageAddFromUrlField>
|
|
{
|
|
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<PackageAddFromUrlField> { }
|
|
#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<AttachToPanelEvent>(OnEnterPanel);
|
|
RegisterCallback<DetachFromPanelEvent>(OnLeavePanel);
|
|
}
|
|
|
|
private void OnUrlTextFieldChange(ChangeEvent<string> 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<FocusEvent>(OnContainerFocus);
|
|
AddFromUrlFieldContainer.RegisterCallback<FocusOutEvent>(OnContainerFocusOut);
|
|
UrlTextField.RegisterCallback<FocusEvent>(OnUrlTextFieldFocus);
|
|
UrlTextField.RegisterCallback<FocusOutEvent>(OnUrlTextFieldFocusOut);
|
|
UrlTextField.RegisterCallback<ChangeEvent<string>>(OnUrlTextFieldChange);
|
|
UrlTextField.RegisterCallback<KeyDownEvent>(OnKeyDownShortcut);
|
|
Hide();
|
|
}
|
|
|
|
private void OnLeavePanel(DetachFromPanelEvent evt)
|
|
{
|
|
AddFromUrlFieldContainer.UnregisterCallback<FocusEvent>(OnContainerFocus);
|
|
AddFromUrlFieldContainer.UnregisterCallback<FocusOutEvent>(OnContainerFocusOut);
|
|
UrlTextField.UnregisterCallback<FocusEvent>(OnUrlTextFieldFocus);
|
|
UrlTextField.UnregisterCallback<FocusOutEvent>(OnUrlTextFieldFocusOut);
|
|
UrlTextField.UnregisterCallback<ChangeEvent<string>>(OnUrlTextFieldChange);
|
|
UrlTextField.UnregisterCallback<KeyDownEvent>(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<VisualElement>("addFromUrlFieldContainer"); }}
|
|
private TextField UrlTextField { get { return root.Q<TextField>("urlTextField"); } }
|
|
private Button AddButton{ get { return root.Q<Button>("addFromUrlButton"); }}
|
|
}
|
|
} |