Files
LuaCsForBarotraumaEP/Libraries/MonoGame.Framework/Src/MonoGame.Framework/Input/MessageBox.cs
2019-06-25 16:00:44 +03:00

63 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Microsoft.Xna.Framework.Input
{
public static partial class MessageBox
{
public static bool IsVisible { get; private set; }
/// <summary>
/// Displays the message box interface asynchronously.
/// </summary>
/// <param name="title">Title of the message box.</param>
/// <param name="description">Description of the message box.</param>
/// <param name="buttons">Captions of the message box buttons. Up to three supported.</param>
/// <returns>Index of button selected by the player. Null if back was used.</returns>
/// <exception cref="System.Exception">Thrown when the message box is already visible</exception>
/// <example>
/// <code>
/// var color = await MessageBox.Show("Color", "What's your favorite color?", new[] { "Red", "Green", "Blue" });
/// </code>
/// </example>
public static async Task<int?> Show(string title, string description, IEnumerable<string> buttons)
{
if (IsVisible)
throw new Exception("The function cannot be completed at this time: the MessageBox UI is already active. Wait until MessageBox.IsVisible is false before issuing this call.");
IsVisible = true;
var buttonsList = buttons.ToList();
if (buttonsList.Count > 3 || buttonsList.Count == 0)
throw new ArgumentException("Invalid number of buttons: one to three required", "buttons");
var result = await PlatformShow(title, description, buttonsList);
IsVisible = false;
return result;
}
/// <summary>
/// Hides the message box interface and returns the parameter as the result of <see cref="Show"/>
/// </summary>
/// <param name="result">Result to return</param>
/// <exception cref="System.Exception">Thrown when the message box is not visible</exception>
/// <example>
/// <code>
/// var colorTask = MessageBox.Show("Color", "What's your favorite color?", new[] { "Red", "Green", "Blue" });
/// MessageBox.Cancel(0);
/// var color = await colorTask;
/// </code>
/// </example>
public static void Cancel(int? result)
{
if (!IsVisible)
throw new Exception("The function cannot be completed at this time: the MessageBox UI is not active.");
PlatformCancel(result);
}
}
}