com.alicizax.unity.packagem.../Editor/PackageManager/Window/FrameworkPackageManagerWindow.cs

97 lines
3.0 KiB
C#
Raw Normal View History

2025-02-20 10:48:57 +08:00
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";
2025-02-20 11:44:00 +08:00
public List<RepositoryPackageData> RepositoryPackageDatas = new();
public static FrameworkPackageManagerWindow Instance;
2025-02-20 10:48:57 +08:00
2025-02-20 11:44:00 +08:00
public FrameworkPackageManagerWindow()
{
Instance = this;
}
2025-02-20 10:48:57 +08:00
2025-02-20 13:15:18 +08:00
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)
2025-02-20 10:48:57 +08:00
{
RepositoryDataFetcher.FetchRepositoryData((datas) =>
{
PackageManagerCheckTool.ValidatePackageStates(datas);
RepositoryPackageDatas = datas;
callBack?.Invoke();
});
}
[MenuItem("Tools/AlicizaX/Package Manager")]
internal static void Open()
{
2025-02-20 11:44:00 +08:00
GetWindow<FrameworkPackageManagerWindow>().Show();
2025-02-20 10:48:57 +08:00
}
private void CreateGUI()
{
VisualTreeAsset visualTree = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(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<VisualElement>("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<VisualElement>("RightContainer");
packageInfoView = new PackageInfoView();
rightContainer.Add(packageInfoView);
packageListView.itemsSource = RepositoryPackageDatas;
2025-02-20 11:44:00 +08:00
Refresh();
2025-02-20 10:48:57 +08:00
}
private void PackageListViewOnOnSelectionChangedEvent(IEnumerable<RepositoryPackageData> obj)
{
packageInfoView.RefreshView(obj.First());
}
}
}