2 * Copyright(c) 2019 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.ComponentModel;
19 using Tizen.NUI.BaseComponents;
20 using Tizen.NUI.Components.Extension;
22 namespace Tizen.NUI.Components
25 /// Switch is one kind of common component, it can be used as selector.
26 /// User can handle Navigation by adding/inserting/deleting NavigationItem.
28 /// <since_tizen> 6 </since_tizen>
29 public class Switch : Button
31 private ImageView track = null;
32 private ImageView thumb = null;
37 /// Creates a new instance of a Switch.
39 /// <since_tizen> 6 </since_tizen>
40 public Switch() : base()
46 /// Creates a new instance of a Switch with style.
48 /// <param name="style">Create Switch by special style defined in UX.</param>
49 /// <since_tizen> 8 </since_tizen>
50 public Switch(string style) : base(style)
56 /// Creates a new instance of a Switch with style.
58 /// <param name="switchStyle">Create Switch by style customized by user.</param>
59 /// <since_tizen> 8 </since_tizen>
60 public Switch(SwitchStyle switchStyle) : base(switchStyle)
66 /// Initilize AT-SPI object.
68 [EditorBrowsable(EditorBrowsableState.Never)]
69 public override void OnInitialize()
72 SetAccessibilityConstructor(Role.ToggleButton);
76 /// Informs AT-SPI bridge about the set of AT-SPI states associated with this object.
78 [EditorBrowsable(EditorBrowsableState.Never)]
79 protected override AccessibilityStates AccessibilityCalculateStates()
81 var states = base.AccessibilityCalculateStates();
82 states.Set(AccessibilityState.Checked, this.IsSelected);
87 /// An event for the item selected signal which can be used to subscribe or unsubscribe the event handler provided by the user.<br />
89 /// <since_tizen> 6 </since_tizen>
90 [Obsolete("Deprecated in API8; Will be removed in API10. Please use SelectedChanged event instead.")]
91 public event EventHandler<SelectEventArgs> SelectedEvent;
94 /// An event for the item selected signal which can be used to subscribe or unsubscribe the event handler provided by the user.
96 /// <since_tizen> 8 </since_tizen>
97 public event EventHandler<SelectedChangedEventArgs> SelectedChanged;
100 /// Return a copied Style instance of Switch
103 /// It returns copied Style instance and changing it does not effect to the Switch.
104 /// Style setting is possible by using constructor or the function of ApplyStyle(ViewStyle viewStyle)
106 /// <since_tizen> 8 </since_tizen>
107 public new SwitchStyle Style
111 var result = new SwitchStyle(ViewStyle as SwitchStyle);
112 result.CopyPropertiesFromView(this);
113 result.Track.CopyPropertiesFromView(Track);
114 result.Thumb.CopyPropertiesFromView(Thumb);
120 /// Apply style to switch.
122 /// <param name="viewStyle">The style to apply.</param>
123 [EditorBrowsable(EditorBrowsableState.Never)]
124 public override void ApplyStyle(ViewStyle viewStyle)
126 base.ApplyStyle(viewStyle);
128 SwitchStyle swStyle = viewStyle as SwitchStyle;
132 if (swStyle.Track != null)
134 Track.ApplyStyle(swStyle.Track);
137 if (swStyle.Thumb != null)
139 Thumb.ApplyStyle(swStyle.Thumb);
145 /// Switch's track part.
147 /// <since_tizen> 8 </since_tizen>
148 public ImageView Track
154 track = new ImageView()
156 PositionUsesPivotPoint = true,
157 ParentOrigin = Tizen.NUI.ParentOrigin.CenterLeft,
158 PivotPoint = Tizen.NUI.PivotPoint.CenterLeft,
159 WidthResizePolicy = ResizePolicyType.FillToParent,
160 HeightResizePolicy = ResizePolicyType.FillToParent
163 var extension = (SwitchExtension)Extension;
164 if (extension != null)
166 track = extension.OnCreateTrack(this, track);
179 /// Switch's thumb part.
181 /// <since_tizen> 8 </since_tizen>
182 public ImageView Thumb
188 thumb = new ImageView()
190 PositionUsesPivotPoint = true,
191 ParentOrigin = Tizen.NUI.ParentOrigin.CenterLeft,
192 PivotPoint = Tizen.NUI.PivotPoint.CenterLeft,
193 WidthResizePolicy = ResizePolicyType.Fixed,
194 HeightResizePolicy = ResizePolicyType.Fixed
197 var extension = (SwitchExtension)Extension;
198 if (extension != null)
200 thumb = extension.OnCreateThumb(this, thumb);
213 /// Background image's resource url selector in Switch.
215 /// <since_tizen> 6 </since_tizen>
216 public StringSelector SwitchBackgroundImageURLSelector
218 get => track == null ? null : new StringSelector((Selector<string>)track.GetValue(ImageView.ResourceUrlSelectorProperty));
219 set => track?.SetValue(ImageView.ResourceUrlSelectorProperty, value);
223 /// Handler image's resource url in Switch.
225 /// <since_tizen> 6 </since_tizen>
226 public string SwitchHandlerImageURL
230 return Thumb.ResourceUrl;
234 Thumb.ResourceUrl = value;
239 /// Handler image's resource url selector in Switch.
240 /// Getter returns copied selector value if exist, null otherwise.
242 /// <since_tizen> 6 </since_tizen>
243 public StringSelector SwitchHandlerImageURLSelector
245 get => thumb == null ? null : new StringSelector((Selector<string>)thumb.GetValue(ImageView.ResourceUrlSelectorProperty));
246 set => thumb?.SetValue(ImageView.ResourceUrlSelectorProperty, value);
250 /// Handler image's size in Switch.
252 /// <since_tizen> 6 </since_tizen>
253 public Size SwitchHandlerImageSize
266 /// Dispose Switch and all children on it.
268 /// <param name="type">Dispose type.</param>
269 /// <since_tizen> 6 </since_tizen>
270 protected override void Dispose(DisposeTypes type)
272 if (disposed) return;
274 if (type == DisposeTypes.Explicit)
276 Utility.Dispose(Thumb);
277 Utility.Dispose(Track);
284 /// Called after a key event is received by the view that has had its focus set.
286 /// <param name="key">The key event.</param>
287 /// <returns>True if the key event should be consumed.</returns>
288 /// <since_tizen> 8 </since_tizen>
289 public override bool OnKey(Key key)
291 return base.OnKey(key);
295 /// Called after a touch event is received by the owning view.<br />
296 /// CustomViewBehaviour.REQUIRES_TOUCH_EVENTS must be enabled during construction. See CustomView(ViewWrapperImpl.CustomViewBehaviour behaviour).<br />
298 /// <param name="touch">The touch event.</param>
299 /// <returns>True if the event should be consumed.</returns>
300 /// <since_tizen> 8 </since_tizen>
301 [Obsolete("Deprecated in API8; Will be removed in API10. Please use OnClicked instead.")]
302 #pragma warning disable CS0809 // Obsolete member overrides non-obsolete member, It will be removed in API10
303 public override bool OnTouch(Touch touch)
304 #pragma warning restore CS0809 // Obsolete member overrides non-obsolete member, It will be removed in API10
306 return base.OnTouch(touch);
310 /// Get Switch style.
312 /// <returns>The default switch style.</returns>
313 /// <since_tizen> 8 </since_tizen>
314 protected override ViewStyle CreateViewStyle()
316 return new SwitchStyle();
320 [EditorBrowsable(EditorBrowsableState.Never)]
321 protected override void OnControlStateChanged(ControlStateChangedEventArgs controlStateChangedInfo)
323 base.OnControlStateChanged(controlStateChangedInfo);
330 bool previousSelected = controlStateChangedInfo.PreviousState.Contains(ControlState.Selected);
332 if (previousSelected != IsSelected)
338 private void Initialize()
346 private void OnSelect()
350 EmitAccessibilityStateChangedEvent(AccessibilityState.Checked, IsSelected);
353 ((SwitchExtension)Extension)?.OnSelectedChanged(this);
355 if (SelectedEvent != null)
357 SelectEventArgs eventArgs = new SelectEventArgs();
358 eventArgs.IsSelected = IsSelected;
359 SelectedEvent(this, eventArgs);
362 if (SelectedChanged != null)
364 SelectedChangedEventArgs eventArgs = new SelectedChangedEventArgs();
365 eventArgs.IsSelected = IsSelected;
366 SelectedChanged(this, eventArgs);
371 /// SelectEventArgs is a class to record item selected arguments which will sent to user.
373 /// <since_tizen> 6 </since_tizen>
374 /// It will be removed in API10
375 [Obsolete("Deprecated in API8; Will be removed in API10. Please use SelectedChangedEventArgs instead.")]
376 [global::System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:Do not declare visible instance fields")]
377 [global::System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
378 public class SelectEventArgs : EventArgs
380 /// <summary> Select state of Switch </summary>
381 /// <since_tizen> 6 </since_tizen>
382 public bool IsSelected;