polygone/Library/PackageCache/com.unity.visualscripting@1.5.2/Editor/VSSettingsProvider/VSSettingsUpdate.cs
2021-08-02 05:44:37 -04:00

170 lines
6.8 KiB
C#

using System.Linq;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
namespace Unity.VisualScripting
{
public class VSSettingsUpdate
{
private const string title = "Plugins Update";
private const string buttonLabel = "Update";
private readonly List<Plugin> plugins;
public VSSettingsUpdate()
{
IEnumerable<Plugin> allPlugins = PluginContainer.GetAllPlugins();
Ensure.That(nameof(allPlugins)).IsNotNull(allPlugins);
plugins = new List<Plugin>(allPlugins.OrderByDependencies());
}
public void OnGUI()
{
GUILayout.Space(5f);
GUILayout.Label(title, EditorStyles.boldLabel);
GUILayout.Space(5f);
GUILayout.BeginVertical();
if (plugins.All(plugin => plugin.manifest.savedVersion == plugin.manifest.currentVersion))
{
string label = "All your plugins are up to date.";
GUILayout.BeginHorizontal(EditorStyles.helpBox);
GUILayout.Label(EditorGUIUtility.IconContent("console.infoicon"), GUILayout.ExpandWidth(false));
GUILayout.Box(label, EditorStyles.wordWrappedLabel);
GUILayout.EndHorizontal();
}
GUILayout.Space(5f);
DrawPluginVersionTable(plugins);
GUILayout.Space(5f);
if (plugins.Any(plugin => plugin.manifest.savedVersion != plugin.manifest.currentVersion))
{
if (GUILayout.Button(buttonLabel, Styles.defaultsButton))
{
VSBackupUtility.Backup();
(new VSMigrationUtility()).OnUpdate();
}
}
LudiqGUI.EndVertical();
}
private static void DrawPluginVersionTable(IEnumerable<Plugin> plugins)
{
var savedColumnHeader = new GUIContent("Saved");
var installedColumnHeader = new GUIContent("Installed");
var pluginsColumnWidth = 0f;
var savedColumnWidth = Styles.columnHeader.CalcSize(savedColumnHeader).x;
var installedColumnWidth = Styles.columnHeader.CalcSize(installedColumnHeader).x;
var stateColumnWidth = 0f;
foreach (var plugin in plugins)
{
pluginsColumnWidth = Mathf.Max(pluginsColumnWidth, Styles.pluginName.CalcSize(new GUIContent(plugin.manifest.name)).x);
savedColumnWidth = Mathf.Max(savedColumnWidth, Styles.version.CalcSize(new GUIContent(plugin.manifest.savedVersion.ToString())).x);
installedColumnWidth = Mathf.Max(installedColumnWidth, Styles.version.CalcSize(new GUIContent(plugin.manifest.currentVersion.ToString())).x);
stateColumnWidth = Mathf.Max(stateColumnWidth, Styles.state.CalcSize(VersionStateContent(plugin)).x);
}
LudiqGUI.BeginVertical();
// Header row
LudiqGUI.BeginHorizontal();
LudiqGUI.FlexibleSpace();
GUILayout.Label(GUIContent.none, Styles.columnHeader, GUILayout.Width(pluginsColumnWidth));
LudiqGUI.Space(Styles.columnSpacing);
GUILayout.Label(savedColumnHeader, Styles.columnHeader, GUILayout.Width(savedColumnWidth));
LudiqGUI.Space(Styles.columnSpacing);
GUILayout.Label(installedColumnHeader, Styles.columnHeader, GUILayout.Width(installedColumnWidth));
LudiqGUI.Space(Styles.columnSpacing);
GUILayout.Label(GUIContent.none, Styles.state, GUILayout.Width(stateColumnWidth));
LudiqGUI.FlexibleSpace();
LudiqGUI.EndHorizontal();
// Plugin rows
foreach (var plugin in plugins)
{
LudiqGUI.Space(Styles.rowSpacing);
LudiqGUI.BeginHorizontal();
LudiqGUI.FlexibleSpace();
GUILayout.Label(new GUIContent(plugin.manifest.name), Styles.pluginName, GUILayout.Width(pluginsColumnWidth));
LudiqGUI.Space(Styles.columnSpacing);
GUILayout.Label(new GUIContent(plugin.manifest.savedVersion.ToString()), Styles.version, GUILayout.Width(savedColumnWidth));
LudiqGUI.Space(Styles.columnSpacing);
GUILayout.Label(new GUIContent(plugin.manifest.currentVersion.ToString()), Styles.version, GUILayout.Width(installedColumnWidth));
LudiqGUI.Space(Styles.columnSpacing);
GUILayout.Label(VersionStateContent(plugin), Styles.state, GUILayout.Width(stateColumnWidth));
LudiqGUI.FlexibleSpace();
LudiqGUI.EndHorizontal();
}
LudiqGUI.EndVertical();
}
private static GUIContent VersionStateContent(Plugin plugin)
{
if (plugin.manifest.savedVersion < plugin.manifest.currentVersion)
{
return new GUIContent("New version", BoltCore.Icons.upgrade?[IconSize.Small]);
}
else if (plugin.manifest.savedVersion == plugin.manifest.currentVersion)
{
return new GUIContent("Up to date", BoltCore.Icons.upToDate?[IconSize.Small]);
}
else if (plugin.manifest.savedVersion > plugin.manifest.currentVersion)
{
return new GUIContent("Downgrade", BoltCore.Icons.downgrade?[IconSize.Small]);
}
else
{
return new GUIContent("Unknown");
}
}
public static class Styles
{
static Styles()
{
defaultsButton = new GUIStyle("Button");
defaultsButton.padding = new RectOffset(10, 10, 4, 4);
pluginName = new GUIStyle(EditorStyles.label);
pluginName.alignment = TextAnchor.MiddleRight;
version = new GUIStyle(EditorStyles.label);
version.alignment = TextAnchor.MiddleCenter;
columnHeader = new GUIStyle(EditorStyles.label);
columnHeader.alignment = TextAnchor.LowerCenter;
columnHeader.fontStyle = FontStyle.Bold;
state = new GUIStyle();
state.fixedWidth = IconSize.Small;
state.fixedHeight = IconSize.Small;
state.imagePosition = ImagePosition.ImageOnly;
state.alignment = TextAnchor.MiddleCenter;
}
public static readonly GUIStyle defaultsButton;
public static readonly GUIStyle pluginName;
public static readonly GUIStyle columnHeader;
public static readonly GUIStyle version;
public static readonly GUIStyle state;
public static readonly float columnSpacing = 10;
public static readonly float rowSpacing = 10;
}
}
}