Net-Game/Library/PackageCache/com.unity.collab-proxy@50ac96531b63/Editor/UI/DialogWithCheckBox.cs
2025-03-28 08:33:16 -04:00

204 lines
5.5 KiB
C#

using UnityEditor;
using UnityEngine;
using Codice.Client.Common;
namespace Unity.PlasticSCM.Editor.UI
{
internal class DialogWithCheckBox : PlasticDialog
{
protected override Rect DefaultRect
{
get
{
var baseRect = base.DefaultRect;
return new Rect(baseRect.x, baseRect.y, 535, baseRect.height);
}
}
internal static GuiMessage.GuiMessageResponseButton Show(
string title,
string message,
string positiveButtonText,
string neutralButtonText,
string negativeButtonText,
MultiLinkLabelData dontShowAgainContent,
EditorWindow parentWindow,
out bool checkBoxValue)
{
checkBoxValue = false;
DialogWithCheckBox dialog = Create(
title,
message,
positiveButtonText,
neutralButtonText,
negativeButtonText,
dontShowAgainContent);
ResponseType result = dialog.RunModal(parentWindow);
if (result == ResponseType.Cancel || result == ResponseType.None)
return GuiMessage.GuiMessageResponseButton.Neutral;
checkBoxValue = dialog.mCheckBox;
if (result == ResponseType.Ok)
return GuiMessage.GuiMessageResponseButton.Positive;
return GuiMessage.GuiMessageResponseButton.Negative;
}
protected override string GetTitle()
{
return mTitle;
}
protected override void OnModalGUI()
{
DoMainContentSection();
DoButtonsArea();
DoCheckboxSection();
}
void DoMainContentSection()
{
using (new EditorGUILayout.VerticalScope())
{
GUILayout.Label(
mTitle,
UnityStyles.Dialog.MessageTitle);
GUILayout.Space(3f);
GUILayout.Label(
mMessage,
UnityStyles.Dialog.MessageText);
}
}
void DoButtonsArea()
{
using (new EditorGUILayout.VerticalScope())
{
GUILayout.Space(25f);
using (new EditorGUILayout.HorizontalScope())
{
GUILayout.FlexibleSpace();
if (Application.platform == RuntimePlatform.WindowsEditor)
{
DoPositiveButton();
DoNegativeButton();
DoNeutralButton();
return;
}
DoNegativeButton();
DoNeutralButton();
DoPositiveButton();
}
}
}
void DoPositiveButton()
{
GUILayout.Space(6f);
if (!AcceptButton(mPositiveButtonText,
30))
return;
OkButtonAction();
}
void DoNegativeButton()
{
if (string.IsNullOrEmpty(mNegativeButtonText))
return;
GUILayout.Space(6f);
if (!NormalButton(mNegativeButtonText))
return;
ApplyButtonAction();
}
void DoNeutralButton()
{
if (string.IsNullOrEmpty(mNeutralButtonText))
return;
GUILayout.Space(6f);
if (!NormalButton(mNeutralButtonText))
return;
CancelButtonAction();
}
void DoCheckboxSection()
{
GUILayout.Space(22f);
Rect backgroundRect = new Rect(0, GUILayoutUtility.GetLastRect().yMax, position.width, 50);
EditorGUI.DrawRect(backgroundRect, UnityStyles.Colors.DarkGray);
GUILayout.Space(4f);
using (new EditorGUILayout.HorizontalScope())
{
mCheckBox = EditorGUILayout.ToggleLeft(
string.Empty,
mCheckBox,
EditorStyles.boldLabel);
GUILayout.FlexibleSpace();
}
GUILayout.Space(-20);
using (new EditorGUILayout.HorizontalScope())
{
GUILayout.Space(22);
DrawTextBlockWithLink.ForMultiLinkLabel(mDontShowAgainContent);
}
GUILayout.Space(-17);
}
static DialogWithCheckBox Create(
string title,
string message,
string positiveButtonText,
string neutralButtonText,
string negativeButtonText,
MultiLinkLabelData dontShowAgainContent)
{
DialogWithCheckBox instance = CreateInstance<DialogWithCheckBox>();
instance.mEnterKeyAction = instance.OkButtonAction;
instance.mEscapeKeyAction = instance.CancelButtonAction;
instance.mTitle = title;
instance.mMessage = message;
instance.mPositiveButtonText = positiveButtonText;
instance.mNeutralButtonText = neutralButtonText;
instance.mNegativeButtonText = negativeButtonText;
instance.mDontShowAgainContent = dontShowAgainContent;
return instance;
}
string mTitle;
string mMessage;
string mPositiveButtonText;
string mNeutralButtonText;
string mNegativeButtonText;
MultiLinkLabelData mDontShowAgainContent;
bool mCheckBox;
}
}