|
|
- 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"); }}
- }
- }
|