diff --git a/Terminal.Gui/Windows/MessageBox.cs b/Terminal.Gui/Windows/MessageBox.cs index 0a7f1e398..74d221c5c 100644 --- a/Terminal.Gui/Windows/MessageBox.cs +++ b/Terminal.Gui/Windows/MessageBox.cs @@ -39,7 +39,7 @@ namespace Terminal.Gui { /// public static int Query (int width, int height, ustring title, ustring message, params ustring [] buttons) { - return QueryFull (false, width, height, title, message, 0, buttons); + return QueryFull (false, width, height, title, message, 0, null, buttons); } /// @@ -55,7 +55,7 @@ namespace Terminal.Gui { /// public static int Query (ustring title, ustring message, params ustring [] buttons) { - return QueryFull (false, 0, 0, title, message, 0, buttons); + return QueryFull (false, 0, 0, title, message, 0, null, buttons); } /// @@ -72,7 +72,7 @@ namespace Terminal.Gui { /// public static int ErrorQuery (int width, int height, ustring title, ustring message, params ustring [] buttons) { - return QueryFull (true, width, height, title, message, 0, buttons); + return QueryFull (true, width, height, title, message, 0, null, buttons); } /// @@ -88,7 +88,7 @@ namespace Terminal.Gui { /// public static int ErrorQuery (ustring title, ustring message, params ustring [] buttons) { - return QueryFull (true, 0, 0, title, message, 0, buttons); + return QueryFull (true, 0, 0, title, message, 0, null, buttons); } /// @@ -106,7 +106,7 @@ namespace Terminal.Gui { /// public static int Query (int width, int height, ustring title, ustring message, int defaultButton = 0, params ustring [] buttons) { - return QueryFull (false, width, height, title, message, defaultButton, buttons); + return QueryFull (false, width, height, title, message, defaultButton, null, buttons); } /// @@ -123,9 +123,47 @@ namespace Terminal.Gui { /// public static int Query (ustring title, ustring message, int defaultButton = 0, params ustring [] buttons) { - return QueryFull (false, 0, 0, title, message, defaultButton, buttons); + return QueryFull (false, 0, 0, title, message, defaultButton, null, buttons); } + /// + /// 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. + /// Index of the default button. + /// The border settings. + /// Array of buttons to add. + /// + /// Use instead; it automatically sizes the MessageBox based on the contents. + /// + public static int Query (int width, int height, ustring title, ustring message, int defaultButton = 0, Border border = null, params ustring [] buttons) + { + return QueryFull (false, width, height, title, message, defaultButton, border, 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. + /// Title for the query. + /// Message to display, might contain multiple lines. + /// Index of the default button. + /// The border settings. + /// Array of buttons to add. + /// + /// The message box will be vertically and horizontally centered in the container and the size will be automatically determined + /// from the size of the message and buttons. + /// + public static int Query (ustring title, ustring message, int defaultButton = 0, Border border = null, params ustring [] buttons) + { + return QueryFull (false, 0, 0, title, message, defaultButton, border, buttons); + } + + /// /// Presents an error with the specified title and message and a list of buttons to show to the user. /// @@ -141,7 +179,7 @@ namespace Terminal.Gui { /// public static int ErrorQuery (int width, int height, ustring title, ustring message, int defaultButton = 0, params ustring [] buttons) { - return QueryFull (true, width, height, title, message, defaultButton, buttons); + return QueryFull (true, width, height, title, message, defaultButton, null, buttons); } /// @@ -158,10 +196,48 @@ namespace Terminal.Gui { /// public static int ErrorQuery (ustring title, ustring message, int defaultButton = 0, params ustring [] buttons) { - return QueryFull (true, 0, 0, title, message, defaultButton, buttons); + return QueryFull (true, 0, 0, title, message, defaultButton, null, buttons); } - static int QueryFull (bool useErrorColors, int width, int height, ustring title, ustring message, int defaultButton = 0, params ustring [] 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. + /// Index of the default button. + /// The border settings. + /// Array of buttons to add. + /// + /// Use instead; it automatically sizes the MessageBox based on the contents. + /// + public static int ErrorQuery (int width, int height, ustring title, ustring message, int defaultButton = 0, Border border = null, params ustring [] buttons) + { + return QueryFull (true, width, height, title, message, defaultButton, border, 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. + /// Title for the query. + /// Message to display, might contain multiple lines. + /// Index of the default button. + /// The border settings. + /// Array of buttons to add. + /// + /// The message box will be vertically and horizontally centered in the container and the size will be automatically determined + /// from the size of the title, message. and buttons. + /// + public static int ErrorQuery (ustring title, ustring message, int defaultButton = 0, Border border = null, params ustring [] buttons) + { + return QueryFull (true, 0, 0, title, message, defaultButton, border, buttons); + } + + static int QueryFull (bool useErrorColors, int width, int height, ustring title, ustring message, + int defaultButton = 0, Border border = null, params ustring [] buttons) { const int defaultWidth = 50; int textWidth = TextFormatter.MaxWidth (message, width == 0 ? defaultWidth : width); @@ -192,6 +268,10 @@ namespace Terminal.Gui { d = new Dialog (title, Math.Max (width, textWidth) + 4, height, buttonList.ToArray ()); } + if (border != null) { + d.Border = border; + } + if (useErrorColors) { d.ColorScheme = Colors.Error; } diff --git a/UICatalog/Scenarios/MessageBoxes.cs b/UICatalog/Scenarios/MessageBoxes.cs index 38036ec82..d8027e00c 100644 --- a/UICatalog/Scenarios/MessageBoxes.cs +++ b/UICatalog/Scenarios/MessageBoxes.cs @@ -12,9 +12,9 @@ namespace UICatalog { public override void Setup () { var frame = new FrameView ("MessageBox Options") { - X = Pos.Center(), + X = Pos.Center (), Y = 1, - Width = Dim.Percent(75), + Width = Dim.Percent (75), Height = 10 }; Win.Add (frame); @@ -71,7 +71,7 @@ namespace UICatalog { var titleEdit = new TextField ("Title") { X = Pos.Right (label) + 1, Y = Pos.Top (label), - Width = Dim.Fill(), + Width = Dim.Fill (), Height = 1 }; frame.Add (titleEdit); @@ -134,16 +134,29 @@ namespace UICatalog { TextAlignment = Terminal.Gui.TextAlignment.Right, }; frame.Add (label); - var styleRadioGroup = new RadioGroup (new ustring [] { "_Query", "_Error" } ) { + var styleRadioGroup = new RadioGroup (new ustring [] { "_Query", "_Error" }) { X = Pos.Right (label) + 1, Y = Pos.Top (label), }; frame.Add (styleRadioGroup); + var border = new Border () { + Effect3D = true, + BorderStyle = BorderStyle.Single + }; + var ckbEffect3D = new CheckBox ("Effect3D", true) { + X = Pos.Right (label) + 1, + Y = Pos.Top (label) + 2 + }; + ckbEffect3D.Toggled += (e) => { + border.Effect3D = !e; + }; + frame.Add (ckbEffect3D); + void Top_Loaded () { frame.Height = Dim.Height (widthEdit) + Dim.Height (heightEdit) + Dim.Height (titleEdit) + Dim.Height (messageEdit) - + Dim.Height (numButtonsEdit) + Dim.Height(defaultButtonEdit) + Dim.Height (styleRadioGroup) + 2; + + Dim.Height (numButtonsEdit) + Dim.Height (defaultButtonEdit) + Dim.Height (styleRadioGroup) + 2 + Dim.Height (ckbEffect3D); Top.Loaded -= Top_Loaded; } Top.Loaded += Top_Loaded; @@ -167,7 +180,7 @@ namespace UICatalog { //var btnText = new [] { "_Zero", "_One", "T_wo", "_Three", "_Four", "Fi_ve", "Si_x", "_Seven", "_Eight", "_Nine" }; var showMessageBoxButton = new Button ("Show MessageBox") { - X = Pos.Center(), + X = Pos.Center (), Y = Pos.Bottom (frame) + 2, IsDefault = true, }; @@ -184,9 +197,9 @@ namespace UICatalog { btns.Add (NumberToWords.Convert (i)); } if (styleRadioGroup.SelectedItem == 0) { - buttonPressedLabel.Text = $"{MessageBox.Query (width, height, titleEdit.Text.ToString (), messageEdit.Text.ToString (), defaultButton, btns.ToArray ())}"; + buttonPressedLabel.Text = $"{MessageBox.Query (width, height, titleEdit.Text.ToString (), messageEdit.Text.ToString (), defaultButton, border, btns.ToArray ())}"; } else { - buttonPressedLabel.Text = $"{MessageBox.ErrorQuery (width, height, titleEdit.Text.ToString (), messageEdit.Text.ToString (), defaultButton, btns.ToArray ())}"; + buttonPressedLabel.Text = $"{MessageBox.ErrorQuery (width, height, titleEdit.Text.ToString (), messageEdit.Text.ToString (), defaultButton, border, btns.ToArray ())}"; } } catch (FormatException) { buttonPressedLabel.Text = "Invalid Options";