/*
- * Copyright(c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright(c) 2021 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
using System.Collections.Generic;
using System.ComponentModel;
using Tizen.NUI.Binding;
-using Tizen.NUI.Components;
namespace Tizen.NUI.BaseComponents
{
/// The list for adding <see cref="SelectorItem{T}"/>.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public IList<SelectorItem<T>> SelectorItems { get; set; } = new List<SelectorItem<T>>();
+ List<SelectorItem<T>> SelectorItems { get; set; } = new List<SelectorItem<T>>();
/// <summary>
/// Adds the specified state and value to the <see cref="SelectorItems"/>.
/// <param name="state">The state.</param>
/// <param name="value">The value associated with state.</param>
[EditorBrowsable(EditorBrowsableState.Never)]
- public void Add(ControlState state, T value) => SelectorItems.Add(new SelectorItem<T>(state, value));
+ public void Add(ControlState state, T value)
+ {
+ SelectorItems.Add(new SelectorItem<T>(state, value));
+ All = default;
+ }
/// <summary>
/// Adds the specified state and value to the <see cref="SelectorItems"/>.
public void Add(SelectorItem<T> selectorItem)
{
// To prevent a state from having multiple values, remove existing state-value pair.
- int index = ((List<SelectorItem<T>>)SelectorItems).FindIndex(x => x.State == selectorItem.State);
+ int index = SelectorItems.FindIndex(x => x.State == selectorItem.State);
if (index != -1)
SelectorItems.RemoveAt(index);
[EditorBrowsable(EditorBrowsableState.Never)]
public T Normal
{
- get => ((List<SelectorItem<T>>)SelectorItems).Find(x => x.State == ControlState.Normal).Value;
+ get => SelectorItems.Find(x => x.State == ControlState.Normal).Value;
set => Add(ControlState.Normal, value);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public T Pressed
{
- get => ((List<SelectorItem<T>>)SelectorItems).Find(x => x.State == ControlState.Pressed).Value;
+ get => SelectorItems.Find(x => x.State == ControlState.Pressed).Value;
set => Add(ControlState.Pressed, value);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public T Focused
{
- get => ((List<SelectorItem<T>>)SelectorItems).Find(x => x.State == ControlState.Focused).Value;
+ get => SelectorItems.Find(x => x.State == ControlState.Focused).Value;
set => Add(ControlState.Focused, value);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public T Selected
{
- get => ((List<SelectorItem<T>>)SelectorItems).Find(x => x.State == ControlState.Selected).Value;
+ get => SelectorItems.Find(x => x.State == ControlState.Selected).Value;
set => Add(ControlState.Selected, value);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public T Disabled
{
- get => ((List<SelectorItem<T>>)SelectorItems).Find(x => x.State == ControlState.Disabled).Value;
+ get => SelectorItems.Find(x => x.State == ControlState.Disabled).Value;
set => Add(ControlState.Disabled, value);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public T DisabledFocused
{
- get => ((List<SelectorItem<T>>)SelectorItems).Find(x => x.State == ControlState.DisabledFocused).Value;
+ get => SelectorItems.Find(x => x.State == ControlState.DisabledFocused).Value;
set => Add(ControlState.DisabledFocused, value);
}
/// <summary>
/// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
public T SelectedFocused
{
- get => ((List<SelectorItem<T>>)SelectorItems).Find(x => x.State == ControlState.SelectedFocused).Value;
+ get => SelectorItems.Find(x => x.State == ControlState.SelectedFocused).Value;
set => Add(ControlState.SelectedFocused, value);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public T DisabledSelected
{
- get => ((List<SelectorItem<T>>)SelectorItems).Find(x => x.State == ControlState.DisabledSelected).Value;
+ get => SelectorItems.Find(x => x.State == ControlState.DisabledSelected).Value;
set => Add(ControlState.DisabledSelected, value);
}
[EditorBrowsable(EditorBrowsableState.Never)]
public T Other
{
- get => ((List<SelectorItem<T>>)SelectorItems).Find(x => x.State == ControlState.Other).Value;
+ get => SelectorItems.Find(x => x.State == ControlState.Other).Value;
set => Add(ControlState.Other, value);
}
result = default;
- int index = ((List<SelectorItem<T>>)SelectorItems).FindIndex(x => x.State == state);
+ int index = SelectorItems.FindIndex(x => x.State == state);
if (index >= 0)
{
result = SelectorItems[index].Value;
}
if (state.IsCombined)
{
- index = ((List<SelectorItem<T>>)SelectorItems).FindIndex(x => state.Contains(x.State));
+ index = SelectorItems.FindIndex(x => state.Contains(x.State));
if (index >= 0)
{
result = SelectorItems[index].Value;
}
}
- index = ((List<SelectorItem<T>>)SelectorItems).FindIndex(x => x.State == ControlState.Other);
+ index = SelectorItems.FindIndex(x => x.State == ControlState.Other);
if (index >= 0)
{
result = SelectorItems[index].Value;
}
/// <summary>
+ /// Clone with type converter.
+ /// </summary>
+ /// <exception cref="ArgumentNullException"> Thrown when converter is null. </exception>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public Selector<TOut> Clone<TOut>(Converter<T, TOut> converter)
+ {
+ if (converter == null) throw new ArgumentNullException(nameof(converter));
+
+ Selector<TOut> result = new Selector<TOut>();
+ result.All = converter(All);
+ result.SelectorItems = SelectorItems.ConvertAll<SelectorItem<TOut>>(m => new SelectorItem<TOut>(m.State, converter(m.Value)));
+
+ return result;
+ }
+
+ /// <summary>
/// Copy values from other selector.
/// </summary>
/// <exception cref="ArgumentNullException"> Thrown when other is null. </exception>
if (cloneable)
{
All = (T)((ICloneable)other.All)?.Clone();
- SelectorItems = ((List<SelectorItem<T>>)other.SelectorItems).ConvertAll(m => new SelectorItem<T>(m.State, (T)((ICloneable)m.Value)?.Clone()));
+ SelectorItems = other.SelectorItems.ConvertAll(m => new SelectorItem<T>(m.State, (T)((ICloneable)m.Value)?.Clone()));
}
else
{
All = other.All;
- SelectorItems = ((List<SelectorItem<T>>)other.SelectorItems).ConvertAll(m => m);
+ SelectorItems = other.SelectorItems.ConvertAll(m => m);
}
}
/// <param name="list">The list for adding state-value pair.</param>
/// <param name="state">The state.</param>
/// <param name="value">The value associated with state.</param>
+ /// <exception cref="ArgumentNullException"> Thrown when given list is null. </exception>
[EditorBrowsable(EditorBrowsableState.Never)]
public static void Add<T>(this IList<SelectorItem<T>> list, ControlState state, T value)
{
+ if (list == null) throw new ArgumentNullException(nameof(list));
+
list.Add(new SelectorItem<T>(state, value));
}
}