initial upload
This commit is contained in:
@ -0,0 +1,113 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Convai.Scripts.Runtime.LoggerSystem;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Convai.Scripts.Editor.Setup.LoggerSettings
|
||||
{
|
||||
public class LoggerSettingsLogic
|
||||
{
|
||||
private readonly Runtime.LoggerSystem.LoggerSettings _loggerSettings = Resources.Load<Runtime.LoggerSystem.LoggerSettings>("LoggerSettings");
|
||||
private Dictionary<FieldInfo, Toggle> _selectAllMapping;
|
||||
private Dictionary<FieldInfo, List<Toggle>> _toggleMapping;
|
||||
|
||||
public bool GetLogLevelEnabledStatus(FieldInfo fieldInfo, ConvaiLogger.LogLevel logLevel)
|
||||
{
|
||||
return ((ConvaiLogger.LogLevel)fieldInfo.GetValue(_loggerSettings) & logLevel) != 0;
|
||||
}
|
||||
|
||||
public bool IsAllSelectedForCategory(FieldInfo fieldInfo)
|
||||
{
|
||||
ConvaiLogger.LogLevel logLevel = (ConvaiLogger.LogLevel)fieldInfo.GetValue(_loggerSettings);
|
||||
return Enum.GetValues(typeof(ConvaiLogger.LogLevel))
|
||||
.Cast<ConvaiLogger.LogLevel>()
|
||||
.Where(enumType => enumType != ConvaiLogger.LogLevel.None)
|
||||
.All(enumType => (logLevel & enumType) != 0);
|
||||
}
|
||||
|
||||
public void AddToToggleDictionary(FieldInfo fieldInfo, Toggle toggle)
|
||||
{
|
||||
_toggleMapping ??= new Dictionary<FieldInfo, List<Toggle>>();
|
||||
if (_toggleMapping.ContainsKey(fieldInfo))
|
||||
_toggleMapping[fieldInfo].Add(toggle);
|
||||
else
|
||||
_toggleMapping.Add(fieldInfo, new List<Toggle> { toggle });
|
||||
}
|
||||
|
||||
public void AddToSelectAllDictionary(FieldInfo fieldInfo, Toggle toggle)
|
||||
{
|
||||
_selectAllMapping ??= new Dictionary<FieldInfo, Toggle>();
|
||||
_selectAllMapping[fieldInfo] = toggle;
|
||||
}
|
||||
|
||||
public void OnToggleClicked(FieldInfo fieldInfo, ConvaiLogger.LogLevel logLevel, bool status)
|
||||
{
|
||||
UpdateEnumFlag(fieldInfo, logLevel, status);
|
||||
_selectAllMapping[fieldInfo].SetValueWithoutNotify(IsAllSelectedForCategory(fieldInfo));
|
||||
EditorUtility.SetDirty(_loggerSettings);
|
||||
}
|
||||
|
||||
private void UpdateEnumFlag(FieldInfo fieldInfo, ConvaiLogger.LogLevel logLevel, bool status)
|
||||
{
|
||||
ConvaiLogger.LogLevel value = (ConvaiLogger.LogLevel)fieldInfo.GetValue(_loggerSettings);
|
||||
switch (status)
|
||||
{
|
||||
case true:
|
||||
value |= logLevel;
|
||||
break;
|
||||
case false:
|
||||
value &= ~logLevel;
|
||||
break;
|
||||
}
|
||||
|
||||
fieldInfo.SetValue(_loggerSettings, value);
|
||||
}
|
||||
|
||||
public void OnSelectAllClicked(FieldInfo fieldInfo, bool status)
|
||||
{
|
||||
ConvaiLogger.LogLevel value = status ? (ConvaiLogger.LogLevel)31 : 0;
|
||||
fieldInfo.SetValue(_loggerSettings, value);
|
||||
EditorUtility.SetDirty(_loggerSettings);
|
||||
|
||||
UpdateToggleValues(fieldInfo, status);
|
||||
}
|
||||
|
||||
private void UpdateToggleValues(FieldInfo fieldInfo, bool status)
|
||||
{
|
||||
foreach (Toggle toggle in _toggleMapping[fieldInfo]) toggle.SetValueWithoutNotify(status);
|
||||
}
|
||||
|
||||
public void ClearAllOnClicked()
|
||||
{
|
||||
foreach (FieldInfo fieldInfo in typeof(Runtime.LoggerSystem.LoggerSettings).GetFields())
|
||||
{
|
||||
foreach (ConvaiLogger.LogLevel enumType in Enum.GetValues(typeof(ConvaiLogger.LogLevel)).Cast<ConvaiLogger.LogLevel>()) UpdateEnumFlag(fieldInfo, enumType, false);
|
||||
UpdateToggleValues(fieldInfo, false);
|
||||
UpdateSelectAllValues(fieldInfo, false);
|
||||
}
|
||||
|
||||
EditorUtility.SetDirty(_loggerSettings);
|
||||
}
|
||||
|
||||
private void UpdateSelectAllValues(FieldInfo fieldInfo, bool status)
|
||||
{
|
||||
_selectAllMapping[fieldInfo].SetValueWithoutNotify(status);
|
||||
}
|
||||
|
||||
public void SelectAllOnClicked()
|
||||
{
|
||||
foreach (FieldInfo fieldInfo in typeof(Runtime.LoggerSystem.LoggerSettings).GetFields())
|
||||
{
|
||||
foreach (ConvaiLogger.LogLevel enumType in Enum.GetValues(typeof(ConvaiLogger.LogLevel)).Cast<ConvaiLogger.LogLevel>()) UpdateEnumFlag(fieldInfo, enumType, true);
|
||||
UpdateToggleValues(fieldInfo, true);
|
||||
UpdateSelectAllValues(fieldInfo, true);
|
||||
}
|
||||
|
||||
EditorUtility.SetDirty(_loggerSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 89de643989fd4cfea9cfea6be828d4ae
|
||||
timeCreated: 1723360157
|
||||
@ -0,0 +1,139 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using Convai.Scripts.Runtime.LoggerSystem;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Convai.Scripts.Editor.Setup.LoggerSettings
|
||||
{
|
||||
public class LoggerSettingsUI
|
||||
{
|
||||
private readonly LoggerSettingsLogic _loggerSettingsLogic;
|
||||
|
||||
public LoggerSettingsUI(VisualElement rootElement)
|
||||
{
|
||||
VisualElement contentContainer = rootElement.Q<VisualElement>("content-container");
|
||||
if (contentContainer == null)
|
||||
{
|
||||
ConvaiLogger.Warn("Cannot find Content Container", ConvaiLogger.LogCategory.UI);
|
||||
return;
|
||||
}
|
||||
|
||||
VisualElement loggerTable = contentContainer.Q<VisualElement>("logger-table");
|
||||
if (loggerTable == null)
|
||||
{
|
||||
ConvaiLogger.Warn("Cannot find loggerTable", ConvaiLogger.LogCategory.UI);
|
||||
return;
|
||||
}
|
||||
|
||||
_loggerSettingsLogic = new LoggerSettingsLogic();
|
||||
CreateLoggerTable(contentContainer);
|
||||
SetupButtons(contentContainer);
|
||||
}
|
||||
|
||||
private void CreateLoggerTable(VisualElement contentContainer)
|
||||
{
|
||||
VisualElement loggerSettings = contentContainer.Q<VisualElement>("logger-settings");
|
||||
VisualElement loggerTable = loggerSettings.Q<VisualElement>("logger-table");
|
||||
CreateHeaders(loggerTable);
|
||||
VisualElement lastRow = null;
|
||||
foreach (FieldInfo fieldInfo in typeof(Runtime.LoggerSystem.LoggerSettings).GetFields())
|
||||
{
|
||||
VisualElement tableRow = new();
|
||||
Label categoryName = new(fieldInfo.Name);
|
||||
Toggle selectAll = CreateSelectAllForCategory(fieldInfo);
|
||||
_loggerSettingsLogic.AddToSelectAllDictionary(fieldInfo, selectAll);
|
||||
categoryName.AddToClassList("logger-table-element");
|
||||
tableRow.Add(selectAll);
|
||||
tableRow.Add(categoryName);
|
||||
CreateSeverityTogglesForCategory(fieldInfo, tableRow);
|
||||
tableRow.AddToClassList("logger-table-row");
|
||||
loggerTable.Add(tableRow);
|
||||
lastRow = tableRow;
|
||||
}
|
||||
|
||||
lastRow?.AddToClassList("logger-table-row-last");
|
||||
}
|
||||
|
||||
private static void CreateHeaders(VisualElement loggerTable)
|
||||
{
|
||||
VisualElement tableHeader = new();
|
||||
VisualElement selectAll = new Label("Select All");
|
||||
VisualElement category = new Label("Category");
|
||||
selectAll.AddToClassList("logger-table-element");
|
||||
category.AddToClassList("logger-table-element");
|
||||
tableHeader.Add(selectAll);
|
||||
tableHeader.Add(category);
|
||||
foreach (ConvaiLogger.LogLevel logLevel in Enum.GetValues(typeof(ConvaiLogger.LogLevel)))
|
||||
{
|
||||
if (logLevel == ConvaiLogger.LogLevel.None) continue;
|
||||
VisualElement label = new Label(logLevel.ToString());
|
||||
label.AddToClassList("logger-table-element");
|
||||
tableHeader.Add(label);
|
||||
}
|
||||
|
||||
tableHeader.AddToClassList("logger-table-row");
|
||||
tableHeader.AddToClassList("logger-table-row-first");
|
||||
loggerTable.Add(tableHeader);
|
||||
}
|
||||
|
||||
private Toggle CreateSelectAllForCategory(FieldInfo fieldInfo)
|
||||
{
|
||||
Toggle selectAll = new()
|
||||
{
|
||||
value = _loggerSettingsLogic.IsAllSelectedForCategory(fieldInfo)
|
||||
};
|
||||
selectAll.RegisterValueChangedCallback(evt => { _loggerSettingsLogic.OnSelectAllClicked(fieldInfo, evt.newValue); });
|
||||
selectAll.AddToClassList("logger-table-element");
|
||||
return selectAll;
|
||||
}
|
||||
|
||||
private void CreateSeverityTogglesForCategory(FieldInfo fieldInfo, VisualElement severityContainer)
|
||||
{
|
||||
foreach (ConvaiLogger.LogLevel enumType in Enum.GetValues(typeof(ConvaiLogger.LogLevel)))
|
||||
{
|
||||
if (enumType == ConvaiLogger.LogLevel.None) continue;
|
||||
Toggle toggle = new()
|
||||
{
|
||||
value = _loggerSettingsLogic.GetLogLevelEnabledStatus(fieldInfo, enumType)
|
||||
};
|
||||
|
||||
void Callback(ChangeEvent<bool> evt)
|
||||
{
|
||||
_loggerSettingsLogic.OnToggleClicked(fieldInfo, enumType, evt.newValue);
|
||||
}
|
||||
|
||||
toggle.UnregisterValueChangedCallback(Callback);
|
||||
toggle.RegisterValueChangedCallback(Callback);
|
||||
toggle.AddToClassList("logger-table-element");
|
||||
severityContainer.Add(toggle);
|
||||
_loggerSettingsLogic.AddToToggleDictionary(fieldInfo, toggle);
|
||||
}
|
||||
|
||||
severityContainer.AddToClassList("severity-container");
|
||||
}
|
||||
|
||||
private void SetupButtons(VisualElement content)
|
||||
{
|
||||
VisualElement loggerSettings = content.Q<VisualElement>("logger-settings");
|
||||
if (loggerSettings == null)
|
||||
{
|
||||
ConvaiLogger.Warn("Cannot find logger-settings", ConvaiLogger.LogCategory.UI);
|
||||
return;
|
||||
}
|
||||
|
||||
Button selectAll = loggerSettings.Q<Button>("select-all");
|
||||
if (selectAll != null)
|
||||
{
|
||||
selectAll.clicked -= _loggerSettingsLogic.SelectAllOnClicked;
|
||||
selectAll.clicked += _loggerSettingsLogic.SelectAllOnClicked;
|
||||
}
|
||||
|
||||
Button clearAll = loggerSettings.Q<Button>("clear-all");
|
||||
if (clearAll != null)
|
||||
{
|
||||
clearAll.clicked -= _loggerSettingsLogic.ClearAllOnClicked;
|
||||
clearAll.clicked += _loggerSettingsLogic.ClearAllOnClicked;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 061d492629d1a5b4f818e1b2d7fd5997
|
||||
timeCreated: 1723197447
|
||||
Reference in New Issue
Block a user