/// The list for adding state-value pair.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- public IList<StateValuePair<T>> StateValueList { get; private set; } = new List<StateValuePair<T>>();
+ List<StateValuePair<T>> StateValueList { get; set; } = new List<StateValuePair<T>>();
/// <summary>
- /// Adds the specified state and value to the <see cref="StateValueList"/>.
+ /// Adds the specified state and value.
/// </summary>
/// <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) => StateValueList.Add(new StateValuePair<T>(state, value));
+ public void Add(ControlState state, T value) => Add(new StateValuePair<T>(state, value));
/// <summary>
- /// Adds the specified state and value to the <see cref="StateValueList"/>.
+ /// Adds the specified state and value.
/// </summary>
/// <param name="stateValuePair"></param>
[EditorBrowsable(EditorBrowsableState.Never)]
- public void Add(StateValuePair<T> stateValuePair) => StateValueList.Add(stateValuePair);
+ public void Add(StateValuePair<T> stateValuePair)
+ {
+ // To prevent a state from having multiple values, remove existing state-value pair.
+ int index = StateValueList.FindIndex(x => x.State == stateValuePair.State);
+ if (index != -1)
+ StateValueList.RemoveAt(index);
+
+ StateValueList.Add(stateValuePair);
+ }
/// <since_tizen> 6 </since_tizen>
/// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
[EditorBrowsable(EditorBrowsableState.Never)]
public T Normal
{
- get => ((List<StateValuePair<T>>)StateValueList).FindLast(x => x.State == ControlState.Normal).Value;
+ get => StateValueList.Find(x => x.State == ControlState.Normal).Value;
set => Add(ControlState.Normal, value);
}
/// <summary>
public T Pressed
{
- get => ((List<StateValuePair<T>>)StateValueList).FindLast(x => x.State == ControlState.Pressed).Value;
+ get => StateValueList.Find(x => x.State == ControlState.Pressed).Value;
set => Add(ControlState.Pressed, value);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public T Focused
{
- get => ((List<StateValuePair<T>>)StateValueList).FindLast(x => x.State == ControlState.Focused).Value;
+ get => StateValueList.Find(x => x.State == ControlState.Focused).Value;
set => Add(ControlState.Focused, value);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public T Selected
{
- get => ((List<StateValuePair<T>>)StateValueList).FindLast(x => x.State == ControlState.Selected).Value;
+ get => StateValueList.Find(x => x.State == ControlState.Selected).Value;
set => Add(ControlState.Selected, value);
}
/// <summary>
public T Disabled
{
- get => ((List<StateValuePair<T>>)StateValueList).FindLast(x => x.State == ControlState.Disabled).Value;
+ get => StateValueList.Find(x => x.State == ControlState.Disabled).Value;
set => Add(ControlState.Disabled, value);
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public T DisabledFocused
{
- get => ((List<StateValuePair<T>>)StateValueList).FindLast(x => x.State == ControlState.DisabledFocused).Value;
+ get => StateValueList.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<StateValuePair<T>>)StateValueList).FindLast(x => x.State == ControlState.SelectedFocused).Value;
+ get => StateValueList.Find(x => x.State == ControlState.SelectedFocused).Value;
set => Add(ControlState.SelectedFocused, value);
}
/// <summary>
public T DisabledSelected
{
- get => ((List<StateValuePair<T>>)StateValueList).FindLast(x => x.State == ControlState.DisabledSelected).Value;
+ get => StateValueList.Find(x => x.State == ControlState.DisabledSelected).Value;
set => Add(ControlState.DisabledSelected, value);
}
[EditorBrowsable(EditorBrowsableState.Never)]
public T Other
{
- get => ((List<StateValuePair<T>>)StateValueList).FindLast(x => x.State == ControlState.Other).Value;
+ get => StateValueList.Find(x => x.State == ControlState.Other).Value;
set => Add(ControlState.Other, value);
}
+
+ /// <summary>
+ /// Gets the number of elements.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public int Count => StateValueList.Count;
+
/// <summary>
/// Get value by State.
/// </summary>
result = default;
- int index = ((List<StateValuePair<T>>)StateValueList).FindLastIndex(x => x.State == state);
+ int index = StateValueList.FindIndex(x => x.State == state);
if (index >= 0)
{
result = StateValueList[index].Value;
if (state.IsCombined)
{
- index = ((List<StateValuePair<T>>)StateValueList).FindLastIndex(x => state.Contains(x.State));
+ index = StateValueList.FindIndex(x => state.Contains(x.State));
if (index >= 0)
{
result = StateValueList[index].Value;
}
}
- index = ((List<StateValuePair<T>>)StateValueList).FindLastIndex(x => x.State == ControlState.Other);
+ index = StateValueList.FindIndex(x => x.State == ControlState.Other);
if (index >= 0)
{
result = StateValueList[index].Value;
}
/// <summary>
- /// Removes all elements from <see cref="StateValueList"/>.
+ /// Removes all elements.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public void Clear()
if (cloneable)
{
All = (T)((ICloneable)other.All)?.Clone();
- StateValueList = ((List<StateValuePair<T>>)other.StateValueList).ConvertAll(m => new StateValuePair<T>(m.State, (T)((ICloneable)m.Value)?.Clone()));
+ StateValueList = other.StateValueList.ConvertAll(m => new StateValuePair<T>(m.State, (T)((ICloneable)m.Value)?.Clone()));
}
else
{
All = other.All;
- StateValueList = ((List<StateValuePair<T>>)other.StateValueList).ConvertAll(m => m);
+ StateValueList = other.StateValueList.ConvertAll(m => m);
}
}
{
return StateValueList.Count > 1;
}
+
}
/// <summary>
}
}
}
-
- /// <summary>
- /// Extension class for <see cref="Selector{T}"/>.
- /// </summary>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static class SelectorExtensions
- {
- /// <summary>
- /// Adds the specified state and value to the <see cref="Selector{T}.StateValueList"/>.
- /// </summary>
- /// <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>
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static void Add<T>(this IList<StateValuePair<T>> list, ControlState state, T value)
- {
- list.Add(new StateValuePair<T>(state, value));
- }
- }
}