[NUI] Fix some typos. (#1807)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI.Components / Controls / Button.cs
index aa397c0..c45c3d2 100755 (executable)
@@ -27,7 +27,7 @@ namespace Tizen.NUI.Components
     /// Button may contain text or an icon.
     /// </summary>
     /// <since_tizen> 6 </since_tizen>
-    public class Button : Control
+    public partial class Button : Control
     {
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
@@ -36,13 +36,17 @@ namespace Tizen.NUI.Components
             var instance = (Button)bindable;
             if (newValue != null)
             {
-                instance.privateIconRelativeOrientation = (IconOrientation?)newValue;
+                if (instance.Style != null && instance.Style.IconRelativeOrientation != (IconOrientation?)newValue)
+                {
+                    instance.Style.IconRelativeOrientation = (IconOrientation?)newValue;
+                    instance.UpdateUIContent();
+                }
             }
         },
         defaultValueCreator: (bindable) =>
         {
             var instance = (Button)bindable;
-            return instance.privateIconRelativeOrientation;
+            return instance.Style?.IconRelativeOrientation;
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
@@ -51,13 +55,14 @@ namespace Tizen.NUI.Components
             var instance = (Button)bindable;
             if (newValue != null)
             {
-                instance.privateIsEnabled = (bool)newValue;
+                instance.isEnabled = (bool)newValue;
+                instance.UpdateState();
             }
         },
         defaultValueCreator: (bindable) =>
         {
             var instance = (Button)bindable;
-            return instance.privateIsEnabled;
+            return instance.isEnabled;
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
@@ -66,13 +71,14 @@ namespace Tizen.NUI.Components
             var instance = (Button)bindable;
             if (newValue != null)
             {
-                instance.privateIsSelected = (bool)newValue;
+                instance.isSelected = (bool)newValue;
+                instance.UpdateState();
             }
         },
         defaultValueCreator: (bindable) =>
         {
             var instance = (Button)bindable;
-            return instance.privateIsSelected;
+            return instance.isSelected;
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
@@ -81,13 +87,13 @@ namespace Tizen.NUI.Components
             var instance = (Button)bindable;
             if (newValue != null)
             {
-                instance.privateIsSelectable = (bool)newValue;
+                instance.Style.IsSelectable = (bool)newValue;
             }
         },
         defaultValueCreator: (bindable) =>
         {
             var instance = (Button)bindable;
-            return instance.privateIsSelectable;
+            return instance.Style?.IsSelectable ?? false;
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
@@ -122,81 +128,6 @@ namespace Tizen.NUI.Components
             return instance.Style?.TextPadding;
         });
 
-        private EventHandler<StateChangedEventArgs> stateChangeHander;
-
-        private bool isSelected = false;
-        private bool isEnabled = true;
-        private bool isPressed = false;
-
-        /// <summary>
-        /// Button's overlay image part.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected ImageView ButtonOverlayImage { get; set; }
-
-        /// <summary>
-        /// Button's text part.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected TextLabel ButtonText { get; set; }
-
-        /// <summary>
-        /// Button's icon part.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected ImageView ButtonIcon { get; set; }
-
-        /// <summary>
-        /// The last touch information triggering selected state change.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected Touch SelectionChangedByTouch { get; set; }
-
-        /// <summary>
-        /// The ButtonExtension instance that is injected by ButtonStyle.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected ButtonExtension Extension { get; set; }
-
-        /// <summary>
-        /// Creates Button's text part.
-        /// </summary>
-        /// <return>The created Button's text part.</return>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual TextLabel CreateText()
-        {
-            return new TextLabel();
-        }
-
-        /// <summary>
-        /// Creates Button's icon part.
-        /// </summary>
-        /// <return>The created Button's icon part.</return>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual ImageView CreateIcon()
-        {
-            return new ImageView();
-        }
-
-        /// <summary>
-        /// Creates Button's overlay image part.
-        /// </summary>
-        /// <return>The created Button's overlay image part.</return>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual ImageView CreateOverlayImage()
-        {
-            return new ImageView();
-        }
-
-        /// <summary>
-        /// Called when the Button is Clicked by a user
-        /// </summary>
-        /// <param name="eventArgs">The click information.</param>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual void OnClick(ClickEventArgs eventArgs)
-        {
-        }
-
         static Button() { }
 
         /// <summary>
@@ -233,21 +164,24 @@ namespace Tizen.NUI.Components
         /// </summary>
         /// <since_tizen> 6 </since_tizen>
         public event EventHandler<ClickEventArgs> ClickEvent;
+
         /// <summary>
         /// An event for the button state changed signal which can be used to subscribe or unsubscribe the event handler provided by the user.<br />
         /// </summary>
         /// <since_tizen> 6 </since_tizen>
+        [Obsolete("Deprecated in API8; Will be removed in API10. Please use View.ControlStateChangedEvent")]
         public event EventHandler<StateChangedEventArgs> StateChangedEvent
         {
             add
             {
-                stateChangeHander += value;
+                stateChangeHandler += value;
             }
             remove
             {
-                stateChangeHander -= value;
+                stateChangeHandler -= value;
             }
         }
+
         /// <summary>
         /// Icon orientation.
         /// </summary>
@@ -277,9 +211,93 @@ namespace Tizen.NUI.Components
         }
 
         /// <summary>
-        /// Style of the button.
+        /// Button's icon part.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        public ImageView Icon
+        {
+            get
+            {
+                if (null == buttonIcon)
+                {
+                    buttonIcon = CreateIcon();
+                    if (null != Extension)
+                    {
+                        buttonIcon = Extension.OnCreateIcon(this, buttonIcon);
+                    }
+                    Add(buttonIcon);
+                    buttonIcon.Relayout += OnIconRelayout;
+                }
+                return buttonIcon;
+            }
+            internal set
+            {
+                buttonIcon = value;
+            }
+        }
+
+        /// <summary>
+        /// Button's overlay image part.
         /// </summary>
         /// <since_tizen> 8 </since_tizen>
+        public ImageView OverlayImage
+        {
+            get
+            {
+                if (null == overlayImage)
+                {
+                    overlayImage = CreateOverlayImage();
+                    if (null != Extension)
+                    {
+                        overlayImage = Extension.OnCreateOverlayImage(this, overlayImage);
+                    }
+                    overlayImage.WidthResizePolicy = ResizePolicyType.FillToParent;
+                    overlayImage.HeightResizePolicy = ResizePolicyType.FillToParent;
+                    Add(overlayImage);
+                }
+                return overlayImage;
+            }
+            internal set
+            {
+                overlayImage = value;
+            }
+        }
+
+        /// <summary>
+        /// Button's text part.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        public TextLabel TextLabel
+        {
+            get
+            {
+                if (null == buttonText)
+                {
+                    buttonText = CreateText();
+                    if (null != Extension)
+                    {
+                        buttonText = Extension.OnCreateText(this, buttonText);
+                    }
+                    buttonText.HorizontalAlignment = HorizontalAlignment.Center;
+                    buttonText.VerticalAlignment = VerticalAlignment.Center;
+                    Add(buttonText);
+                }
+                return buttonText;
+            }
+            internal set
+            {
+                buttonText = value;
+            }
+        }
+
+        /// <summary>
+        /// Return a copied Style instance of Button
+        /// </summary>
+        /// <remarks>
+        /// It returns copied Style instance and changing it does not effect to the Button.
+        /// Style setting is possible by using constructor or the function of ApplyStyle(ViewStyle viewStyle)
+        /// </remarks>
+        /// <since_tizen> 8 </since_tizen>
         public new ButtonStyle Style => ViewStyle as ButtonStyle;
 
         /// <summary>
@@ -317,18 +335,6 @@ namespace Tizen.NUI.Components
             }
         }
 
-        private bool privateIsSelectable
-        {
-            get
-            {
-                return Style?.IsSelectable ?? false;
-            }
-            set
-            {
-                Style.IsSelectable = value;
-            }
-        }
-
         /// <summary>
         /// Translate text string in Button.
         /// </summary>
@@ -385,6 +391,7 @@ namespace Tizen.NUI.Components
                 }
             }
         }
+
         /// <summary>
         /// Text color in Button.
         /// </summary>
@@ -403,6 +410,7 @@ namespace Tizen.NUI.Components
                 }
             }
         }
+
         /// <summary>
         /// Text horizontal alignment in Button.
         /// </summary>
@@ -421,6 +429,7 @@ namespace Tizen.NUI.Components
                 }
             }
         }
+
         /// <summary>
         /// Icon image's resource url in Button.
         /// </summary>
@@ -440,7 +449,6 @@ namespace Tizen.NUI.Components
             }
         }
 
-        private StringSelector textSelector = new StringSelector();
         /// <summary>
         /// Text string selector in Button.
         /// </summary>
@@ -465,7 +473,6 @@ namespace Tizen.NUI.Components
             }
         }
 
-        private StringSelector translatableTextSelector = new StringSelector();
         /// <summary>
         /// Translateable text string selector in Button.
         /// </summary>
@@ -490,7 +497,6 @@ namespace Tizen.NUI.Components
             }
         }
 
-        private ColorSelector textColorSelector = new ColorSelector();
         /// <summary>
         /// Text color selector in Button.
         /// </summary>
@@ -515,7 +521,6 @@ namespace Tizen.NUI.Components
             }
         }
 
-        private FloatSelector pointSizeSelector = new FloatSelector();
         /// <summary>
         /// Text font size selector in Button.
         /// </summary>
@@ -540,7 +545,6 @@ namespace Tizen.NUI.Components
             }
         }
 
-        private StringSelector iconURLSelector = new StringSelector();
         /// <summary>
         /// Icon image's resource url selector in Button.
         /// </summary>
@@ -580,21 +584,6 @@ namespace Tizen.NUI.Components
                 SetValue(IsSelectedProperty, value);
             }
         }
-        private bool privateIsSelected
-        {
-            get
-            {
-                return isSelected;
-            }
-            set
-            {
-                isSelected = value;
-
-                UpdateState(SelectionChangedByTouch);
-
-                SelectionChangedByTouch = null;
-            }
-        }
 
         /// <summary>
         /// Flag to decide enable or disable in Button.
@@ -611,25 +600,11 @@ namespace Tizen.NUI.Components
                 SetValue(IsEnabledProperty, value);
             }
         }
-        private bool privateIsEnabled
-        {
-            get
-            {
-                return isEnabled;
-            }
-            set
-            {
-                isEnabled = value;
-                UpdateState();
-            }
-        }
 
         /// <summary>
         /// Icon relative orientation in Button, work only when show icon and text.
         /// </summary>
-        /// <since_tizen> 6 </since_tizen>
-        /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
-        [EditorBrowsable(EditorBrowsableState.Never)]
+        /// <since_tizen> 8 </since_tizen>
         public IconOrientation? IconRelativeOrientation
         {
             get
@@ -641,21 +616,6 @@ namespace Tizen.NUI.Components
                 SetValue(IconRelativeOrientationProperty, value);
             }
         }
-        private IconOrientation? privateIconRelativeOrientation
-        {
-            get
-            {
-                return Style?.IconRelativeOrientation;
-            }
-            set
-            {
-                if (Style != null && Style.IconRelativeOrientation != value)
-                {
-                    Style.IconRelativeOrientation = value;
-                    UpdateUIContent();
-                }
-            }
-        }
 
         /// <summary>
         /// Icon padding in Button, work only when show icon and text.
@@ -678,38 +638,6 @@ namespace Tizen.NUI.Components
         }
 
         /// <summary>
-        /// Dispose Button and all children on it.
-        /// </summary>
-        /// <param name="type">Dispose type.</param>
-        /// <since_tizen> 6 </since_tizen>
-        protected override void Dispose(DisposeTypes type)
-        {
-            if (disposed)
-            {
-                return;
-            }
-
-            if (type == DisposeTypes.Explicit)
-            {
-                Extension?.OnDispose(this);
-
-                if (ButtonIcon != null)
-                {
-                    Utility.Dispose(ButtonIcon);
-                }
-                if (ButtonText != null)
-                {
-                    Utility.Dispose(ButtonText);
-                }
-                if (ButtonOverlayImage != null)
-                {
-                    Utility.Dispose(ButtonOverlayImage);
-                }
-            }
-
-            base.Dispose(type);
-        }
-        /// <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>
@@ -717,7 +645,11 @@ namespace Tizen.NUI.Components
         /// <since_tizen> 6 </since_tizen>
         public override bool OnKey(Key key)
         {
-            if (null == key) return false;
+            if (!IsEnabled || null == key)
+            {
+                return false;
+            }
+
             if (key.State == Key.StateType.Down)
             {
                 if (key.KeyPressedName == "Return")
@@ -756,9 +688,7 @@ namespace Tizen.NUI.Components
         /// <summary>
         /// 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.
         /// </summary>
-        /// <since_tizen> 6 </since_tizen>
-        /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
-        [EditorBrowsable(EditorBrowsableState.Never)]
+        /// <since_tizen> 8 </since_tizen>
         public override void OnFocusGained()
         {
             base.OnFocusGained();
@@ -768,9 +698,7 @@ namespace Tizen.NUI.Components
         /// <summary>
         /// 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.
         /// </summary>
-        /// <since_tizen> 6 </since_tizen>
-        /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
-        [EditorBrowsable(EditorBrowsableState.Never)]
+        /// <since_tizen> 8 </since_tizen>
         public override void OnFocusLost()
         {
             base.OnFocusLost();
@@ -783,19 +711,22 @@ namespace Tizen.NUI.Components
         /// </summary>
         /// <param name="touch">The touch event.</param>
         /// <returns>True if the event should be consumed.</returns>
-        /// <since_tizen> 6 </since_tizen>
-        /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
-        [EditorBrowsable(EditorBrowsableState.Never)]
+        /// <since_tizen> 8 </since_tizen>
         public override bool OnTouch(Touch touch)
         {
-            if (null == touch) return false;
+            if (!IsEnabled || null == touch)
+            {
+                return false;
+            }
+
             PointStateType state = touch.GetState(0);
 
             switch (state)
             {
                 case PointStateType.Down:
                     isPressed = true;
-                    UpdateState(touch);
+                    Extension?.SetTouchInfo(touch);
+                    UpdateState();
                     return true;
                 case PointStateType.Interrupted:
                     isPressed = false;
@@ -809,12 +740,13 @@ namespace Tizen.NUI.Components
 
                         if (Style.IsSelectable != null && Style.IsSelectable == true)
                         {
-                            SelectionChangedByTouch = touch;
+                            Extension?.SetTouchInfo(touch);
                             IsSelected = !IsSelected;
                         }
                         else
                         {
-                            UpdateState(touch);
+                            Extension?.SetTouchInfo(touch);
+                            UpdateState();
                         }
 
                         if (clicked)
@@ -841,325 +773,26 @@ namespace Tizen.NUI.Components
             base.ApplyStyle(viewStyle);
 
             ButtonStyle buttonStyle = viewStyle as ButtonStyle;
-
             if (null != buttonStyle)
             {
-                ButtonOverlayImage?.ApplyStyle(buttonStyle.Overlay);
-                ButtonText?.ApplyStyle(buttonStyle.Text);
-                ButtonIcon?.ApplyStyle(buttonStyle.Icon);
-            }
-        }
-
-        /// <summary>
-        /// Get Button style.
-        /// </summary>
-        /// <returns>The default button style.</returns>
-        /// <since_tizen> 8 </since_tizen>
-        protected override ViewStyle GetViewStyle()
-        {
-            return new ButtonStyle();
-        }
-
-        /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override void OnUpdate()
-        {
-            base.OnUpdate();
-            UpdateUIContent();
-
-            Extension?.OnRelayout(this);
-        }
-
-        /// <summary>
-        /// Update Button State.
-        /// </summary>
-        /// <param name="touchInfo">The touch information in case the state has changed by touching.</param>
-        /// <since_tizen> 6 </since_tizen>
-        /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected void UpdateState(Touch touchInfo = null)
-        {
-            ControlStates sourceState = ControlState;
-            ControlStates targetState;
-
-            if (isEnabled)
-            {
-                // Normal
-                targetState = ControlStates.Normal;
-
-                // Selected
-                targetState |= (IsSelected ? ControlStates.Selected : 0);
-
-                // Pressed, PressedSelected, Focused, SelectedFocused
-                targetState |= (isPressed ? ControlStates.Pressed : (IsFocused ? ControlStates.Focused : 0));
-            }
-            else
-            {
-                // Disabled
-                targetState = ControlStates.Disabled;
-
-                // DisabledSelected, DisabledFocused
-                targetState |= (IsSelected ? ControlStates.Selected : (IsFocused ? ControlStates.Focused : 0));
-            }
-
-            if (SetControlState(targetState, touchInfo))
-            {
-                OnUpdate();
-
-                StateChangedEventArgs e = new StateChangedEventArgs
+                Extension = buttonStyle.CreateExtension();
+                if (buttonStyle.Overlay != null)
                 {
-                    PreviousState = sourceState,
-                    CurrentState = targetState
-                };
-                stateChangeHander?.Invoke(this, e);
-
-                Extension?.OnControlStateChanged(this, sourceState, touchInfo);
-            }
-        }
-
-        /// <summary>
-        /// It is hijack by using protected, style copy problem when class inherited from Button.
-        /// </summary>
-        /// <since_tizen> 6 </since_tizen>
-        private void Initialize()
-        {
-            var style = (ButtonStyle)Style;
-
-            Extension = style.CreateExtension();
-
-            CreateComponents();
-
-            if (ButtonOverlayImage != null)
-            {
-                Add(ButtonOverlayImage);
-                ButtonOverlayImage.ApplyStyle(style.Overlay);
-            }
-
-            if (ButtonIcon != null)
-            {
-                Add(ButtonIcon);
-                ButtonIcon.ApplyStyle(style.Icon);
-                ButtonIcon.Relayout += OnIconRelayout;
-            }
-
-            if (null != ButtonText)
-            {
-                Add(ButtonText);
-                ButtonText.ApplyStyle(style.Text);
-            }
-
-            UpdateState();
-
-            LayoutDirectionChanged += OnLayoutDirectionChanged;
-        }
-
-        private void CreateComponents()
-        {
-            ButtonOverlayImage = CreateOverlayImage();
-            ButtonIcon = CreateIcon();
-            ButtonText = CreateText();
-
-            if (Extension == null)
-            {
-                return;
-            }
-
-            // Update component with extension
-            ButtonOverlayImage = Extension.OnCreateOverlayImage(this, ButtonOverlayImage);
-            ButtonIcon = Extension.OnCreateIcon(this, ButtonIcon);
-            ButtonText = Extension.OnCreateText(this, ButtonText);
-        }
-
-        /// <summary>
-        /// Measure text, it can be override.
-        /// </summary>
-        /// <since_tizen> 6 </since_tizen>
-        /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual void MeasureText()
-        {
-            if (Style.IconRelativeOrientation == null || ButtonIcon == null || ButtonText == null)
-            {
-                return;
-            }
-            ButtonText.WidthResizePolicy = ResizePolicyType.Fixed;
-            ButtonText.HeightResizePolicy = ResizePolicyType.Fixed;
-            int textPaddingStart = Style.TextPadding.Start;
-            int textPaddingEnd = Style.TextPadding.End;
-            int textPaddingTop = Style.TextPadding.Top;
-            int textPaddingBottom = Style.TextPadding.Bottom;
-
-            int iconPaddingStart = Style.IconPadding.Start;
-            int iconPaddingEnd = Style.IconPadding.End;
-            int iconPaddingTop = Style.IconPadding.Top;
-            int iconPaddingBottom = Style.IconPadding.Bottom;
-
-            if (IconRelativeOrientation == IconOrientation.Top || IconRelativeOrientation == IconOrientation.Bottom)
-            {
-                ButtonText.SizeWidth = SizeWidth - textPaddingStart - textPaddingEnd;
-                ButtonText.SizeHeight = SizeHeight - textPaddingTop - textPaddingBottom - iconPaddingTop - iconPaddingBottom - ButtonIcon.SizeHeight;
-            }
-            else
-            {
-                ButtonText.SizeWidth = SizeWidth - textPaddingStart - textPaddingEnd - iconPaddingStart - iconPaddingEnd - ButtonIcon.SizeWidth;
-                ButtonText.SizeHeight = SizeHeight - textPaddingTop - textPaddingBottom;
-            }
-        }
-        /// <summary>
-        /// Layout child, it can be override.
-        /// </summary>
-        /// <since_tizen> 6 </since_tizen>
-        /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual void LayoutChild()
-        {
-            if (Style.IconRelativeOrientation == null || ButtonIcon == null || ButtonText == null)
-            {
-                return;
-            }
-
-            var buttonIcon = ButtonIcon;
-            var buttonText = ButtonText;
-
-            int textPaddingStart = Style.TextPadding.Start;
-            int textPaddingEnd = Style.TextPadding.End;
-            int textPaddingTop = Style.TextPadding.Top;
-            int textPaddingBottom = Style.TextPadding.Bottom;
-
-            int iconPaddingStart = Style.IconPadding.Start;
-            int iconPaddingEnd = Style.IconPadding.End;
-            int iconPaddingTop = Style.IconPadding.Top;
-            int iconPaddingBottom = Style.IconPadding.Bottom;
-
-            switch (IconRelativeOrientation)
-            {
-                case IconOrientation.Top:
-                    buttonIcon.PositionUsesPivotPoint = true;
-                    buttonIcon.ParentOrigin = NUI.ParentOrigin.TopCenter;
-                    buttonIcon.PivotPoint = NUI.PivotPoint.TopCenter;
-                    buttonIcon.Position2D = new Position2D(0, iconPaddingTop);
-
-                    buttonText.PositionUsesPivotPoint = true;
-                    buttonText.ParentOrigin = NUI.ParentOrigin.BottomCenter;
-                    buttonText.PivotPoint = NUI.PivotPoint.BottomCenter;
-                    buttonText.Position2D = new Position2D(0, -textPaddingBottom);
-                    break;
-                case IconOrientation.Bottom:
-                    buttonIcon.PositionUsesPivotPoint = true;
-                    buttonIcon.ParentOrigin = NUI.ParentOrigin.BottomCenter;
-                    buttonIcon.PivotPoint = NUI.PivotPoint.BottomCenter;
-                    buttonIcon.Position2D = new Position2D(0, -iconPaddingBottom);
-
-                    buttonText.PositionUsesPivotPoint = true;
-                    buttonText.ParentOrigin = NUI.ParentOrigin.TopCenter;
-                    buttonText.PivotPoint = NUI.PivotPoint.TopCenter;
-                    buttonText.Position2D = new Position2D(0, textPaddingTop);
-                    break;
-                case IconOrientation.Left:
-                    if (LayoutDirection == ViewLayoutDirectionType.LTR)
-                    {
-                        buttonIcon.PositionUsesPivotPoint = true;
-                        buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterLeft;
-                        buttonIcon.PivotPoint = NUI.PivotPoint.CenterLeft;
-                        buttonIcon.Position2D = new Position2D(iconPaddingStart, 0);
-
-                        buttonText.PositionUsesPivotPoint = true;
-                        buttonText.ParentOrigin = NUI.ParentOrigin.CenterRight;
-                        buttonText.PivotPoint = NUI.PivotPoint.CenterRight;
-                        buttonText.Position2D = new Position2D(-textPaddingEnd, 0);
-                    }
-                    else
-                    {
-                        buttonIcon.PositionUsesPivotPoint = true;
-                        buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterRight;
-                        buttonIcon.PivotPoint = NUI.PivotPoint.CenterRight;
-                        buttonIcon.Position2D = new Position2D(-iconPaddingStart, 0);
-
-                        buttonText.PositionUsesPivotPoint = true;
-                        buttonText.ParentOrigin = NUI.ParentOrigin.CenterLeft;
-                        buttonText.PivotPoint = NUI.PivotPoint.CenterLeft;
-                        buttonText.Position2D = new Position2D(textPaddingEnd, 0);
-                    }
-
-                    break;
-                case IconOrientation.Right:
-                    if (LayoutDirection == ViewLayoutDirectionType.RTL)
-                    {
-                        buttonIcon.PositionUsesPivotPoint = true;
-                        buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterLeft;
-                        buttonIcon.PivotPoint = NUI.PivotPoint.CenterLeft;
-                        buttonIcon.Position2D = new Position2D(iconPaddingEnd, 0);
+                    OverlayImage?.ApplyStyle(buttonStyle.Overlay);
+                }
 
-                        buttonText.PositionUsesPivotPoint = true;
-                        buttonText.ParentOrigin = NUI.ParentOrigin.CenterRight;
-                        buttonText.PivotPoint = NUI.PivotPoint.CenterRight;
-                        buttonText.Position2D = new Position2D(-textPaddingStart, 0);
-                    }
-                    else
-                    {
-                        buttonIcon.PositionUsesPivotPoint = true;
-                        buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterRight;
-                        buttonIcon.PivotPoint = NUI.PivotPoint.CenterRight;
-                        buttonIcon.Position2D = new Position2D(-iconPaddingEnd, 0);
+                if (buttonStyle.Text != null)
+                {
+                    TextLabel?.ApplyStyle(buttonStyle.Text);
+                }
 
-                        buttonText.PositionUsesPivotPoint = true;
-                        buttonText.ParentOrigin = NUI.ParentOrigin.CenterLeft;
-                        buttonText.PivotPoint = NUI.PivotPoint.CenterLeft;
-                        buttonText.Position2D = new Position2D(textPaddingStart, 0);
-                    }
-                    break;
-                default:
-                    break;
-            }
-            if (string.IsNullOrEmpty(buttonText.Text))
-            {
-                buttonIcon.ParentOrigin = NUI.ParentOrigin.Center;
-                buttonIcon.PivotPoint = NUI.PivotPoint.Center;
-            }
-        }
-        /// <summary>
-        /// Theme change callback when theme is changed, this callback will be trigger.
-        /// </summary>
-        /// <param name="sender">The sender</param>
-        /// <param name="e">The event data</param>
-        /// <since_tizen> 8 </since_tizen>
-        protected override void OnThemeChangedEvent(object sender, StyleManager.ThemeChangeEventArgs e)
-        {
-            ButtonStyle buttonStyle = StyleManager.Instance.GetViewStyle(style) as ButtonStyle;
-            if (buttonStyle != null)
-            {
-                Style.CopyFrom(buttonStyle);
-                UpdateUIContent();
+                if (buttonStyle.Icon != null)
+                {
+                    Icon?.ApplyStyle(buttonStyle.Icon);
+                }
             }
         }
 
-        private void UpdateUIContent()
-        {
-            MeasureText();
-            LayoutChild();
-
-            Sensitive = isEnabled;
-        }
-
-        private void OnLayoutDirectionChanged(object sender, LayoutDirectionChangedEventArgs e)
-        {
-            MeasureText();
-            LayoutChild();
-        }
-
-        private void OnClickInternal(ClickEventArgs eventArgs)
-        {
-            OnClick(eventArgs);
-            Extension?.OnClick(this, eventArgs);
-            ClickEvent?.Invoke(this, eventArgs);
-        }
-
-        private void OnIconRelayout(object sender, EventArgs e)
-        {
-            MeasureText();
-            LayoutChild();
-        }
-
         /// <summary>
         /// ClickEventArgs is a class to record button click event arguments which will sent to user.
         /// </summary>
@@ -1167,17 +800,21 @@ namespace Tizen.NUI.Components
         public class ClickEventArgs : EventArgs
         {
         }
+
         /// <summary>
         /// StateChangeEventArgs is a class to record button state change event arguments which will sent to user.
         /// </summary>
         /// <since_tizen> 6 </since_tizen>
+        [Obsolete("Deprecated in API8; Will be removed in API10. Please use View.ControlStateChangedEventArgs")]
         public class StateChangedEventArgs : EventArgs
         {
             /// <summary> previous state of Button </summary>
             /// <since_tizen> 6 </since_tizen>
+            [Obsolete("Deprecated in API8; Will be removed in API10")]
             public ControlStates PreviousState;
             /// <summary> current state of Button </summary>
             /// <since_tizen> 6 </since_tizen>
+            [Obsolete("Deprecated in API8; Will be removed in API10")]
             public ControlStates CurrentState;
         }
 
@@ -1185,42 +822,42 @@ namespace Tizen.NUI.Components
         /// Get current text part to the attached ButtonExtension.
         /// </summary>
         /// <remarks>
-        /// It returns null if the passed extension is invaild.
+        /// It returns null if the passed extension is invalid.
         /// </remarks>
         /// <param name="extension">The extension instance that is currently attached to this Button.</param>
         /// <return>The button's text part.</return>
         [EditorBrowsable(EditorBrowsableState.Never)]
         public TextLabel GetCurrentText(ButtonExtension extension)
         {
-            return (extension == Extension) ? ButtonText : null;
+            return (extension == Extension) ? TextLabel : null;
         }
 
         /// <summary>
         /// Get current icon part to the attached ButtonExtension.
         /// </summary>
         /// <remarks>
-        /// It returns null if the passed extension is invaild.
+        /// It returns null if the passed extension is invalid.
         /// </remarks>
         /// <param name="extension">The extension instance that is currently attached to this Button.</param>
         /// <return>The button's icon part.</return>
         [EditorBrowsable(EditorBrowsableState.Never)]
         public ImageView GetCurrentIcon(ButtonExtension extension)
         {
-            return (extension == Extension) ? ButtonIcon : null;
+            return (extension == Extension) ? Icon : null;
         }
 
         /// <summary>
         /// Get current overlay image part to the attached ButtonExtension.
         /// </summary>
         /// <remarks>
-        /// It returns null if the passed extension is invaild.
+        /// It returns null if the passed extension is invalid.
         /// </remarks>
         /// <param name="extension">The extension instance that is currently attached to this Button.</param>
         /// <return>The button's overlay image part.</return>
         [EditorBrowsable(EditorBrowsableState.Never)]
         public ImageView GetCurrentOverlayImage(ButtonExtension extension)
         {
-            return (extension == Extension) ? ButtonOverlayImage : null;
+            return (extension == Extension) ? OverlayImage : null;
         }
     }
 }