87 lines
2.7 KiB
C#
87 lines
2.7 KiB
C#
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<RepositoryPackageData> RepositoryPackageDatas = new();
|
|
public static FrameworkPackageManagerWindow Instance;
|
|
|
|
public FrameworkPackageManagerWindow()
|
|
{
|
|
Instance = this;
|
|
}
|
|
|
|
public void RefreshPackageData(Action callBack)
|
|
{
|
|
RepositoryDataFetcher.FetchRepositoryData((datas) =>
|
|
{
|
|
PackageManagerCheckTool.ValidatePackageStates(datas);
|
|
RepositoryPackageDatas = datas;
|
|
callBack?.Invoke();
|
|
});
|
|
}
|
|
|
|
[MenuItem("Tools/AlicizaX/Package Manager")]
|
|
internal static void Open()
|
|
{
|
|
GetWindow<FrameworkPackageManagerWindow>().Show();
|
|
}
|
|
|
|
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;
|
|
|
|
Refresh();
|
|
}
|
|
|
|
private void PackageListViewOnOnSelectionChangedEvent(IEnumerable<RepositoryPackageData> obj)
|
|
{
|
|
packageInfoView.RefreshView(obj.First());
|
|
}
|
|
}
|
|
}
|