*/
using System;
using System.ComponentModel;
+using System.Diagnostics;
using Tizen.NUI.BaseComponents;
using Tizen.NUI.Binding;
-using Tizen.NUI.Components.Extension;
using Tizen.NUI.Accessibility;
namespace Tizen.NUI.Components
if (instance.iconRelativeOrientation != newIconOrientation)
{
instance.iconRelativeOrientation = newIconOrientation;
- instance.UpdateUIContent();
+ instance.LayoutItems();
}
},
defaultValueCreator: (bindable) => ((Button)bindable).iconRelativeOrientation
if (instance.isEnabled != newEnabled)
{
instance.isEnabled = newEnabled;
+ instance.Sensitive = newEnabled;
instance.UpdateState();
}
}
public static readonly BindableProperty IconPaddingProperty = BindableProperty.Create(nameof(IconPadding), typeof(Extents), typeof(Button), null, propertyChanged: (bindable, oldValue, newValue) =>
{
var instance = (Button)bindable;
- instance.iconPadding = (Extents)((Extents)newValue).Clone();
- instance.UpdateUIContent();
+ if (instance.buttonIcon == null)
+ {
+ return;
+ }
+ instance.buttonIcon.Padding = (Extents)newValue;
},
- defaultValueCreator: (bindable) => ((Button)bindable).iconPadding);
+ defaultValueCreator: (bindable) => ((Button)bindable).buttonIcon?.Padding);
/// 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 static readonly BindableProperty TextPaddingProperty = BindableProperty.Create(nameof(TextPadding), typeof(Extents), typeof(Button), null, propertyChanged: (bindable, oldValue, newValue) =>
{
var instance = (Button)bindable;
- instance.textPadding = (Extents)((Extents)newValue).Clone();
- instance.UpdateUIContent();
+ if (instance.buttonText == null)
+ {
+ return;
+ }
+ instance.buttonText.Padding = (Extents)newValue;
+ },
+ defaultValueCreator: (bindable) => ((Button)bindable).buttonText?.Padding);
+
+ /// <summary> The bindable property of ItemAlignment. </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ internal static readonly BindableProperty ItemAlignmentProperty = BindableProperty.Create(nameof(ItemAlignment), typeof(LinearLayout.Alignment), typeof(Button), LinearLayout.Alignment.Center, propertyChanged: (bindable, oldValue, newValue) =>
+ {
+ var instance = (Button)bindable;
+ instance.itemAlignment = (LinearLayout.Alignment)newValue;
+ instance.LayoutItems();
+ },
+ defaultValueCreator: (bindable) => ((Button)bindable).itemAlignment);
+
+ /// <summary> The bindable property of ItemSpacing. </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ internal static readonly BindableProperty ItemSpacingProperty = BindableProperty.Create(nameof(ItemSpacing), typeof(Size2D), typeof(Button), null, propertyChanged: (bindable, oldValue, newValue) =>
+ {
+ var instance = (Button)bindable;
+ instance.itemSpacing = (Size2D)newValue;
+ instance.UpdateSizeAndSpacing();
},
- defaultValueCreator: (bindable) => ((Button)bindable).textPadding);
+ defaultValueCreator: (bindable) => ((Button)bindable).itemSpacing);
- private IconOrientation? iconRelativeOrientation;
+ private IconOrientation? iconRelativeOrientation = IconOrientation.Left;
private bool isSelected = false;
private bool isSelectable = false;
private bool isEnabled = true;
- private Extents iconPadding;
- private Extents textPadding;
+ private Size2D itemSpacing;
+ private LinearLayout.Alignment itemAlignment;
static Button() { }
protected override AccessibilityStates AccessibilityCalculateStates()
{
var states = base.AccessibilityCalculateStates();
+ states.Set(AccessibilityState.Checked, this.IsSelected);
states.Set(AccessibilityState.Enabled, this.IsEnabled);
return states;
}
/// <since_tizen> 8 </since_tizen>
public ImageView Icon
{
- get
- {
- if (null == buttonIcon)
- {
- buttonIcon = CreateIcon();
- if (null != Extension)
- {
- buttonIcon = Extension.OnCreateIcon(this, buttonIcon);
- }
- if (null != buttonIcon)
- {
- Add(buttonIcon);
- buttonIcon.Relayout += OnIconRelayout;
- }
- }
- return buttonIcon;
- }
+ get => buttonIcon;
internal set
{
buttonIcon = value;
}
if (null != overlayImage)
{
+ overlayImage.ExcludeLayouting = true;
Add(overlayImage);
}
}
/// <since_tizen> 8 </since_tizen>
public TextLabel TextLabel
{
- get
- {
- if (null == buttonText)
- {
- buttonText = CreateText();
- if (null != Extension)
- {
- buttonText = Extension.OnCreateText(this, buttonText);
- }
- if (null != buttonText)
- {
- Add(buttonText);
- }
- }
- return buttonText;
- }
+ get => buttonText;
internal set
{
buttonText = value;
}
/// <summary>
- /// Icon padding in Button, work only when show icon and text.
+ /// Icon padding in Button. It is shortcut of Icon.Padding.
/// </summary>
/// <since_tizen> 6 </since_tizen>
public Extents IconPadding
}
/// <summary>
- /// Text padding in Button, work only when show icon and text.
+ /// Text padding in Button. It is shortcut of TextLabel.Padding.
/// </summary>
/// <since_tizen> 6 </since_tizen>
public Extents TextPadding
}
/// <summary>
+ /// The item (text or icon or both) alignment.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public LinearLayout.Alignment ItemAlignment
+ {
+ get => (LinearLayout.Alignment)GetValue(ItemAlignmentProperty);
+ set => SetValue(ItemAlignmentProperty, value);
+ }
+
+ /// <summary>
+ /// The space between icon and text.
+ /// The value is applied when there exist icon and text both.
+ /// The width value is used when the items are arranged horizontally. Otherwise, the height value is used.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public Size2D ItemSpacing
+ {
+ get => (Size2D)GetValue(ItemSpacingProperty);
+ set => SetValue(ItemSpacingProperty, value);
+ }
+
+ /// <summary>
/// Called after a key event is received by the view that has had its focus set.
/// </summary>
/// <param name="key">The key event.</param>
/// <since_tizen> 8 </since_tizen>
public override void ApplyStyle(ViewStyle viewStyle)
{
+ Debug.Assert(buttonIcon != null && buttonText != null);
+
styleApplied = false;
base.ApplyStyle(viewStyle);
if (viewStyle is ButtonStyle buttonStyle)
{
Extension = buttonStyle.CreateExtension();
+
if (buttonStyle.Overlay != null)
- {
+ {
OverlayImage?.ApplyStyle(buttonStyle.Overlay);
}
+ if (Extension != null)
+ {
+ buttonIcon.Unparent();
+ buttonIcon = Extension.OnCreateIcon(this, buttonIcon);
+
+ buttonText.Unparent();
+ buttonText = Extension.OnCreateText(this, buttonText);
+
+ LayoutItems();
+ }
+
if (buttonStyle.Text != null)
{
- TextLabel?.ApplyStyle(buttonStyle.Text);
+ buttonText.ApplyStyle(buttonStyle.Text);
}
if (buttonStyle.Icon != null)
{
- Icon?.ApplyStyle(buttonStyle.Icon);
+ buttonIcon.ApplyStyle(buttonStyle.Icon);
}
}