Initial Commit
This commit is contained in:
parent
53eb92e9af
commit
270ab7d11f
15341 changed files with 700234 additions and 0 deletions
|
@ -0,0 +1,170 @@
|
|||
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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue