You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
4.6 KiB

  1. using System.Linq;
  2. using UnityEngine;
  3. using UnityEngine.Experimental.UIElements;
  4. using UnityEditor.Experimental.UIElements;
  5. namespace UnityEditor.PackageManager.UI
  6. {
  7. internal class PackageManagerWindow : EditorWindow
  8. {
  9. public const string PackagePath = "Packages/com.unity.package-manager-ui/";
  10. public const string ResourcesPath = PackagePath + "Editor/Resources/";
  11. private const string TemplatePath = ResourcesPath + "Templates/PackageManagerWindow.uxml";
  12. private const string DarkStylePath = ResourcesPath + "Styles/Main_Dark.uss";
  13. private const string LightStylePath = ResourcesPath + "Styles/Main_Light.uss";
  14. private const double targetVersionNumber = 2018.1;
  15. public PackageCollection Collection;
  16. public PackageSearchFilter SearchFilter;
  17. #if UNITY_2018_1_OR_NEWER
  18. public void OnEnable()
  19. {
  20. PackageCollection.InitInstance(ref Collection);
  21. PackageSearchFilter.InitInstance(ref SearchFilter);
  22. this.GetRootVisualContainer().AddStyleSheetPath(EditorGUIUtility.isProSkin ? DarkStylePath : LightStylePath);
  23. var windowResource = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(TemplatePath);
  24. if (windowResource != null)
  25. {
  26. var template = windowResource.CloneTree(null);
  27. this.GetRootVisualContainer().Add(template);
  28. template.StretchToParentSize();
  29. PackageList.OnSelected += OnPackageSelected;
  30. PackageList.OnLoaded += OnPackagesLoaded;
  31. PackageList.OnFocusChange += OnListFocusChange;
  32. PackageManagerToolbar.SearchToolbar.OnSearchChange += OnSearchChange;
  33. PackageManagerToolbar.SearchToolbar.OnFocusChange += OnToolbarFocusChange;
  34. // Disable filter while fetching first results
  35. if (!PackageCollection.Instance.LatestListPackages.Any())
  36. PackageManagerToolbar.SetEnabled(false);
  37. else
  38. PackageList.SelectLastSelection();
  39. }
  40. }
  41. private void OnListFocusChange()
  42. {
  43. PackageManagerToolbar.GrabFocus();
  44. }
  45. private void OnToolbarFocusChange()
  46. {
  47. PackageList.GrabFocus();
  48. }
  49. private void OnSearchChange(string searchText)
  50. {
  51. PackageSearchFilter.Instance.SearchText = searchText;
  52. PackageFiltering.FilterPackageList(PackageList);
  53. }
  54. public void OnDisable()
  55. {
  56. // Package list item may not be valid here.
  57. if (PackageList != null)
  58. {
  59. PackageList.OnSelected -= OnPackageSelected;
  60. PackageList.OnLoaded -= OnPackagesLoaded;
  61. }
  62. if (PackageManagerToolbar != null)
  63. {
  64. PackageManagerToolbar.SearchToolbar.OnSearchChange -= OnSearchChange;
  65. PackageManagerToolbar.SearchToolbar.OnFocusChange -= OnToolbarFocusChange;
  66. }
  67. }
  68. public void OnDestroy()
  69. {
  70. PackageSearchFilter.Instance.ResetSearch();
  71. PackageCollection.Instance.SetFilter(PackageFilter.All, false);
  72. }
  73. private void OnPackageSelected(Package package)
  74. {
  75. PackageDetails.SetPackage(package);
  76. }
  77. private void OnPackagesLoaded()
  78. {
  79. PackageManagerToolbar.SetEnabled(true);
  80. }
  81. private PackageList PackageList
  82. {
  83. get {return this.GetRootVisualContainer().Q<PackageList>("packageList");}
  84. }
  85. private PackageDetails PackageDetails
  86. {
  87. get {return this.GetRootVisualContainer().Q<PackageDetails>("detailsGroup");}
  88. }
  89. private PackageManagerToolbar PackageManagerToolbar
  90. {
  91. get {return this.GetRootVisualContainer().Q<PackageManagerToolbar>("toolbarContainer");}
  92. }
  93. internal Alert ErrorBanner { get { return this.GetRootVisualContainer().Q<Alert>("errorBanner"); } }
  94. #endif
  95. [MenuItem("Window/Package Manager", priority = 1500)]
  96. internal static void ShowPackageManagerWindow()
  97. {
  98. #if UNITY_2018_1_OR_NEWER
  99. var window = GetWindow<PackageManagerWindow>(false, "Packages", true);
  100. window.minSize = new Vector2(700, 250);
  101. window.Show();
  102. #else
  103. EditorUtility.DisplayDialog("Unsupported Unity Version", string.Format("The Package Manager requires Unity Version {0} or higher to operate.", targetVersionNumber), "Ok");
  104. #endif
  105. }
  106. }
  107. }