VR4Medical/ICI/Library/PackageCache/com.unity.shadergraph@e5d3455aa133/Editor/Drawing/Views/HelpBoxRow.cs
2025-07-29 13:45:50 +03:00

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.";
}
}
}