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

82 lines
2.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Microsoft.Xna.Framework.Input
{
public static partial class MessageBox
{
private static Form _dialog;
private static TaskCompletionSource<int?> _tcs;
private static Task<int?> PlatformShow(string title, string description, List<string> buttons)
{
_tcs = new TaskCompletionSource<int?>();
var parent = Application.OpenForms[0];
parent.Invoke(new MethodInvoker(() =>
{
var dialog = _dialog = new Form();
dialog.Text = title;
dialog.FormBorderStyle = FormBorderStyle.FixedDialog;
dialog.MinimizeBox = false;
dialog.MaximizeBox = false;
dialog.ControlBox = false;
dialog.StartPosition = FormStartPosition.CenterParent;
var desc = new Label();
desc.Text = description;
desc.Parent = dialog;
desc.Top = 25;
desc.TextAlign = ContentAlignment.MiddleCenter;
desc.AutoSize = true;
desc.Margin = new Padding(25, 0, 25, 0);
desc.Left = (desc.Parent.ClientSize.Width - desc.Width) / 2;
var bgroup = new FlowLayoutPanel();
bgroup.FlowDirection = FlowDirection.LeftToRight;
bgroup.Parent = dialog;
bgroup.Top = desc.Bottom + 25;
bgroup.AutoSize = true;
bgroup.Margin = new Padding(15);
bgroup.AutoSizeMode = AutoSizeMode.GrowAndShrink;
for (var i = 0; i < buttons.Count; i++)
{
string btext = buttons[i];
var button = new Button();
button.Text = btext;
button.DialogResult = (DialogResult)i+1;
button.Parent = bgroup;
if (i == 0)
dialog.AcceptButton = button;
}
bgroup.Left = (bgroup.Parent.ClientSize.Width - bgroup.Width) / 2;
dialog.AutoSizeMode = AutoSizeMode.GrowAndShrink;
dialog.AutoSize = true;
var result = (int)dialog.ShowDialog(parent);
_dialog = null;
if (_tcs.Task.IsCompleted)
return;
_tcs.SetResult(result-1);
}));
return _tcs.Task;
}
private static void PlatformCancel(int? result)
{
if (_dialog != null)
_dialog.Close();
_tcs.SetResult(result);
}
}
}