using System.Linq; using UnityEditor; using UnityEditor.PackageManager.UI; using UnityEngine; using UnityEngine.Experimental.UIElements; using UnityEngine.Experimental.UIElements.StyleEnums; using PackageInfo = UnityEditor.PackageManager.PackageInfo; [InitializeOnLoad] public class PackageManagerExtentionExample : IPackageManagerExtension { // This class implments the new IPackageManagerExtension interface, allowing us to plug it // into the package manager window. this feature is still very much under development static PackageManagerExtentionExample() { Debug.Log("CALLED STATIC CTOR"); // This static constructor gets called becuase we have the InitializeOnLoad attribute // on our class. Here we register this PackageManager extention so our exta version list // shows up in the manager window PackageManagerExtensions.RegisterExtension(new PackageManagerExtentionExample()); } // this is the scrollview were going to put the version list into ScrollView tasksContainer; public VisualElement CreateExtensionUI() { Debug.Log("CALLED CreateExtensionUI"); VisualContainer root = new VisualContainer() { style = { backgroundColor = Color.grey, alignSelf = Align.FlexStart, flexDirection = FlexDirection.Row } }; tasksContainer = new ScrollView() { style = { width = 400, height = 100, flexDirection = FlexDirection.Column, } }; tasksContainer.showHorizontal = false; root.Add(tasksContainer); return root; } public void OnPackageSelectionChange(PackageInfo packageInfo) { // setup the version list for the currently selected package Debug.Log("CALLED OnPackageSelectionChange"); tasksContainer.contentContainer.Clear(); foreach (var version in packageInfo.versions.all.Reverse()) { tasksContainer.contentContainer.Add(NewVersion(version, packageInfo)); } } private VisualElement NewVersion(string version, PackageInfo packageInfo) { // create a list item for the passed in version var versionElement = new VisualContainer() { style = { width = 400, flexDirection = FlexDirection.Row } }; versionElement.name = version; // fist, lets put in the version name versionElement.Add(new Label(version)); // annnd now a bunch of interesting info versionElement.Add(new Toggle(null){text = "Recomended", on = (packageInfo.versions.recommended == version)}); versionElement.Add(new Toggle(null){text = "Compatible", on = (packageInfo.versions.compatible.Contains(version))}); versionElement.Add(new Toggle(null){text = "Latest Compatible", on = (packageInfo.versions.latestCompatible == version)}); Debug.Log("ADDED " + version); return versionElement; } public void OnPackageAddedOrUpdated(PackageInfo packageInfo) { Debug.Log("CALLED OnPackageAddedOrUpdated"); } public void OnPackageRemoved(PackageInfo packageInfo) { Debug.Log("CALLED OnPackageRemoved"); } }