Mercurial > silverbladetech
diff Chronosv2/source/Presentation/Windows/Controls/MessageWindowElement.cs @ 10:443821e55f06
Initial cleaned up add from Codeplex files
author | stevenh7776 stevenhollidge@hotmail.com |
---|---|
date | Tue, 21 Feb 2012 17:25:44 +0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Chronosv2/source/Presentation/Windows/Controls/MessageWindowElement.cs Tue Feb 21 17:25:44 2012 +0700 @@ -0,0 +1,222 @@ +/* +The MIT License + +Copyright (c) 2009-2010. Carlos Guzmán Álvarez. http://chronoswpf.codeplex.com/ + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +using System; +using System.Windows; +using System.Windows.Input; +using Chronos.Extensions.Windows; +using Chronos.Presentation.Core.VirtualDesktops; +using Chronos.Presentation.Core.Windows; +using nRoute.Services; + +namespace Chronos.Presentation.Windows.Controls +{ + /// <summary> + /// Provides the ability to create modal message windows (like messageboxes) + /// </summary> + public sealed class MessageWindowElement + : WindowElement + { + #region · Dependency Properties · + + /// <summary> + /// Identifies the Buttons dependency property. + /// </summary> + public static readonly DependencyProperty ButtonsProperty = + DependencyProperty.Register("Buttons", typeof(DialogButton), typeof(MessageWindowElement), + new FrameworkPropertyMetadata(DialogButton.Ok)); + + #endregion + + #region · Sync Object · + + static readonly object SyncObject = new object(); + + #endregion + + #region · Static Commands · + + /// <summary> + /// Accept command + /// </summary> + public static RoutedCommand AcceptCommand; + + /// <summary> + /// Cancel command + /// </summary> + public static RoutedCommand CancelCommand; + + #endregion + + #region · Static Constructors · + + /// <summary> + /// Initializes the <see cref="MessageWindowElement"/> class. + /// </summary> + static MessageWindowElement() + { + MessageWindowElement.DefaultStyleKeyProperty.OverrideMetadata(typeof(MessageWindowElement), + new FrameworkPropertyMetadata(typeof(MessageWindowElement))); + + KeyboardNavigation.IsTabStopProperty.OverrideMetadata(typeof(MessageWindowElement), + new FrameworkPropertyMetadata(false)); + + MessageWindowElement.AcceptCommand = new RoutedCommand("Accept", typeof(MessageWindowElement)); + MessageWindowElement.CancelCommand = new RoutedCommand("Cancel", typeof(MessageWindowElement)); + } + + #endregion + + #region · Show "Factory" Methods · + + /// <summary> + /// Shows a new <see cref="MessageWindowElement"/> with the given message + /// </summary> + /// <param name="message"></param> + /// <returns></returns> + public static DialogResult Show(string message) + { + return MessageWindowElement.Show("Message", message, DialogButton.OkCancel); + } + + /// <summary> + /// Shows a new <see cref="MessageWindowElement"/> with the given caption and message + /// </summary> + /// <param name="caption"></param> + /// <param name="message"></param> + /// <returns></returns> + public static DialogResult Show(string caption, string message) + { + return MessageWindowElement.Show(caption, message, DialogButton.OkCancel); + } + + /// <summary> + /// Shows a new <see cref="MessageWindowElement"/> with the given caption, message and buttons + /// </summary> + /// <param name="caption"></param> + /// <param name="message"></param> + /// <param name="buttons"></param> + /// <returns></returns> + public static DialogResult Show(string caption, string message, DialogButton buttons) + { + lock (SyncObject) + { + DialogResult result = DialogResult.None; + + System.Windows.Application.Current.Dispatcher.Invoke( + (Action)delegate + { + MessageWindowElement window = new MessageWindowElement + { + Title = caption, + Content = message, + Buttons = buttons, + StartupLocation = StartupPosition.CenterParent + }; + + result = ServiceLocator.GetService<IVirtualDesktopManager>().ShowDialog(window); + }); + + return result; + } + } + + #endregion + + #region · Properties · + + /// <summary> + /// Gets or sets the button combination to be shown + /// </summary> + public DialogButton Buttons + { + get { return (DialogButton)base.GetValue(MessageWindowElement.ButtonsProperty); } + set { base.SetValue(MessageWindowElement.ButtonsProperty, value); } + } + + #endregion + + #region · Constructors · + + /// <summary> + /// Initializes a new instance of the <see cref="MessageWindowElement"/> class + /// </summary> + public MessageWindowElement() + : base() + { + CommandBinding bindinAccept = new CommandBinding(MessageWindowElement.AcceptCommand, new ExecutedRoutedEventHandler(OnAccept)); + this.CommandBindings.Add(bindinAccept); + + CommandBinding bindingCancel = new CommandBinding(MessageWindowElement.CancelCommand, new ExecutedRoutedEventHandler(OnCancel)); + this.CommandBindings.Add(bindingCancel); + } + + #endregion + + #region · Protected Methods · + + /// <summary> + /// Focuses the window + /// </summary> + protected override void GiveFocus() + { + this.SetFocus(); + } + + #endregion + + #region · Command Actions · + + private void OnAccept(object sender, ExecutedRoutedEventArgs e) + { + if (this.Buttons == DialogButton.Ok || + this.Buttons == DialogButton.OkCancel) + { + this.DialogResult = DialogResult.Ok; + } + else + { + this.DialogResult = DialogResult.Yes; + } + + this.Hide(); + } + + private void OnCancel(object sender, ExecutedRoutedEventArgs e) + { + if (this.Buttons == DialogButton.OkCancel) + { + this.DialogResult = DialogResult.Cancel; + } + else + { + this.DialogResult = DialogResult.No; + } + + this.Hide(); + } + + #endregion + } +}