2 using System.ComponentModel;
3 using Tizen.NUI.BaseComponents;
4 using Tizen.NUI.Components.Extension;
5 using Tizen.NUI.Accessibility; // To use AccessibilityManager
7 namespace Tizen.NUI.Components
9 public partial class RecyclerViewItem
11 internal RecyclerView ParentItemsView = null;
12 internal object ParentGroup = null;
13 internal bool isGroupHeader;
14 internal bool isGroupFooter;
15 private bool styleApplied = false;
18 /// Update ViewItem State.
20 internal void UpdateState()
22 if (!styleApplied) return;
24 ControlState sourceState = ControlState;
25 ControlState targetState;
28 targetState = IsEnabled ? ControlState.Normal : ControlState.Disabled;
30 // Selected, DisabledSelected
31 if (IsSelected) targetState += ControlState.Selected;
33 // Pressed, PressedSelected
34 if (IsPressed) targetState += ControlState.Pressed;
36 // Focused, FocusedPressed, FocusedPressedSelected, DisabledFocused, DisabledSelectedFocused
37 if (IsFocused) targetState += ControlState.Focused;
39 if (sourceState != targetState)
41 ControlState = targetState;
46 internal override bool OnAccessibilityActivated()
58 bool clicked = IsPressed && IsEnabled;
63 //IsSelected = !IsSelected;
72 ClickedEventArgs eventArgs = new ClickedEventArgs();
73 OnClickedInternal(eventArgs);
79 /// Called when the ViewItem is Clicked by a user
81 /// <param name="eventArgs">The click information.</param>
82 [EditorBrowsable(EditorBrowsableState.Never)]
83 protected virtual void OnClicked(ClickedEventArgs eventArgs)
85 //Console.WriteLine("On Clicked Called {0}", this.Index);
89 /// Called when the ViewItem need to be updated
91 [EditorBrowsable(EditorBrowsableState.Never)]
92 protected override void OnUpdate()
99 [EditorBrowsable(EditorBrowsableState.Never)]
100 protected override bool HandleControlStateOnTouch(Touch touch)
102 if (!IsEnabled || null == touch)
107 PointStateType state = touch.GetState(0);
111 case PointStateType.Down:
115 case PointStateType.Interrupted:
119 case PointStateType.Up:
121 bool clicked = IsPressed && IsEnabled;
124 if (!clicked) return true;
128 if (ParentItemsView as CollectionView)
130 CollectionView colView = ParentItemsView as CollectionView;
131 switch (colView.SelectionMode)
133 case ItemSelectionMode.SingleSelection:
134 colView.SelectedItem = IsSelected ? null : BindingContext;
136 case ItemSelectionMode.MultipleSelections:
137 var selectedItems = colView.SelectedItems;
138 if (selectedItems.Contains(BindingContext)) selectedItems.Remove(BindingContext);
139 else selectedItems.Add(BindingContext);
141 case ItemSelectionMode.None:
148 // Extension : Extension?.SetTouchInfo(touch);
154 ClickedEventArgs eventArgs = new ClickedEventArgs();
155 OnClickedInternal(eventArgs);
163 return base.HandleControlStateOnTouch(touch);
168 /// Measure child, it can be override.
170 [EditorBrowsable(EditorBrowsableState.Never)]
171 protected virtual void MeasureChild()
176 /// Layout child, it can be override.
178 [EditorBrowsable(EditorBrowsableState.Never)]
179 protected virtual void LayoutChild()
184 /// Dispose Item and all children on it.
186 /// <param name="type">Dispose type.</param>
187 protected override void Dispose(DisposeTypes type)
194 if (type == DisposeTypes.Explicit)
203 [EditorBrowsable(EditorBrowsableState.Never)]
204 protected override void OnControlStateChanged(ControlStateChangedEventArgs controlStateChangedInfo)
206 if (controlStateChangedInfo == null) throw new ArgumentNullException(nameof(controlStateChangedInfo));
207 base.OnControlStateChanged(controlStateChangedInfo);
209 var stateEnabled = !controlStateChangedInfo.CurrentState.Contains(ControlState.Disabled);
211 if (IsEnabled != stateEnabled)
213 IsEnabled = stateEnabled;
216 var statePressed = controlStateChangedInfo.CurrentState.Contains(ControlState.Pressed);
218 if (IsPressed != statePressed)
220 IsPressed = statePressed;
225 /// Get ViewItem style.
227 /// <returns>The default ViewItem style.</returns>
228 [EditorBrowsable(EditorBrowsableState.Never)]
229 protected override ViewStyle CreateViewStyle()
231 return new RecyclerViewItemStyle();
235 /// It is hijack by using protected, style copy problem when class inherited from Button.
237 [EditorBrowsable(EditorBrowsableState.Never)]
238 private void Initialize()
241 IsCreateByXaml = true;
242 Layout = new AbsoluteLayout();
245 AccessibilityManager.Instance.SetAccessibilityAttribute(this, AccessibilityManager.AccessibilityAttribute.Trait, "ViewItem");
249 /// Update the Content. it can be override.
251 [EditorBrowsable(EditorBrowsableState.Never)]
252 protected virtual void UpdateContent()
257 Sensitive = IsEnabled;
261 /// FIXME!! This has to be done in Element or View class.
263 [EditorBrowsable(EditorBrowsableState.Never)]
264 protected override void OnBindingContextChanged()
266 foreach (View child in Children)
268 SetChildInheritedBindingContext(child, BindingContext);
272 private void OnClickedInternal(ClickedEventArgs eventArgs)
274 Command?.Execute(CommandParameter);
275 OnClicked(eventArgs);
277 Clicked?.Invoke(this, eventArgs);