Repository navigation
Expand file tree
/
Copy pathTaskDialogUtil.cs
More file actions
109 lines (95 loc) · 4.06 KB
/
Copy pathTaskDialogUtil.cs
File metadata and controls
109 lines (95 loc) · 4.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using System;
using System.Media;
using System.Windows.Forms;
namespace SysBot.Pokemon.WinForms;
internal static class TaskDialogUtil
{
/// <param name="owner">The window that owns the dialog.</param>
extension(IWin32Window owner)
{
/// <summary>
/// Displays a dialog showing the details of an error.
/// </summary>
/// <param name="lines">User-friendly message about the error.</param>
/// <returns>The <see cref="DialogResult"/> associated with the dialog.</returns>
public DialogResult Error(params ReadOnlySpan<string> lines)
{
SystemSounds.Hand.Play();
var msg = string.Join(Environment.NewLine + Environment.NewLine, lines);
var page = new TaskDialogPage
{
Caption = "Error",
Text = msg,
Icon = TaskDialogIcon.Error,
Buttons = [TaskDialogButton.OK],
AllowCancel = true, // Allows Esc key to close
SizeToContent = true
};
var button = TaskDialog.ShowDialog(owner, page);
return ToDialogResult(button);
}
public DialogResult Alert(params ReadOnlySpan<string> lines)
=> owner.Alert(true, lines);
public DialogResult Alert(bool sound, params ReadOnlySpan<string> lines)
{
if (sound)
SystemSounds.Asterisk.Play();
var msg = string.Join(Environment.NewLine + Environment.NewLine, lines);
var page = new TaskDialogPage
{
Caption = "Alert",
Text = msg,
Icon = sound ? TaskDialogIcon.Information : TaskDialogIcon.None,
Buttons = [TaskDialogButton.OK],
AllowCancel = true, // Allows Esc key to close
SizeToContent = true
};
var button = TaskDialog.ShowDialog(owner, page);
return ToDialogResult(button);
}
public DialogResult Prompt(MessageBoxButtons btn, params ReadOnlySpan<string> lines)
{
SystemSounds.Asterisk.Play();
var msg = string.Join(Environment.NewLine + Environment.NewLine, lines);
var page = new TaskDialogPage
{
Caption = "Prompt",
Text = msg,
Icon = TaskDialogIcon.Information,
Buttons = GetTaskDialogButtons(btn),
AllowCancel = true, // Allows Esc key to close
SizeToContent = true
};
var button = TaskDialog.ShowDialog(owner, page);
return ToDialogResult(button);
}
}
private static TaskDialogButtonCollection GetTaskDialogButtons(MessageBoxButtons buttons) => buttons switch
{
MessageBoxButtons.OK => [TaskDialogButton.OK],
MessageBoxButtons.OKCancel => [TaskDialogButton.OK, TaskDialogButton.Cancel],
MessageBoxButtons.AbortRetryIgnore => [TaskDialogButton.Abort, TaskDialogButton.Retry, TaskDialogButton.Ignore],
MessageBoxButtons.YesNo => [TaskDialogButton.Yes, TaskDialogButton.No],
MessageBoxButtons.YesNoCancel => [TaskDialogButton.Yes, TaskDialogButton.No, TaskDialogButton.Cancel],
MessageBoxButtons.RetryCancel => [TaskDialogButton.Retry, TaskDialogButton.Cancel],
_ => throw new ArgumentOutOfRangeException(nameof(buttons), buttons, null),
};
private static DialogResult ToDialogResult(TaskDialogButton button)
{
if (button == TaskDialogButton.OK)
return DialogResult.OK;
if (button == TaskDialogButton.Cancel)
return DialogResult.Cancel;
if (button == TaskDialogButton.Abort)
return DialogResult.Abort;
if (button == TaskDialogButton.Retry)
return DialogResult.Retry;
if (button == TaskDialogButton.Ignore)
return DialogResult.Ignore;
if (button == TaskDialogButton.Yes)
return DialogResult.Yes;
if (button == TaskDialogButton.No)
return DialogResult.No;
return DialogResult.None;
}
}