using System; using UnityEngine.Experimental.UIElements; namespace UnityEditor.PackageManager.UI { #if !UNITY_2018_3_OR_NEWER internal class AlertFactory : UxmlFactory { protected override Alert DoCreate(IUxmlAttributes bag, CreationContext cc) { return new Alert(); } } #endif internal class Alert : VisualElement { #if UNITY_2018_3_OR_NEWER internal new class UxmlFactory : UxmlFactory { } #endif private const string TemplatePath = PackageManagerWindow.ResourcesPath + "Templates/Alert.uxml"; private readonly VisualElement root; private const float originalPositionRight = 5.0f; private const float positionRightWithScroll = 12.0f; public Action OnCloseError; public Alert() { UIUtils.SetElementDisplay(this, false); root = AssetDatabase.LoadAssetAtPath(TemplatePath).CloneTree(null); Add(root); root.StretchToParentSize(); CloseButton.clickable.clicked += () => { if (null != OnCloseError) OnCloseError(); ClearError(); }; } public void SetError(Error error) { var message = "An error occured."; if (error != null) message = error.message ?? string.Format("An error occurred ({0})", error.errorCode.ToString()); AlertMessage.text = message; UIUtils.SetElementDisplay(this, true); } public void ClearError() { UIUtils.SetElementDisplay(this, false); AdjustSize(false); AlertMessage.text = ""; OnCloseError = null; } public void AdjustSize(bool verticalScrollerVisible) { if (verticalScrollerVisible) style.positionRight = originalPositionRight + positionRightWithScroll; else style.positionRight = originalPositionRight; } private Label AlertMessage { get { return root.Q