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