125 lines
5.6 KiB
C#
125 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();
|
||
|
//}
|
||
|
}
|
||
|
}
|
||
|
}
|