#if UNITY_6000_3_OR_NEWER using System; using UnityEditor; using Codice.Client.Common; namespace Unity.PlasticSCM.Editor.UI { internal class DialogWithCheckBox { internal static GuiMessage.GuiMessageResponseButton Show( string title, string message, string positiveButtonText, string neutralButtonText, string negativeButtonText, GuiMessage.GuiMessageType messageType, MultiLinkLabelData dontShowAgainContent, EditorWindow parentWindow, out bool checkBoxValue) { string optOutKey = Guid.NewGuid().ToString(); string prefixedOptOutKey = OPT_OUT_PREFIX + optOutKey; GuiMessage.GuiMessageResponseButton result; if (string.IsNullOrEmpty(negativeButtonText)) { result = ShowTwoOptionsDialog( title, message, positiveButtonText, neutralButtonText, optOutKey, messageType); } else { result = ShowThreeOptionsDialog( title, message, positiveButtonText, neutralButtonText, negativeButtonText, optOutKey, messageType); } checkBoxValue = EditorPrefs.HasKey(prefixedOptOutKey); EditorPrefs.DeleteKey(prefixedOptOutKey); SessionState.EraseInt(prefixedOptOutKey); return result; } static GuiMessage.GuiMessageResponseButton ShowTwoOptionsDialog( string title, string message, string positiveButtonText, string neutralButtonText, string optOutKey, GuiMessage.GuiMessageType messageType) { bool dialogResult = EditorDialog.DisplayDecisionDialogWithOptOut( title, message, positiveButtonText, neutralButtonText, DialogOptOutDecisionType.ForThisMachine, optOutKey, GetDialogIconType(messageType)); return dialogResult ? GuiMessage.GuiMessageResponseButton.Positive : GuiMessage.GuiMessageResponseButton.Neutral; } static GuiMessage.GuiMessageResponseButton ShowThreeOptionsDialog( string title, string message, string positiveButtonText, string neutralButtonText, string negativeButtonText, string optOutKey, GuiMessage.GuiMessageType messageType) { DialogResult dialogResult = EditorDialog.DisplayComplexDecisionDialogWithOptOut( title, message, positiveButtonText, negativeButtonText, neutralButtonText, DialogOptOutDecisionType.ForThisMachine, optOutKey, GetDialogIconType(messageType)); if (dialogResult == DialogResult.Cancel) return GuiMessage.GuiMessageResponseButton.Neutral; if (dialogResult == DialogResult.DefaultAction) return GuiMessage.GuiMessageResponseButton.Positive; return GuiMessage.GuiMessageResponseButton.Negative; } static DialogIconType GetDialogIconType(GuiMessage.GuiMessageType messageType) { switch (messageType) { case GuiMessage.GuiMessageType.Warning: return DialogIconType.Warning; case GuiMessage.GuiMessageType.Critical: return DialogIconType.Error; case GuiMessage.GuiMessageType.Informational: case GuiMessage.GuiMessageType.Question: default: return DialogIconType.Info; } } const string OPT_OUT_PREFIX = "DialogOptOut."; // UnityEditor.EditorDialog.k_OptOutPrefix } } #endif