// --------------------------------------------------------------------------------------------------------------------
// <copyright file="MessageService.cs" company="Catel development team">
// Copyright (c) 2008 - 2011 Catel development team. All rights reserved.
// </copyright>
// <summary>
// Message service that implements the <see cref="IMessageService" /> by using the <see cref="MessageBox" /> class.
// </summary>
// --------------------------------------------------------------------------------------------------------------------
using System;
using System.Windows;
using Catel.Windows.Properties;
namespace Catel.MVVM.Services
{
/// <summary>
/// Message service that implements the <see cref="IMessageService"/> by using the <see cref="MessageBox"/> class.
/// </summary>
/// <remarks>
/// The <c>MessageBoxImage</c> is not available in Silverlight. Also, some <see cref="MessageBoxButton "/> values are not available.
/// </remarks>
public class MessageService : ViewModelServiceBase, IMessageService
{
#region Methods
/// <summary>
/// Translates the message box result.
/// </summary>
/// <param name="result">The result.</param>
/// <returns>
/// Corresponding <see cref="MessageResult"/>.
/// </returns>
private static MessageResult TranslateMessageBoxResult(MessageBoxResult result)
{
switch (result)
{
case MessageBoxResult.None:
return MessageResult.None;
case MessageBoxResult.OK:
return MessageResult.OK;
case MessageBoxResult.Cancel:
return MessageResult.Cancel;
case MessageBoxResult.Yes:
return MessageResult.Yes;
case MessageBoxResult.No:
return MessageResult.No;
default:
throw new ArgumentOutOfRangeException("result");
}
}
/// <summary>
/// Translates the message button.
/// </summary>
/// <param name="button">The button.</param>
/// <returns>
/// Corresponding <see cref="MessageBoxButton"/>.
/// </returns>
private static MessageBoxButton TranslateMessageButton(MessageButton button)
{
switch (button)
{
case MessageButton.OK:
return MessageBoxButton.OK;
case MessageButton.OKCancel:
return MessageBoxButton.OKCancel;
case MessageButton.YesNo:
throw new NotSupportedException(Silverlight.Properties.Exceptions.NotAvailableInSilverlight);
case MessageButton.YesNoCancel:
throw new NotSupportedException(Silverlight.Properties.Exceptions.NotAvailableInSilverlight);
default:
throw new ArgumentOutOfRangeException("button");
}
}
#endregion
#region IMessageService Members
/// <summary>
/// Shows the error.
/// </summary>
/// <param name="exception">The exception.</param>
public void ShowError(Exception exception)
{
ShowError(exception.Message, Resources.ErrorTitle);
}
/// <summary>
/// Shows the error.
/// </summary>
/// <param name="message">The message.</param>
public void ShowError(string message)
{
ShowError(message, Resources.ErrorTitle);
}
/// <summary>
/// Shows the error.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="caption">The caption.</param>
public void ShowError(string message, string caption)
{
Show(message, caption, MessageButton.OK, MessageImage.Error);
}
/// <summary>
/// Shows the warning.
/// </summary>
/// <param name="message">The message.</param>
public void ShowWarning(string message)
{
ShowWarning(message, Resources.WarningTitle);
}
/// <summary>
/// Shows the warning.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="caption">The caption.</param>
public void ShowWarning(string message, string caption)
{
Show(message, caption, MessageButton.OK, MessageImage.Warning);
}
/// <summary>
/// Shows the information.
/// </summary>
/// <param name="message">The message.</param>
public void ShowInformation(string message)
{
ShowInformation(message, Resources.InfoTitle);
}
/// <summary>
/// Shows the information.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="caption">The caption.</param>
public void ShowInformation(string message, string caption)
{
Show(message, caption, MessageButton.OK, MessageImage.Information);
}
/// <summary>
/// Shows the specified message.
/// </summary>
/// <param name="message">The message.</param>
/// <returns>The <see cref="MessageResult"/>.</returns>
public MessageResult Show(string message)
{
return Show(message, Resources.InfoTitle);
}
/// <summary>
/// Shows the specified message.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="caption">The caption.</param>
/// <returns>The <see cref="MessageResult"/>.</returns>
public MessageResult Show(string message, string caption)
{
return Show(message, caption, MessageButton.OK);
}
/// <summary>
/// Shows the specified message.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="caption">The caption.</param>
/// <param name="button">The button.</param>
/// <returns>The <see cref="MessageResult"/>.</returns>
public MessageResult Show(string message, string caption, MessageButton button)
{
return Show(message, caption, button, MessageImage.None);
}
/// <summary>
/// Shows the specified message.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="caption">The caption.</param>
/// <param name="button">The button.</param>
/// <param name="icon">The icon to show.</param>
/// <returns>The <see cref="MessageResult"/>.</returns>
public MessageResult Show(string message, string caption, MessageButton button, MessageImage icon)
{
// Translate values
var messageBoxButton = TranslateMessageButton(button);
// Show message box
var result = MessageBox.Show(message, caption, messageBoxButton);
// Translate result
return TranslateMessageBoxResult(result);
}
#endregion
}
}