WuhuIslandTesting/Library/PackageCache/com.unity.addressables@1.21.12/Editor/GUI/AnalyzeRuleGUI.cs
2025-01-07 02:06:59 +01:00

124 lines
5.6 KiB
C#

using System;
using System.Collections.Generic;
using UnityEditor.AddressableAssets.Build;
using UnityEditor.IMGUI.Controls;
using UnityEngine;
using UnityEngine.AddressableAssets;
namespace UnityEditor.AddressableAssets.GUI
{
[Serializable]
class AnalyzeRuleGUI
{
[SerializeField]
private TreeViewState m_TreeState;
private AssetSettingsAnalyzeTreeView m_Tree;
private const float k_ButtonHeight = 20f;
private GUIContent m_AnalyzeSelectedRulesGUIContent = new GUIContent("Analyze Selected Rules", "Collect information about Addressables Groups based on the selected Rules");
private GUIContent m_ClearRulesGUIContent = new GUIContent("Clear", "Clear information collected for the Analyze Rules");
private GUIContent m_ClearSelectedRulesGUIContent = new GUIContent("Selection", "Clear information collected for the selected Rules");
private GUIContent m_ClearAllRulesGUIContent = new GUIContent("All", "Clear information collected for the all Rules");
private GUIContent m_FixSelectedRulesGUIContent = new GUIContent("Fix Selected Rules", "Make changes to Addressables Groups with errors found by the selected Fixable Rules");
private GUIContent m_ExportJsonGUIContent = new GUIContent("Export Results", "Export a json file with the analyze results for all rules");
private GUIContent m_ImportJsonGUIContent = new GUIContent("Import Results", "Import a json file with the analyze results for all rules, this will overwrite any existing results");
internal void OnGUI(Rect rect)
{
if (m_Tree == null)
{
if (m_TreeState == null)
m_TreeState = new TreeViewState();
m_Tree = new AssetSettingsAnalyzeTreeView(m_TreeState);
m_Tree.Reload();
}
var treeRect = new Rect(rect.xMin, rect.yMin + k_ButtonHeight, rect.width, rect.height - k_ButtonHeight);
m_Tree.OnGUI(treeRect);
var buttonRect = new Rect(rect.xMin, rect.yMin, rect.width, rect.height);
buttonRect.height = k_ButtonHeight;
GUILayout.BeginArea(buttonRect);
EditorGUI.BeginDisabledGroup(!m_Tree.SelectionContainsRuleContainer);
var runRect = buttonRect;
float activeWidth = 170;
runRect.width = activeWidth;
buttonRect.x += activeWidth;
buttonRect.width -= activeWidth;
if (UnityEngine.GUI.Button(runRect, m_AnalyzeSelectedRulesGUIContent, EditorStyles.toolbarButton))
{
EditorApplication.delayCall += () => m_Tree.RunAllSelectedRules();
}
var fixRect = buttonRect;
activeWidth = 120;
fixRect.width = activeWidth;
buttonRect.x += activeWidth;
buttonRect.width -= activeWidth;
if (UnityEngine.GUI.Button(fixRect, m_FixSelectedRulesGUIContent, EditorStyles.toolbarButton))
{
EditorApplication.delayCall += () => m_Tree.FixAllSelectedRules();
}
EditorGUI.EndDisabledGroup();
var clearRect = buttonRect;
activeWidth = 80;
clearRect.width = activeWidth;
buttonRect.x += activeWidth;
buttonRect.width -= activeWidth;
if (EditorGUI.DropdownButton(clearRect, m_ClearRulesGUIContent, FocusType.Passive, EditorStyles.toolbarDropDown))
{
var menu = new GenericMenu();
if (!m_Tree.SelectionContainsRuleContainer)
menu.AddDisabledItem(m_ClearSelectedRulesGUIContent, false);
else
menu.AddItem(m_ClearSelectedRulesGUIContent, false, () => EditorApplication.delayCall += () => m_Tree.ClearAllSelectedRules());
menu.AddItem(m_ClearAllRulesGUIContent, false, () => EditorApplication.delayCall += () => m_Tree.ClearAll());
menu.DropDown(clearRect);
}
GUIStyle m_ToolbarButtonStyle = "RL FooterButton";
GUIContent m_ManageLabelsButtonContent = EditorGUIUtility.TrIconContent("_Popup@2x", "Import/Export Analysis Results");
Rect plusRect = buttonRect;
plusRect.height = k_ButtonHeight;
plusRect.width = plusRect.height;
plusRect.x = (buttonRect.width - plusRect.width) + buttonRect.x;
if (plusRect.x < buttonRect.x)
plusRect.x = buttonRect.x;
plusRect.y += 2;
if (UnityEngine.GUI.Button(plusRect, m_ManageLabelsButtonContent, m_ToolbarButtonStyle))
{
var menu = new GenericMenu();
menu.AddItem(m_ExportJsonGUIContent, false, () => EditorApplication.delayCall += () =>
{
// select to save dialog
var path = EditorUtility.SaveFilePanel("Export analysis results to json", "",
"AddressablesAnalyseResults", "json");
AnalyzeSystem.SerializeData(path);
});
menu.AddItem(m_ImportJsonGUIContent, false, () => EditorApplication.delayCall += () =>
{
var path = EditorUtility.OpenFilePanel("Import analysis results from json", "", "json");
if (!string.IsNullOrEmpty(path))
AnalyzeSystem.DeserializeData(path);
});
menu.DropDown(plusRect);
}
GUILayout.EndArea();
//TODO
//if (GUILayout.Button("Revert Selected"))
//{
// m_Tree.RevertAllActiveRules();
//}
}
}
}