diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2019-04-08 00:45:08 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2019-04-08 00:45:08 +0300 |
| commit | 1608e69a417bc5e40a607c3958c4a60f19f66f1a (patch) | |
| tree | c04d78e2abb5aac8c22350c90cb8b469f6eca30d /Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications | |
| parent | 08dd6000fe3a218221003876a699f448835b62e4 (diff) | |
| parent | b4a71931ea52636c6b36376aa9d71697ccf73524 (diff) | |
| download | Tango-1608e69a417bc5e40a607c3958c4a60f19f66f1a.tar.gz Tango-1608e69a417bc5e40a607c3958c4a60f19f66f1a.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications')
3 files changed, 212 insertions, 0 deletions
diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/DefaultNotificationManager.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/DefaultNotificationManager.cs new file mode 100644 index 000000000..7121e6ce0 --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/DefaultNotificationManager.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Media.Imaging; +using Tango.Scripting.IDE.Windows; +using Tango.SharedUI; + +namespace Tango.Scripting.IDE.Notifications +{ + public class DefaultNotificationManager : INotificationManager + { + public Task<TViewModel> ShowDialog<TViewModel, TView>(TViewModel viewModel, TView view) + where TViewModel : IDEDialogViewModel + where TView : FrameworkElement + { + TaskCompletionSource<TViewModel> source = new TaskCompletionSource<TViewModel>(); + + Application.Current.Dispatcher.BeginInvoke(new Action(() => + { + DialogWindow window = new DialogWindow(); + window.Title = viewModel.Title; + window.Content = view; + view.DataContext = viewModel; + window.WindowStartupLocation = WindowStartupLocation.CenterOwner; + window.Owner = Application.Current.MainWindow; + viewModel.Accepted += () => + { + window.Close(); + source.SetResult(viewModel); + }; + viewModel.Canceled += () => + { + window.Close(); + source.SetResult(viewModel); + }; + window.ShowDialog(); + })); + + return source.Task; + } + + public Task<TViewModel> ShowDialog<TViewModel>(TViewModel viewModel) where TViewModel : IDEDialogViewModel + { + var modelName = typeof(TViewModel).Name; + var viewName = modelName.Replace("VM", ""); + var viewType = typeof(TViewModel).Assembly.GetType(typeof(TViewModel).Namespace + "." + viewName); + var view = Activator.CreateInstance(viewType) as FrameworkElement; + return ShowDialog(viewModel, view); + } + + public Task<TViewModel> ShowDialog<TViewModel>() where TViewModel : IDEDialogViewModel + { + return ShowDialog(Activator.CreateInstance<TViewModel>()); + } + + public Task ShowError(string title, string message) + { + throw new NotImplementedException(); + } + + public Task ShowInfo(string title, string message) + { + throw new NotImplementedException(); + } + + public ProgressNotificationHandler ShowProgress(string title, string message, bool canCancel = false) + { + throw new NotImplementedException(); + } + + public Task<bool> ShowQuestion(string title, string message) + { + throw new NotImplementedException(); + } + + public Task ShowSuccess(string title, string message) + { + throw new NotImplementedException(); + } + + public Task ShowWarning(string title, string message) + { + throw new NotImplementedException(); + } + + private Task ShowMessageBox(String title, String message, bool hasCancel, BitmapSource icon) + { + return null; + } + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/INotificationManager.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/INotificationManager.cs new file mode 100644 index 000000000..1ed516b28 --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/INotificationManager.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using Tango.SharedUI; + +namespace Tango.Scripting.IDE.Notifications +{ + /// <summary> + /// Represents the IDE notification manager. + /// </summary> + public interface INotificationManager + { + /// <summary> + /// Displays the specified TView as a dialog and TViewModel as it's data context. + /// </summary> + /// <typeparam name="TViewModel">The type of the view model.</typeparam> + /// <typeparam name="TView">The type of the view.</typeparam> + /// <param name="viewModel">The view model.</param> + /// <param name="view">The view.</param> + /// <returns></returns> + Task<TViewModel> ShowDialog<TViewModel, TView>(TViewModel viewModel, TView view) where TViewModel : IDEDialogViewModel where TView : FrameworkElement; + + /// <summary> + /// Finds (by convention )the appropriate view by the specified TViewModel name. + /// The search pattern is ViewVM - VM + View. + /// </summary> + /// <typeparam name="TViewModel">The type of the view model.</typeparam> + /// <param name="viewModel">The view model.</param> + /// <returns></returns> + Task<TViewModel> ShowDialog<TViewModel>(TViewModel viewModel) where TViewModel : IDEDialogViewModel; + + /// <summary> + /// Finds (by convention )the appropriate view by the specified TViewModel name. + /// The search pattern is ViewVM - VM + View. + /// The view model instance will be created automatically and must contain a parameterless constructor. + /// </summary> + /// <typeparam name="TViewModel">The type of the view model.</typeparam> + /// <param name="viewModel">The view model.</param> + /// <returns></returns> + Task<TViewModel> ShowDialog<TViewModel>() where TViewModel : IDEDialogViewModel; + + /// <summary> + /// Displays an error message. + /// </summary> + /// <param name="title">The title.</param> + /// <param name="message">The message.</param> + /// <returns></returns> + Task ShowError(String title, String message); + + /// <summary> + /// Displays an error message. + /// </summary> + /// <param name="title">The title.</param> + /// <param name="message">The message.</param> + /// <returns></returns> + Task ShowInfo(String title, String message); + + /// <summary> + /// Displays a warning message. + /// </summary> + /// <param name="title">The title.</param> + /// <param name="message">The message.</param> + /// <returns></returns> + Task ShowWarning(String title, String message); + + /// <summary> + /// Displays a positive message. + /// </summary> + /// <param name="title">The title.</param> + /// <param name="message">The message.</param> + /// <returns></returns> + Task ShowSuccess(String title, String message); + + /// <summary> + /// Displays a question and returns the result. + /// </summary> + /// <param name="title">The title.</param> + /// <param name="message">The message.</param> + /// <returns></returns> + Task<bool> ShowQuestion(String title, String message); + + /// <summary> + /// Displays an intermediate progress dialog and returns an instance of <see cref="ProgressNotificationHandler"/>. + /// Once the progress notification handler will be disposed the dialog will close. + /// </summary> + /// <param name="title">The title.</param> + /// <param name="message">The message.</param> + /// <param name="canCancel">if set to <c>true</c> the dialog will contain a cancel button.</param> + /// <returns></returns> + ProgressNotificationHandler ShowProgress(String title, String message, bool canCancel = false); + } +} diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/ProgressNotificationHandler.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/ProgressNotificationHandler.cs new file mode 100644 index 000000000..b36419400 --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.IDE/Notifications/ProgressNotificationHandler.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Scripting.IDE.Notifications +{ + public class ProgressNotificationHandler : IDisposable + { + private Action _disposeAction; + + public ProgressNotificationHandler(Action disposeAction) + { + _disposeAction = disposeAction; + } + + public void Dispose() + { + _disposeAction?.Invoke(); + } + } +} |
