using System.Text.Json.Nodes;
using Sim.Host;
namespace System.Windows.Forms;
/// 在浏览器里弹出对话框,阻塞到用户点击按钮后返回结果(期间界面线程照常处理 Timer 等消息)
public static class MessageBox
{
public static DialogResult Show(string? text) => Show(text, "");
public static DialogResult Show(string? text, string? caption) =>
Show(text, caption, MessageBoxButtons.OK, MessageBoxIcon.None);
public static DialogResult Show(string? text, string? caption, MessageBoxButtons buttons) =>
Show(text, caption, buttons, MessageBoxIcon.None);
public static DialogResult Show(string? text, string? caption, MessageBoxButtons buttons, MessageBoxIcon icon) =>
ShowCore(text, caption, buttons, icon);
public static DialogResult Show(string? text, string? caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) =>
ShowCore(text, caption, buttons, icon);
public static DialogResult Show(IWin32Window? owner, string? text) => Show(text);
public static DialogResult Show(IWin32Window? owner, string? text, string? caption) => Show(text, caption);
public static DialogResult Show(IWin32Window? owner, string? text, string? caption, MessageBoxButtons buttons) =>
Show(text, caption, buttons);
public static DialogResult Show(IWin32Window? owner, string? text, string? caption, MessageBoxButtons buttons, MessageBoxIcon icon) =>
Show(text, caption, buttons, icon);
private static DialogResult ShowCore(string? text, string? caption, MessageBoxButtons buttons, MessageBoxIcon icon)
{
var reply = SimHost.Request(new JsonObject
{
["type"] = "messageBox",
["text"] = text ?? "",
["caption"] = caption ?? "",
["buttons"] = buttons.ToString(),
["icon"] = icon.ToString(),
});
return Enum.TryParse((string?)reply, out var result) ? result : DialogResult.Cancel;
}
}