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.Binding;
22 namespace Tizen.NUI.Components
25 /// Button is one kind of common component, a button clearly describes what action will occur when the user selects it.
26 /// Button may contain text or an icon.
28 /// <since_tizen> 6 </since_tizen>
29 public class Button : Control
31 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
32 [EditorBrowsable(EditorBrowsableState.Never)]
33 public static readonly BindableProperty IconRelativeOrientationProperty = BindableProperty.Create(nameof(IconRelativeOrientation), typeof(IconOrientation?), typeof(Button), null, propertyChanged: (bindable, oldValue, newValue) =>
35 var instance = (Button)bindable;
38 instance.privateIconRelativeOrientation = (IconOrientation?)newValue;
41 defaultValueCreator: (bindable) =>
43 var instance = (Button)bindable;
44 return instance.privateIconRelativeOrientation;
46 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
47 [EditorBrowsable(EditorBrowsableState.Never)]
48 public static readonly BindableProperty IsEnabledProperty = BindableProperty.Create(nameof(IsEnabled), typeof(bool), typeof(Button), true, propertyChanged: (bindable, oldValue, newValue) =>
50 var instance = (Button)bindable;
53 instance.privateIsEnabled = (bool)newValue;
56 defaultValueCreator: (bindable) =>
58 var instance = (Button)bindable;
59 return instance.privateIsEnabled;
61 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
62 [EditorBrowsable(EditorBrowsableState.Never)]
63 public static readonly BindableProperty IsSelectedProperty = BindableProperty.Create(nameof(IsSelected), typeof(bool), typeof(Button), true, propertyChanged: (bindable, oldValue, newValue) =>
65 var instance = (Button)bindable;
68 instance.privateIsSelected = (bool)newValue;
71 defaultValueCreator: (bindable) =>
73 var instance = (Button)bindable;
74 return instance.privateIsSelected;
76 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
77 [EditorBrowsable(EditorBrowsableState.Never)]
78 public static readonly BindableProperty IsSelectableProperty = BindableProperty.Create(nameof(IsSelectable), typeof(bool), typeof(Button), true, propertyChanged: (bindable, oldValue, newValue) =>
80 var instance = (Button)bindable;
83 instance.privateIsSelectable = (bool)newValue;
86 defaultValueCreator: (bindable) =>
88 var instance = (Button)bindable;
89 return instance.privateIsSelectable;
91 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
92 [EditorBrowsable(EditorBrowsableState.Never)]
93 public static readonly BindableProperty IconPaddingProperty = BindableProperty.Create(nameof(IconPadding), typeof(Extents), typeof(Button), null, propertyChanged: (bindable, oldValue, newValue) =>
95 var instance = (Button)bindable;
96 if (null != newValue && null != instance.Style?.IconPadding)
98 instance.Style.IconPadding.CopyFrom((Extents)newValue);
99 instance.UpdateUIContent();
102 defaultValueCreator: (bindable) =>
104 var instance = (Button)bindable;
105 return instance.Style?.IconPadding;
107 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
108 [EditorBrowsable(EditorBrowsableState.Never)]
109 public static readonly BindableProperty TextPaddingProperty = BindableProperty.Create(nameof(TextPadding), typeof(Extents), typeof(Button), null, propertyChanged: (bindable, oldValue, newValue) =>
111 var instance = (Button)bindable;
112 if (null != newValue && null != instance.Style?.TextPadding)
114 instance.Style.TextPadding.CopyFrom((Extents)newValue);
115 instance.UpdateUIContent();
118 defaultValueCreator: (bindable) =>
120 var instance = (Button)bindable;
121 return instance.Style?.TextPadding;
124 private ImageView overlayImage;
126 private TextLabel buttonText;
127 private ImageControl buttonIcon;
129 private EventHandler<StateChangedEventArgs> stateChangeHander;
131 private bool isSelected = false;
132 private bool isEnabled = true;
133 private bool isPressed = false;
136 /// Creates a new instance of a Button.
138 /// <since_tizen> 6 </since_tizen>
139 public Button() : base()
145 /// Creates a new instance of a Button with style.
147 /// <param name="style">Create Button by special style defined in UX.</param>
148 /// <since_tizen> 6 </since_tizen>
149 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
150 [EditorBrowsable(EditorBrowsableState.Never)]
151 public Button(string style) : base(style)
157 /// Creates a new instance of a Button with attributes.
159 /// <param name="controlStyle">Create Button by attributes customized by user.</param>
160 /// <since_tizen> 6 </since_tizen>
161 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
162 [EditorBrowsable(EditorBrowsableState.Never)]
163 public Button(ButtonStyle controlStyle) : base(controlStyle)
169 /// An event for the button clicked signal which can be used to subscribe or unsubscribe the event handler provided by the user.<br />
171 /// <since_tizen> 6 </since_tizen>
172 public event EventHandler<ClickEventArgs> ClickEvent;
174 /// An event for the button state changed signal which can be used to subscribe or unsubscribe the event handler provided by the user.<br />
176 /// <since_tizen> 6 </since_tizen>
177 public event EventHandler<StateChangedEventArgs> StateChangedEvent
181 stateChangeHander += value;
185 stateChangeHander -= value;
189 /// Icon orientation.
191 /// <since_tizen> 6 </since_tizen>
192 public enum IconOrientation
197 /// <since_tizen> 6 </since_tizen>
202 /// <since_tizen> 6 </since_tizen>
207 /// <since_tizen> 6 </since_tizen>
212 /// <since_tizen> 6 </since_tizen>
216 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
217 [EditorBrowsable(EditorBrowsableState.Never)]
218 public new ButtonStyle Style => ViewStyle as ButtonStyle;
221 /// The text of Button.
223 /// <since_tizen> 6 </since_tizen>
228 return Style?.Text?.Text?.GetValue(ControlState);
232 if (null != Style?.Text)
234 Style.Text.Text = value;
240 /// Flag to decide Button can be selected or not.
242 /// <since_tizen> 6 </since_tizen>
243 public bool IsSelectable
247 return (bool)GetValue(IsSelectableProperty);
251 SetValue(IsSelectableProperty, value);
255 private bool privateIsSelectable
259 return Style?.IsSelectable ?? false;
263 Style.IsSelectable = value;
268 /// Translate text string in Button.
270 /// <since_tizen> 6 </since_tizen>
271 public string TranslatableText
275 return Style?.Text?.TranslatableText?.All;
279 if (null != Style?.Text)
281 Style.Text.TranslatableText = value;
287 /// Text point size in Button.
289 /// <since_tizen> 6 </since_tizen>
290 public float PointSize
294 return Style?.Text?.PointSize?.All ?? 0;
298 if (null != Style?.Text)
300 Style.Text.PointSize = value;
306 /// Text font family in Button.
308 /// <since_tizen> 6 </since_tizen>
309 public string FontFamily
313 return Style?.Text?.FontFamily.All;
317 if (null != Style?.Text)
319 Style.Text.FontFamily = value;
324 /// Text color in Button.
326 /// <since_tizen> 6 </since_tizen>
327 public Color TextColor
331 return Style?.Text?.TextColor?.All;
335 if (null != Style?.Text)
337 Style.Text.TextColor = value;
342 /// Text horizontal alignment in Button.
344 /// <since_tizen> 6 </since_tizen>
345 public HorizontalAlignment TextAlignment
349 return Style?.Text?.HorizontalAlignment ?? HorizontalAlignment.Center;
353 if (null != Style?.Text)
355 Style.Text.HorizontalAlignment = value;
360 /// Icon image's resource url in Button.
362 /// <since_tizen> 6 </since_tizen>
363 public string IconURL
367 return Style?.Icon?.ResourceUrl?.All;
371 if (null != Style?.Icon)
373 Style.Icon.ResourceUrl = value;
378 private StringSelector textSelector = new StringSelector();
380 /// Text string selector in Button.
382 /// <since_tizen> 6 </since_tizen>
383 public StringSelector TextSelector
391 textSelector.Clone(value);
395 private StringSelector translatableTextSelector = new StringSelector();
397 /// Translateable text string selector in Button.
399 /// <since_tizen> 6 </since_tizen>
400 public StringSelector TranslatableTextSelector
404 return translatableTextSelector;
408 translatableTextSelector.Clone(value);
412 private ColorSelector textColorSelector = new ColorSelector();
414 /// Text color selector in Button.
416 /// <since_tizen> 6 </since_tizen>
417 public ColorSelector TextColorSelector
421 return textColorSelector;
425 textColorSelector.Clone(value);
429 private FloatSelector pointSizeSelector = new FloatSelector();
431 /// Text font size selector in Button.
433 /// <since_tizen> 6 </since_tizen>
434 public FloatSelector PointSizeSelector
438 return pointSizeSelector;
442 pointSizeSelector.Clone(value);
446 private StringSelector iconURLSelector = new StringSelector();
448 /// Icon image's resource url selector in Button.
450 /// <since_tizen> 6 </since_tizen>
451 public StringSelector IconURLSelector
455 return iconURLSelector;
459 iconURLSelector.Clone(value);
464 /// Flag to decide selected state in Button.
466 /// <since_tizen> 6 </since_tizen>
467 public bool IsSelected
471 return (bool)GetValue(IsSelectedProperty);
475 SetValue(IsSelectedProperty, value);
478 private bool privateIsSelected
491 /// Flag to decide enable or disable in Button.
493 /// <since_tizen> 6 </since_tizen>
494 public bool IsEnabled
498 return (bool)GetValue(IsEnabledProperty);
502 SetValue(IsEnabledProperty, value);
505 private bool privateIsEnabled
519 /// Icon relative orientation in Button, work only when show icon and text.
521 /// <since_tizen> 6 </since_tizen>
522 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
523 [EditorBrowsable(EditorBrowsableState.Never)]
524 public IconOrientation? IconRelativeOrientation
528 return (IconOrientation?)GetValue(IconRelativeOrientationProperty);
532 SetValue(IconRelativeOrientationProperty, value);
535 private IconOrientation? privateIconRelativeOrientation
539 return Style?.IconRelativeOrientation;
543 if(Style != null && Style.IconRelativeOrientation != value)
545 Style.IconRelativeOrientation = value;
552 /// Icon padding in Button, work only when show icon and text.
554 /// <since_tizen> 6 </since_tizen>
555 public Extents IconPadding
557 get => (Extents)GetValue(IconPaddingProperty);
558 set => SetValue(IconPaddingProperty, value);
562 /// Text padding in Button, work only when show icon and text.
564 /// <since_tizen> 6 </since_tizen>
565 public Extents TextPadding
567 get => (Extents) GetValue(TextPaddingProperty);
568 set => SetValue(TextPaddingProperty, value);
572 /// Dispose Button and all children on it.
574 /// <param name="type">Dispose type.</param>
575 /// <since_tizen> 6 </since_tizen>
576 protected override void Dispose(DisposeTypes type)
583 if (type == DisposeTypes.Explicit)
585 if (buttonIcon != null)
587 Utility.Dispose(buttonIcon);
589 if (buttonText != null)
591 Utility.Dispose(buttonText);
593 if (overlayImage != null)
595 Utility.Dispose(overlayImage);
602 /// Called after a key event is received by the view that has had its focus set.
604 /// <param name="key">The key event.</param>
605 /// <returns>True if the key event should be consumed.</returns>
606 /// <since_tizen> 6 </since_tizen>
607 public override bool OnKey(Key key)
609 if (null == key) return false;
610 if (key.State == Key.StateType.Down)
612 if (key.KeyPressedName == "Return")
618 ClickEventArgs eventArgs = new ClickEventArgs();
623 else if (key.State == Key.StateType.Up)
625 if (key.KeyPressedName == "Return")
628 if (Style.IsSelectable != null && Style.IsSelectable == true)
630 isSelected = !isSelected;
635 return base.OnKey(key);
639 /// Called when the control gain key input focus. Should be overridden by derived classes if they need to customize what happens when the focus is gained.
641 /// <since_tizen> 6 </since_tizen>
642 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
643 [EditorBrowsable(EditorBrowsableState.Never)]
644 public override void OnFocusGained()
646 base.OnFocusGained();
651 /// Called when the control loses key input focus. Should be overridden by derived classes if they need to customize what happens when the focus is lost.
653 /// <since_tizen> 6 </since_tizen>
654 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
655 [EditorBrowsable(EditorBrowsableState.Never)]
656 public override void OnFocusLost()
663 /// Tap gesture event callback.
665 /// <param name="source">Source which recieved touch event.</param>
666 /// <param name="e">Tap gesture event argument.</param>
667 /// <since_tizen> 6 </since_tizen>
668 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
669 [EditorBrowsable(EditorBrowsableState.Never)]
670 protected override void OnTapGestureDetected(object source, TapGestureDetector.DetectedEventArgs e)
674 ClickEventArgs eventArgs = new ClickEventArgs();
676 base.OnTapGestureDetected(source, e);
680 /// Called after a touch event is received by the owning view.<br />
681 /// CustomViewBehaviour.REQUIRES_TOUCH_EVENTS must be enabled during construction. See CustomView(ViewWrapperImpl.CustomViewBehaviour behaviour).<br />
683 /// <param name="touch">The touch event.</param>
684 /// <returns>True if the event should be consumed.</returns>
685 /// <since_tizen> 6 </since_tizen>
686 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
687 [EditorBrowsable(EditorBrowsableState.Never)]
688 public override bool OnTouch(Touch touch)
690 if (null == touch) return false;
691 PointStateType state = touch.GetState(0);
695 case PointStateType.Down:
699 case PointStateType.Interrupted:
703 case PointStateType.Up:
705 if (Style.IsSelectable != null && Style.IsSelectable == true)
707 isSelected = !isSelected;
714 return base.OnTouch(touch);
717 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
718 [EditorBrowsable(EditorBrowsableState.Never)]
719 public override void ApplyStyle(ViewStyle viewStyle)
721 base.ApplyStyle(viewStyle);
723 ButtonStyle buttonStyle = viewStyle as ButtonStyle;
725 if (null != buttonStyle)
727 if (null == overlayImage)
729 overlayImage = new ImageView()
731 WidthResizePolicy = ResizePolicyType.FillToParent,
732 HeightResizePolicy = ResizePolicyType.FillToParent
734 this.Add(overlayImage);
737 if (null == buttonText)
739 buttonText = new TextLabel();
740 this.Add(buttonText);
743 if (null == buttonIcon)
745 buttonIcon = new ImageControl();
746 this.Add(buttonIcon);
749 overlayImage.ApplyStyle(buttonStyle.Overlay);
750 buttonText.ApplyStyle(buttonStyle.Text);
751 buttonIcon.ApplyStyle(buttonStyle.Icon);
756 /// Get Button attribues.
758 /// <since_tizen> 6 </since_tizen>
759 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
760 [EditorBrowsable(EditorBrowsableState.Never)]
761 protected override ViewStyle GetViewStyle()
763 return new ButtonStyle();
766 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
767 [EditorBrowsable(EditorBrowsableState.Never)]
768 protected override void OnUpdate()
775 /// Update Button State.
777 /// <since_tizen> 6 </since_tizen>
778 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
779 [EditorBrowsable(EditorBrowsableState.Never)]
780 protected void UpdateState()
782 ControlStates sourceState = ControlState;
783 ControlStates targetState;
787 targetState = isPressed ? ControlStates.Pressed : (IsFocused ? (IsSelected ? ControlStates.SelectedFocused : ControlStates.Focused) : (IsSelected ? ControlStates.Selected : ControlStates.Normal));
791 targetState = IsSelected ? ControlStates.DisabledSelected : (IsFocused ? ControlStates.DisabledFocused : ControlStates.Disabled);
794 if(sourceState != targetState)
796 ControlState = targetState;
800 StateChangedEventArgs e = new StateChangedEventArgs
802 PreviousState = sourceState,
803 CurrentState = targetState
805 stateChangeHander?.Invoke(this, e);
810 /// It is hijack by using protected, attributes copy problem when class inherited from Button.
812 /// <since_tizen> 6 </since_tizen>
813 private void Initialize()
815 if (null == Style.IconRelativeOrientation) Style.IconRelativeOrientation = IconOrientation.Left;
817 LayoutDirectionChanged += OnLayoutDirectionChanged;
821 /// Measure text, it can be override.
823 /// <since_tizen> 6 </since_tizen>
824 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
825 [EditorBrowsable(EditorBrowsableState.Never)]
826 protected virtual void MeasureText()
828 if (Style.IconRelativeOrientation == null || buttonIcon == null || buttonText == null)
832 buttonText.WidthResizePolicy = ResizePolicyType.Fixed;
833 buttonText.HeightResizePolicy = ResizePolicyType.Fixed;
834 int textPaddingStart = Style.TextPadding.Start;
835 int textPaddingEnd = Style.TextPadding.End;
836 int textPaddingTop = Style.TextPadding.Top;
837 int textPaddingBottom = Style.TextPadding.Bottom;
839 int iconPaddingStart = Style.IconPadding.Start;
840 int iconPaddingEnd = Style.IconPadding.End;
841 int iconPaddingTop = Style.IconPadding.Top;
842 int iconPaddingBottom = Style.IconPadding.Bottom;
844 if (IconRelativeOrientation == IconOrientation.Top || IconRelativeOrientation == IconOrientation.Bottom)
846 buttonText.SizeWidth = SizeWidth - textPaddingStart - textPaddingEnd;
847 buttonText.SizeHeight = SizeHeight - textPaddingTop - textPaddingBottom - iconPaddingTop - iconPaddingBottom - buttonIcon.SizeHeight;
851 buttonText.SizeWidth = SizeWidth - textPaddingStart - textPaddingEnd - iconPaddingStart - iconPaddingEnd - buttonIcon.SizeWidth;
852 buttonText.SizeHeight = SizeHeight - textPaddingTop - textPaddingBottom;
856 /// Layout child, it can be override.
858 /// <since_tizen> 6 </since_tizen>
859 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
860 [EditorBrowsable(EditorBrowsableState.Never)]
861 protected virtual void LayoutChild()
863 if (Style.IconRelativeOrientation == null || buttonIcon == null || buttonText == null)
868 int textPaddingStart = Style.TextPadding.Start;
869 int textPaddingEnd = Style.TextPadding.End;
870 int textPaddingTop = Style.TextPadding.Top;
871 int textPaddingBottom = Style.TextPadding.Bottom;
873 int iconPaddingStart = Style.IconPadding.Start;
874 int iconPaddingEnd = Style.IconPadding.End;
875 int iconPaddingTop = Style.IconPadding.Top;
876 int iconPaddingBottom = Style.IconPadding.Bottom;
878 switch (IconRelativeOrientation)
880 case IconOrientation.Top:
881 buttonIcon.PositionUsesPivotPoint = true;
882 buttonIcon.ParentOrigin = NUI.ParentOrigin.TopCenter;
883 buttonIcon.PivotPoint = NUI.PivotPoint.TopCenter;
884 buttonIcon.Position2D = new Position2D(0, iconPaddingTop);
886 buttonText.PositionUsesPivotPoint = true;
887 buttonText.ParentOrigin = NUI.ParentOrigin.BottomCenter;
888 buttonText.PivotPoint = NUI.PivotPoint.BottomCenter;
889 buttonText.Position2D = new Position2D(0, -textPaddingBottom);
891 case IconOrientation.Bottom:
892 buttonIcon.PositionUsesPivotPoint = true;
893 buttonIcon.ParentOrigin = NUI.ParentOrigin.BottomCenter;
894 buttonIcon.PivotPoint = NUI.PivotPoint.BottomCenter;
895 buttonIcon.Position2D = new Position2D(0, -iconPaddingBottom);
897 buttonText.PositionUsesPivotPoint = true;
898 buttonText.ParentOrigin = NUI.ParentOrigin.TopCenter;
899 buttonText.PivotPoint = NUI.PivotPoint.TopCenter;
900 buttonText.Position2D = new Position2D(0, textPaddingTop);
902 case IconOrientation.Left:
903 if (LayoutDirection == ViewLayoutDirectionType.LTR)
905 buttonIcon.PositionUsesPivotPoint = true;
906 buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterLeft;
907 buttonIcon.PivotPoint = NUI.PivotPoint.CenterLeft;
908 buttonIcon.Position2D = new Position2D(iconPaddingStart, 0);
910 buttonText.PositionUsesPivotPoint = true;
911 buttonText.ParentOrigin = NUI.ParentOrigin.CenterRight;
912 buttonText.PivotPoint = NUI.PivotPoint.CenterRight;
913 buttonText.Position2D = new Position2D(-textPaddingEnd, 0);
917 buttonIcon.PositionUsesPivotPoint = true;
918 buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterRight;
919 buttonIcon.PivotPoint = NUI.PivotPoint.CenterRight;
920 buttonIcon.Position2D = new Position2D(-iconPaddingStart, 0);
922 buttonText.PositionUsesPivotPoint = true;
923 buttonText.ParentOrigin = NUI.ParentOrigin.CenterLeft;
924 buttonText.PivotPoint = NUI.PivotPoint.CenterLeft;
925 buttonText.Position2D = new Position2D(textPaddingEnd, 0);
929 case IconOrientation.Right:
930 if (LayoutDirection == ViewLayoutDirectionType.RTL)
932 buttonIcon.PositionUsesPivotPoint = true;
933 buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterLeft;
934 buttonIcon.PivotPoint = NUI.PivotPoint.CenterLeft;
935 buttonIcon.Position2D = new Position2D(iconPaddingEnd, 0);
937 buttonText.PositionUsesPivotPoint = true;
938 buttonText.ParentOrigin = NUI.ParentOrigin.CenterRight;
939 buttonText.PivotPoint = NUI.PivotPoint.CenterRight;
940 buttonText.Position2D = new Position2D(-textPaddingStart, 0);
944 buttonIcon.PositionUsesPivotPoint = true;
945 buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterRight;
946 buttonIcon.PivotPoint = NUI.PivotPoint.CenterRight;
947 buttonIcon.Position2D = new Position2D(-iconPaddingEnd, 0);
949 buttonText.PositionUsesPivotPoint = true;
950 buttonText.ParentOrigin = NUI.ParentOrigin.CenterLeft;
951 buttonText.PivotPoint = NUI.PivotPoint.CenterLeft;
952 buttonText.Position2D = new Position2D(textPaddingStart, 0);
958 if (string.IsNullOrEmpty(buttonText.Text))
960 buttonIcon.ParentOrigin = NUI.ParentOrigin.Center;
961 buttonIcon.PivotPoint = NUI.PivotPoint.Center;
965 /// Theme change callback when theme is changed, this callback will be trigger.
967 /// <since_tizen> 6 </since_tizen>
968 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
969 [EditorBrowsable(EditorBrowsableState.Never)]
970 protected override void OnThemeChangedEvent(object sender, StyleManager.ThemeChangeEventArgs e)
972 ButtonStyle tempAttributes = StyleManager.Instance.GetViewStyle(style) as ButtonStyle;
973 if (tempAttributes != null)
975 Style.CopyFrom(tempAttributes);
980 private void UpdateUIContent()
985 Sensitive = isEnabled;
988 private void OnLayoutDirectionChanged(object sender, LayoutDirectionChangedEventArgs e)
994 private void OnClick(ClickEventArgs eventArgs)
996 ClickEvent?.Invoke(this, eventArgs);
999 private void OnIconRelayout(object sender, EventArgs e)
1006 /// ClickEventArgs is a class to record button click event arguments which will sent to user.
1008 /// <since_tizen> 6 </since_tizen>
1009 public class ClickEventArgs : EventArgs
1013 /// StateChangeEventArgs is a class to record button state change event arguments which will sent to user.
1015 /// <since_tizen> 6 </since_tizen>
1016 public class StateChangedEventArgs : EventArgs
1018 /// <summary> previous state of Button </summary>
1019 /// <since_tizen> 6 </since_tizen>
1020 public ControlStates PreviousState;
1021 /// <summary> current state of Button </summary>
1022 /// <since_tizen> 6 </since_tizen>
1023 public ControlStates CurrentState;