using System; using System.Collections.Generic; using System.IO; using System.Linq; using UnityEditor; using UnityEngine; using UnityEngine.UIElements; namespace AlicizaX.PackageManager.Editor { [EditorWindowTitle(title = "Package Manager", icon = "Package Manager")] internal class FrameworkPackageManagerWindow : EditorWindow { private const string VisualAssetPath = "Packages/com.alicizax.unity.packagemanager/Editor/PackageManager/Res/AlicizaXPackageManagerWindow.uxml"; public List RepositoryPackageDatas = new(); public static FrameworkPackageManagerWindow Instance; public FrameworkPackageManagerWindow() { Instance = this; } public void RefreshPackage(string packageName) { var package = RepositoryPackageDatas.Find(t => t.name.Equals(packageName)); if (package != null) { packageListView.itemsSource = RepositoryPackageDatas; packageListView.Rebuild(); } } private void RefreshPackageData(Action callBack) { RepositoryDataFetcher.FetchRepositoryData((datas) => { PackageManagerCheckTool.ValidatePackageStates(datas); RepositoryPackageDatas = datas; callBack?.Invoke(); }); } [MenuItem("Tools/AlicizaX/Package Manager")] internal static void Open() { GetWindow().Show(); } private void CreateGUI() { VisualTreeAsset visualTree = AssetDatabase.LoadAssetAtPath(VisualAssetPath); visualTree.CloneTree(rootVisualElement); CreateLeftList(); } private void Refresh() { RefreshPackageData(() => { packageListView.itemsSource = RepositoryPackageDatas; packageListView.Rebuild(); }); } private PackageListView packageListView; private PackageInfoView packageInfoView; private void CreateLeftList() { var leftContainer = rootVisualElement.Q("LeftContainer"); leftContainer.style.backgroundColor = new Color(0.1686275f, 0.1606275f, 0.1686275f); packageListView = new PackageListView(); leftContainer.Add(packageListView); packageListView.OnSelectionChangedEvent += PackageListViewOnOnSelectionChangedEvent; leftContainer.Add(new PackageBottomStateBar()); var rightContainer = rootVisualElement.Q("RightContainer"); packageInfoView = new PackageInfoView(); rightContainer.Add(packageInfoView); packageListView.itemsSource = RepositoryPackageDatas; Refresh(); } private void PackageListViewOnOnSelectionChangedEvent(IEnumerable obj) { packageInfoView.RefreshView(obj.First()); } } }