X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2FTizen.NUI%2Fsrc%2Fpublic%2FBaseComponents%2FStyle%2FSelector.cs;h=34c44a695e540bfcbc0c49dd2fd89ad84403ce4b;hb=7d2c1760de4801232d369153d56b8621d1038011;hp=7c4b431d745ca08021a9cd7a5edc5e730cb6dbf8;hpb=d0c101f074bcce710226d55ff9c81d451ce2d51e;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git diff --git a/src/Tizen.NUI/src/public/BaseComponents/Style/Selector.cs b/src/Tizen.NUI/src/public/BaseComponents/Style/Selector.cs index 7c4b431..34c44a6 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/Style/Selector.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/Style/Selector.cs @@ -1,5 +1,5 @@ /* - * 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. @@ -18,7 +18,6 @@ using System; using System.Collections.Generic; using System.ComponentModel; using Tizen.NUI.Binding; -using Tizen.NUI.Components; namespace Tizen.NUI.BaseComponents { @@ -34,32 +33,36 @@ namespace Tizen.NUI.BaseComponents private readonly bool cloneable = typeof(ICloneable).IsAssignableFrom(typeof(T)); /// - /// The list for adding state-value pair. + /// The list for adding . /// [EditorBrowsable(EditorBrowsableState.Never)] - List> StateValueList { get; set; } = new List>(); + List> SelectorItems { get; set; } = new List>(); /// - /// Adds the specified state and value. + /// Adds the specified state and value to the . /// /// The state. /// The value associated with state. [EditorBrowsable(EditorBrowsableState.Never)] - public void Add(ControlState state, T value) => Add(new StateValuePair(state, value)); + public void Add(ControlState state, T value) + { + SelectorItems.Add(new SelectorItem(state, value)); + All = default; + } /// - /// Adds the specified state and value. + /// Adds the specified state and value to the . /// - /// + /// The selector item class that stores a state-value pair. [EditorBrowsable(EditorBrowsableState.Never)] - public void Add(StateValuePair stateValuePair) + public void Add(SelectorItem selectorItem) { // To prevent a state from having multiple values, remove existing state-value pair. - int index = StateValueList.FindIndex(x => x.State == stateValuePair.State); + int index = SelectorItems.FindIndex(x => x.State == selectorItem.State); if (index != -1) - StateValueList.RemoveAt(index); + SelectorItems.RemoveAt(index); - StateValueList.Add(stateValuePair); + SelectorItems.Add(selectorItem); } /// 6 @@ -108,7 +111,7 @@ namespace Tizen.NUI.BaseComponents [EditorBrowsable(EditorBrowsableState.Never)] public T Normal { - get => StateValueList.Find(x => x.State == ControlState.Normal).Value; + get => SelectorItems.Find(x => x.State == ControlState.Normal).Value; set => Add(ControlState.Normal, value); } /// @@ -119,8 +122,7 @@ namespace Tizen.NUI.BaseComponents [EditorBrowsable(EditorBrowsableState.Never)] public T Pressed { - - get => StateValueList.Find(x => x.State == ControlState.Pressed).Value; + get => SelectorItems.Find(x => x.State == ControlState.Pressed).Value; set => Add(ControlState.Pressed, value); } /// @@ -131,7 +133,7 @@ namespace Tizen.NUI.BaseComponents [EditorBrowsable(EditorBrowsableState.Never)] public T Focused { - get => StateValueList.Find(x => x.State == ControlState.Focused).Value; + get => SelectorItems.Find(x => x.State == ControlState.Focused).Value; set => Add(ControlState.Focused, value); } /// @@ -142,7 +144,7 @@ namespace Tizen.NUI.BaseComponents [EditorBrowsable(EditorBrowsableState.Never)] public T Selected { - get => StateValueList.Find(x => x.State == ControlState.Selected).Value; + get => SelectorItems.Find(x => x.State == ControlState.Selected).Value; set => Add(ControlState.Selected, value); } /// @@ -153,8 +155,7 @@ namespace Tizen.NUI.BaseComponents [EditorBrowsable(EditorBrowsableState.Never)] public T Disabled { - - get => StateValueList.Find(x => x.State == ControlState.Disabled).Value; + get => SelectorItems.Find(x => x.State == ControlState.Disabled).Value; set => Add(ControlState.Disabled, value); } /// @@ -165,7 +166,7 @@ namespace Tizen.NUI.BaseComponents [EditorBrowsable(EditorBrowsableState.Never)] public T DisabledFocused { - get => StateValueList.Find(x => x.State == ControlState.DisabledFocused).Value; + get => SelectorItems.Find(x => x.State == ControlState.DisabledFocused).Value; set => Add(ControlState.DisabledFocused, value); } /// @@ -175,7 +176,7 @@ namespace Tizen.NUI.BaseComponents /// 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 => StateValueList.Find(x => x.State == ControlState.SelectedFocused).Value; + get => SelectorItems.Find(x => x.State == ControlState.SelectedFocused).Value; set => Add(ControlState.SelectedFocused, value); } /// @@ -186,8 +187,7 @@ namespace Tizen.NUI.BaseComponents [EditorBrowsable(EditorBrowsableState.Never)] public T DisabledSelected { - - get => StateValueList.Find(x => x.State == ControlState.DisabledSelected).Value; + get => SelectorItems.Find(x => x.State == ControlState.DisabledSelected).Value; set => Add(ControlState.DisabledSelected, value); } @@ -199,7 +199,7 @@ namespace Tizen.NUI.BaseComponents [EditorBrowsable(EditorBrowsableState.Never)] public T Other { - get => StateValueList.Find(x => x.State == ControlState.Other).Value; + get => SelectorItems.Find(x => x.State == ControlState.Other).Value; set => Add(ControlState.Other, value); } @@ -207,11 +207,12 @@ namespace Tizen.NUI.BaseComponents /// Gets the number of elements. /// [EditorBrowsable(EditorBrowsableState.Never)] - public int Count => StateValueList.Count; + public int Count => SelectorItems.Count; /// /// Get value by State. /// + /// Thrown when state is null. /// 6 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API. /// True if the selector has a given state value, false otherwise. @@ -225,29 +226,36 @@ namespace Tizen.NUI.BaseComponents return true; } + if (state == null) + throw new ArgumentNullException(nameof(state)); + result = default; - int index = StateValueList.FindIndex(x => x.State == state); + int index = SelectorItems.FindIndex(x => x.State == state); if (index >= 0) { - result = StateValueList[index].Value; + result = SelectorItems[index].Value; return true; } + if (null == state) + { + throw new ArgumentNullException(nameof(state)); + } if (state.IsCombined) { - index = StateValueList.FindIndex(x => state.Contains(x.State)); + index = SelectorItems.FindIndex(x => state.Contains(x.State)); if (index >= 0) { - result = StateValueList[index].Value; + result = SelectorItems[index].Value; return true; } } - index = StateValueList.FindIndex(x => x.State == ControlState.Other); + index = SelectorItems.FindIndex(x => x.State == ControlState.Other); if (index >= 0) { - result = StateValueList[index].Value; + result = SelectorItems[index].Value; return true; } @@ -261,7 +269,7 @@ namespace Tizen.NUI.BaseComponents public void Clear() { All = default; - StateValueList.Clear(); + SelectorItems.Clear(); } /// @@ -270,7 +278,7 @@ namespace Tizen.NUI.BaseComponents { string result = $"[All, {All}]"; - foreach (var item in StateValueList) + foreach (var item in SelectorItems) { result += $", {item}"; } @@ -293,28 +301,49 @@ namespace Tizen.NUI.BaseComponents } /// + /// Clone with type converter. + /// + /// Thrown when converter is null. + [EditorBrowsable(EditorBrowsableState.Never)] + public Selector Clone(Converter converter) + { + if (converter == null) throw new ArgumentNullException(nameof(converter)); + + Selector result = new Selector(); + result.All = converter(All); + result.SelectorItems = SelectorItems.ConvertAll>(m => new SelectorItem(m.State, converter(m.Value))); + + return result; + } + + /// /// Copy values from other selector. /// + /// Thrown when other is null. [EditorBrowsable(EditorBrowsableState.Never)] public void Clone(Selector other) { + if (null == other) + { + throw new ArgumentNullException(nameof(other)); + } + if (cloneable) { All = (T)((ICloneable)other.All)?.Clone(); - StateValueList = other.StateValueList.ConvertAll(m => new StateValuePair(m.State, (T)((ICloneable)m.Value)?.Clone())); + SelectorItems = other.SelectorItems.ConvertAll(m => new SelectorItem(m.State, (T)((ICloneable)m.Value)?.Clone())); } else { All = other.All; - StateValueList = other.StateValueList.ConvertAll(m => m); + SelectorItems = other.SelectorItems.ConvertAll(m => m); } } internal bool HasMultiValue() { - return StateValueList.Count > 1; + return SelectorItems.Count > 1; } - } /// @@ -349,10 +378,15 @@ namespace Tizen.NUI.BaseComponents /// /// Return the containing selector. It can be null. /// + /// Thrown when view is null. [EditorBrowsable(EditorBrowsableState.Never)] public Selector Get(View view) { if (!dirty) return selector; + if (null == view) + { + throw new ArgumentNullException(nameof(view)); + } T value = default; @@ -377,11 +411,17 @@ namespace Tizen.NUI.BaseComponents /// The View that is affected by this TriggerableSelector. /// The copy target. /// Whether it updates the target view after update the selector or not. + /// Thrown when view is null. [EditorBrowsable(EditorBrowsableState.Never)] public void Update(View view, Selector otherSelector, bool updateView = false) { Reset(view); + if (null == view) + { + throw new ArgumentNullException(nameof(view)); + } + if (otherSelector == null) { return; @@ -427,7 +467,10 @@ namespace Tizen.NUI.BaseComponents [EditorBrowsable(EditorBrowsableState.Never)] public void Reset(View view) { - view.ControlStateChangeEventInternal -= OnViewControlState; + if (view != null) + { + view.ControlStateChangeEventInternal -= OnViewControlState; + } selector?.Clear(); selector = null; dirty = false; @@ -442,4 +485,67 @@ namespace Tizen.NUI.BaseComponents } } } + + /// + /// The selector item class that stores a state-value pair. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public class SelectorItem + { + /// + /// The default constructor. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public SelectorItem() {} + + /// + /// The constructor with the specified state and value. + /// + /// The state + /// The value associated with state. + [EditorBrowsable(EditorBrowsableState.Never)] + public SelectorItem(ControlState state, T value) + { + State = state; + Value = value; + } + + /// + /// The state + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public ControlState State { get; set; } + + /// + /// The value associated with state. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public T Value { get; set; } + + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public override string ToString() => $"[{State}, {Value}]"; + } + + /// + /// Extension class for . + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public static class SelectorExtensions + { + /// + /// Adds the specified state and value to the . + /// + /// The list for adding state-value pair. + /// The state. + /// The value associated with state. + /// Thrown when given list is null. + [EditorBrowsable(EditorBrowsableState.Never)] + public static void Add(this IList> list, ControlState state, T value) + { + if (list == null) throw new ArgumentNullException(nameof(list)); + + list.Add(new SelectorItem(state, value)); + } + } }