ZoeAppClass/Library/PackageCache/com.unity.addressables@1.1.10/Editor/GUI/AddressableAssetsSettingsLa...

105 lines
3.7 KiB
C#

using System;
using System.Collections.Generic;
using UnityEditor.AddressableAssets.Settings;
using UnityEngine;
namespace UnityEditor.AddressableAssets.GUI
{
class LabelMaskPopupContent : PopupWindowContent
{
AddressableAssetSettings m_Settings;
List<AddressableAssetEntry> m_Entries;
Dictionary<string, int> m_LabelCount;
GUIStyle m_ToggleMixed;
int m_LastItemCount = -1;
Vector2 m_Rect;
public LabelMaskPopupContent(AddressableAssetSettings settings, List<AddressableAssetEntry> e, Dictionary<string, int> count)
{
m_Settings = settings;
m_Entries = e;
m_LabelCount = count;
}
public override Vector2 GetWindowSize()
{
var labelTable = m_Settings.labelTable;
if (m_LastItemCount != labelTable.labelNames.Count)
{
int maxLen = 0;
string maxStr = "";
for (int i = 0; i < labelTable.labelNames.Count; i++)
{
var len = labelTable.labelNames[i].Length;
if (len > maxLen)
{
maxLen = len;
maxStr = labelTable.labelNames[i];
}
}
float minWidth, maxWidth;
var content = new GUIContent(maxStr);
UnityEngine.GUI.skin.toggle.CalcMinMaxWidth(content, out minWidth, out maxWidth);
var height = UnityEngine.GUI.skin.toggle.CalcHeight(content, maxWidth) + 3.5f;
m_Rect = new Vector2(Mathf.Clamp(maxWidth + 40, 60, 600), Mathf.Clamp(labelTable.labelNames.Count * height, 30, 150));
m_LastItemCount = labelTable.labelNames.Count;
}
return m_Rect;
}
void SetLabelForEntries(string label, bool value)
{
m_Settings.SetLabelValueForEntries(m_Entries, label, value);
m_LabelCount[label] = value ? m_Entries.Count : 0;
}
Vector2 m_ScrollPosition;
public override void OnGUI(Rect rect)
{
if (m_Entries.Count == 0)
return;
var labelTable = m_Settings.labelTable;
GUILayout.BeginArea(new Rect(rect.xMin + 3, rect.yMin + 3, rect.width - 6, rect.height - 6));
m_ScrollPosition = GUILayout.BeginScrollView(m_ScrollPosition);
//string toRemove = null;
foreach (var labelName in labelTable.labelNames)
{
EditorGUILayout.BeginHorizontal();
bool newState;
int count;
if (m_LabelCount == null)
count = m_Entries[0].labels.Contains(labelName) ? m_Entries.Count : 0;
else
m_LabelCount.TryGetValue(labelName, out count);
bool oldState = count == m_Entries.Count;
if (count == 0 || count == m_Entries.Count)
{
newState = GUILayout.Toggle(oldState, new GUIContent(labelName), GUILayout.ExpandWidth(false));
}
else
{
if (m_ToggleMixed == null)
m_ToggleMixed = new GUIStyle("ToggleMixed");
newState = GUILayout.Toggle(oldState, new GUIContent(labelName), m_ToggleMixed, GUILayout.ExpandWidth(false));
}
if (oldState != newState)
{
SetLabelForEntries(labelName, newState);
}
EditorGUILayout.EndHorizontal();
}
GUILayout.EndScrollView();
GUILayout.EndArea();
}
}
}