Revert "[NUI] Refactoring Theme and StyleManager (#1981)" (#2013)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI.Components / Controls / Popup.cs
1 /*
2  * Copyright(c) 2019 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 using System;
18 using System.Collections.Generic;
19 using Tizen.NUI.BaseComponents;
20 using Tizen.NUI.Binding;
21 using System.ComponentModel;
22
23 namespace Tizen.NUI.Components
24 {
25     /// <summary>
26     /// Popup is one kind of common component, it can be used as popup window.
27     /// User can handle Popup button count, head title and content area.
28     /// </summary>
29     /// <since_tizen> 6 </since_tizen>
30     [Obsolete("Deprecated in API8; Will be removed in API10")]
31     public class Popup : Control
32     {
33         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
34         [EditorBrowsable(EditorBrowsableState.Never)]
35         public static readonly BindableProperty ButtonHeightProperty = BindableProperty.Create(nameof(ButtonHeight), typeof(int), typeof(Popup), default(int), propertyChanged: (bindable, oldValue, newValue) =>
36         {
37             var instance = (Popup)bindable;
38             if (newValue != null && instance?.popupStyle?.Buttons?.Size != null )
39             {
40                 instance.popupStyle.Buttons.Size.Height = (int)newValue;
41                 instance.btGroup.Itemheight = (int)newValue;
42                 instance.UpdateView();
43             }
44         },
45         defaultValueCreator: (bindable) =>
46         {
47             var instance = (Popup)bindable;
48             return (int)(instance.popupStyle?.Buttons?.Size?.Height ?? 0);
49         });
50
51         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
52         [EditorBrowsable(EditorBrowsableState.Never)]
53         public static readonly BindableProperty ButtonTextPointSizeProperty = BindableProperty.Create(nameof(ButtonTextPointSize), typeof(float), typeof(Popup), default(float), propertyChanged: (bindable, oldValue, newValue) =>
54         {
55             var instance = (Popup)bindable;
56             if (newValue != null)
57             {
58                 if (instance.popupStyle?.Buttons?.Text != null)
59                 {
60                     instance.popupStyle.Buttons.Text.PointSize = (float)newValue;
61                 }
62                 instance.btGroup.ItemPointSize = (float)newValue;
63             }
64         },
65         defaultValueCreator: (bindable) =>
66         {
67             var instance = (Popup)bindable;
68             return instance.popupStyle?.Buttons?.Text?.PointSize?.All ?? 0;
69         });
70
71         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
72         [EditorBrowsable(EditorBrowsableState.Never)]
73         public static readonly BindableProperty ButtonFontFamilyProperty = BindableProperty.Create(nameof(ButtonFontFamily), typeof(string), typeof(Popup), string.Empty, propertyChanged: (bindable, oldValue, newValue) =>
74         {
75             var instance = (Popup)bindable;
76             if (newValue != null)
77             {
78                 instance.popupStyle.Buttons.Text.FontFamily = (string)newValue;
79                 instance.btGroup.ItemFontFamily = (string)newValue;
80             }
81         },
82         defaultValueCreator: (bindable) =>
83         {
84             var instance = (Popup)bindable;
85             return instance.popupStyle?.Buttons?.Text?.FontFamily.All;
86         });
87
88         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
89         [EditorBrowsable(EditorBrowsableState.Never)]
90         public static readonly BindableProperty ButtonTextColorProperty = BindableProperty.Create(nameof(ButtonTextColor), typeof(Color), typeof(Popup), Color.Transparent, propertyChanged: (bindable, oldValue, newValue) =>
91         {
92             var instance = (Popup)bindable;
93             if (newValue != null)
94             {  
95                 if (instance.popupStyle?.Buttons?.Text != null)
96                 {
97                     instance.popupStyle.Buttons.Text.TextColor = (Color)newValue;
98                 }
99                 instance.btGroup.ItemTextColor = (Color)newValue;
100             }
101         },
102         defaultValueCreator: (bindable) =>
103         {
104             var instance = (Popup)bindable;
105             return instance.popupStyle?.Buttons?.Text?.TextColor?.All;
106         });
107
108         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
109         [EditorBrowsable(EditorBrowsableState.Never)]
110         public static readonly BindableProperty ButtonOverLayBackgroundColorSelectorProperty = BindableProperty.Create(nameof(ButtonOverLayBackgroundColorSelector), typeof(Selector<Color>), typeof(Popup), new Selector<Color>(), propertyChanged: (bindable, oldValue, newValue) =>
111         {
112             var instance = (Popup)bindable;
113             if (newValue != null)
114             {
115                 instance.popupStyle.Buttons.Overlay.BackgroundColor = (Selector<Color>)newValue;
116                 instance.btGroup.OverLayBackgroundColorSelector = (Selector<Color>)newValue;
117             }
118         },
119         defaultValueCreator: (bindable) =>
120         {
121             var instance = (Popup)bindable;
122             return instance.popupStyle?.Buttons?.Overlay?.BackgroundColor;
123         });
124
125         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
126         [EditorBrowsable(EditorBrowsableState.Never)]
127         public static readonly BindableProperty ButtonTextAlignmentProperty = BindableProperty.Create(nameof(ButtonTextAlignment), typeof(HorizontalAlignment), typeof(Popup), new HorizontalAlignment(), propertyChanged: (bindable, oldValue, newValue) =>
128         {
129             var instance = (Popup)bindable;
130             if (newValue != null)
131             {
132                 instance.popupStyle.Buttons.Text.HorizontalAlignment = (HorizontalAlignment)newValue;
133                 instance.btGroup.ItemTextAlignment = (HorizontalAlignment)newValue;
134             }
135         },
136         defaultValueCreator: (bindable) =>
137         {
138             var instance = (Popup)bindable;
139             return instance.popupStyle?.Buttons?.Text?.HorizontalAlignment ?? HorizontalAlignment.Center;
140         });
141
142         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
143         [EditorBrowsable(EditorBrowsableState.Never)]
144         public static readonly BindableProperty ButtonBackgroundProperty = BindableProperty.Create(nameof(ButtonBackground), typeof(string), typeof(Popup), string.Empty, propertyChanged: (bindable, oldValue, newValue) =>
145         {
146             var instance = (Popup)bindable;
147             if (newValue != null)
148             {
149                 if (instance.popupStyle.Buttons.BackgroundImage == null)
150                 {
151                     instance.popupStyle.Buttons.BackgroundImage = new Selector<string>();
152                 }
153                 instance.popupStyle.Buttons.BackgroundColor = new Selector<Color>();
154                 instance.popupStyle.Buttons.BackgroundImage = (string)newValue;
155                 instance.btGroup.ItemBackgroundImageUrl = (string)newValue;
156             }
157         },
158         defaultValueCreator: (bindable) =>
159         {
160             var instance = (Popup)bindable;
161             return instance.popupStyle?.Buttons?.BackgroundImage?.All;
162         });
163
164         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
165         [EditorBrowsable(EditorBrowsableState.Never)]
166         public static readonly BindableProperty ButtonBackgroundBorderProperty = BindableProperty.Create(nameof(ButtonBackgroundBorder), typeof(Rectangle), typeof(Popup), new Rectangle(0, 0, 0, 0), propertyChanged: (bindable, oldValue, newValue) =>
167         {
168             var instance = (Popup)bindable;
169             if (newValue != null)
170             {
171                 if (instance.popupStyle.Buttons.BackgroundImageBorder == null)
172                 {
173                     instance.popupStyle.Buttons.BackgroundImageBorder = new Selector<Rectangle>();
174                 }
175                 instance.popupStyle.Buttons.BackgroundImageBorder = (Rectangle)newValue;
176                 instance.btGroup.ItemBackgroundBorder = (Rectangle)newValue;
177             }
178         },
179         defaultValueCreator: (bindable) =>
180         {
181             var instance = (Popup)bindable;
182             return instance.popupStyle?.Buttons?.BackgroundImageBorder?.All;
183         });
184
185         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
186         [EditorBrowsable(EditorBrowsableState.Never)]
187         public static readonly BindableProperty ButtonImageShadowProperty = BindableProperty.Create(nameof(ButtonImageShadow), typeof(ImageShadow), typeof(Popup), null, propertyChanged: (bindable, oldValue, newValue) =>
188         {
189             var instance = (Popup)bindable;
190             ImageShadow shadow = (ImageShadow)newValue;
191             instance.btGroup.ItemImageShadow = new ImageShadow(shadow);
192             instance.popupStyle.Buttons.ImageShadow = new ImageShadow(shadow);
193         },
194         defaultValueCreator: (bindable) =>
195         {
196             var instance = (Popup)bindable;
197             return instance.popupStyle?.Buttons?.ImageShadow?.All;
198         });
199
200
201         private PopupStyle popupStyle => ViewStyle as PopupStyle;
202         private TextLabel titleText;
203         private ButtonGroup btGroup = null;
204         private Window window = null;
205         private Layer container = new Layer();
206         static Popup() { }
207
208         /// <summary>
209         /// Creates a new instance of a Popup.
210         /// </summary>
211         /// <since_tizen> 6 </since_tizen>
212         [Obsolete("Deprecated in API8; Will be removed in API10")]
213         public Popup() : base()
214         {
215             Initialize();
216         }
217
218         /// <summary>
219         /// Creates a new instance of a Popup with style.
220         /// </summary>
221         /// <param name="style">Create Popup by special style defined in UX.</param>
222         [EditorBrowsable(EditorBrowsableState.Never)]
223         public Popup(string style) : base(style)
224         {
225             Initialize();
226         }
227
228         /// <summary>
229         /// Creates a new instance of a Popup with style.
230         /// </summary>
231         /// <param name="popupStyle">Create Popup by style customized by user.</param>
232         [EditorBrowsable(EditorBrowsableState.Never)]
233         public Popup(PopupStyle popupStyle) : base(popupStyle)
234         {
235             Initialize();
236         }
237
238         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
239         [EditorBrowsable(EditorBrowsableState.Never)]
240         public virtual void Post(Window targetWindow)
241         {
242             if (targetWindow == null)
243             {
244                 return;
245             }
246
247             window = targetWindow;
248             window.AddLayer(container);
249             container.RaiseToTop();
250         }
251
252         /// <summary>
253         /// Dismiss the dialog
254         /// </summary>
255         [EditorBrowsable(EditorBrowsableState.Never)]
256         public virtual void Dismiss()
257         {
258             if (window == null)
259             {
260                 return;
261             }
262
263             window.RemoveLayer(container);
264             window = null;
265         }
266
267         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
268         [EditorBrowsable(EditorBrowsableState.Never)]
269         public void AddButton(string buttonText)
270         {
271             if (popupStyle.Buttons != null)
272             {
273                 Button btn = new Button(popupStyle.Buttons);
274                 btn.Text = buttonText;
275                 btn.ClickEvent += ButtonClickEvent;
276                 btGroup.AddItem(btn);
277                 UpdateView();
278             }
279         }
280
281         /// <summary>
282         /// Add button by style's name.
283         /// </summary>
284         [EditorBrowsable(EditorBrowsableState.Never)]
285         public void AddButton(string buttonText, string style)
286         {
287             AddButton(buttonText);
288         }
289
290         /// <summary>
291         /// Add button by style.
292         /// </summary>
293         [EditorBrowsable(EditorBrowsableState.Never)]
294         public void AddButton(string buttonText, ButtonStyle style)
295         {
296             if (popupStyle.Buttons != null && style != null)
297             {
298                 popupStyle.Buttons.CopyFrom(style);
299                 AddButton(buttonText);
300             }
301         }
302
303         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
304         [EditorBrowsable(EditorBrowsableState.Never)]
305         public Button GetButton(int index)
306         {
307             return btGroup.GetItem(index);
308         }
309
310         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
311         [EditorBrowsable(EditorBrowsableState.Never)]
312         public void RemoveButton(int index)
313         {
314             btGroup.RemoveItem(index);
315         }
316
317         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
318         [EditorBrowsable(EditorBrowsableState.Never)]
319         public void AddContentText(View childView)
320         {
321             if (null != ContentView)
322             {
323                 ContentView.Add(childView);
324             }
325             UpdateView();
326         }
327
328         /// <summary>
329         /// An event for the button clicked signal which can be used to subscribe or unsubscribe the event handler provided by the user.<br />
330         /// </summary>
331         /// <since_tizen> 6 </since_tizen>
332         [Obsolete("Deprecated in API8; Will be removed in API10")]
333         public event EventHandler<ButtonClickEventArgs> PopupButtonClickEvent;
334
335         /// <summary>
336         /// Get style of popup.
337         /// </summary>
338         [EditorBrowsable(EditorBrowsableState.Never)]
339         public new PopupStyle Style
340         {
341             get
342             {
343                 var result = new PopupStyle(popupStyle);
344                 result.CopyPropertiesFromView(this);
345                 result.Title.CopyPropertiesFromView(titleText);
346                 return result;
347             }
348         }
349
350         /// <summary>
351         /// Popup Title.
352         /// </summary>
353         [EditorBrowsable(EditorBrowsableState.Never)]
354         public TextLabel Title
355         {
356             get
357             {
358                 if (null == titleText)
359                 {
360                     titleText = new TextLabel();
361                     Add(titleText);
362                 }
363                 return titleText;
364             }
365             internal set
366             {
367                 titleText = value;
368             }
369         }
370
371         /// <summary>
372         /// Title text string in Popup.
373         /// </summary>
374         /// <since_tizen> 6 </since_tizen>
375         [Obsolete("Deprecated in API8; Will be removed in API10")]
376         public string TitleText
377         {
378             get
379             {
380                 return popupStyle?.Title?.Text?.All;
381             }
382             set
383             {
384                 if (value != null)
385                 {
386                     if (popupStyle?.Title != null)
387                     {
388                         popupStyle.Title.Text = value;
389                     }
390                 }
391             }
392         }
393
394         /// <summary>
395         /// Title text point size in Popup.
396         /// </summary>
397         /// <since_tizen> 6 </since_tizen>
398         [Obsolete("Deprecated in API8; Will be removed in API10")]
399         public float TitlePointSize
400         {
401             get
402             {
403                 return popupStyle?.Title?.PointSize?.All ?? 0;
404             }
405             set
406             {
407                 if (popupStyle?.Title != null)
408                 {
409                     popupStyle.Title.PointSize = value;
410                 }
411             }
412         }
413
414         /// <summary>
415         /// Title text color in Popup.
416         /// </summary>
417         /// <since_tizen> 6 </since_tizen>
418         [Obsolete("Deprecated in API8; Will be removed in API10")]
419         public Color TitleTextColor
420         {
421             get
422             {
423                 return popupStyle?.Title?.TextColor?.All;
424             }
425             set
426             {
427                 if (popupStyle?.Title != null)
428                 {
429                     popupStyle.Title.TextColor = value;
430                 }
431             }
432         }
433
434         /// <summary>
435         /// Title text horizontal alignment in Popup.
436         /// </summary>
437         /// <since_tizen> 6 </since_tizen>
438         [Obsolete("Deprecated in API8; Will be removed in API10")]
439         public HorizontalAlignment TitleTextHorizontalAlignment
440         {
441             get
442             {
443                 return popupStyle?.Title?.HorizontalAlignment ?? HorizontalAlignment.Center;
444             }
445             set
446             {
447                 popupStyle.Title.HorizontalAlignment = value;
448             }
449         }
450
451         /// <summary>
452         /// Title text's position in Popup.
453         /// </summary>
454         /// <since_tizen> 6 </since_tizen>
455         [Obsolete("Deprecated in API8; Will be removed in API10")]
456         public Position TitleTextPosition
457         {
458             get
459             {
460                 return popupStyle?.Title?.Position ?? new Position(0, 0, 0);
461             }
462             set
463             {
464                 popupStyle.Title.Position = value;
465             }
466         }
467
468         /// <summary>
469         /// Title text's height in Popup.
470         /// </summary>
471         /// <since_tizen> 6 </since_tizen>
472         [Obsolete("Deprecated in API8; Will be removed in API10")]
473         public int TitleHeight
474         {
475             get
476             {
477                 return (int)(popupStyle?.Title?.Size?.Height ?? 0);
478             }
479             set
480             {
481                 if (popupStyle?.Title?.Size != null)
482                 {
483                     popupStyle.Title.Size.Height = value;
484                 }
485             }
486         }
487
488         /// <summary>
489         /// Content view in Popup, only can be gotten.
490         /// </summary>
491         /// <since_tizen> 6 </since_tizen>
492         [Obsolete("Deprecated in API8; Will be removed in API10")]
493         public View ContentView
494         {
495             get;
496             private set;
497         }
498
499         /// <summary>
500         /// Button count in Popup.
501         /// </summary>
502         /// <since_tizen> 6 </since_tizen>
503         [Obsolete("Deprecated in API8; Will be removed in API10")]
504         public int ButtonCount
505         {
506             get;
507             set;
508         }
509
510         /// <summary>
511         /// Button height in Popup.
512         /// </summary>
513         /// <since_tizen> 6 </since_tizen>
514         [Obsolete("Deprecated in API8; Will be removed in API10")]
515         public int ButtonHeight
516         {
517             get
518             {
519                 return (int)GetValue(ButtonHeightProperty);
520             }
521             set
522             {
523                 SetValue(ButtonHeightProperty, value);
524             }
525         }
526
527         /// <summary>
528         /// Button text point size in Popup.
529         /// </summary>
530         /// <since_tizen> 6 </since_tizen>
531         [Obsolete("Deprecated in API8; Will be removed in API10")]
532         public float ButtonTextPointSize
533         {
534             get
535             {
536                 return (float)GetValue(ButtonTextPointSizeProperty);
537             }
538             set
539             {
540                 SetValue(ButtonTextPointSizeProperty, value);
541             }
542         }
543
544         /// <summary>
545         /// Button text font family in Popup.
546         /// </summary>
547         /// <since_tizen> 6 </since_tizen>
548         [Obsolete("Deprecated in API8; Will be removed in API10")]
549         public string ButtonFontFamily
550         {
551             get
552             {           
553                 return (string)GetValue(ButtonFontFamilyProperty);
554             }
555             set
556             {
557                 SetValue(ButtonFontFamilyProperty, value);
558             }
559         }
560
561         /// <summary>
562         /// Button text color in Popup.
563         /// </summary>
564         /// <since_tizen> 6 </since_tizen>
565         [Obsolete("Deprecated in API8; Will be removed in API10")]
566         public Color ButtonTextColor
567         {
568             get
569             {
570                 return (Color)GetValue(ButtonTextColorProperty);
571             }
572             set
573             {
574                 SetValue(ButtonTextColorProperty, value);
575             }
576         }
577
578         /// <summary>
579         /// Button overlay background color selector in Popup.
580         /// </summary>
581         /// <since_tizen> 6 </since_tizen>
582         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
583         [EditorBrowsable(EditorBrowsableState.Never)]
584         public Selector<Color> ButtonOverLayBackgroundColorSelector
585         {
586             get
587             {
588                 return (Selector<Color>)GetValue(ButtonOverLayBackgroundColorSelectorProperty);
589             }
590             set
591             {
592                 SetValue(ButtonOverLayBackgroundColorSelectorProperty, value);
593             }
594         }
595
596         /// <summary>
597         /// Button text horizontal alignment in Popup.
598         /// </summary>
599         /// <since_tizen> 6 </since_tizen>
600         [Obsolete("Deprecated in API8; Will be removed in API10")]
601         public HorizontalAlignment ButtonTextAlignment
602         {
603             get
604             {   
605                 return (HorizontalAlignment)GetValue(ButtonTextAlignmentProperty);
606             }
607             set
608             {
609                 SetValue(ButtonTextAlignmentProperty, value);
610             }
611         }
612
613         /// <summary>
614         /// Button background image's resource url in Popup.
615         /// </summary>
616         /// <since_tizen> 6 </since_tizen>
617         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
618         [EditorBrowsable(EditorBrowsableState.Never)]
619         public string ButtonBackground
620         {
621             get
622             {     
623                 return (string)GetValue(ButtonBackgroundProperty);
624             }
625             set
626             {
627                 SetValue(ButtonBackgroundProperty, value);
628             }
629         }
630
631         /// <summary>
632         /// Button background image's border in Popup.
633         /// </summary>
634         /// <since_tizen> 6 </since_tizen>
635         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
636         [EditorBrowsable(EditorBrowsableState.Never)]
637         public Rectangle ButtonBackgroundBorder
638         {
639             get
640             {
641                 
642                 return (Rectangle)GetValue(ButtonBackgroundBorderProperty);
643             }
644             set
645             {
646                 SetValue(ButtonBackgroundBorderProperty, value);
647             }
648         }
649
650         /// <summary>
651         /// Button's image shadow in Popup.
652         /// </summary>
653         /// <since_tizen> 6 </since_tizen>
654         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
655         [EditorBrowsable(EditorBrowsableState.Never)]
656         public ImageShadow ButtonImageShadow
657         {
658             get => (ImageShadow)GetValue(ButtonImageShadowProperty);
659             set => SetValue(ButtonImageShadowProperty, value);
660         }
661
662
663         /// <summary>
664         /// Set button text by index.
665         /// </summary>
666         /// <param name="index">Button index.</param>
667         /// <param name="text">Button text string.</param>
668         /// <since_tizen> 6 </since_tizen>
669         [Obsolete("Deprecated in API8; Will be removed in API10")]
670         public void SetButtonText(int index, string text)
671         {
672             AddButton(text);
673         }
674
675         /// <summary>
676         /// Dispose Popup and all children on it.
677         /// </summary>
678         /// <param name="type">Dispose type.</param>
679         /// <since_tizen> 6 </since_tizen>
680         [Obsolete("Deprecated in API8; Will be removed in API10")]
681         protected override void Dispose(DisposeTypes type)
682         {
683             if (disposed)
684             {
685                 return;
686             }
687
688             if (type == DisposeTypes.Explicit)
689             {
690                 if (titleText != null)
691                 {
692                     Remove(titleText);
693                     titleText.Dispose();
694                     titleText = null;
695                 }
696                 if (ContentView != null)
697                 {
698                     Remove(ContentView);
699                     ContentView.Dispose();
700                     ContentView = null;
701                 }
702
703                 if (btGroup != null)
704                 {
705                     btGroup.Dispose();
706                     btGroup = null;
707                 }
708             }
709
710             base.Dispose(type);
711         }
712
713         /// <summary>
714         /// Focus gained callback.
715         /// </summary>
716         /// <since_tizen> 6 </since_tizen>
717         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
718         [EditorBrowsable(EditorBrowsableState.Never)]
719         public override void OnFocusGained()
720         {
721             base.OnFocusGained();
722         }
723
724         /// <summary>
725         /// Focus lost callback.
726         /// </summary>
727         /// <since_tizen> 6 </since_tizen>
728         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
729         [EditorBrowsable(EditorBrowsableState.Never)]
730         public override void OnFocusLost()
731         {
732             base.OnFocusLost();
733         }
734
735         /// <summary>
736         /// Apply style to popup.
737         /// </summary>
738         /// <param name="viewStyle">The style to apply.</param>
739         [EditorBrowsable(EditorBrowsableState.Never)]
740         public override void ApplyStyle(ViewStyle viewStyle)
741         {
742             base.ApplyStyle(viewStyle);
743             PopupStyle ppStyle = viewStyle as PopupStyle;
744             if (null != ppStyle)
745             {
746                 Title.ApplyStyle(ppStyle.Title);
747                 Title.RaiseToTop();
748             }
749         }
750
751         /// <summary>
752         /// Get Popup style.
753         /// </summary>
754         /// <returns>The default popup style.</returns>
755         [EditorBrowsable(EditorBrowsableState.Never)]
756         protected override ViewStyle CreateViewStyle()
757         {
758             return new PopupStyle();
759         }
760
761         /// <summary>
762         /// Theme change callback when theme is changed, this callback will be trigger.
763         /// </summary>
764         /// <param name="sender">The sender</param>
765         /// <param name="e">The event data</param>
766         [EditorBrowsable(EditorBrowsableState.Never)]
767         protected override void OnThemeChangedEvent(object sender, StyleManager.ThemeChangeEventArgs e)
768         {
769             PopupStyle ppStyle = StyleManager.Instance.GetViewStyle(StyleName) as PopupStyle;
770             if (ppStyle != null)
771             {
772                 ApplyStyle(ppStyle);
773                 UpdateView();
774             }
775         }
776
777         private void Initialize()
778         {
779             container.Add(this);
780             container.SetTouchConsumed(true);
781             container.SetHoverConsumed(true);
782
783             LeaveRequired = true;
784             PropertyChanged += PopupStylePropertyChanged;
785
786             // ContentView
787             ContentView = new View()
788             {
789                 ParentOrigin = Tizen.NUI.ParentOrigin.TopLeft,
790                 PivotPoint = Tizen.NUI.PivotPoint.TopLeft,
791                 PositionUsesPivotPoint = true
792             };
793             Add(ContentView);
794             ContentView.RaiseToTop();
795
796             // Button
797             btGroup = new ButtonGroup(this);
798         }
799
800         private void UpdateView()
801         {
802             btGroup.UpdateButton(popupStyle.Buttons);
803             UpdateContentView();
804             UpdateTitle();
805         }
806
807         private void ButtonClickEvent(object sender, Button.ClickEventArgs e)
808         {
809             if (PopupButtonClickEvent != null && btGroup.Count > 0)
810             {
811                 Button button = sender as Button;
812                 for (int i = 0; i < btGroup.Count; i++)
813                 {
814                     if (button == GetButton(i))
815                     {
816                         ButtonClickEventArgs args = new ButtonClickEventArgs();
817                         args.ButtonIndex = i;
818                         PopupButtonClickEvent(this, args);
819                     }
820                 }
821             }
822         }
823
824         private void PopupStylePropertyChanged(object sender, PropertyChangedEventArgs e)
825         {
826             if (e.PropertyName.Equals("LayoutDirection"))
827             {
828                 btGroup.UpdateButton(popupStyle.Buttons);
829             }
830         }
831
832         private void UpdateContentView()
833         {
834             int titleX = 0;
835             int titleY = 0;
836             int titleH = 0;
837             int buttonH = 0;
838             string strText = Title.Text;
839             if (!string.IsNullOrEmpty(strText) && Title.Size != null)
840             {
841                 titleH = (int)titleText.Size.Height;
842             }
843
844             if (!string.IsNullOrEmpty(strText) && Title.Position != null)
845             {
846                 titleX = (int)Title.Position.X;
847                 titleY = (int)Title.Position.Y;
848             }
849
850             if (btGroup.Count != 0 && popupStyle?.Buttons?.Size != null )
851             {
852                 buttonH = (int)popupStyle.Buttons.Size.Height;
853             }
854             ContentView.Size = new Size(Size.Width - titleX * 2, Size.Height - titleY - titleH - buttonH);
855             ContentView.Position = new Position(titleX, titleY + titleH);
856             ContentView.RaiseToTop();
857         }
858
859         private void UpdateTitle()
860         {
861             if (titleText != null && string.IsNullOrEmpty(popupStyle.Title.Text.All) && popupStyle.Title.Size != null)
862             {
863                 titleText.RaiseToTop();
864             }
865         }
866         /// <summary>
867         /// ButtonClickEventArgs is a class to record button click event arguments which will sent to user.
868         /// </summary>
869         /// <since_tizen> 6 </since_tizen>
870         [Obsolete("Deprecated in API8; Will be removed in API10")]
871         public class ButtonClickEventArgs : EventArgs
872         {
873             /// <summary> Button index which is clicked in Popup </summary>
874             /// <since_tizen> 6 </since_tizen>
875             [Obsolete("Deprecated in API8; Will be removed in API10")]
876             public int ButtonIndex;
877         }
878     }
879 }