using System;
namespace Terminal.Gui {
///
/// MessageBox displays a modal message to the user, with a title, a message and a series of options that the user can choose from.
///
///
/// The difference between the and method is the default set of colors used for the message box.
///
///
/// The following example pops up a with 50 columns, and 7 lines, with the specified title and text, plus two s.
/// The value -1 is returned when the user cancels the by pressing the ESC key.
///
///
///
/// var n = MessageBox.Query (50, 7, "Quit Demo", "Are you sure you want to quit this demo?", "Yes", "No");
/// if (n == 0)
/// quit = true;
/// else
/// quit = false;
///
///
public static class MessageBox {
///
/// Presents a normal with the specified title and message and a list of buttons to show to the user.
///
/// The index of the selected button, or -1 if the user pressed ESC to close the dialog.
/// Width for the window.
/// Height for the window.
/// Title for the query.
/// Message to display, might contain multiple lines..
/// Array of buttons to add.
public static int Query (int width, int height, string title, string message, params string [] buttons)
{
return QueryFull (false, width, height, title, message, buttons);
}
///
/// Presents an error with the specified title and message and a list of buttons to show to the user.
///
/// The index of the selected button, or -1 if the user pressed ESC to close the dialog.
/// Width for the window.
/// Height for the window.
/// Title for the query.
/// Message to display, might contain multiple lines.
/// Array of buttons to add.
public static int ErrorQuery (int width, int height, string title, string message, params string [] buttons)
{
return QueryFull (true, width, height, title, message, buttons);
}
static int QueryFull (bool useErrorColors, int width, int height, string title, string message, params string [] buttons)
{
int textWidth = Label.MaxWidth (message, width);
int clicked = -1, count = 0;
var d = new Dialog (title, Math.Max(width, textWidth) + 4, height);
if (useErrorColors)
d.ColorScheme = Colors.Error;
foreach (var s in buttons) {
int n = count++;
var b = new Button (s);
b.Clicked += delegate {
clicked = n;
d.Running = false;
};
d.AddButton (b);
}
if (message != null) {
var l = new Label (textWidth > width ? 0 : (width - 4 - textWidth) / 2, 0, message);
d.Add (l);
}
Application.Run (d);
return clicked;
}
}
}