using System.Linq; using UnityEngine.Experimental.UIElements; namespace UnityEditor.PackageManager.UI { #if !UNITY_2018_3_OR_NEWER internal class PackageGroupFactory : UxmlFactory { protected override PackageGroup DoCreate(IUxmlAttributes bag, CreationContext cc) { return new PackageGroup(bag.GetPropertyString("name")); } } #endif internal class PackageGroup : VisualElement { #if UNITY_2018_3_OR_NEWER internal new class UxmlFactory : UxmlFactory { } #endif private readonly VisualElement root; internal readonly PackageGroupOrigins Origin; public PackageGroup previousGroup; public PackageGroup nextGroup; public PackageItem firstPackage; public PackageItem lastPackage; public PackageGroup() : this(string.Empty) { } public PackageGroup(string groupName) { name = groupName; root = Resources.GetTemplate("PackageGroup.uxml"); Add(root); if (string.IsNullOrEmpty(groupName) || groupName != PackageGroupOrigins.BuiltInPackages.ToString()) { HeaderTitle.text = "Packages"; Origin = PackageGroupOrigins.Packages; } else { HeaderTitle.text = "Built In Packages"; Origin = PackageGroupOrigins.BuiltInPackages; } } internal PackageItem AddPackage(Package package) { var packageItem = new PackageItem(package) {packageGroup = this}; var lastItem = List.Children().LastOrDefault() as PackageItem; if (lastItem != null) { lastItem.nextItem = packageItem; packageItem.previousItem = lastItem; packageItem.nextItem = null; } List.Add(packageItem); if (firstPackage == null) firstPackage = packageItem; lastPackage = packageItem; return packageItem; } private VisualElement List { get { return root.Q("groupContainer"); } } private Label HeaderTitle { get { return root.Q