mirror of https://github.com/AMT-Cheif/Stylet.git
MessageBox supports MessageBoxOptions
This commit is contained in:
parent
97258d1511
commit
6d72e2d525
|
@ -25,12 +25,17 @@ namespace Stylet
|
|||
/// <param name="icon">Icon to display to the left of the text. This also determines the sound played when the MessageBox is shown</param>
|
||||
/// <param name="defaultButton">Button pressed when the user presses Enter. Defaults to the leftmost button</param>
|
||||
/// <param name="cancelButton">Button pressed when the user preses Esc or clicks the red X on the titlebar. Defaults to the rightmost button</param>
|
||||
/// <param name="buttonTextOverrides">You may override the text for individual buttons on a case-by-case basis</param>
|
||||
/// <param name="options">Additional options</param>
|
||||
/// <param name="buttonLabels">You may override the text for individual buttons on a case-by-case basis</param>
|
||||
/// <returns>Which button the user clicked</returns>
|
||||
public static MessageBoxResult ShowMessageBox(this IWindowManager windowManager, string text, string title = null, MessageBoxButton buttons = MessageBoxButton.OK, MessageBoxImage icon = MessageBoxImage.None, MessageBoxResult defaultButton = MessageBoxResult.None, MessageBoxResult cancelButton = MessageBoxResult.None, IDictionary<MessageBoxResult, string> buttonTextOverrides = null)
|
||||
public static MessageBoxResult ShowMessageBox(this IWindowManager windowManager, string text, string title = null,
|
||||
MessageBoxButton buttons = MessageBoxButton.OK, MessageBoxImage icon = MessageBoxImage.None,
|
||||
MessageBoxResult defaultButton = MessageBoxResult.None, MessageBoxResult cancelButton = MessageBoxResult.None,
|
||||
MessageBoxOptions options = MessageBoxOptions.None,
|
||||
IDictionary<MessageBoxResult, string> buttonLabels = null)
|
||||
{
|
||||
var vm = IoC.Get<IMessageBoxViewModel>();
|
||||
vm.Setup(text, title, buttons, icon, defaultButton, cancelButton, buttonTextOverrides);
|
||||
vm.Setup(text, title, buttons, icon, defaultButton, cancelButton, options, buttonLabels);
|
||||
windowManager.ShowDialog(vm);
|
||||
return vm.ClickedButton;
|
||||
}
|
||||
|
@ -50,8 +55,11 @@ namespace Stylet
|
|||
/// <param name="icon">Icon to display to the left of the text. This also determines the sound played when the MessageBox is shown</param>
|
||||
/// <param name="defaultButton">Button pressed when the user presses Enter. Defaults to the leftmost button</param>
|
||||
/// <param name="cancelButton">Button pressed when the user preses Esc or clicks the red X on the titlebar. Defaults to the rightmost button</param>
|
||||
/// <param name="buttonTextOverrides">You may override the text for individual buttons on a case-by-case basis</param>
|
||||
void Setup(string text, string title, MessageBoxButton buttons, MessageBoxImage icon, MessageBoxResult defaultButton, MessageBoxResult cancelButton, IDictionary<MessageBoxResult, string> buttonTextOverrides = null);
|
||||
/// <param name="options">Additional options</param>
|
||||
/// <param name="buttonLabels">You may override the text for individual buttons on a case-by-case basis</param>
|
||||
void Setup(string text, string title, MessageBoxButton buttons, MessageBoxImage icon,
|
||||
MessageBoxResult defaultButton, MessageBoxResult cancelButton, MessageBoxOptions options,
|
||||
IDictionary<MessageBoxResult, string> buttonLabels = null);
|
||||
|
||||
/// <summary>
|
||||
/// After the user has clicked a button, holds which button was clicked
|
||||
|
@ -128,8 +136,11 @@ namespace Stylet
|
|||
/// <param name="icon">Icon to display to the left of the text. This also determines the sound played when the MessageBox is shown</param>
|
||||
/// <param name="defaultButton">Button pressed when the user presses Enter. Defaults to the leftmost button</param>
|
||||
/// <param name="cancelButton">Button pressed when the user preses Esc or clicks the red X on the titlebar. Defaults to the rightmost button</param>
|
||||
/// <param name="buttonTextOverrides">You may override the text for individual buttons on a case-by-case basis</param>
|
||||
public void Setup(string text, string title, MessageBoxButton buttons, MessageBoxImage icon, MessageBoxResult defaultButton, MessageBoxResult cancelButton, IDictionary<MessageBoxResult, string> buttonTextOverrides)
|
||||
/// <param name="options">Additional options</param>
|
||||
/// <param name="buttonLabels">You may override the text for individual buttons on a case-by-case basis</param>
|
||||
public void Setup(string text, string title, MessageBoxButton buttons, MessageBoxImage icon,
|
||||
MessageBoxResult defaultButton, MessageBoxResult cancelButton, MessageBoxOptions options,
|
||||
IDictionary<MessageBoxResult, string> buttonLabels)
|
||||
{
|
||||
this.Text = text;
|
||||
this.DisplayName = title;
|
||||
|
@ -140,7 +151,7 @@ namespace Stylet
|
|||
foreach (var val in ButtonToResults[buttons])
|
||||
{
|
||||
string label;
|
||||
if (buttonTextOverrides == null || !buttonTextOverrides.TryGetValue(val, out label))
|
||||
if (buttonLabels == null || !buttonLabels.TryGetValue(val, out label))
|
||||
label = ButtonLabels[val];
|
||||
|
||||
var lbv = new LabelledValue<MessageBoxResult>(label, val);
|
||||
|
@ -165,6 +176,9 @@ namespace Stylet
|
|||
else
|
||||
throw new ArgumentException("CancelButton set to a button which doesn't appear in Buttons");
|
||||
}
|
||||
|
||||
this.FlowDirection = options.HasFlag(MessageBoxOptions.RtlReading) ? FlowDirection.RightToLeft : FlowDirection.LeftToRight;
|
||||
this.TextAlignment = (options.HasFlag(MessageBoxOptions.RightAlign) == options.HasFlag(MessageBoxOptions.RtlReading)) ? TextAlignment.Left : TextAlignment.Right;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -175,22 +189,22 @@ namespace Stylet
|
|||
/// <summary>
|
||||
/// Item in ButtonList which is the Default button
|
||||
/// </summary>
|
||||
public LabelledValue<MessageBoxResult> DefaultButton { get; set; }
|
||||
public LabelledValue<MessageBoxResult> DefaultButton { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// Item in ButtonList which is the Cancel button
|
||||
/// </summary>
|
||||
public LabelledValue<MessageBoxResult> CancelButton { get; set; }
|
||||
public LabelledValue<MessageBoxResult> CancelButton { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// Text which is shown in the body of the MessageBox
|
||||
/// </summary>
|
||||
public virtual string Text { get; set; }
|
||||
public virtual string Text { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// Icon which the user specified
|
||||
/// </summary>
|
||||
public virtual MessageBoxImage Icon { get; set; }
|
||||
public virtual MessageBoxImage Icon { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// Icon which is shown next to the text in the View
|
||||
|
@ -200,10 +214,20 @@ namespace Stylet
|
|||
get { return IconMapping[this.Icon]; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Which way the document should flow
|
||||
/// </summary>
|
||||
public virtual FlowDirection FlowDirection { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// Text alignment of the message
|
||||
/// </summary>
|
||||
public virtual TextAlignment TextAlignment { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// Which button the user clicked, once they've clicked a button
|
||||
/// </summary>
|
||||
public virtual MessageBoxResult ClickedButton { get; private set; }
|
||||
public virtual MessageBoxResult ClickedButton { get; protected set; }
|
||||
|
||||
protected override void OnViewLoaded()
|
||||
{
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
mc:Ignorable="d"
|
||||
ResizeMode="NoResize"
|
||||
SizeToContent="WidthAndHeight"
|
||||
FlowDirection="{Binding FlowDirection}"
|
||||
WindowStartupLocation="CenterScreen"
|
||||
ShowInTaskbar="False"
|
||||
MinWidth="160" MaxWidth="485"
|
||||
|
@ -27,11 +28,11 @@
|
|||
Visibility="{Binding ImageIcon, Converter={x:Static s:BoolToVisibilityConverter.Instance}}">
|
||||
</Image>
|
||||
|
||||
<TextBlock Grid.Row="0" Grid.Column="2" Text="{Binding Text}" Margin="8,30,30,30" TextWrapping="Wrap"/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="2" Text="{Binding Text}" Margin="8,30,15,30" TextWrapping="Wrap" TextAlignment="{Binding TextAlignment}"/>
|
||||
|
||||
<Grid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
|
||||
<ItemsControl Grid.Row="1" ItemsSource="{Binding ButtonList}"
|
||||
HorizontalAlignment="Right" VerticalAlignment="Center">
|
||||
HorizontalAlignment="Right" VerticalAlignment="Center" Margin="43,0,0,0">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<StackPanel Orientation="Horizontal"/>
|
||||
|
|
|
@ -46,7 +46,7 @@ namespace StyletUnitTests
|
|||
vm.SetupGet(x => x.ClickedButton).Returns(MessageBoxResult.OK);
|
||||
var result = MessageBoxWindowManagerExtensions.ShowMessageBox(windowManager.Object, "this is the text", "this is the title", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation, MessageBoxResult.OK, MessageBoxResult.Cancel);
|
||||
|
||||
vm.Verify(x => x.Setup("this is the text", "this is the title", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation, MessageBoxResult.OK, MessageBoxResult.Cancel, null));
|
||||
vm.Verify(x => x.Setup("this is the text", "this is the title", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation, MessageBoxResult.OK, MessageBoxResult.Cancel, MessageBoxOptions.None, null));
|
||||
windowManager.Verify(x => x.ShowDialog(vm.Object));
|
||||
|
||||
Assert.AreEqual(MessageBoxResult.OK, result);
|
||||
|
@ -55,21 +55,21 @@ namespace StyletUnitTests
|
|||
[Test]
|
||||
public void SetsTextCorrectly()
|
||||
{
|
||||
this.vm.Setup("this is the text", null, MessageBoxButton.OK, System.Windows.MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, null);
|
||||
this.vm.Setup("this is the text", null, MessageBoxButton.OK, System.Windows.MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.None, null);
|
||||
Assert.AreEqual("this is the text", this.vm.Text);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetsTitleCorrectly()
|
||||
{
|
||||
this.vm.Setup(null, "this is the title", MessageBoxButton.OK, System.Windows.MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, null);
|
||||
this.vm.Setup(null, "this is the title", MessageBoxButton.OK, System.Windows.MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.None, null);
|
||||
Assert.AreEqual("this is the title", this.vm.DisplayName);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DisplaysRequestedButtons()
|
||||
{
|
||||
this.vm.Setup(null, null, MessageBoxButton.OKCancel, System.Windows.MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, null);
|
||||
this.vm.Setup(null, null, MessageBoxButton.OKCancel, System.Windows.MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.None, null);
|
||||
var buttons = vm.ButtonList.ToList();
|
||||
Assert.AreEqual(2, buttons.Count);
|
||||
Assert.AreEqual("OK", buttons[0].Label);
|
||||
|
@ -81,47 +81,47 @@ namespace StyletUnitTests
|
|||
[Test]
|
||||
public void SetsDefaultButtonToTheRequestedButton()
|
||||
{
|
||||
this.vm.Setup(null, null, MessageBoxButton.OKCancel, System.Windows.MessageBoxImage.None, MessageBoxResult.Cancel, MessageBoxResult.None, null);
|
||||
this.vm.Setup(null, null, MessageBoxButton.OKCancel, System.Windows.MessageBoxImage.None, MessageBoxResult.Cancel, MessageBoxResult.None, MessageBoxOptions.None, null);
|
||||
Assert.AreEqual(this.vm.ButtonList.ElementAt(1), this.vm.DefaultButton);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetsDefaultToLeftmostButtonIfDefaultRequested()
|
||||
{
|
||||
this.vm.Setup(null, null, MessageBoxButton.YesNoCancel, System.Windows.MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, null);
|
||||
this.vm.Setup(null, null, MessageBoxButton.YesNoCancel, System.Windows.MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.None, null);
|
||||
Assert.AreEqual(this.vm.ButtonList.ElementAt(0), this.vm.DefaultButton);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ThrowsIfTheRequestedDefaultButtonIsNotDisplayed()
|
||||
{
|
||||
Assert.Throws<ArgumentException>(() => this.vm.Setup(null, null, MessageBoxButton.OKCancel, MessageBoxImage.None, MessageBoxResult.Yes, MessageBoxResult.None, null));
|
||||
Assert.Throws<ArgumentException>(() => this.vm.Setup(null, null, MessageBoxButton.OKCancel, MessageBoxImage.None, MessageBoxResult.Yes, MessageBoxResult.None, MessageBoxOptions.None, null));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetsCancelButtonToTheRequestedButton()
|
||||
{
|
||||
this.vm.Setup(null, null, MessageBoxButton.YesNoCancel, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.No, null);
|
||||
this.vm.Setup(null, null, MessageBoxButton.YesNoCancel, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.No, MessageBoxOptions.None, null);
|
||||
Assert.AreEqual(this.vm.ButtonList.ElementAt(1), this.vm.CancelButton);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetsCancelToRighmostButtonIfDefaultRequested()
|
||||
{
|
||||
this.vm.Setup(null, null, MessageBoxButton.OKCancel, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, null);
|
||||
this.vm.Setup(null, null, MessageBoxButton.OKCancel, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.None, null);
|
||||
Assert.AreEqual(this.vm.ButtonList.ElementAt(1), this.vm.CancelButton);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ThrowsIfRequestedCancelButtonIsNotDisplayed()
|
||||
{
|
||||
Assert.Throws<ArgumentException>(() => this.vm.Setup(null, null, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.No, null));
|
||||
Assert.Throws<ArgumentException>(() => this.vm.Setup(null, null, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.No, MessageBoxOptions.None, null));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetsIconCorrectly()
|
||||
{
|
||||
this.vm.Setup(null, null, MessageBoxButton.OK, MessageBoxImage.Exclamation, MessageBoxResult.None, MessageBoxResult.None, null);
|
||||
this.vm.Setup(null, null, MessageBoxButton.OK, MessageBoxImage.Exclamation, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.None, null);
|
||||
Assert.AreEqual(SystemIcons.Exclamation, this.vm.ImageIcon);
|
||||
}
|
||||
|
||||
|
@ -130,7 +130,7 @@ namespace StyletUnitTests
|
|||
{
|
||||
var parent = new Mock<IChildDelegate>();
|
||||
this.vm.Parent = parent.Object;
|
||||
this.vm.Setup(null, null, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, null);
|
||||
this.vm.Setup(null, null, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.None, null);
|
||||
|
||||
this.vm.ButtonClicked(MessageBoxResult.No);
|
||||
|
||||
|
@ -143,19 +143,61 @@ namespace StyletUnitTests
|
|||
{
|
||||
var vm = new MyMessageBoxViewModel();
|
||||
// Can't test it actually playing the sound
|
||||
vm.Setup(null, null, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, null);
|
||||
vm.Setup(null, null, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.None, null);
|
||||
Assert.DoesNotThrow(() => vm.OnViewLoaded());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ButtonTextOverridesWork()
|
||||
{
|
||||
this.vm.Setup(null, null, MessageBoxButton.OKCancel, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, new Dictionary<MessageBoxResult, string>()
|
||||
this.vm.Setup(null, null, MessageBoxButton.OKCancel, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.None, new Dictionary<MessageBoxResult, string>()
|
||||
{
|
||||
{ MessageBoxResult.Cancel, "YAY!" },
|
||||
});
|
||||
Assert.AreEqual("OK", this.vm.ButtonList.ElementAt(0).Label);
|
||||
Assert.AreEqual("YAY!", this.vm.ButtonList.ElementAt(1).Label);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FlowsLeftToRightByDefault()
|
||||
{
|
||||
this.vm.Setup(null, null, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.None, null);
|
||||
Assert.AreEqual(FlowDirection.LeftToRight, this.vm.FlowDirection);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FlowsRightToLeftIfRequested()
|
||||
{
|
||||
this.vm.Setup(null, null, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.RtlReading, null);
|
||||
Assert.AreEqual(FlowDirection.RightToLeft, this.vm.FlowDirection);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AlignsLeftIfLeftToRightByDefault()
|
||||
{
|
||||
this.vm.Setup(null, null, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.None, null);
|
||||
Assert.AreEqual(TextAlignment.Left, this.vm.TextAlignment);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AlignsRightIfLeftToRightAndRequested()
|
||||
{
|
||||
this.vm.Setup(null, null, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.RightAlign, null);
|
||||
Assert.AreEqual(TextAlignment.Right, this.vm.TextAlignment);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AlignsRightIfRightToLeftByDefault()
|
||||
{
|
||||
this.vm.Setup(null, null, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.RtlReading, null);
|
||||
Assert.AreEqual(TextAlignment.Right, this.vm.TextAlignment);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AlignsLeftIfRightToLeftAndRequested()
|
||||
{
|
||||
this.vm.Setup(null, null, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxResult.None, MessageBoxOptions.RightAlign | MessageBoxOptions.RtlReading, null);
|
||||
Assert.AreEqual(TextAlignment.Left, this.vm.TextAlignment);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue