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.

75 lines
2.2 KiB

  1. using System.Linq;
  2. using UnityEngine.Experimental.UIElements;
  3. namespace UnityEditor.PackageManager.UI
  4. {
  5. #if !UNITY_2018_3_OR_NEWER
  6. internal class PackageGroupFactory : UxmlFactory<PackageGroup>
  7. {
  8. protected override PackageGroup DoCreate(IUxmlAttributes bag, CreationContext cc)
  9. {
  10. return new PackageGroup(bag.GetPropertyString("name"));
  11. }
  12. }
  13. #endif
  14. internal class PackageGroup : VisualElement
  15. {
  16. #if UNITY_2018_3_OR_NEWER
  17. internal new class UxmlFactory : UxmlFactory<PackageGroup> { }
  18. #endif
  19. private readonly VisualElement root;
  20. internal readonly PackageGroupOrigins Origin;
  21. public PackageGroup previousGroup;
  22. public PackageGroup nextGroup;
  23. public PackageItem firstPackage;
  24. public PackageItem lastPackage;
  25. public PackageGroup() : this(string.Empty)
  26. {
  27. }
  28. public PackageGroup(string groupName)
  29. {
  30. name = groupName;
  31. root = Resources.GetTemplate("PackageGroup.uxml");
  32. Add(root);
  33. if (string.IsNullOrEmpty(groupName) || groupName != PackageGroupOrigins.BuiltInPackages.ToString())
  34. {
  35. HeaderTitle.text = "Packages";
  36. Origin = PackageGroupOrigins.Packages;
  37. }
  38. else
  39. {
  40. HeaderTitle.text = "Built In Packages";
  41. Origin = PackageGroupOrigins.BuiltInPackages;
  42. }
  43. }
  44. internal PackageItem AddPackage(Package package)
  45. {
  46. var packageItem = new PackageItem(package) {packageGroup = this};
  47. var lastItem = List.Children().LastOrDefault() as PackageItem;
  48. if (lastItem != null)
  49. {
  50. lastItem.nextItem = packageItem;
  51. packageItem.previousItem = lastItem;
  52. packageItem.nextItem = null;
  53. }
  54. List.Add(packageItem);
  55. if (firstPackage == null) firstPackage = packageItem;
  56. lastPackage = packageItem;
  57. return packageItem;
  58. }
  59. private VisualElement List { get { return root.Q<VisualElement>("groupContainer"); } }
  60. private Label HeaderTitle { get { return root.Q<Label>("headerTitle"); } }
  61. }
  62. }