Revert "[NUI] Refactoring Theme and StyleManager (#1981)" (#2013)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI.Components / Controls / Popup.cs
index 84b4847..9a44d4a 100755 (executable)
@@ -17,6 +17,7 @@
 using System;
 using System.Collections.Generic;
 using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Binding;
 using System.ComponentModel;
 
 namespace Tizen.NUI.Components
@@ -26,225 +27,366 @@ namespace Tizen.NUI.Components
     /// User can handle Popup button count, head title and content area.
     /// </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)]
+    [Obsolete("Deprecated in API8; Will be removed in API10")]
     public class Popup : Control
     {
-        private ImageView backgroundImage;
-        private ImageView shadowImage;
-        private TextLabel titleText;
-        private List<Button> buttonList;
-        private List<string> buttonTextList = new List<string>();
+        /// 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 ButtonHeightProperty = BindableProperty.Create(nameof(ButtonHeight), typeof(int), typeof(Popup), default(int), propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var instance = (Popup)bindable;
+            if (newValue != null && instance?.popupStyle?.Buttons?.Size != null )
+            {
+                instance.popupStyle.Buttons.Size.Height = (int)newValue;
+                instance.btGroup.Itemheight = (int)newValue;
+                instance.UpdateView();
+            }
+        },
+        defaultValueCreator: (bindable) =>
+        {
+            var instance = (Popup)bindable;
+            return (int)(instance.popupStyle?.Buttons?.Size?.Height ?? 0);
+        });
+
+        /// 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 ButtonTextPointSizeProperty = BindableProperty.Create(nameof(ButtonTextPointSize), typeof(float), typeof(Popup), default(float), propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var instance = (Popup)bindable;
+            if (newValue != null)
+            {
+                if (instance.popupStyle?.Buttons?.Text != null)
+                {
+                    instance.popupStyle.Buttons.Text.PointSize = (float)newValue;
+                }
+                instance.btGroup.ItemPointSize = (float)newValue;
+            }
+        },
+        defaultValueCreator: (bindable) =>
+        {
+            var instance = (Popup)bindable;
+            return instance.popupStyle?.Buttons?.Text?.PointSize?.All ?? 0;
+        });
+
+        /// 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 ButtonFontFamilyProperty = BindableProperty.Create(nameof(ButtonFontFamily), typeof(string), typeof(Popup), string.Empty, propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var instance = (Popup)bindable;
+            if (newValue != null)
+            {
+                instance.popupStyle.Buttons.Text.FontFamily = (string)newValue;
+                instance.btGroup.ItemFontFamily = (string)newValue;
+            }
+        },
+        defaultValueCreator: (bindable) =>
+        {
+            var instance = (Popup)bindable;
+            return instance.popupStyle?.Buttons?.Text?.FontFamily.All;
+        });
+
+        /// 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 ButtonTextColorProperty = BindableProperty.Create(nameof(ButtonTextColor), typeof(Color), typeof(Popup), Color.Transparent, propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var instance = (Popup)bindable;
+            if (newValue != null)
+            {  
+                if (instance.popupStyle?.Buttons?.Text != null)
+                {
+                    instance.popupStyle.Buttons.Text.TextColor = (Color)newValue;
+                }
+                instance.btGroup.ItemTextColor = (Color)newValue;
+            }
+        },
+        defaultValueCreator: (bindable) =>
+        {
+            var instance = (Popup)bindable;
+            return instance.popupStyle?.Buttons?.Text?.TextColor?.All;
+        });
+
+        /// 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 ButtonOverLayBackgroundColorSelectorProperty = BindableProperty.Create(nameof(ButtonOverLayBackgroundColorSelector), typeof(Selector<Color>), typeof(Popup), new Selector<Color>(), propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var instance = (Popup)bindable;
+            if (newValue != null)
+            {
+                instance.popupStyle.Buttons.Overlay.BackgroundColor = (Selector<Color>)newValue;
+                instance.btGroup.OverLayBackgroundColorSelector = (Selector<Color>)newValue;
+            }
+        },
+        defaultValueCreator: (bindable) =>
+        {
+            var instance = (Popup)bindable;
+            return instance.popupStyle?.Buttons?.Overlay?.BackgroundColor;
+        });
+
+        /// 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 ButtonTextAlignmentProperty = BindableProperty.Create(nameof(ButtonTextAlignment), typeof(HorizontalAlignment), typeof(Popup), new HorizontalAlignment(), propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var instance = (Popup)bindable;
+            if (newValue != null)
+            {
+                instance.popupStyle.Buttons.Text.HorizontalAlignment = (HorizontalAlignment)newValue;
+                instance.btGroup.ItemTextAlignment = (HorizontalAlignment)newValue;
+            }
+        },
+        defaultValueCreator: (bindable) =>
+        {
+            var instance = (Popup)bindable;
+            return instance.popupStyle?.Buttons?.Text?.HorizontalAlignment ?? HorizontalAlignment.Center;
+        });
+
+        /// 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 ButtonBackgroundProperty = BindableProperty.Create(nameof(ButtonBackground), typeof(string), typeof(Popup), string.Empty, propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var instance = (Popup)bindable;
+            if (newValue != null)
+            {
+                if (instance.popupStyle.Buttons.BackgroundImage == null)
+                {
+                    instance.popupStyle.Buttons.BackgroundImage = new Selector<string>();
+                }
+                instance.popupStyle.Buttons.BackgroundColor = new Selector<Color>();
+                instance.popupStyle.Buttons.BackgroundImage = (string)newValue;
+                instance.btGroup.ItemBackgroundImageUrl = (string)newValue;
+            }
+        },
+        defaultValueCreator: (bindable) =>
+        {
+            var instance = (Popup)bindable;
+            return instance.popupStyle?.Buttons?.BackgroundImage?.All;
+        });
+
+        /// 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 ButtonBackgroundBorderProperty = BindableProperty.Create(nameof(ButtonBackgroundBorder), typeof(Rectangle), typeof(Popup), new Rectangle(0, 0, 0, 0), propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var instance = (Popup)bindable;
+            if (newValue != null)
+            {
+                if (instance.popupStyle.Buttons.BackgroundImageBorder == null)
+                {
+                    instance.popupStyle.Buttons.BackgroundImageBorder = new Selector<Rectangle>();
+                }
+                instance.popupStyle.Buttons.BackgroundImageBorder = (Rectangle)newValue;
+                instance.btGroup.ItemBackgroundBorder = (Rectangle)newValue;
+            }
+        },
+        defaultValueCreator: (bindable) =>
+        {
+            var instance = (Popup)bindable;
+            return instance.popupStyle?.Buttons?.BackgroundImageBorder?.All;
+        });
 
-        private PopupAttributes popupAttributes;
-        private int buttonCount = 0;
+        /// 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 ButtonImageShadowProperty = BindableProperty.Create(nameof(ButtonImageShadow), typeof(ImageShadow), typeof(Popup), null, propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var instance = (Popup)bindable;
+            ImageShadow shadow = (ImageShadow)newValue;
+            instance.btGroup.ItemImageShadow = new ImageShadow(shadow);
+            instance.popupStyle.Buttons.ImageShadow = new ImageShadow(shadow);
+        },
+        defaultValueCreator: (bindable) =>
+        {
+            var instance = (Popup)bindable;
+            return instance.popupStyle?.Buttons?.ImageShadow?.All;
+        });
+
+
+        private PopupStyle popupStyle => ViewStyle as PopupStyle;
+        private TextLabel titleText;
+        private ButtonGroup btGroup = null;
+        private Window window = null;
+        private Layer container = new Layer();
+        static Popup() { }
 
         /// <summary>
         /// Creates a new instance of a Popup.
         /// </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)]
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
         public Popup() : base()
         {
             Initialize();
         }
+
         /// <summary>
         /// Creates a new instance of a Popup with style.
         /// </summary>
         /// <param name="style">Create Popup by special style defined in UX.</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)]
         public Popup(string style) : base(style)
         {
             Initialize();
         }
+
         /// <summary>
-        /// Creates a new instance of a Popup with attributes.
+        /// Creates a new instance of a Popup with style.
         /// </summary>
-        /// <param name="attributes">Create Popup by attributes customized by user.</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.
+        /// <param name="popupStyle">Create Popup by style customized by user.</param>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public Popup(PopupAttributes attributes) : base(attributes)
+        public Popup(PopupStyle popupStyle) : base(popupStyle)
         {
             Initialize();
         }
-        /// <summary>
-        /// An event for the button clicked signal which can be used to subscribe or unsubscribe the event handler provided by the user.<br />
-        /// </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)]
-        public event EventHandler<ButtonClickEventArgs> PopupButtonClickedEvent;
 
-        /// <summary>
-        /// Title text string in Popup.
-        /// </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)]
-        public string TitleText
+        public virtual void Post(Window targetWindow)
         {
-            get
+            if (targetWindow == null)
             {
-                return popupAttributes?.TitleTextAttributes?.Text?.All;
+                return;
             }
-            set
-            {
-                if (value != null)
-                {
-                    CreateTitleTextAttributes();
-                    if (popupAttributes.TitleTextAttributes.Text == null)
-                    {
-                        popupAttributes.TitleTextAttributes.Text = new StringSelector();
-                    }
-                    popupAttributes.TitleTextAttributes.Text.All = value;
 
-                    RelayoutRequest();
-                }
-            }
+            window = targetWindow;
+            window.AddLayer(container);
+            container.RaiseToTop();
         }
 
         /// <summary>
-        /// Button count in Popup.
+        /// Dismiss the dialog
         /// </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)]
-        public int ButtonCount
+        public virtual void Dismiss()
         {
-            get
+            if (window == null)
             {
-                return buttonCount;
+                return;
             }
-            set
+
+            window.RemoveLayer(container);
+            window = null;
+        }
+
+        /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void AddButton(string buttonText)
+        {
+            if (popupStyle.Buttons != null)
             {
-                if (buttonCount != value)
-                {
-                    buttonCount = value;
-                    RelayoutRequest();
-                }
+                Button btn = new Button(popupStyle.Buttons);
+                btn.Text = buttonText;
+                btn.ClickEvent += ButtonClickEvent;
+                btGroup.AddItem(btn);
+                UpdateView();
             }
         }
 
         /// <summary>
-        /// Content view in Popup, only can be gotten.
+        /// Add button by style's name.
         /// </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)]
-        public View ContentView
+        public void AddButton(string buttonText, string style)
         {
-            get;
-            private set;
+            AddButton(buttonText);
         }
 
         /// <summary>
-        /// Shadow image's resource url in Popup.
+        /// Add button by style.
         /// </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)]
-        public string ShadowImageURL
+        public void AddButton(string buttonText, ButtonStyle style)
         {
-            get
+            if (popupStyle.Buttons != null && style != null)
             {
-                return popupAttributes?.ShadowImageAttributes?.ResourceURL?.All;
+                popupStyle.Buttons.CopyFrom(style);
+                AddButton(buttonText);
             }
-            set
+        }
+
+        /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public Button GetButton(int index)
+        {
+            return btGroup.GetItem(index);
+        }
+
+        /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void RemoveButton(int index)
+        {
+            btGroup.RemoveItem(index);
+        }
+
+        /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void AddContentText(View childView)
+        {
+            if (null != ContentView)
             {
-                if (value != null)
-                {
-                    CreateShadowAttributes();
-                    if (popupAttributes.ShadowImageAttributes.ResourceURL == null)
-                    {
-                        popupAttributes.ShadowImageAttributes.ResourceURL = new StringSelector();
-                    }
-                    popupAttributes.ShadowImageAttributes.ResourceURL.All = value;
-                    RelayoutRequest();
-                }
+                ContentView.Add(childView);
             }
+            UpdateView();
         }
 
         /// <summary>
-        /// Shadow image's border in Popup.
+        /// An event for the button clicked signal which can be used to subscribe or unsubscribe the event handler provided by the user.<br />
         /// </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.
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
+        public event EventHandler<ButtonClickEventArgs> PopupButtonClickEvent;
+
+        /// <summary>
+        /// Get style of popup.
+        /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public Rectangle ShadowImageBorder
+        public new PopupStyle Style
         {
             get
             {
-                return popupAttributes?.ShadowImageAttributes?.Border?.All;
-            }
-            set
-            {
-                if (value != null)
-                {
-                    CreateShadowAttributes();
-                    if (popupAttributes.ShadowImageAttributes.Border == null)
-                    {
-                        popupAttributes.ShadowImageAttributes.Border = new RectangleSelector();
-                    }
-                    popupAttributes.ShadowImageAttributes.Border.All = value;
-                    RelayoutRequest();
-                }
+                var result = new PopupStyle(popupStyle);
+                result.CopyPropertiesFromView(this);
+                result.Title.CopyPropertiesFromView(titleText);
+                return result;
             }
         }
 
         /// <summary>
-        /// Background image's resource url in Popup.
+        /// Popup Title.
         /// </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)]
-        public string BackgroundImageURL
+        public TextLabel Title
         {
             get
             {
-                return popupAttributes?.BackgroundImageAttributes?.ResourceURL?.All;
-            }
-            set
-            {
-                if (value != null)
+                if (null == titleText)
                 {
-                    CreateBackgroundAttributes();
-                    if (popupAttributes.BackgroundImageAttributes.ResourceURL == null)
-                    {
-                        popupAttributes.BackgroundImageAttributes.ResourceURL = new StringSelector();
-                    }
-                    popupAttributes.BackgroundImageAttributes.ResourceURL.All = value;
-                    RelayoutRequest();
+                    titleText = new TextLabel();
+                    Add(titleText);
                 }
+                return titleText;
+            }
+            internal set
+            {
+                titleText = value;
             }
         }
 
         /// <summary>
-        /// Background image's border in Popup.
+        /// Title text string in Popup.
         /// </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)]
-        public Rectangle BackgroundImageBorder
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
+        public string TitleText
         {
             get
             {
-                return popupAttributes?.BackgroundImageAttributes?.Border?.All;
+                return popupStyle?.Title?.Text?.All;
             }
             set
             {
                 if (value != null)
                 {
-                    CreateBackgroundAttributes();
-                    if (popupAttributes.BackgroundImageAttributes.Border == null)
+                    if (popupStyle?.Title != null)
                     {
-                        popupAttributes.BackgroundImageAttributes.Border = new RectangleSelector();
+                        popupStyle.Title.Text = value;
                     }
-                    popupAttributes.BackgroundImageAttributes.Border.All = value;
-                    RelayoutRequest();
                 }
             }
         }
@@ -253,43 +395,19 @@ namespace Tizen.NUI.Components
         /// Title text point size in Popup.
         /// </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)]
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
         public float TitlePointSize
         {
             get
             {
-                return popupAttributes?.TitleTextAttributes?.PointSize?.All ?? 0;
+                return popupStyle?.Title?.PointSize?.All ?? 0;
             }
             set
             {
-                CreateTitleTextAttributes();
-                if (popupAttributes.TitleTextAttributes.PointSize == null)
+                if (popupStyle?.Title != null)
                 {
-                    popupAttributes.TitleTextAttributes.PointSize = new FloatSelector();
+                    popupStyle.Title.PointSize = value;
                 }
-                popupAttributes.TitleTextAttributes.PointSize.All = value;
-                RelayoutRequest();
-            }
-        }
-
-        /// <summary>
-        /// Title text font family in Popup.
-        /// </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)]
-        public string TitleFontFamily
-        {
-            get
-            {
-                return popupAttributes?.TitleTextAttributes?.FontFamily;
-            }
-            set
-            {
-                CreateTitleTextAttributes();
-                popupAttributes.TitleTextAttributes.FontFamily = value;
-                RelayoutRequest();
             }
         }
 
@@ -297,23 +415,19 @@ namespace Tizen.NUI.Components
         /// Title text color in Popup.
         /// </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)]
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
         public Color TitleTextColor
         {
             get
             {
-                return popupAttributes?.TitleTextAttributes?.TextColor?.All;
+                return popupStyle?.Title?.TextColor?.All;
             }
             set
             {
-                CreateTitleTextAttributes();
-                if (popupAttributes.TitleTextAttributes.TextColor == null)
+                if (popupStyle?.Title != null)
                 {
-                    popupAttributes.TitleTextAttributes.TextColor = new ColorSelector();
+                    popupStyle.Title.TextColor = value;
                 }
-                popupAttributes.TitleTextAttributes.TextColor.All = value;
-                RelayoutRequest();
             }
         }
 
@@ -321,19 +435,16 @@ namespace Tizen.NUI.Components
         /// Title text horizontal alignment in Popup.
         /// </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)]
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
         public HorizontalAlignment TitleTextHorizontalAlignment
         {
             get
             {
-                return popupAttributes?.TitleTextAttributes?.HorizontalAlignment ?? HorizontalAlignment.Center;
+                return popupStyle?.Title?.HorizontalAlignment ?? HorizontalAlignment.Center;
             }
             set
             {
-                CreateTitleTextAttributes();
-                popupAttributes.TitleTextAttributes.HorizontalAlignment = value;
-                RelayoutRequest();
+                popupStyle.Title.HorizontalAlignment = value;
             }
         }
 
@@ -341,19 +452,16 @@ namespace Tizen.NUI.Components
         /// Title text's position in Popup.
         /// </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)]
-        public Position2D TitleTextPosition2D
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
+        public Position TitleTextPosition
         {
             get
             {
-                return popupAttributes?.TitleTextAttributes?.Position2D ?? new Position2D(0, 0);
+                return popupStyle?.Title?.Position ?? new Position(0, 0, 0);
             }
             set
             {
-                CreateTitleTextAttributes();
-                popupAttributes.TitleTextAttributes.Position2D = value;
-                RelayoutRequest();
+                popupStyle.Title.Position = value;
             }
         }
 
@@ -361,65 +469,58 @@ namespace Tizen.NUI.Components
         /// Title text's height in Popup.
         /// </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)]
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
         public int TitleHeight
         {
             get
             {
-                return popupAttributes?.TitleTextAttributes?.Size2D?.Height ?? 0;
+                return (int)(popupStyle?.Title?.Size?.Height ?? 0);
             }
             set
             {
-                CreateTitleTextAttributes();
-                popupAttributes.TitleTextAttributes.Size2D.Height = value;
-                RelayoutRequest();
+                if (popupStyle?.Title?.Size != null)
+                {
+                    popupStyle.Title.Size.Height = value;
+                }
             }
         }
 
         /// <summary>
-        /// Shadow offset in Popup, including left, right, up and bottom offset.
+        /// Content view in Popup, only can be gotten.
         /// </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)]
-        public Vector4 ShadowOffset
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
+        public View ContentView
         {
-            get
-            {
-                return popupAttributes?.ShadowOffset;
-            }
-            set
-            {
-                if (value != null)
-                {
-                    if (popupAttributes.ShadowOffset == null)
-                    {
-                        popupAttributes.ShadowOffset = new Vector4(0, 0, 0, 0);
-                    }
-                    popupAttributes.ShadowOffset = value;
-                    RelayoutRequest();
-                }
-            }
+            get;
+            private set;
+        }
+
+        /// <summary>
+        /// Button count in Popup.
+        /// </summary>
+        /// <since_tizen> 6 </since_tizen>
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
+        public int ButtonCount
+        {
+            get;
+            set;
         }
 
         /// <summary>
         /// Button height in Popup.
         /// </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)]
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
         public int ButtonHeight
         {
             get
             {
-                return popupAttributes?.ButtonAttributes?.Size2D?.Height ?? 0;
+                return (int)GetValue(ButtonHeightProperty);
             }
             set
             {
-                CreateButtonAttributes();
-                popupAttributes.ButtonAttributes.Size2D.Height = value;
-                RelayoutRequest();
+                SetValue(ButtonHeightProperty, value);
             }
         }
 
@@ -427,23 +528,16 @@ namespace Tizen.NUI.Components
         /// Button text point size in Popup.
         /// </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)]
-        public float ButtonPointSize
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
+        public float ButtonTextPointSize
         {
             get
             {
-                return popupAttributes?.ButtonAttributes?.TextAttributes?.PointSize?.All ?? 0;
+                return (float)GetValue(ButtonTextPointSizeProperty);
             }
             set
             {
-                CreateButtonAttributes();
-                if (popupAttributes.ButtonAttributes.TextAttributes.PointSize == null)
-                {
-                    popupAttributes.ButtonAttributes.TextAttributes.PointSize = new FloatSelector();
-                }
-                popupAttributes.ButtonAttributes.TextAttributes.PointSize.All = value;
-                RelayoutRequest();
+                SetValue(ButtonTextPointSizeProperty, value);
             }
         }
 
@@ -451,19 +545,16 @@ namespace Tizen.NUI.Components
         /// Button text font family in Popup.
         /// </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)]
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
         public string ButtonFontFamily
         {
             get
-            {
-                return popupAttributes?.ButtonAttributes?.TextAttributes?.FontFamily;
+            {           
+                return (string)GetValue(ButtonFontFamilyProperty);
             }
             set
             {
-                CreateButtonAttributes();
-                popupAttributes.ButtonAttributes.TextAttributes.FontFamily = value;
-                RelayoutRequest();
+                SetValue(ButtonFontFamilyProperty, value);
             }
         }
 
@@ -471,23 +562,16 @@ namespace Tizen.NUI.Components
         /// Button text color in Popup.
         /// </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)]
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
         public Color ButtonTextColor
         {
             get
             {
-                return popupAttributes?.ButtonAttributes?.TextAttributes?.TextColor?.All;
+                return (Color)GetValue(ButtonTextColorProperty);
             }
             set
             {
-                CreateButtonAttributes();
-                if (popupAttributes.ButtonAttributes.TextAttributes.TextColor == null)
-                {
-                    popupAttributes.ButtonAttributes.TextAttributes.TextColor = new ColorSelector();
-                }
-                popupAttributes.ButtonAttributes.TextAttributes.TextColor.All = value;
-                RelayoutRequest();
+                SetValue(ButtonTextColorProperty, value);
             }
         }
 
@@ -497,20 +581,15 @@ namespace Tizen.NUI.Components
         /// <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)]
-        public ColorSelector ButtonOverLayBackgroundColorSelector
+        public Selector<Color> ButtonOverLayBackgroundColorSelector
         {
             get
             {
-                return popupAttributes?.ButtonAttributes?.OverlayImageAttributes?.BackgroundColor;
+                return (Selector<Color>)GetValue(ButtonOverLayBackgroundColorSelectorProperty);
             }
             set
             {
-                if (value != null)
-                {
-                    CreateButtonAttributes();
-                    popupAttributes.ButtonAttributes.OverlayImageAttributes.BackgroundColor = value.Clone() as ColorSelector;
-                    RelayoutRequest();
-                }
+                SetValue(ButtonOverLayBackgroundColorSelectorProperty, value);
             }
         }
 
@@ -518,19 +597,16 @@ namespace Tizen.NUI.Components
         /// Button text horizontal alignment in Popup.
         /// </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)]
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
         public HorizontalAlignment ButtonTextAlignment
         {
             get
-            {
-                return popupAttributes?.ButtonAttributes?.TextAttributes?.HorizontalAlignment ?? HorizontalAlignment.Center;
+            {   
+                return (HorizontalAlignment)GetValue(ButtonTextAlignmentProperty);
             }
             set
             {
-                CreateButtonAttributes();
-                popupAttributes.ButtonAttributes.TextAttributes.HorizontalAlignment = value;
-                RelayoutRequest();
+                SetValue(ButtonTextAlignmentProperty, value);
             }
         }
 
@@ -540,24 +616,15 @@ namespace Tizen.NUI.Components
         /// <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)]
-        public string ButtonBackgroundImageURL
+        public string ButtonBackground
         {
             get
-            {
-                return popupAttributes?.ButtonAttributes?.BackgroundImageAttributes?.ResourceURL?.All;
+            {     
+                return (string)GetValue(ButtonBackgroundProperty);
             }
             set
             {
-                if (value != null)
-                {
-                    CreateButtonAttributes();
-                    if (popupAttributes.ButtonAttributes.BackgroundImageAttributes.ResourceURL == null)
-                    {
-                        popupAttributes.ButtonAttributes.BackgroundImageAttributes.ResourceURL = new StringSelector();
-                    }
-                    popupAttributes.ButtonAttributes.BackgroundImageAttributes.ResourceURL.All = value;
-                    RelayoutRequest();
-                }
+                SetValue(ButtonBackgroundProperty, value);
             }
         }
 
@@ -567,50 +634,42 @@ namespace Tizen.NUI.Components
         /// <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)]
-        public Rectangle ButtonBackgroundImageBorder
+        public Rectangle ButtonBackgroundBorder
         {
             get
             {
-                return popupAttributes?.ButtonAttributes?.BackgroundImageAttributes?.Border?.All;
+                
+                return (Rectangle)GetValue(ButtonBackgroundBorderProperty);
             }
             set
             {
-                if (value != null)
-                {
-                    CreateButtonAttributes();
-                    if (popupAttributes.ButtonAttributes.BackgroundImageAttributes.Border == null)
-                    {
-                        popupAttributes.ButtonAttributes.BackgroundImageAttributes.Border = new RectangleSelector();
-                    }
-                    popupAttributes.ButtonAttributes.BackgroundImageAttributes.Border.All = value;
-                    RelayoutRequest();
-                }
+                SetValue(ButtonBackgroundBorderProperty, value);
             }
         }
 
         /// <summary>
+        /// Button's image shadow in Popup.
+        /// </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)]
+        public ImageShadow ButtonImageShadow
+        {
+            get => (ImageShadow)GetValue(ButtonImageShadowProperty);
+            set => SetValue(ButtonImageShadowProperty, value);
+        }
+
+
+        /// <summary>
         /// Set button text by index.
         /// </summary>
         /// <param name="index">Button index.</param>
         /// <param name="text">Button text string.</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)]
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
         public void SetButtonText(int index, string text)
         {
-            if(index < 0 && index >= buttonCount)
-            {
-                return;
-            }
-            if(buttonTextList.Count < index + 1)
-            {
-                for (int i = buttonTextList.Count; i < index + 1; i++)
-                {
-                    buttonTextList.Add("");
-                }
-            }
-            buttonTextList[index] = text;
-            RelayoutRequest();
+            AddButton(text);
         }
 
         /// <summary>
@@ -618,8 +677,7 @@ namespace Tizen.NUI.Components
         /// </summary>
         /// <param name="type">Dispose type.</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)]
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
         protected override void Dispose(DisposeTypes type)
         {
             if (disposed)
@@ -635,31 +693,17 @@ namespace Tizen.NUI.Components
                     titleText.Dispose();
                     titleText = null;
                 }
-                if (backgroundImage != null)
-                {
-                    Remove(backgroundImage);
-                    backgroundImage.Dispose();
-                    backgroundImage = null;
-                }
-                if (shadowImage != null)
-                {
-                    Remove(shadowImage);
-                    shadowImage.Dispose();
-                    shadowImage = null;
-                }
                 if (ContentView != null)
                 {
                     Remove(ContentView);
                     ContentView.Dispose();
                     ContentView = null;
                 }
-                if (buttonList != null)
+
+                if (btGroup != null)
                 {
-                    foreach(Button btn in buttonList)
-                    {
-                        Remove(btn);
-                        btn.Dispose();
-                    }
+                    btGroup.Dispose();
+                    btGroup = null;
                 }
             }
 
@@ -676,6 +720,7 @@ namespace Tizen.NUI.Components
         {
             base.OnFocusGained();
         }
+
         /// <summary>
         /// Focus lost callback.
         /// </summary>
@@ -688,194 +733,57 @@ namespace Tizen.NUI.Components
         }
 
         /// <summary>
-        /// Get Popup attribues.
+        /// Apply style to popup.
         /// </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.
+        /// <param name="viewStyle">The style to apply.</param>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override Attributes GetAttributes()
+        public override void ApplyStyle(ViewStyle viewStyle)
         {
-            return new PopupAttributes();
-        }
-
-        /// <summary>
-        /// Update Popup by attributes.
-        /// </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 override void OnUpdate()
-        {
-            int w = 0;
-            int h = 0;
-            int titleX = 0;
-            int titleY = 0;
-            int titleH = 0;
-            int buttonH = 0;
-
-            if (popupAttributes.ShadowImageAttributes != null)
+            base.ApplyStyle(viewStyle);
+            PopupStyle ppStyle = viewStyle as PopupStyle;
+            if (null != ppStyle)
             {
-                if (shadowImage == null)
-                {
-                    shadowImage = new ImageView();
-                    Add(shadowImage);
-                }
-                ApplyAttributes(shadowImage, popupAttributes.ShadowImageAttributes);
-                w = Size2D.Width;
-                h = Size2D.Height;
-                if (popupAttributes.ShadowOffset != null)
-                {
-                    w = (int)(Size2D.Width + popupAttributes.ShadowOffset.W + popupAttributes.ShadowOffset.X);
-                    h = (int)(Size2D.Height + popupAttributes.ShadowOffset.Y + popupAttributes.ShadowOffset.Z);
-                }
-
-                shadowImage.Size2D = new Size2D(w, h);
-            }
-
-            if (popupAttributes.BackgroundImageAttributes != null)
-            {
-                if (backgroundImage == null)
-                {
-                    backgroundImage = new ImageView()
-                    {
-                        WidthResizePolicy = ResizePolicyType.FillToParent,
-                        HeightResizePolicy = ResizePolicyType.FillToParent
-                    };
-                    Add(backgroundImage);
-                }
-                ApplyAttributes(backgroundImage, popupAttributes.BackgroundImageAttributes);
+                Title.ApplyStyle(ppStyle.Title);
+                Title.RaiseToTop();
             }
-
-            if (popupAttributes.TitleTextAttributes != null)
-            {
-                if (titleText == null)
-                {
-                    titleText = new TextLabel();
-                    Add(titleText);
-                }
-
-                ApplyAttributes(titleText, popupAttributes.TitleTextAttributes);
-
-                if (titleText.Text != null && titleText.Text != "")
-                {
-                    popupAttributes.TitleTextAttributes.Text = new StringSelector { All = titleText.Text };
-                    w = (int)(Size2D.Width - titleText.PositionX * 2);
-
-                    if (popupAttributes.TitleTextAttributes.Size2D != null)
-                    {
-                        titleH = titleText.Size2D.Height;
-                    }
-                    titleText.Size2D = new Size2D(w, titleH);
-
-                    if (popupAttributes.TitleTextAttributes.Position2D != null)
-                    {
-                        titleX = popupAttributes.TitleTextAttributes.Position2D.X;
-                        titleY = popupAttributes.TitleTextAttributes.Position2D.Y;
-                    }
-                }
-                else
-                {
-                    titleText.Size2D = new Size2D(0, 0);
-                }
-
-               
-            }
-            ContentView.RaiseToTop();
-
-            UpdateButton(buttonCount);
-           
-            if (buttonList != null && popupAttributes.ButtonAttributes != null && popupAttributes.ButtonAttributes.Size2D != null)
-            {
-                buttonH = popupAttributes.ButtonAttributes.Size2D.Height;
-            }
-            ContentView.Size2D = new Size2D(Size2D.Width - titleX * 2, Size2D.Height - titleY - titleH - buttonH);
-            ContentView.Position2D = new Position2D(titleX, titleY + titleH);
-
-            LayoutChild();
         }
 
         /// <summary>
-        /// Layout child in Popup and it can be override by user.
+        /// Get Popup style.
         /// </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.
+        /// <returns>The default popup style.</returns>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual void LayoutChild()
+        protected override ViewStyle CreateViewStyle()
         {
-            if (popupAttributes == null)
-            {
-                return;
-            }
-
-            if(titleText != null)
-            {
-                if(LayoutDirection == ViewLayoutDirectionType.RTL)
-                {
-                    if (popupAttributes.TitleTextAttributes != null)
-                    {
-                        popupAttributes.TitleTextAttributes.HorizontalAlignment = HorizontalAlignment.End;
-                    }
-                    titleText.HorizontalAlignment = HorizontalAlignment.End;
-                }
-                else if(LayoutDirection == ViewLayoutDirectionType.LTR)
-                {
-                    if (popupAttributes.TitleTextAttributes != null)
-                    {
-                        popupAttributes.TitleTextAttributes.HorizontalAlignment = HorizontalAlignment.Begin;
-                    }
-                    titleText.HorizontalAlignment = HorizontalAlignment.Begin;
-                }
-            }
-
-            if(buttonList != null && buttonList.Count > 0)
-            {
-                int pos = 0;
-                if (LayoutDirection == ViewLayoutDirectionType.RTL)
-                {                   
-                    for (int i = buttonList.Count - 1; i >= 0; i--)
-                    {
-                        buttonList[i].PositionX = pos;
-                        pos += buttonList[i].Size2D.Width;
-                    }
-                }
-                else
-                {
-                    for (int i = 0; i < buttonList.Count; i++)
-                    {
-                        buttonList[i].PositionX = pos;
-                        pos += buttonList[i].Size2D.Width;
-                    }
-                }
-            }
+            return new PopupStyle();
         }
 
         /// <summary>
         /// Theme change callback when theme is changed, this callback will be trigger.
         /// </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.
+        /// <param name="sender">The sender</param>
+        /// <param name="e">The event data</param>
         [EditorBrowsable(EditorBrowsableState.Never)]
         protected override void OnThemeChangedEvent(object sender, StyleManager.ThemeChangeEventArgs e)
         {
-            PopupAttributes tempAttributes = StyleManager.Instance.GetAttributes(style) as PopupAttributes;
-            if (tempAttributes != null)
+            PopupStyle ppStyle = StyleManager.Instance.GetViewStyle(StyleName) as PopupStyle;
+            if (ppStyle != null)
             {
-                attributes = popupAttributes = tempAttributes;
-                RelayoutRequest();
+                ApplyStyle(ppStyle);
+                UpdateView();
             }
         }
 
         private void Initialize()
         {
-            popupAttributes = attributes as PopupAttributes;
-            if (popupAttributes == null)
-            {
-                throw new Exception("Popup attribute parse error.");
-            }
+            container.Add(this);
+            container.SetTouchConsumed(true);
+            container.SetHoverConsumed(true);
 
-            ApplyAttributes(this, popupAttributes);
             LeaveRequired = true;
+            PropertyChanged += PopupStylePropertyChanged;
 
+            // ContentView
             ContentView = new View()
             {
                 ParentOrigin = Tizen.NUI.ParentOrigin.TopLeft,
@@ -884,170 +792,87 @@ namespace Tizen.NUI.Components
             };
             Add(ContentView);
             ContentView.RaiseToTop();
-        }
 
-        private void CreateShadowAttributes()
-        {
-            if (popupAttributes.ShadowImageAttributes == null)
-            {
-                popupAttributes.ShadowImageAttributes = new ImageAttributes()
-                {
-                    PositionUsesPivotPoint = true,
-                    ParentOrigin = Tizen.NUI.ParentOrigin.Center,
-                    PivotPoint = Tizen.NUI.PivotPoint.Center,
-                };
-            }
+            // Button
+            btGroup = new ButtonGroup(this);
         }
 
-        private void CreateBackgroundAttributes()
+        private void UpdateView()
         {
-            if (popupAttributes.BackgroundImageAttributes == null)
-            {
-                popupAttributes.BackgroundImageAttributes = new ImageAttributes()
-                {
-                    PositionUsesPivotPoint = true,
-                    ParentOrigin = Tizen.NUI.ParentOrigin.Center,
-                    PivotPoint = Tizen.NUI.PivotPoint.Center, 
-                    WidthResizePolicy = ResizePolicyType.FillToParent,
-                    HeightResizePolicy = ResizePolicyType.FillToParent
-                };
-            }
+            btGroup.UpdateButton(popupStyle.Buttons);
+            UpdateContentView();
+            UpdateTitle();
         }
 
-        private void CreateTitleTextAttributes()
+        private void ButtonClickEvent(object sender, Button.ClickEventArgs e)
         {
-            if (popupAttributes.TitleTextAttributes == null)
+            if (PopupButtonClickEvent != null && btGroup.Count > 0)
             {
-                popupAttributes.TitleTextAttributes = new TextAttributes()
+                Button button = sender as Button;
+                for (int i = 0; i < btGroup.Count; i++)
                 {
-                    Size2D =  new Size2D(0, 0),
-                    PositionUsesPivotPoint = true,
-                    ParentOrigin = Tizen.NUI.ParentOrigin.TopLeft,
-                    PivotPoint = Tizen.NUI.PivotPoint.TopLeft,
-                    HorizontalAlignment = HorizontalAlignment.Begin,
-                    VerticalAlignment = VerticalAlignment.Bottom
-                };
+                    if (button == GetButton(i))
+                    {
+                        ButtonClickEventArgs args = new ButtonClickEventArgs();
+                        args.ButtonIndex = i;
+                        PopupButtonClickEvent(this, args);
+                    }
+                }
             }
         }
 
-        private void CreateButtonAttributes()
+        private void PopupStylePropertyChanged(object sender, PropertyChangedEventArgs e)
         {
-            if (popupAttributes.ButtonAttributes == null)
+            if (e.PropertyName.Equals("LayoutDirection"))
             {
-                popupAttributes.ButtonAttributes = new ButtonAttributes()
-                {
-                    Size2D =  new Size2D(0, 0),
-                    PositionUsesPivotPoint = true,
-                    ParentOrigin =  Tizen.NUI.ParentOrigin.BottomLeft,
-                    PivotPoint = Tizen.NUI.PivotPoint.BottomLeft,
-                    TextAttributes = new TextAttributes
-                    {
-                        PositionUsesPivotPoint = true,
-                        ParentOrigin = Tizen.NUI.ParentOrigin.Center,
-                        PivotPoint = Tizen.NUI.PivotPoint.Center,
-                        HorizontalAlignment =  HorizontalAlignment.Center,
-                        VerticalAlignment = VerticalAlignment.Center
-                    },
-                    BackgroundImageAttributes = new ImageAttributes
-                    {
-                        PositionUsesPivotPoint = true,
-                        ParentOrigin =  Tizen.NUI.ParentOrigin.Center,
-                        PivotPoint = Tizen.NUI.PivotPoint.Center,
-                        WidthResizePolicy = ResizePolicyType.FillToParent,
-                        HeightResizePolicy = ResizePolicyType.FillToParent,
-                        Border = new RectangleSelector { All = new Rectangle(0, 0, 0, 0) },
-                    },
-                    OverlayImageAttributes = new ImageAttributes
-                    {
-                        PositionUsesPivotPoint = true,
-                        ParentOrigin = Tizen.NUI.ParentOrigin.Center,
-                        PivotPoint = Tizen.NUI.PivotPoint.Center,
-                        WidthResizePolicy = ResizePolicyType.FillToParent,
-                        HeightResizePolicy = ResizePolicyType.FillToParent,
-                        Border = new RectangleSelector { All = new Rectangle(0, 0, 0, 0) },
-                    },
-                };
+                btGroup.UpdateButton(popupStyle.Buttons);
             }
         }
 
-        private void UpdateButton(int count)
+        private void UpdateContentView()
         {
-            if(buttonList != null && buttonCount == buttonList.Count)
-            {
-                for (int i = 0; i < count; i++)
-                {
-                    buttonList[i].TextColor = popupAttributes.ButtonAttributes.TextAttributes.TextColor.All;
-                }
-                return;
-            }
-           
-            if (buttonList != null)
+            int titleX = 0;
+            int titleY = 0;
+            int titleH = 0;
+            int buttonH = 0;
+            string strText = Title.Text;
+            if (!string.IsNullOrEmpty(strText) && Title.Size != null)
             {
-                foreach (Button btn in buttonList)
-                {
-                    btn.ClickEvent -= ButtonClickEvent;
-                    this.Remove(btn);
-                    btn.Dispose();
-                }
-                buttonList.Clear();
-                buttonList = null;
+                titleH = (int)titleText.Size.Height;
             }
-            if(count <= 0)
+
+            if (!string.IsNullOrEmpty(strText) && Title.Position != null)
             {
-                return;
+                titleX = (int)Title.Position.X;
+                titleY = (int)Title.Position.Y;
             }
-            int buttonWidth = Size2D.Width / count;
-            int buttonHeight = popupAttributes.ButtonAttributes.Size2D.Height;
-            int pos = 0;
-            buttonList = new List<Button>();
-            for (int i = 0; i < count; i++)
-            {
-                Button btn = null;
-                popupAttributes.ButtonAttributes.Size2D.Width = buttonWidth;
-                btn = new Button(popupAttributes.ButtonAttributes);
-                btn.Position2D = new Position2D(pos, 0);
 
-                if (i >= buttonTextList.Count)
-                {
-                    buttonTextList.Add("");
-                }
-                btn.Text = buttonTextList[i];
-                btn.ClickEvent += ButtonClickEvent;
-                pos += buttonWidth;
-                this.Add(btn);
-                buttonList.Add(btn);
+            if (btGroup.Count != 0 && popupStyle?.Buttons?.Size != null )
+            {
+                buttonH = (int)popupStyle.Buttons.Size.Height;
             }
+            ContentView.Size = new Size(Size.Width - titleX * 2, Size.Height - titleY - titleH - buttonH);
+            ContentView.Position = new Position(titleX, titleY + titleH);
+            ContentView.RaiseToTop();
         }
 
-        private void ButtonClickEvent(object sender, Button.ClickEventArgs e)
+        private void UpdateTitle()
         {
-            if (PopupButtonClickedEvent != null && buttonList != null)
+            if (titleText != null && string.IsNullOrEmpty(popupStyle.Title.Text.All) && popupStyle.Title.Size != null)
             {
-                Button button = sender as Button;
-                for (int i = 0; i < buttonList.Count; i++)
-                {
-                    if(button == buttonList[i])
-                    {
-                        ButtonClickEventArgs args = new ButtonClickEventArgs();
-                        args.ButtonIndex = i;
-                        PopupButtonClickedEvent(this, args);
-                    }
-                }
+                titleText.RaiseToTop();
             }
         }
-
         /// <summary>
         /// ButtonClickEventArgs is a class to record button click event arguments which will sent to user.
         /// </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)]
+        [Obsolete("Deprecated in API8; Will be removed in API10")]
         public class ButtonClickEventArgs : EventArgs
         {
             /// <summary> Button index which is clicked in Popup </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)]
+            [Obsolete("Deprecated in API8; Will be removed in API10")]
             public int ButtonIndex;
         }
     }