// ******************************************************************
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the MIT License (MIT).
// THE CODE 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 CODE OR THE USE OR OTHER DEALINGS IN THE CODE.
// ******************************************************************
using System;
using System.Collections.Generic;
namespace Microsoft.Toolkit.Uwp.Notifications
{
///
/// Create your own custom actions, using controls like , , and .
///
public sealed class ToastActionsCustom : IToastActions
{
///
/// Inputs like and can be added to the Toast. Only up to 5 inputs can be added; after that, an exception is thrown.
///
public IList Inputs { get; private set; } = new LimitedList(5);
///
/// Buttons are displayed after all the inputs (or adjacent to inputs if used as quick reply buttons). Only up to 5 buttons can be added (or fewer if you are also including context menu items). After that, an exception is thrown. You can add , , or
///
public IList Buttons { get; private set; } = new LimitedList(5);
///
/// New in Anniversary Update: Custom context menu items, providing additional actions when the user right clicks the Toast notification. You can only have up to 5 buttons and context menu items *combined*. Thus, if you have one context menu item, you can only have four buttons, etc.
///
public IList ContextMenuItems { get; private set; } = new List();
internal Element_ToastActions ConvertToElement()
{
if (Buttons.Count + ContextMenuItems.Count > 5)
{
throw new InvalidOperationException("You have too many buttons/context menu items. You can only have up to 5 total.");
}
var el = new Element_ToastActions();
foreach (var input in Inputs)
{
el.Children.Add(ConvertToInputElement(input));
}
foreach (var button in this.Buttons)
{
el.Children.Add(ConvertToActionElement(button));
}
foreach (var item in ContextMenuItems)
{
el.Children.Add(item.ConvertToElement());
}
return el;
}
private static Element_ToastAction ConvertToActionElement(IToastButton button)
{
if (button is ToastButton)
{
return (button as ToastButton).ConvertToElement();
}
if (button is ToastButtonDismiss)
{
return (button as ToastButtonDismiss).ConvertToElement();
}
if (button is ToastButtonSnooze)
{
return (button as ToastButtonSnooze).ConvertToElement();
}
throw new NotImplementedException("Unknown button child: " + button.GetType());
}
private static Element_ToastInput ConvertToInputElement(IToastInput input)
{
if (input is ToastTextBox)
{
return (input as ToastTextBox).ConvertToElement();
}
if (input is ToastSelectionBox)
{
return (input as ToastSelectionBox).ConvertToElement();
}
throw new NotImplementedException("Unknown input child: " + input.GetType());
}
}
}