91 lines
3.7 KiB
C#
91 lines
3.7 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
|
|
namespace UnityEditor.ShaderGraph.Drawing
|
|
{
|
|
class HelpBoxRow : VisualElement
|
|
{
|
|
// This element was originally reimplementing the entire HelpBox, but now that a UI Toolkit version is
|
|
// available, we are wrapping that for better consistency.
|
|
HelpBox m_HelpBox;
|
|
|
|
// Space beneath the help box for actions, i.e. Upgrade/Dismiss buttons on out-of-date nodes.
|
|
VisualElement m_ActionContainer;
|
|
|
|
public override VisualElement contentContainer => m_ActionContainer;
|
|
|
|
HelpBoxRow(string text, HelpBoxMessageType messageType)
|
|
{
|
|
m_HelpBox = new HelpBox(text, messageType);
|
|
m_ActionContainer = new VisualElement();
|
|
|
|
hierarchy.Add(m_HelpBox);
|
|
hierarchy.Add(m_ActionContainer);
|
|
}
|
|
|
|
static HelpBoxMessageType ToHelpBoxMessageType(MessageType messageType) =>
|
|
messageType switch
|
|
{
|
|
MessageType.Info => HelpBoxMessageType.Info,
|
|
MessageType.Warning => HelpBoxMessageType.Warning,
|
|
MessageType.Error => HelpBoxMessageType.Error,
|
|
MessageType.None => HelpBoxMessageType.None,
|
|
_ => HelpBoxMessageType.None
|
|
};
|
|
|
|
public HelpBoxRow(string text, MessageType messageType) : this(text, ToHelpBoxMessageType(messageType)) { }
|
|
|
|
public static VisualElement CreateVariantLimitHelpBox(int currentVariantCount, int maxVariantCount) =>
|
|
new HelpBoxRow("Variant limit exceeded. Hover for more info.", HelpBoxMessageType.Error)
|
|
{
|
|
tooltip = ShaderKeyword.kVariantLimitWarning
|
|
};
|
|
|
|
// Creates a standard prompt for upgrading a Shader Graph element.
|
|
// If dismissAction is provided, a help box is created with an upgrade button and a dismiss button.
|
|
// Otherwise, only an upgrade button is created.
|
|
public static VisualElement CreateUpgradePrompt(
|
|
string deprecatedTypeName,
|
|
Action upgradeAction,
|
|
Action dismissAction,
|
|
string tooltip = null,
|
|
string buttonText = null,
|
|
string labelText = null,
|
|
MessageType messageType = MessageType.Warning
|
|
)
|
|
{
|
|
tooltip ??= GetDefaultDeprecationMessage(deprecatedTypeName);
|
|
buttonText ??= "Update";
|
|
labelText ??= GetDefaultDeprecationMessage(deprecatedTypeName);
|
|
|
|
// If we are given a dismiss action, the user has not yet dismissed the warning and should be given the
|
|
// full message. Otherwise, assume the warning has already been dismissed and show just the upgrade button.
|
|
var displayFullWarning = dismissAction != null;
|
|
var upgradeButton = new Button(upgradeAction) { text = buttonText, tooltip = tooltip };
|
|
|
|
VisualElement container;
|
|
|
|
if (displayFullWarning)
|
|
{
|
|
var dismissButton = new Button(dismissAction) { text = "Dismiss" };
|
|
container = new HelpBoxRow(labelText, messageType);
|
|
container.Add(upgradeButton);
|
|
container.Add(dismissButton);
|
|
}
|
|
else
|
|
{
|
|
container = new VisualElement();
|
|
container.Add(upgradeButton);
|
|
}
|
|
|
|
return container;
|
|
|
|
static string GetDefaultDeprecationMessage(string typeName) =>
|
|
$"The {typeName} has new updates. This version maintains the old behavior. " +
|
|
$"If you update a {typeName}, you can use Undo to change it back. See the {typeName} " +
|
|
"documentation for more information.";
|
|
}
|
|
}
|
|
}
|