using MaterialDesignThemes.Wpf;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using Tango.SharedUI;
namespace Tango.MachineStudio.Common.Notifications
{
/// <summary>
/// Represents the Machine Studio user notification provider responsible for displaying information, alerts and dialogs to the user.
/// </summary>
public interface INotificationProvider
{
/// <summary>
/// Gets the collection of active task items.
/// </summary>
ObservableCollection<TaskItem> TaskItems { get; }
/// <summary>
/// Gets the collection of active bar items.
/// </summary>
ObservableCollection<BarItem> BarItems { get; }
/// <summary>
/// Gets the current displayed task item.
/// </summary>
TaskItem CurrentTaskItem { get; }
/// <summary>
/// Gets a value indicating whether there are any queued task items.
/// </summary>
bool HasTaskItems { get; }
/// <summary>
/// Pushes the specified task item to the queue.
/// </summary>
/// <param name="taskItem">The task item.</param>
void PushTaskItem(TaskItem taskItem);
/// <summary>
/// Create and push a new task item from the specified message.
/// </summary>
/// <param name="message">The message.</param>
/// <returns></returns>
TaskItem PushTaskItem(String message);
/// <summary>
/// Creates and push a new bar item from the specified framework element.
/// </summary>
/// <param name="element">The element.</param>
/// <returns></returns>
BarItem PushBarItem(FrameworkElement element);
/// <summary>
/// Pushes the specified bar item.
/// </summary>
/// <param name="barItem">The bar item.</param>
/// <returns></returns>
BarItem PushBarItem(BarItem barItem);
/// <summary>
/// Removed the specified task item from the queue.
/// </summary>
/// <param name="taskItem">The task item.</param>
void PopTaskItem(TaskItem taskItem);
/// <summary>
/// Removed the specified bar item.
/// </summary>
/// <param name="barItem">The bar item.</param>
void PopBarItem(BarItem barItem);
/// <summary>
/// Creates a new instance of the specified View type and displays it as a modal dialog.
/// </summary>
/// <typeparam name="View">The type of the view.</typeparam>
/// <typeparam name="VM">The type of the view model.</typeparam>
/// <param name="onAccept">Accept button callback.</param>
/// <param name="onCancel">Cancel button callback.</param>
void ShowModalDialog<View, VM>(Action<VM> onAccept, Action onCancel) where View : FrameworkElement where VM : DialogViewVM;
/// <summary>
/// Creates a new view by a naming convention of the specified view model type.
/// </summary>
/// <typeparam name="VM">The type of the view model.</typeparam>
/// <param name="onAccept">Accept button callback.</param>
/// <param name="onCancel">Cancel button callback.</param>
void ShowModalDialog<VM>(Action<VM> onAccept, Action onCancel) where VM : DialogViewVM;
/// <summary>
/// Shows the specified view with the specified view model as it's data context.
/// </summary>
/// <typeparam name="VM">The type of the mm.</typeparam>
/// <typeparam name="View">The type of the view.</typeparam>
/// <param name="vm">The view model.</param>
/// <param name="onAccept">The accept action.</param>
/// <param name="onCancel">The cancel action.</param>
void ShowModalDialog<VM, View>(VM vm, Action<VM> onAccept, Action onCancel) where View : FrameworkElement where VM : DialogViewVM;
/// <summary>
/// Shows the specified view with the specified view model as it's data context.
/// </summary>
/// <typeparam name="VM">The type of the mm.</typeparam>
/// <typeparam name="View">The type of the view.</typeparam>
/// <param name="vm">The view model.</param>
/// <param name="view">The view.</param>
/// <param name="onAccept">The accept action.</param>
/// <param name="onCancel">The cancel action.</param>
void ShowModalDialog<VM, View>(VM vm, View view, Action<VM> onAccept, Action onCancel) where View : FrameworkElement where VM : DialogViewVM;
/// <summary>
/// Creates a new view by a naming convention of the specified view model type.
/// </summary>
/// <typeparam name="VM">The type of the view model.</typeparam>
/// <param name="onAccept">Accept button callback.</param>
void ShowModalDialog<VM>(Action<VM> onAccept) where VM : DialogViewVM;
/// <summary>
/// Display a message box.
/// </summary>
/// <param name="icon">The icon.</param>
/// <param name="iconColor">Color of the icon.</param>
/// <param name="message">The message.</param>
/// <param name="hasCancel">if set to <c>true</c> displays the cancel button.</param>
/// <returns></returns>
bool? ShowMessageBox(PackIconKind icon, Brush iconColor, String message, bool hasCancel);
/// <summary>
/// Shows an information message box.
/// </summary>
/// <param name="message">The message.</param>
void ShowInfo(String message);
/// <summary>
/// Shows warning message box.
/// </summary>
/// <param name="message">The message.</param>
void ShowWarning(String message);
/// <summary>
/// Shows an error message box.
/// </summary>
/// <param name="message">The message.</param>
void ShowError(String message);
/// <summary>
/// Shows a question message box.
/// </summary>
/// <param name="message">The message.</param>
bool ShowQuestion(String message);
/// <summary>
/// Shows a question message box with an error icon.
/// </summary>
/// <param name="message">The message.</param>
bool ShowErrorQuestion(String message);
/// <summary>
/// Shows a dialog with a text input field and returns the response.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="hint">Text field hint.</param>
/// <param name="defaultResponse">Optional default response.</param>
/// <returns></returns>
String ShowTextInput(String message, String hint, String defaultResponse = null);
}
}
<ContentControl.Style>
<Style TargetType="ContentControl">
<Setter Property="ContentTemplate" Value="{x:Null}"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding Type}" Value="APPLICATION_STARTED">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Button Style="{StaticResource emptyButton}" Cursor="Hand" Foreground="White" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.DisplayTimelineCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ContentControl},Path=DataContext}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Display Timeline" VerticalAlignment="Center"></TextBlock>
<materialDesign:PackIcon VerticalAlignment="Center" Margin="5 0 0 0" Kind="ArrowRight" Width="16" Height="16" />
</StackPanel>
</Button>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Grid>
</Grid>
</Grid>
</Grid>
</Grid>
</Grid>
</UserControl>