/*
- * 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;
using System.ComponentModel;
+using System.Diagnostics;
using Tizen.NUI.BaseComponents;
using Tizen.NUI.Components.Extension;
namespace Tizen.NUI.Components
{
/// <summary>
- /// Switch is one kind of common component, it can be used as selector.
- /// User can handle Navigation by adding/inserting/deleting NavigationItem.
+ /// Switch is a kind of <see cref="Button"/> component that uses icon part as a toggle shape.
+ /// The icon part consists of track and thumb.
/// </summary>
/// <since_tizen> 6 </since_tizen>
- public class Switch : Button
+ public partial class Switch : Button
{
- private ImageView track = null;
private ImageView thumb = null;
static Switch() { }
[EditorBrowsable(EditorBrowsableState.Never)]
public override void OnInitialize()
{
- track = new ImageView();
- thumb = new ImageView();
- track.Add(thumb);
-
base.OnInitialize();
SetAccessibilityConstructor(Role.ToggleButton);
/// Informs AT-SPI bridge about the set of AT-SPI states associated with this object.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- protected override AccessibilityStates AccessibilityCalculateStates()
+ protected override AccessibilityStates AccessibilityCalculateStates(ulong states)
{
- var states = base.AccessibilityCalculateStates();
- states.Set(AccessibilityState.Checked, this.IsSelected);
- return states;
+ var accessibilityStates = base.AccessibilityCalculateStates(states);
+ FlagSetter(ref accessibilityStates, AccessibilityStates.Checked, this.IsSelected);
+ return accessibilityStates;
}
/// <summary>
{
if (Extension is SwitchExtension extension)
{
- track.Unparent();
+ Icon.Unparent();
thumb.Unparent();
- track = extension.OnCreateTrack(this, track);
+ Icon = extension.OnCreateTrack(this, Icon);
thumb = extension.OnCreateThumb(this, thumb);
- track.Add(thumb);
+ Icon.Add(thumb);
+ LayoutItems();
}
if (switchStyle.Track != null)
/// <since_tizen> 8 </since_tizen>
public ImageView Track
{
- get => track;
+ get => Icon;
internal set
{
- track = value;
+ Icon = value;
}
}
}
/// <summary>
- /// Background image's resource url selector in Switch.
+ /// Switch's track part image url selector.
/// </summary>
/// <since_tizen> 6 </since_tizen>
public StringSelector SwitchBackgroundImageURLSelector
{
- get => track == null ? null : new StringSelector((Selector<string>)track.GetValue(ImageView.ResourceUrlSelectorProperty));
- set => track?.SetValue(ImageView.ResourceUrlSelectorProperty, value);
+ get
+ {
+ return GetValue(SwitchBackgroundImageURLSelectorProperty) as StringSelector;
+ }
+ set
+ {
+ SetValue(SwitchBackgroundImageURLSelectorProperty, value);
+ NotifyPropertyChanged();
+ }
+ }
+ private StringSelector InternalSwitchBackgroundImageURLSelector
+ {
+ get => Icon?.ResourceUrlSelector == null ? null : new StringSelector(Icon.ResourceUrlSelector);
+ set
+ {
+ Debug.Assert(Icon != null);
+ Icon.ResourceUrlSelector = value;
+ }
}
/// <summary>
{
get
{
+ return GetValue(SwitchHandlerImageURLProperty) as string;
+ }
+ set
+ {
+ SetValue(SwitchHandlerImageURLProperty, value);
+ NotifyPropertyChanged();
+ }
+ }
+ private string InternalSwitchHandlerImageURL
+ {
+ get
+ {
return Thumb.ResourceUrl;
}
set
/// <since_tizen> 6 </since_tizen>
public StringSelector SwitchHandlerImageURLSelector
{
- get => thumb == null ? null : new StringSelector((Selector<string>)thumb.GetValue(ImageView.ResourceUrlSelectorProperty));
- set => thumb?.SetValue(ImageView.ResourceUrlSelectorProperty, value);
+ get
+ {
+ return GetValue(SwitchHandlerImageURLSelectorProperty) as StringSelector;
+ }
+ set
+ {
+ SetValue(SwitchHandlerImageURLSelectorProperty, value);
+ NotifyPropertyChanged();
+ }
+ }
+ private StringSelector InternalSwitchHandlerImageURLSelector
+ {
+ get => new StringSelector(thumb.ResourceUrlSelector);
+ set
+ {
+ Debug.Assert(thumb != null);
+ thumb.ResourceUrlSelector = value;
+ }
}
/// <summary>
{
get
{
+ return GetValue(SwitchHandlerImageSizeProperty) as Size;
+ }
+ set
+ {
+ SetValue(SwitchHandlerImageSizeProperty, value);
+ NotifyPropertyChanged();
+ }
+ }
+ private Size InternalSwitchHandlerImageSize
+ {
+ get
+ {
return Thumb.Size;
}
set
if (type == DisposeTypes.Explicit)
{
- Utility.Dispose(Thumb);
- Utility.Dispose(Track);
+ Utility.Dispose(thumb);
}
base.Dispose(type);
/// <inheritdoc/>
[EditorBrowsable(EditorBrowsableState.Never)]
+ protected override ImageView CreateIcon()
+ {
+ var icon = new ImageView()
+ {
+ AccessibilityHighlightable = false,
+ EnableControlStatePropagation = true
+ };
+
+ thumb = new ImageView();
+ icon.Add(thumb);
+
+ return icon;
+ }
+
+ /// <inheritdoc/>
+ [EditorBrowsable(EditorBrowsableState.Never)]
protected override void OnControlStateChanged(ControlStateChangedEventArgs controlStateChangedInfo)
{
base.OnControlStateChanged(controlStateChangedInfo);
}
}
- /// <inheritdoc/>
- [EditorBrowsable(EditorBrowsableState.Never)]
- protected override void LayoutItems()
- {
- base.LayoutItems();
- track.Unparent();
- Add(track);
- track.LowerToBottom();
- }
-
private void OnSelect()
{
- if (IsHighlighted)
+ if (Accessibility.Accessibility.Enabled && IsHighlighted)
{
- EmitAccessibilityStateChangedEvent(AccessibilityState.Checked, IsSelected);
+ EmitAccessibilityStatesChangedEvent(AccessibilityStates.Checked, IsSelected);
}
((SwitchExtension)Extension)?.OnSelectedChanged(this);