WuhuIslandTesting/Library/PackageCache/com.stresslevelzero.marrow.sdk@1.2.0/Scripts/SLZ.Marrow.Editor/MarrowProjectValidationWindow.cs
2025-01-07 02:06:59 +01:00

156 lines
No EOL
5.2 KiB
C#

using System;
using System.Collections.Generic;
using SLZ.MarrowEditor;
using UnityEditor;
using UnityEngine;
public class MarrowProjectValidationWindow : EditorWindow
{
private GUIStyle windowStyle = null;
private GUIStyle boldLabelStyle = null;
private GUIStyle issueBoxStyle = null;
private GUIStyle wrapStyle = null;
[NonSerialized]
public List<MarrowProjectValidation.MarrowValidationRule> ruleIssues = new List<MarrowProjectValidation.MarrowValidationRule>();
[NonSerialized]
public bool validateChecked = false;
[NonSerialized]
public bool issuesExist = false;
public Action OnClose;
[MenuItem("Stress Level Zero/Void Tools/Validate Marrow Project Settings", false, 50)]
public static MarrowProjectValidationWindow ShowWindow()
{
var window = GetWindow<MarrowProjectValidationWindow>();
window.titleContent = new GUIContent(" Marrow Project Validation", EditorGUIUtility.IconContent("Error@2x").image);
window.minSize = new Vector2(500.0f, 300.0f);
window.CheckValidation(true);
window.Show();
return window;
}
private void CacheStyles()
{
if (windowStyle == null)
{
windowStyle = new GUIStyle(EditorStyles.label)
{
margin = new RectOffset(5, 5, 5, 5),
};
}
if (boldLabelStyle == null)
{
boldLabelStyle = new GUIStyle(EditorStyles.boldLabel)
{
stretchWidth = false
};
}
if (issueBoxStyle == null)
{
issueBoxStyle = new GUIStyle(EditorStyles.helpBox)
{
};
var paddingOffset = issueBoxStyle.padding;
int offset = (int)(EditorGUIUtility.singleLineHeight / 4f);
paddingOffset.bottom += offset;
paddingOffset.top += offset;
paddingOffset.left += offset;
paddingOffset.right += offset;
}
if (wrapStyle == null)
{
wrapStyle = new GUIStyle(EditorStyles.label)
{
wordWrap = true,
alignment = TextAnchor.MiddleLeft,
};
}
}
public void CheckValidation(bool force = false)
{
if (!validateChecked || force)
{
MarrowProjectValidation.GetIssues(ruleIssues);
issuesExist = ruleIssues.Count > 0;
validateChecked = true;
if (issuesExist)
{
titleContent = new GUIContent(" Marrow Project Validation", EditorGUIUtility.IconContent("Error@2x").image);
}
else
{
titleContent = new GUIContent(" Marrow Project Validation", EditorGUIUtility.IconContent("P4_CheckOutRemote@2x").image);
}
}
}
public void OnGUI()
{
CacheStyles();
CheckValidation();
using (new EditorGUILayout.VerticalScope(windowStyle))
{
EditorGUILayout.Space();
if (ruleIssues.Count <= 0)
{
EditorGUILayout.LabelField("No issues found in project.");
using (new EditorGUILayout.HorizontalScope())
{
GUILayout.FlexibleSpace();
if (GUILayout.Button("Cool", MarrowGUIStyles.DefaultButton))
{
Close();
}
}
}
else
{
EditorGUILayout.LabelField("Issues found in project!");
using (new EditorGUILayout.HorizontalScope())
{
EditorGUILayout.LabelField($"{ruleIssues.Count} Issue{(ruleIssues.Count > 1 ? "s" : "")}", boldLabelStyle);
GUILayout.FlexibleSpace();
if (GUILayout.Button("Fix All", MarrowGUIStyles.DefaultButton))
{
MarrowProjectValidation.FixIssues(ruleIssues);
validateChecked = false;
}
}
EditorGUILayout.Space();
foreach (var issue in ruleIssues)
{
using (new EditorGUILayout.HorizontalScope(issueBoxStyle))
{
GUILayout.Label(EditorGUIUtility.IconContent("Error"));
GUILayout.Label(issue.message, wrapStyle);
GUILayout.FlexibleSpace();
if (GUILayout.Button(new GUIContent("Fix", issue.fixMessage), MarrowGUIStyles.DefaultButton))
{
try
{
issue.FixRule();
validateChecked = false;
}
catch (Exception e)
{
Debug.LogError($"MarrowProjectValidation: Failed to run fix validation on \"{issue.message}\"");
Debug.LogException(e);
}
}
}
}
}
}
}
void OnDestroy()
{
OnClose?.Invoke();
}
}