using System;
using System.Diagnostics;
using System.Linq;
using UnityEditor;
using UnityEngine;
namespace Unity.VisualScripting
{
public class AcknowledgementPage : Page
{
public AcknowledgementPage(PluginAcknowledgement acknowledgement)
{
this.acknowledgement = acknowledgement;
title = shortTitle = acknowledgement.title;
icon = BoltCore.Resources.LoadIcon("AcknowledgementPage.png");
// Remove single newlines but keep multiple newlines.
licenseText = acknowledgement.licenseText == null ? null : string.Join("\n\n", acknowledgement.licenseText.Split(new[] { "\r\n\r\n", "\n\n" }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Replace("\r\n", "").Replace("\n", "")).ToArray());
}
private readonly PluginAcknowledgement acknowledgement;
private readonly string licenseText;
private Vector2 licenseScroll;
protected override void OnContentGUI()
{
GUILayout.BeginVertical(Styles.background);
GUILayout.Label(acknowledgement.title, Styles.title);
var hasAuthor = !StringUtility.IsNullOrWhiteSpace(acknowledgement.author);
var hasCopyright = acknowledgement.copyrightYear != null;
if (hasAuthor && hasCopyright)
{
GUILayout.Label($"Copyright \u00a9 {acknowledgement.copyrightYear} {acknowledgement.author}", Styles.property);
}
else if (hasAuthor)
{
GUILayout.Label($"Author: {acknowledgement.author}", Styles.property);
}
else if (hasCopyright)
{
GUILayout.Label($"Copyright \u00a9 {acknowledgement.copyrightYear}", Styles.property);
}
if (!StringUtility.IsNullOrWhiteSpace(acknowledgement.url))
{
if (GUILayout.Button(acknowledgement.url, Styles.url))
{
Process.Start(acknowledgement.url);
}
}
if (!StringUtility.IsNullOrWhiteSpace(acknowledgement.licenseName))
{
GUILayout.Label("License: " + acknowledgement.licenseName.Trim(), Styles.property);
}
LudiqGUI.EndVertical();
if (!StringUtility.IsNullOrWhiteSpace(acknowledgement.licenseText))
{
GUILayout.Box(GUIContent.none, LudiqStyles.horizontalSeparator);
licenseScroll = GUILayout.BeginScrollView(licenseScroll, Styles.licenseBackground);
GUILayout.Label(licenseText, Styles.licenseText);
GUILayout.EndScrollView();
LudiqGUI.Space(-1);
}
}
public static class Styles
{
static Styles()
{
title = new GUIStyle(EditorStyles.largeLabel);
title.margin = new RectOffset(0, 0, 0, 0);
title.fontSize = 15;
title.margin.bottom = 4;
property = new GUIStyle(EditorStyles.label);
property.wordWrap = true;
background = new GUIStyle(LudiqStyles.windowBackground);
background.padding = new RectOffset(10, 10, 10, 10);
url = new GUIStyle(property);
url.normal.textColor = ColorPalette.hyperlink;
url.active.textColor = ColorPalette.hyperlinkActive;
url.wordWrap = true;
licenseBackground = new GUIStyle(LudiqStyles.windowBackground);
licenseBackground.margin = new RectOffset(0, 0, 0, 0);
licenseBackground.padding = new RectOffset(10, 10, 10, 10);
licenseText = new GUIStyle(EditorStyles.label);
licenseText.font = Font.CreateDynamicFontFromOSFont(new[] { "Courier", "Courier New" }, 12);
licenseText.wordWrap = true;
licenseText.fontSize = 12;
}
public static readonly GUIStyle title;
public static readonly GUIStyle property;
public static readonly GUIStyle url;
public static readonly GUIStyle background;
public static readonly GUIStyle licenseBackground;
public static readonly GUIStyle licenseText;
}
}
}