156 lines
No EOL
5.2 KiB
C#
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();
|
|
}
|
|
} |