1.5.0: Added interface and utility class for adding settings to toolbar settings provider

This commit is contained in:
Anders Ejlersen 2022-02-14 20:57:58 +01:00
parent 12de62dabb
commit 91c9504910
25 changed files with 272 additions and 133 deletions

View file

@ -1,3 +1,4 @@
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
@ -6,67 +7,50 @@ namespace Module.NavigationTool.Editor.Toolbar
internal static class ToolbarSettingsProvider
{
private static Styles STYLES;
private static IToolbarSettings[] SETTINGS;
[SettingsProvider]
public static SettingsProvider GetProvider()
{
Initialize();
var keywords = new List<string> { "Toolbar" };
for (var i = 0; i < SETTINGS.Length; i++)
{
keywords.Add(SETTINGS[i].Title);
}
return new SettingsProvider("Module/Toolbar", SettingsScope.User)
{
label = "Toolbar",
keywords = new[] { "Scene", "UI", "Toolbar" },
keywords = keywords.ToArray(),
guiHandler = OnGui
};
}
private static void OnGui(string searchContext)
private static void Initialize()
{
if (STYLES == null)
STYLES = new Styles();
STYLES.Initialize((GUI.skin));
if (SETTINGS == null)
SETTINGS = ToolbarSettingsUtility.GetAllSettings();
}
private static void OnGui(string searchContext)
{
Initialize();
STYLES.Initialize(GUI.skin);
EditorGUILayout.BeginVertical(STYLES.settingsGroup);
{
EditorGUILayout.LabelField("UI", EditorStyles.boldLabel);
ToolbarSettings.IsUiEnabled = EditorGUILayout.Toggle("Enable Canvas picker", ToolbarSettings.IsUiEnabled);
ToolbarSettings.IsUiLayerEnabled = EditorGUILayout.Toggle("Enable Layer toggle", ToolbarSettings.IsUiLayerEnabled);
EditorGUILayout.Space();
EditorGUILayout.LabelField("Scene", EditorStyles.boldLabel);
ToolbarSettings.IsSceneEnabled = EditorGUILayout.Toggle("Enable Scene picker", ToolbarSettings.IsSceneEnabled);
EditorGUILayout.Space();
EditorGUILayout.LabelField("Build Target", EditorStyles.boldLabel);
ToolbarSettings.IsBuildEnabled = EditorGUILayout.Toggle("Enable Build Target picker", ToolbarSettings.IsBuildEnabled);
EditorGUILayout.Space();
EditorGUILayout.LabelField("Time", EditorStyles.boldLabel);
ToolbarSettings.IsTimeScaleEnabled = EditorGUILayout.Toggle("Enable Time Scale slider", ToolbarSettings.IsTimeScaleEnabled);
GUI.enabled = ToolbarSettings.IsTimeScaleEnabled;
float timeScaleMinValue = EditorGUILayout.FloatField("Min Value", ToolbarSettings.TimeScaleMinValue);
float timeScaleMaxValue = EditorGUILayout.FloatField("Max Value", ToolbarSettings.TimeScaleMaxValue);
if (!Mathf.Approximately(timeScaleMinValue, ToolbarSettings.TimeScaleMinValue))
for (var i = 0; i < SETTINGS.Length; i++)
{
if (timeScaleMinValue < 0.0f)
timeScaleMinValue = 0.0f;
if (timeScaleMinValue > timeScaleMaxValue)
timeScaleMaxValue = timeScaleMinValue;
IToolbarSettings settings = SETTINGS[i];
EditorGUILayout.LabelField(settings.Title, EditorStyles.boldLabel);
settings.Draw();
EditorGUILayout.Space();
}
else if (!Mathf.Approximately(timeScaleMaxValue, ToolbarSettings.TimeScaleMaxValue))
{
if (timeScaleMaxValue < 0.0f)
timeScaleMaxValue = 0.0f;
if (timeScaleMaxValue < timeScaleMinValue)
timeScaleMinValue = timeScaleMaxValue;
}
ToolbarSettings.TimeScaleMinValue = timeScaleMinValue;
ToolbarSettings.TimeScaleMaxValue = timeScaleMaxValue;
GUI.enabled = true;
}
EditorGUILayout.EndVertical();
}