[NUI] Update theme system
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / public / BaseComponents / View.cs
1 /*
2  * Copyright(c) 2021 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 System.ComponentModel;
20 using System.Runtime.InteropServices;
21 using Tizen.NUI.Binding;
22
23 namespace Tizen.NUI.BaseComponents
24 {
25     /// <summary>
26     /// View is the base class for all views.
27     /// </summary>
28     /// <since_tizen> 3 </since_tizen>
29     public partial class View : Container, IResourcesProvider
30     {
31         private static HashSet<BindableProperty> positionPropertyGroup = new HashSet<BindableProperty>();
32         private static HashSet<BindableProperty> sizePropertyGroup = new HashSet<BindableProperty>();
33         private static HashSet<BindableProperty> scalePropertyGroup = new HashSet<BindableProperty>();
34
35         internal BackgroundExtraData backgroundExtraData;
36
37         private bool layoutSet = false;
38         private LayoutItem layout; // Exclusive layout assigned to this View.
39
40         // List of transitions paired with the condition that uses the transition.
41         private Dictionary<TransitionCondition, TransitionList> layoutTransitions;
42         private int widthPolicy = LayoutParamPolicies.WrapContent; // Layout width policy
43         private int heightPolicy = LayoutParamPolicies.WrapContent; // Layout height policy
44         private float weight = 0.0f; // Weighting of child View in a Layout
45         private bool backgroundImageSynchronosLoading = false;
46         private bool excludeLayouting = false;
47         private LayoutTransition layoutTransition;
48         private TransitionOptions transitionOptions = null;
49         private ThemeData themeData;
50
51         static View()
52         {
53             RegisterPropertyGroup(PositionProperty, positionPropertyGroup);
54             RegisterPropertyGroup(Position2DProperty, positionPropertyGroup);
55             RegisterPropertyGroup(PositionXProperty, positionPropertyGroup);
56             RegisterPropertyGroup(PositionYProperty, positionPropertyGroup);
57
58             RegisterPropertyGroup(SizeProperty, sizePropertyGroup);
59             RegisterPropertyGroup(Size2DProperty, sizePropertyGroup);
60             RegisterPropertyGroup(SizeWidthProperty, sizePropertyGroup);
61             RegisterPropertyGroup(SizeHeightProperty, sizePropertyGroup);
62
63             RegisterPropertyGroup(ScaleProperty, scalePropertyGroup);
64             RegisterPropertyGroup(ScaleXProperty, scalePropertyGroup);
65             RegisterPropertyGroup(ScaleYProperty, scalePropertyGroup);
66             RegisterPropertyGroup(ScaleZProperty, scalePropertyGroup);
67         }
68
69         /// <summary>
70         /// Creates a new instance of a view.
71         /// </summary>
72         /// <since_tizen> 3 </since_tizen>
73         public View() : this(Interop.View.New(), true)
74         {
75             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
76         }
77
78         /// This will be public opened in next release of tizen after ACR done. Before ACR, it is used as HiddenAPI (InhouseAPI).
79         [EditorBrowsable(EditorBrowsableState.Never)]
80         public View(ViewStyle viewStyle) : this(Interop.View.New(), true, viewStyle)
81         {
82         }
83
84         /// <summary>
85         /// Create a new instance of a View with setting the status of shown or hidden.
86         /// </summary>
87         /// <param name="shown">false : Not displayed (hidden), true : displayed (shown)</param>
88         /// This will be public opened in next release of tizen after ACR done. Before ACR, it is used as HiddenAPI (InhouseAPI).
89         [EditorBrowsable(EditorBrowsableState.Never)]
90         public View(bool shown) : this(Interop.View.New(), true)
91         {
92             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
93             SetVisible(shown);
94         }
95
96         internal View(View uiControl, bool shown = true) : this(Interop.View.NewView(View.getCPtr(uiControl)), true)
97         {
98             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
99             if (!shown)
100             {
101                 SetVisible(false);
102             }
103
104             backgroundExtraData = uiControl.backgroundExtraData == null ? null : new BackgroundExtraData(uiControl.backgroundExtraData);
105         }
106
107         internal View(global::System.IntPtr cPtr, bool cMemoryOwn, ViewStyle viewStyle, bool shown = true) : this(cPtr, cMemoryOwn, shown)
108         {
109             InitializeStyle(viewStyle);
110         }
111
112         internal View(global::System.IntPtr cPtr, bool cMemoryOwn, bool shown = true) : base(cPtr, cMemoryOwn)
113         {
114             if (HasBody())
115             {
116                 PositionUsesPivotPoint = false;
117             }
118
119             onWindowSendEventCallback = SendViewAddedEventToWindow;
120             this.OnWindowSignal().Connect(onWindowSendEventCallback);
121
122             if (!shown)
123             {
124                 SetVisible(false);
125             }
126         }
127
128         internal View(ViewImpl implementation, bool shown = true) : this(Interop.View.NewViewInternal(ViewImpl.getCPtr(implementation)), true)
129         {
130             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
131
132             if (!shown)
133             {
134                 SetVisible(false);
135             }
136         }
137
138         /// <summary>
139         /// The event that is triggered when the View's ControlState is changed.
140         /// </summary>
141         [EditorBrowsable(EditorBrowsableState.Never)]
142         public event EventHandler<ControlStateChangedEventArgs> ControlStateChangedEvent;
143
144         internal event EventHandler<ControlStateChangedEventArgs> ControlStateChangeEventInternal;
145
146
147         /// <summary>
148         /// Flag to indicate if layout set explicitly via API call or View was automatically given a Layout.
149         /// </summary>
150         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
151         [EditorBrowsable(EditorBrowsableState.Never)]
152         public bool LayoutSet
153         {
154             get
155             {
156                 return layoutSet;
157             }
158         }
159
160         /// <summary>
161         /// Flag to allow Layouting to be disabled for Views.
162         /// Once a View has a Layout set then any children added to Views from then on will receive
163         /// automatic Layouts.
164         /// </summary>
165         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
166         [EditorBrowsable(EditorBrowsableState.Never)]
167         public static bool LayoutingDisabled { get; set; } = true;
168
169         /// <summary>
170         /// Deprecate. Please do not use this.
171         /// The style instance applied to this view.
172         /// Note that please do not modify the ViewStyle.
173         /// Modifying ViewStyle will affect other views with same ViewStyle.
174         /// </summary>
175         [EditorBrowsable(EditorBrowsableState.Never)]
176         protected ViewStyle ViewStyle
177         {
178             get
179             {
180                 if (themeData == null) themeData = new ThemeData();
181
182                 if (themeData.viewStyle == null)
183                 {
184                     ApplyStyle(CreateViewStyle());
185                 }
186                 return themeData.viewStyle;
187             }
188         }
189
190         /// <summary>
191         /// Get/Set the control state.
192         /// Note that the ControlState only available for the classes derived from Control.
193         /// If the classes that are not derived from Control (such as View, ImageView and TextLabel) want to use this system,
194         /// please set <see cref="EnableControlState"/> to true.
195         /// </summary>
196         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
197         [EditorBrowsable(EditorBrowsableState.Never)]
198         public ControlState ControlState
199         {
200             get
201             {
202                 return themeData == null ? ControlState.Normal : themeData.controlStates;
203             }
204             protected set
205             {
206                 if (ControlState == value)
207                 {
208                     return;
209                 }
210
211                 var prevState = ControlState;
212
213                 if (themeData == null) themeData = new ThemeData();
214                 themeData.controlStates = value;
215
216                 var changeInfo = new ControlStateChangedEventArgs(prevState, value);
217
218                 ControlStateChangeEventInternal?.Invoke(this, changeInfo);
219
220                 if (themeData.ControlStatePropagation)
221                 {
222                     foreach (View child in Children)
223                     {
224                         child.ControlState = value;
225                     }
226                 }
227
228                 OnControlStateChanged(changeInfo);
229
230                 ControlStateChangedEvent?.Invoke(this, changeInfo);
231             }
232         }
233
234         /// <summary>
235         /// Gets / Sets the status of whether the view is excluded from its parent's layouting or not.
236         /// </summary>
237         /// This will be public opened later after ACR done. Before ACR, need to be hidden as inhouse API.
238         [EditorBrowsable(EditorBrowsableState.Never)]
239         public bool ExcludeLayouting
240         {
241             get
242             {
243                 return excludeLayouting;
244             }
245             set
246             {
247                 excludeLayouting = value;
248                 if (Layout != null && Layout.SetPositionByLayout == value)
249                 {
250                     Layout.SetPositionByLayout = !value;
251                     Layout.RequestLayout();
252                 }
253             }
254         }
255
256         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
257         [EditorBrowsable(EditorBrowsableState.Never)]
258         public bool IsResourcesCreated
259         {
260             get
261             {
262                 return Application.Current.IsResourcesCreated;
263             }
264         }
265
266         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
267         [EditorBrowsable(EditorBrowsableState.Never)]
268         public ResourceDictionary XamlResources
269         {
270             get
271             {
272                 return Application.Current.XamlResources;
273             }
274             set
275             {
276                 Application.Current.XamlResources = value;
277             }
278         }
279
280         /// <summary>
281         /// The StyleName, type string.
282         /// The value indicates DALi style name defined in json theme file.
283         /// </summary>
284         /// <since_tizen> 3 </since_tizen>
285         public string StyleName
286         {
287             get
288             {
289                 return (string)GetValue(StyleNameProperty);
290             }
291             set
292             {
293                 SetValue(StyleNameProperty, value);
294                 NotifyPropertyChanged();
295             }
296         }
297
298         /// <summary>
299         /// The KeyInputFocus, type bool.
300         /// </summary>
301         [EditorBrowsable(EditorBrowsableState.Never)]
302         public bool KeyInputFocus
303         {
304             get
305             {
306                 return (bool)GetValue(KeyInputFocusProperty);
307             }
308             set
309             {
310                 SetValue(KeyInputFocusProperty, value);
311                 NotifyPropertyChanged();
312             }
313         }
314
315         /// <summary>
316         /// The mutually exclusive with "backgroundImage" and "background" type Vector4.
317         /// </summary>
318         /// <remarks>
319         /// <para>
320         /// The property cascade chaining set is possible. For example, this (view.BackgroundColor.X = 0.1f;) is possible.
321         /// </para>
322         /// <para>
323         /// Animatable - This property can be animated using <c>Animation</c> class.
324         /// <code>
325         /// animation.AnimateTo(view, "BackgroundColor", new Color(r, g, b, a));
326         /// </code>
327         /// </para>
328         /// </remarks>
329         /// <since_tizen> 3 </since_tizen>
330         public Color BackgroundColor
331         {
332             get
333             {
334                 Color temp = (Color)GetValue(BackgroundColorProperty);
335                 return new Color(OnBackgroundColorChanged, temp.R, temp.G, temp.B, temp.A);
336             }
337             set
338             {
339                 SetValue(BackgroundColorProperty, value);
340                 NotifyPropertyChanged();
341             }
342         }
343
344         /// <summary>
345         /// The mutually exclusive with "backgroundColor" and "background" type Map.
346         /// </summary>
347         /// <since_tizen> 3 </since_tizen>
348         public string BackgroundImage
349         {
350             get
351             {
352                 return (string)GetValue(BackgroundImageProperty);
353             }
354             set
355             {
356                 SetValue(BackgroundImageProperty, value);
357                 NotifyPropertyChanged();
358             }
359         }
360
361         /// <summary>
362         /// Get or set the border of background image.
363         /// </summary>
364         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
365         [EditorBrowsable(EditorBrowsableState.Never)]
366         public Rectangle BackgroundImageBorder
367         {
368             get
369             {
370                 return (Rectangle)GetValue(BackgroundImageBorderProperty);
371             }
372             set
373             {
374                 SetValue(BackgroundImageBorderProperty, value);
375                 NotifyPropertyChanged();
376             }
377         }
378
379         /// <summary>
380         /// The background of view.
381         /// </summary>
382         /// <since_tizen> 3 </since_tizen>
383         public Tizen.NUI.PropertyMap Background
384         {
385             get
386             {
387                 return (PropertyMap)GetValue(BackgroundProperty);
388             }
389             set
390             {
391                 SetValue(BackgroundProperty, value);
392                 NotifyPropertyChanged();
393             }
394         }
395
396         /// <summary>
397         /// Describes a shadow as an image for a View.
398         /// It is null by default.
399         /// </summary>
400         /// <remarks>
401         /// Getter returns copied instance of current shadow.
402         /// </remarks>
403         /// <remarks>
404         /// The mutually exclusive with "BoxShadow".
405         /// </remarks>
406         /// <remarks>
407         /// <para>
408         /// Animatable - This property can be animated using <c>Animation</c> class.
409         /// To animate this property, specify a sub-property with separator ".", for example, "ImageShadow.Offset".
410         /// <code>
411         /// animation.AnimateTo(view, "ImageShadow.Offset", new Vector2(10, 10));
412         /// </code>
413         /// Animatable sub-property : Offset.
414         /// </para>
415         /// </remarks>
416         [EditorBrowsable(EditorBrowsableState.Never)]
417         public ImageShadow ImageShadow
418         {
419             get
420             {
421                 return (ImageShadow)GetValue(ImageShadowProperty);
422             }
423             set
424             {
425                 SetValue(ImageShadowProperty, value);
426                 NotifyPropertyChanged();
427             }
428         }
429
430         /// <summary>
431         /// Describes a box shaped shadow drawing for a View.
432         /// It is null by default.
433         /// </summary>
434         /// <remarks>
435         /// The mutually exclusive with "ImageShadow".
436         /// </remarks>
437         /// <remarks>
438         /// <para>
439         /// Animatable - This property can be animated using <c>Animation</c> class.
440         /// To animate this property, specify a sub-property with separator ".", for example, "BoxShadow.BlurRadius".
441         /// <code>
442         /// animation.AnimateTo(view, "BoxShadow.BlurRadius", 10.0f);
443         /// </code>
444         /// Animatable sub-property : Offset, Color, BlurRadius.
445         /// </para>
446         /// </remarks>
447         /// <since_tizen> 9 </since_tizen>
448         public Shadow BoxShadow
449         {
450             get
451             {
452                 return (Shadow)GetValue(BoxShadowProperty);
453             }
454             set
455             {
456                 SetValue(BoxShadowProperty, value);
457                 NotifyPropertyChanged();
458             }
459         }
460
461         /// <summary>
462         /// The radius for the rounded corners of the View.
463         /// This will rounds background and shadow edges.
464         /// The values in Vector4 are used in clockwise order from top-left to bottom-left : Vector4(top-left-corner, top-right-corner, bottom-right-corner, bottom-left-corner).
465         /// Note that, an image background (or shadow) may not have rounded corners if it uses a Border property.
466         /// </summary>
467         /// <remarks>
468         /// <para>
469         /// Animatable - This property can be animated using <c>Animation</c> class.
470         /// </para>
471         /// </remarks>
472         /// <since_tizen> 9 </since_tizen>
473         public Vector4 CornerRadius
474         {
475             get
476             {
477                 return (Vector4)GetValue(CornerRadiusProperty);
478             }
479             set
480             {
481                 SetValue(CornerRadiusProperty, value);
482                 NotifyPropertyChanged();
483             }
484         }
485
486         /// <summary>
487         /// Whether the CornerRadius property value is relative (percentage [0.0f to 1.0f] of the view size) or absolute (in world units).
488         /// It is absolute by default.
489         /// When the policy is relative, the corner radius is relative to the smaller of the view's width and height.
490         /// </summary>
491         /// <since_tizen> 9 </since_tizen>
492         public VisualTransformPolicyType CornerRadiusPolicy
493         {
494             get => (VisualTransformPolicyType)GetValue(CornerRadiusPolicyProperty);
495             set => SetValue(CornerRadiusPolicyProperty, value);
496         }
497
498         /// <summary>
499         /// The width for the borderline of the View.
500         /// This will draw borderline at background.
501         /// Note that, an image background may not have borderline if it uses a Border property.
502         /// </summary>
503         /// <remarks>
504         /// <para>
505         /// Animatable - This property can be animated using <c>Animation</c> class.
506         /// </para>
507         /// </remarks>
508         /// This will be public opened after ACR done. Before ACR, need to be hidden as inhouse API.
509         [EditorBrowsable(EditorBrowsableState.Never)]
510         public float BorderlineWidth
511         {
512             get
513             {
514                 return (float)GetValue(BorderlineWidthProperty);
515             }
516             set
517             {
518                 SetValue(BorderlineWidthProperty, value);
519                 NotifyPropertyChanged();
520             }
521         }
522
523         /// <summary>
524         /// The color for the borderline of the View.
525         /// It is Color.Black by default.
526         /// </summary>
527         /// <remarks>
528         /// <para>
529         /// Animatable - This property can be animated using <c>Animation</c> class.
530         /// </para>
531         /// </remarks>
532         /// This will be public opened after ACR done. Before ACR, need to be hidden as inhouse API.
533         [EditorBrowsable(EditorBrowsableState.Never)]
534         public Color BorderlineColor
535         {
536             get
537             {
538                 return (Color)GetValue(BorderlineColorProperty);
539             }
540             set
541             {
542                 SetValue(BorderlineColorProperty, value);
543                 NotifyPropertyChanged();
544             }
545         }
546
547         /// <summary>
548         /// The Relative offset for the borderline of the View.
549         /// recommand [-1.0f to 1.0f] range.
550         /// If -1.0f, borderline draw inside of View.
551         /// If 1.0f, borderline draw outside of View.
552         /// If 0.0f, borderline draw half at inside and half at outside.
553         /// It is 0.0f by default.
554         /// </summary>
555         /// <remarks>
556         /// <para>
557         /// Animatable - This property can be animated using <c>Animation</c> class.
558         /// </para>
559         /// </remarks>
560         /// This will be public opened after ACR done. Before ACR, need to be hidden as inhouse API.
561         [EditorBrowsable(EditorBrowsableState.Never)]
562         public float BorderlineOffset
563         {
564             get
565             {
566                 return (float)GetValue(BorderlineOffsetProperty);
567             }
568             set
569             {
570                 SetValue(BorderlineOffsetProperty, value);
571                 NotifyPropertyChanged();
572             }
573         }
574
575         /// <summary>
576         /// The current state of the view.
577         /// </summary>
578         /// <since_tizen> 3 </since_tizen>
579         public States State
580         {
581             get
582             {
583                 return (States)GetValue(StateProperty);
584             }
585             set
586             {
587                 SetValue(StateProperty, value);
588                 NotifyPropertyChanged();
589             }
590         }
591
592         /// <summary>
593         /// The current sub state of the view.
594         /// </summary>
595         /// <since_tizen> 3 </since_tizen>
596         public States SubState
597         {
598             get
599             {
600                 return (States)GetValue(SubStateProperty);
601             }
602             set
603             {
604                 SetValue(SubStateProperty, value);
605                 NotifyPropertyChanged();
606             }
607         }
608
609         /// <summary>
610         /// Displays a tooltip
611         /// </summary>
612         /// <since_tizen> 3 </since_tizen>
613         public Tizen.NUI.PropertyMap Tooltip
614         {
615             get
616             {
617                 return (PropertyMap)GetValue(TooltipProperty);
618             }
619             set
620             {
621                 SetValue(TooltipProperty, value);
622                 NotifyPropertyChanged();
623             }
624         }
625
626         /// <summary>
627         /// Displays a tooltip as a text.
628         /// </summary>
629         /// <since_tizen> 3 </since_tizen>
630         public string TooltipText
631         {
632             get
633             {
634                 using (var propertyValue = GetProperty(Property.TOOLTIP))
635                 {
636                     if (propertyValue != null && propertyValue.Get(out string retrivedValue))
637                     {
638                         return retrivedValue;
639                     }
640                     NUILog.Error($"[ERROR] Fail to get TooltipText! Return error MSG (error to get TooltipText)!");
641                     return "error to get TooltipText";
642                 }
643             }
644             set
645             {
646                 var temp = new Tizen.NUI.PropertyValue(value);
647                 SetProperty(View.Property.TOOLTIP, temp);
648                 temp.Dispose();
649                 NotifyPropertyChanged();
650             }
651         }
652
653         /// <summary>
654         /// The Child property of FlexContainer.<br />
655         /// The proportion of the free space in the container, the flex item will receive.<br />
656         /// If all items in the container set this property, their sizes will be proportional to the specified flex factor.<br />
657         /// </summary>
658         /// <since_tizen> 3 </since_tizen>
659         [Obsolete("Deprecated in API8, will be removed in API10.")]
660         public float Flex
661         {
662             get
663             {
664                 return (float)GetValue(FlexProperty);
665             }
666             set
667             {
668                 SetValue(FlexProperty, value);
669                 NotifyPropertyChanged();
670             }
671         }
672
673         /// <summary>
674         /// The Child property of FlexContainer.<br />
675         /// The alignment of the flex item along the cross axis, which, if set, overrides the default alignment for all items in the container.<br />
676         /// </summary>
677         /// <since_tizen> 3 </since_tizen>
678         [Obsolete("Deprecated in API8, will be removed in API10.")]
679         public int AlignSelf
680         {
681             get
682             {
683                 return (int)GetValue(AlignSelfProperty);
684             }
685             set
686             {
687                 SetValue(AlignSelfProperty, value);
688                 NotifyPropertyChanged();
689             }
690         }
691
692         /// <summary>
693         /// The Child property of FlexContainer.<br />
694         /// The space around the flex item.<br />
695         /// </summary>
696         /// <remarks>
697         /// The property cascade chaining set is possible. For example, this (view.FlexMargin.X = 0.1f;) is possible.
698         /// </remarks>
699         /// <since_tizen> 3 </since_tizen>
700         [Obsolete("Deprecated in API8, will be removed in API10.")]
701         public Vector4 FlexMargin
702         {
703             get
704             {
705                 Vector4 temp = (Vector4)GetValue(FlexMarginProperty);
706                 return new Vector4(OnFlexMarginChanged, temp.X, temp.Y, temp.Z, temp.W);
707             }
708             set
709             {
710                 SetValue(FlexMarginProperty, value);
711                 NotifyPropertyChanged();
712             }
713         }
714
715         /// <summary>
716         /// The top-left cell this child occupies, if not set, the first available cell is used.
717         /// </summary>
718         /// <remarks>
719         /// The property cascade chaining set is possible. For example, this (view.CellIndex.X = 0.1f;) is possible.
720         /// Also, this property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
721         /// </remarks>
722         /// <since_tizen> 3 </since_tizen>
723         public Vector2 CellIndex
724         {
725             get
726             {
727                 Vector2 temp = (Vector2)GetValue(CellIndexProperty);
728                 return new Vector2(OnCellIndexChanged, temp.X, temp.Y);
729             }
730             set
731             {
732                 SetValue(CellIndexProperty, value);
733                 NotifyPropertyChanged();
734             }
735         }
736
737         /// <summary>
738         /// The number of rows this child occupies, if not set, the default value is 1.
739         /// </summary>
740         /// <remarks>
741         /// This property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
742         /// </remarks>
743         /// <since_tizen> 3 </since_tizen>
744         public float RowSpan
745         {
746             get
747             {
748                 return (float)GetValue(RowSpanProperty);
749             }
750             set
751             {
752                 SetValue(RowSpanProperty, value);
753                 NotifyPropertyChanged();
754             }
755         }
756
757         /// <summary>
758         /// The number of columns this child occupies, if not set, the default value is 1.
759         /// </summary>
760         /// <remarks>
761         /// This property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
762         /// </remarks>
763         /// <since_tizen> 3 </since_tizen>
764         public float ColumnSpan
765         {
766             get
767             {
768                 return (float)GetValue(ColumnSpanProperty);
769             }
770             set
771             {
772                 SetValue(ColumnSpanProperty, value);
773                 NotifyPropertyChanged();
774             }
775         }
776
777         /// <summary>
778         /// The horizontal alignment of this child inside the cells, if not set, the default value is 'left'.
779         /// </summary>
780         /// <remarks>
781         /// This property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
782         /// </remarks>
783         /// <since_tizen> 3 </since_tizen>
784         public Tizen.NUI.HorizontalAlignmentType CellHorizontalAlignment
785         {
786             get
787             {
788                 return (HorizontalAlignmentType)GetValue(CellHorizontalAlignmentProperty);
789             }
790             set
791             {
792                 SetValue(CellHorizontalAlignmentProperty, value);
793                 NotifyPropertyChanged();
794             }
795         }
796
797         /// <summary>
798         /// The vertical alignment of this child inside the cells, if not set, the default value is 'top'.
799         /// </summary>
800         /// <remarks>
801         /// This property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
802         /// </remarks>
803         /// <since_tizen> 3 </since_tizen>
804         public Tizen.NUI.VerticalAlignmentType CellVerticalAlignment
805         {
806             get
807             {
808                 return (VerticalAlignmentType)GetValue(CellVerticalAlignmentProperty);
809             }
810             set
811             {
812                 SetValue(CellVerticalAlignmentProperty, value);
813                 NotifyPropertyChanged();
814             }
815         }
816
817         /// <summary>
818         /// The left focusable view.<br />
819         /// This will return null if not set.<br />
820         /// This will also return null if the specified left focusable view is not on a window.<br />
821         /// </summary>
822         /// <since_tizen> 3 </since_tizen>
823         public View LeftFocusableView
824         {
825             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
826             get
827             {
828                 return (View)GetValue(LeftFocusableViewProperty);
829             }
830             set
831             {
832                 SetValue(LeftFocusableViewProperty, value);
833                 NotifyPropertyChanged();
834             }
835         }
836
837         /// <summary>
838         /// The right focusable view.<br />
839         /// This will return null if not set.<br />
840         /// This will also return null if the specified right focusable view is not on a window.<br />
841         /// </summary>
842         /// <since_tizen> 3 </since_tizen>
843         public View RightFocusableView
844         {
845             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
846             get
847             {
848                 return (View)GetValue(RightFocusableViewProperty);
849             }
850             set
851             {
852                 SetValue(RightFocusableViewProperty, value);
853                 NotifyPropertyChanged();
854             }
855         }
856
857         /// <summary>
858         /// The up focusable view.<br />
859         /// This will return null if not set.<br />
860         /// This will also return null if the specified up focusable view is not on a window.<br />
861         /// </summary>
862         /// <since_tizen> 3 </since_tizen>
863         public View UpFocusableView
864         {
865             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
866             get
867             {
868                 return (View)GetValue(UpFocusableViewProperty);
869             }
870             set
871             {
872                 SetValue(UpFocusableViewProperty, value);
873                 NotifyPropertyChanged();
874             }
875         }
876
877         /// <summary>
878         /// The down focusable view.<br />
879         /// This will return null if not set.<br />
880         /// This will also return null if the specified down focusable view is not on a window.<br />
881         /// </summary>
882         /// <since_tizen> 3 </since_tizen>
883         public View DownFocusableView
884         {
885             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
886             get
887             {
888                 return (View)GetValue(DownFocusableViewProperty);
889             }
890             set
891             {
892                 SetValue(DownFocusableViewProperty, value);
893                 NotifyPropertyChanged();
894             }
895         }
896
897         /// <summary>
898         /// Whether the view should be focusable by keyboard navigation.
899         /// </summary>
900         /// <since_tizen> 3 </since_tizen>
901         public bool Focusable
902         {
903             set
904             {
905                 SetValue(FocusableProperty, value);
906                 NotifyPropertyChanged();
907             }
908             get
909             {
910                 return (bool)GetValue(FocusableProperty);
911             }
912         }
913
914         /// <summary>
915         ///  Retrieves the position of the view.<br />
916         ///  The coordinates are relative to the view's parent.<br />
917         /// </summary>
918         /// <since_tizen> 3 </since_tizen>
919         public Position CurrentPosition
920         {
921             get
922             {
923                 return GetCurrentPosition();
924             }
925         }
926
927         /// <summary>
928         /// Sets the size of a view for the width and the height.<br />
929         /// Geometry can be scaled to fit within this area.<br />
930         /// This does not interfere with the view's scale factor.<br />
931         /// The views default depth is the minimum of width and height.<br />
932         /// </summary>
933         /// <remarks>
934         /// This NUI object (Size2D) typed property can be configured by multiple cascade setting. <br />
935         /// For example, this code ( view.Size2D.Width = 100; view.Size2D.Height = 100; ) is equivalent to this ( view.Size2D = new Size2D(100, 100); ). <br />
936         /// </remarks>
937         /// <since_tizen> 3 </since_tizen>
938         public Size2D Size2D
939         {
940             get
941             {
942                 Size2D temp = (Size2D)GetValue(Size2DProperty);
943                 int width = temp.Width;
944                 int height = temp.Height;
945
946                 if (this.Layout == null)
947                 {
948                     if (width < 0) { width = 0; }
949                     if (height < 0) { height = 0; }
950                 }
951
952                 return new Size2D(OnSize2DChanged, width, height);
953             }
954             set
955             {
956                 SetValue(Size2DProperty, value);
957
958                 NotifyPropertyChanged();
959             }
960         }
961
962         /// <summary>
963         ///  Retrieves the size of the view.<br />
964         ///  The coordinates are relative to the view's parent.<br />
965         /// </summary>
966         /// <since_tizen> 3 </since_tizen>
967         public Size2D CurrentSize
968         {
969             get
970             {
971                 return GetCurrentSize();
972             }
973         }
974
975         /// <summary>
976         /// Retrieves and sets the view's opacity.<br />
977         /// </summary>
978         /// <since_tizen> 3 </since_tizen>
979         public float Opacity
980         {
981             get
982             {
983                 return (float)GetValue(OpacityProperty);
984             }
985             set
986             {
987                 SetValue(OpacityProperty, value);
988                 NotifyPropertyChanged();
989             }
990         }
991
992         /// <summary>
993         /// Sets the position of the view for X and Y.<br />
994         /// By default, sets the position vector between the parent origin and the pivot point (default).<br />
995         /// If the position inheritance is disabled, sets the world position.<br />
996         /// </summary>
997         /// <remarks>
998         /// This NUI object (Position2D) typed property can be configured by multiple cascade setting. <br />
999         /// For example, this code ( view.Position2D.X = 100; view.Position2D.Y = 100; ) is equivalent to this ( view.Position2D = new Position2D(100, 100); ). <br />
1000         /// </remarks>
1001         /// <since_tizen> 3 </since_tizen>
1002         public Position2D Position2D
1003         {
1004             get
1005             {
1006                 Position2D temp = (Position2D)GetValue(Position2DProperty);
1007                 return new Position2D(OnPosition2DChanged, temp.X, temp.Y);
1008             }
1009             set
1010             {
1011                 SetValue(Position2DProperty, value);
1012                 NotifyPropertyChanged();
1013             }
1014         }
1015
1016         /// <summary>
1017         /// Retrieves the screen position of the view.<br />
1018         /// </summary>
1019         /// <since_tizen> 3 </since_tizen>
1020         public Vector2 ScreenPosition
1021         {
1022             get
1023             {
1024                 Vector2 temp = new Vector2(0.0f, 0.0f);
1025                 var pValue = GetProperty(View.Property.ScreenPosition);
1026                 pValue.Get(temp);
1027                 pValue.Dispose();
1028                 return temp;
1029             }
1030         }
1031
1032         /// <summary>
1033         /// Determines whether the pivot point should be used to determine the position of the view.
1034         /// This is false by default.
1035         /// </summary>
1036         /// <remarks>If false, then the top-left of the view is used for the position.
1037         /// Setting this to false will allow scaling or rotation around the pivot point without affecting the view's position.
1038         /// </remarks>
1039         /// <since_tizen> 3 </since_tizen>
1040         public bool PositionUsesPivotPoint
1041         {
1042             get
1043             {
1044                 return (bool)GetValue(PositionUsesPivotPointProperty);
1045             }
1046             set
1047             {
1048                 SetValue(PositionUsesPivotPointProperty, value);
1049                 NotifyPropertyChanged();
1050             }
1051         }
1052
1053         /// <summary>
1054         /// Deprecated in API5; Will be removed in API8. Please use PositionUsesPivotPoint instead!
1055         /// </summary>
1056         /// <since_tizen> 3 </since_tizen>
1057         [Obsolete("Deprecated in API5; Will be removed in API8. Please use PositionUsesPivotPoint instead! " +
1058             "Like: " +
1059             "View view = new View(); " +
1060             "view.PivotPoint = PivotPoint.Center; " +
1061             "view.PositionUsesPivotPoint = true;" +
1062             " Deprecated in API5: Will be removed in API8")]
1063         [EditorBrowsable(EditorBrowsableState.Never)]
1064         public bool PositionUsesAnchorPoint
1065         {
1066             get
1067             {
1068                 bool temp = false;
1069                 var pValue = GetProperty(View.Property.PositionUsesAnchorPoint);
1070                 pValue.Get(out temp);
1071                 pValue.Dispose();
1072                 return temp;
1073             }
1074             set
1075             {
1076                 var temp = new Tizen.NUI.PropertyValue(value);
1077                 SetProperty(View.Property.PositionUsesAnchorPoint, temp);
1078                 temp.Dispose();
1079                 NotifyPropertyChanged();
1080             }
1081         }
1082
1083         /// <summary>
1084         /// Queries whether the view is connected to the stage.<br />
1085         /// When a view is connected, it will be directly or indirectly parented to the root view.<br />
1086         /// </summary>
1087         /// <since_tizen> 3 </since_tizen>
1088         public bool IsOnWindow
1089         {
1090             get
1091             {
1092                 return OnWindow();
1093             }
1094         }
1095
1096         /// <summary>
1097         /// Gets the depth in the hierarchy for the view.
1098         /// </summary>
1099         /// <since_tizen> 3 </since_tizen>
1100         public int HierarchyDepth
1101         {
1102             get
1103             {
1104                 return GetHierarchyDepth();
1105             }
1106         }
1107
1108         /// <summary>
1109         /// Sets the sibling order of the view so the depth position can be defined within the same parent.
1110         /// </summary>
1111         /// <remarks>
1112         /// Note the initial value is 0. SiblingOrder should be bigger than 0 or equal to 0.
1113         /// Raise, Lower, RaiseToTop, LowerToBottom, RaiseAbove, and LowerBelow will override the sibling order.
1114         /// The values set by this property will likely change.
1115         /// </remarks>
1116         /// <since_tizen> 3 </since_tizen>
1117         public int SiblingOrder
1118         {
1119             get
1120             {
1121                 return (int)GetValue(SiblingOrderProperty);
1122             }
1123             set
1124             {
1125                 SetValue(SiblingOrderProperty, value);
1126
1127                 LayoutGroup layout = Layout as LayoutGroup;
1128                 layout?.ChangeLayoutSiblingOrder(value);
1129
1130                 NotifyPropertyChanged();
1131             }
1132         }
1133
1134         /// <summary>
1135         /// Returns the natural size of the view.
1136         /// </summary>
1137         /// <remarks>
1138         /// Deriving classes stipulate the natural size and by default a view has a zero natural size.
1139         /// </remarks>
1140         /// <since_tizen> 5 </since_tizen>
1141         public Vector3 NaturalSize
1142         {
1143             get
1144             {
1145                 Vector3 ret = new Vector3(Interop.Actor.GetNaturalSize(SwigCPtr), true);
1146                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
1147                 return ret;
1148             }
1149         }
1150
1151         /// <summary>
1152         /// Returns the natural size (Size2D) of the view.
1153         /// </summary>
1154         /// <remarks>
1155         /// Deriving classes stipulate the natural size and by default a view has a zero natural size.
1156         /// </remarks>
1157         /// <since_tizen> 4 </since_tizen>
1158         public Size2D NaturalSize2D
1159         {
1160             get
1161             {
1162                 Vector3 temp = new Vector3(Interop.Actor.GetNaturalSize(SwigCPtr), true);
1163                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
1164
1165                 Size2D sz = new Size2D((int)temp.Width, (int)temp.Height);
1166                 temp.Dispose();
1167                 return sz;
1168             }
1169         }
1170
1171         /// <summary>
1172         /// Gets or sets the origin of a view within its parent's area.<br />
1173         /// This is expressed in unit coordinates, such that (0.0, 0.0, 0.5) is the top-left corner of the parent, and (1.0, 1.0, 0.5) is the bottom-right corner.<br />
1174         /// The default parent-origin is ParentOrigin.TopLeft (0.0, 0.0, 0.5).<br />
1175         /// A view's position is the distance between this origin and the view's anchor-point.<br />
1176         /// </summary>
1177         /// <pre>The view has been initialized.</pre>
1178         /// <since_tizen> 3 </since_tizen>
1179         public Position ParentOrigin
1180         {
1181             get
1182             {
1183                 Position tmp = (Position)GetValue(ParentOriginProperty);
1184                 return new Position(OnParentOriginChanged, tmp.X, tmp.Y, tmp.Z);
1185             }
1186             set
1187             {
1188                 SetValue(ParentOriginProperty, value);
1189                 NotifyPropertyChanged();
1190             }
1191         }
1192
1193         /// <summary>
1194         /// Gets or sets the anchor-point of a view.<br />
1195         /// This is expressed in unit coordinates, such that (0.0, 0.0, 0.5) is the top-left corner of the view, and (1.0, 1.0, 0.5) is the bottom-right corner.<br />
1196         /// The default pivot point is PivotPoint.Center (0.5, 0.5, 0.5).<br />
1197         /// A view position is the distance between its parent-origin and this anchor-point.<br />
1198         /// A view's orientation is the rotation from its default orientation, the rotation is centered around its anchor-point.<br />
1199         /// <pre>The view has been initialized.</pre>
1200         /// </summary>
1201         /// <remarks>
1202         /// The property cascade chaining set is possible. For example, this (view.PivotPoint.X = 0.1f;) is possible.
1203         /// </remarks>
1204         /// <since_tizen> 3 </since_tizen>
1205         public Position PivotPoint
1206         {
1207             get
1208             {
1209                 Position tmp = (Position)GetValue(PivotPointProperty);
1210                 return new Position(OnPivotPointChanged, tmp.X, tmp.Y, tmp.Z);
1211             }
1212             set
1213             {
1214                 SetValue(PivotPointProperty, value);
1215                 NotifyPropertyChanged();
1216             }
1217         }
1218
1219         /// <summary>
1220         /// Gets or sets the size width of the view.
1221         /// </summary>
1222         /// <remarks>
1223         /// <para>
1224         /// Animatable - This property can be animated using <c>Animation</c> class.
1225         /// </para>
1226         /// </remarks>
1227         /// <since_tizen> 3 </since_tizen>
1228         public float SizeWidth
1229         {
1230             get
1231             {
1232                 return (float)GetValue(SizeWidthProperty);
1233             }
1234             set
1235             {
1236                 SetValue(SizeWidthProperty, value);
1237                 NotifyPropertyChanged();
1238             }
1239         }
1240
1241         /// <summary>
1242         /// Gets or sets the size height of the view.
1243         /// </summary>
1244         /// <remarks>
1245         /// <para>
1246         /// Animatable - This property can be animated using <c>Animation</c> class.
1247         /// </para>
1248         /// </remarks>
1249         /// <since_tizen> 3 </since_tizen>
1250         public float SizeHeight
1251         {
1252             get
1253             {
1254                 return (float)GetValue(SizeHeightProperty);
1255             }
1256             set
1257             {
1258                 SetValue(SizeHeightProperty, value);
1259                 NotifyPropertyChanged();
1260             }
1261         }
1262
1263         /// <summary>
1264         /// Gets or sets the position of the view.<br />
1265         /// By default, sets the position vector between the parent origin and pivot point (default).<br />
1266         /// If the position inheritance is disabled, sets the world position.<br />
1267         /// </summary>
1268         /// <remarks>
1269         /// <para>
1270         /// Animatable - This property can be animated using <c>Animation</c> class.
1271         /// </para>
1272         /// The property cascade chaining set is possible. For example, this (view.Position.X = 1.0f;) is possible.
1273         /// </remarks>
1274         /// <since_tizen> 3 </since_tizen>
1275         public Position Position
1276         {
1277             get
1278             {
1279                 Position tmp = (Position)GetValue(PositionProperty);
1280                 return new Position(OnPositionChanged, tmp.X, tmp.Y, tmp.Z);
1281             }
1282             set
1283             {
1284                 SetValue(PositionProperty, value);
1285                 NotifyPropertyChanged();
1286             }
1287         }
1288
1289         /// <summary>
1290         /// Gets or sets the position X of the view.
1291         /// </summary>
1292         /// <remarks>
1293         /// <para>
1294         /// Animatable - This property can be animated using <c>Animation</c> class.
1295         /// </para>
1296         /// </remarks>
1297         /// <since_tizen> 3 </since_tizen>
1298         public float PositionX
1299         {
1300             get
1301             {
1302                 return (float)GetValue(PositionXProperty);
1303             }
1304             set
1305             {
1306                 SetValue(PositionXProperty, value);
1307                 NotifyPropertyChanged();
1308             }
1309         }
1310
1311         /// <summary>
1312         /// Gets or sets the position Y of the view.
1313         /// </summary>
1314         /// <remarks>
1315         /// <para>
1316         /// Animatable - This property can be animated using <c>Animation</c> class.
1317         /// </para>
1318         /// </remarks>
1319         /// <since_tizen> 3 </since_tizen>
1320         public float PositionY
1321         {
1322             get
1323             {
1324                 return (float)GetValue(PositionYProperty);
1325             }
1326             set
1327             {
1328                 SetValue(PositionYProperty, value);
1329                 NotifyPropertyChanged();
1330             }
1331         }
1332
1333         /// <summary>
1334         /// Gets or sets the position Z of the view.
1335         /// </summary>
1336         /// <remarks>
1337         /// <para>
1338         /// Animatable - This property can be animated using <c>Animation</c> class.
1339         /// </para>
1340         /// </remarks>
1341         /// <since_tizen> 3 </since_tizen>
1342         public float PositionZ
1343         {
1344             get
1345             {
1346                 return (float)GetValue(PositionZProperty);
1347             }
1348             set
1349             {
1350                 SetValue(PositionZProperty, value);
1351                 NotifyPropertyChanged();
1352             }
1353         }
1354
1355         /// <summary>
1356         /// Gets or sets the world position of the view.
1357         /// </summary>
1358         /// <since_tizen> 3 </since_tizen>
1359         public Vector3 WorldPosition
1360         {
1361             get
1362             {
1363                 Vector3 temp = new Vector3(0.0f, 0.0f, 0.0f);
1364                 var pValue = GetProperty(View.Property.WorldPosition);
1365                 pValue.Get(temp);
1366                 pValue.Dispose();
1367                 return temp;
1368             }
1369         }
1370
1371         /// <summary>
1372         /// Gets or sets the orientation of the view.<br />
1373         /// The view's orientation is the rotation from its default orientation, and the rotation is centered around its anchor-point.<br />
1374         /// </summary>
1375         /// <remarks>
1376         /// <para>
1377         /// This is an asynchronous method.
1378         /// </para>
1379         /// <para>
1380         /// Animatable - This property can be animated using <c>Animation</c> class.
1381         /// </para>
1382         /// </remarks>
1383         /// <since_tizen> 3 </since_tizen>
1384         public Rotation Orientation
1385         {
1386             get
1387             {
1388                 return (Rotation)GetValue(OrientationProperty);
1389             }
1390             set
1391             {
1392                 SetValue(OrientationProperty, value);
1393                 NotifyPropertyChanged();
1394             }
1395         }
1396
1397         /// <summary>
1398         /// Gets or sets the world orientation of the view.<br />
1399         /// </summary>
1400         /// <since_tizen> 3 </since_tizen>
1401         public Rotation WorldOrientation
1402         {
1403             get
1404             {
1405                 Rotation temp = new Rotation();
1406                 var pValue = GetProperty(View.Property.WorldOrientation);
1407                 pValue.Get(temp);
1408                 pValue.Dispose();
1409                 return temp;
1410             }
1411         }
1412
1413         /// <summary>
1414         /// Gets or sets the scale factor applied to the view.<br />
1415         /// </summary>
1416         /// <remarks>
1417         /// <para>
1418         /// Animatable - This property can be animated using <c>Animation</c> class.
1419         /// </para>
1420         /// The property cascade chaining set is possible. For example, this (view.Scale.X = 0.1f;) is possible.
1421         /// </remarks>
1422         /// <since_tizen> 3 </since_tizen>
1423         public Vector3 Scale
1424         {
1425             get
1426             {
1427                 Vector3 temp = (Vector3)GetValue(ScaleProperty);
1428                 return new Vector3(OnScaleChanged, temp.X, temp.Y, temp.Z);
1429             }
1430             set
1431             {
1432                 SetValue(ScaleProperty, value);
1433                 NotifyPropertyChanged();
1434             }
1435         }
1436
1437         /// <summary>
1438         /// Gets or sets the scale X factor applied to the view.
1439         /// </summary>
1440         /// <remarks>
1441         /// <para>
1442         /// Animatable - This property can be animated using <c>Animation</c> class.
1443         /// </para>
1444         /// </remarks>
1445         /// <since_tizen> 3 </since_tizen>
1446         public float ScaleX
1447         {
1448             get
1449             {
1450                 return (float)GetValue(ScaleXProperty);
1451             }
1452             set
1453             {
1454                 SetValue(ScaleXProperty, value);
1455                 NotifyPropertyChanged();
1456             }
1457         }
1458
1459         /// <summary>
1460         /// Gets or sets the scale Y factor applied to the view.
1461         /// </summary>
1462         /// <remarks>
1463         /// <para>
1464         /// Animatable - This property can be animated using <c>Animation</c> class.
1465         /// </para>
1466         /// </remarks>
1467         /// <since_tizen> 3 </since_tizen>
1468         public float ScaleY
1469         {
1470             get
1471             {
1472                 return (float)GetValue(ScaleYProperty);
1473             }
1474             set
1475             {
1476                 SetValue(ScaleYProperty, value);
1477                 NotifyPropertyChanged();
1478             }
1479         }
1480
1481         /// <summary>
1482         /// Gets or sets the scale Z factor applied to the view.
1483         /// </summary>
1484         /// <remarks>
1485         /// <para>
1486         /// Animatable - This property can be animated using <c>Animation</c> class.
1487         /// </para>
1488         /// </remarks>
1489         /// <since_tizen> 3 </since_tizen>
1490         public float ScaleZ
1491         {
1492             get
1493             {
1494                 return (float)GetValue(ScaleZProperty);
1495             }
1496             set
1497             {
1498                 SetValue(ScaleZProperty, value);
1499                 NotifyPropertyChanged();
1500             }
1501         }
1502
1503         /// <summary>
1504         /// Gets the world scale of the view.
1505         /// </summary>
1506         /// <since_tizen> 3 </since_tizen>
1507         public Vector3 WorldScale
1508         {
1509             get
1510             {
1511                 Vector3 temp = new Vector3(0.0f, 0.0f, 0.0f);
1512                 var pValue = GetProperty(View.Property.WorldScale);
1513                 pValue.Get(temp);
1514                 pValue.Dispose();
1515                 return temp;
1516             }
1517         }
1518
1519         /// <summary>
1520         /// Retrieves the visibility flag of the view.
1521         /// </summary>
1522         /// <remarks>
1523         /// <para>
1524         /// If the view is not visible, then the view and its children will not be rendered.
1525         /// This is regardless of the individual visibility values of the children, i.e., the view will only be rendered if all of its parents have visibility set to true.
1526         /// </para>
1527         /// <para>
1528         /// Animatable - This property can be animated using <c>Animation</c> class.
1529         /// </para>
1530         /// </remarks>
1531         /// <since_tizen> 3 </since_tizen>
1532         public bool Visibility
1533         {
1534             get
1535             {
1536                 bool temp = false;
1537                 var pValue = GetProperty(View.Property.VISIBLE);
1538                 pValue.Get(out temp);
1539                 pValue.Dispose();
1540                 return temp;
1541             }
1542         }
1543
1544         /// <summary>
1545         /// Gets the view's world color.
1546         /// </summary>
1547         /// <since_tizen> 3 </since_tizen>
1548         public Vector4 WorldColor
1549         {
1550             get
1551             {
1552                 Vector4 temp = new Vector4(0.0f, 0.0f, 0.0f, 0.0f);
1553                 var pValue = GetProperty(View.Property.WorldColor);
1554                 pValue.Get(temp);
1555                 pValue.Dispose();
1556                 return temp;
1557             }
1558         }
1559
1560         /// <summary>
1561         /// Gets or sets the view's name.
1562         /// </summary>
1563         /// <since_tizen> 3 </since_tizen>
1564         public string Name
1565         {
1566             get
1567             {
1568                 return (string)GetValue(NameProperty);
1569             }
1570             set
1571             {
1572                 SetValue(NameProperty, value);
1573                 NotifyPropertyChanged();
1574             }
1575         }
1576
1577         /// <summary>
1578         /// Get the number of children held by the view.
1579         /// </summary>
1580         /// <since_tizen> 3 </since_tizen>
1581         public new uint ChildCount
1582         {
1583             get
1584             {
1585                 return Convert.ToUInt32(Children.Count);
1586             }
1587         }
1588
1589         /// <summary>
1590         /// Gets the view's ID.
1591         /// Read-only
1592         /// </summary>
1593         /// <since_tizen> 3 </since_tizen>
1594         public uint ID
1595         {
1596             get
1597             {
1598                 return GetId();
1599             }
1600         }
1601
1602         /// <summary>
1603         /// Gets or sets the status of whether the view should emit touch or hover signals.
1604         /// </summary>
1605         /// <since_tizen> 3 </since_tizen>
1606         public bool Sensitive
1607         {
1608             get
1609             {
1610                 return (bool)GetValue(SensitiveProperty);
1611             }
1612             set
1613             {
1614                 SetValue(SensitiveProperty, value);
1615                 NotifyPropertyChanged();
1616             }
1617         }
1618
1619         /// <summary>
1620         /// Gets or sets the status of whether the view should receive a notification when touch or hover motion events leave the boundary of the view.
1621         /// </summary>
1622         /// <since_tizen> 3 </since_tizen>
1623         public bool LeaveRequired
1624         {
1625             get
1626             {
1627                 return (bool)GetValue(LeaveRequiredProperty);
1628             }
1629             set
1630             {
1631                 SetValue(LeaveRequiredProperty, value);
1632                 NotifyPropertyChanged();
1633             }
1634         }
1635
1636         /// <summary>
1637         /// Gets or sets the status of whether a child view inherits it's parent's orientation.
1638         /// </summary>
1639         /// <since_tizen> 3 </since_tizen>
1640         public bool InheritOrientation
1641         {
1642             get
1643             {
1644                 return (bool)GetValue(InheritOrientationProperty);
1645             }
1646             set
1647             {
1648                 SetValue(InheritOrientationProperty, value);
1649                 NotifyPropertyChanged();
1650             }
1651         }
1652
1653         /// <summary>
1654         /// Gets or sets the status of whether a child view inherits it's parent's scale.
1655         /// </summary>
1656         /// <since_tizen> 3 </since_tizen>
1657         public bool InheritScale
1658         {
1659             get
1660             {
1661                 return (bool)GetValue(InheritScaleProperty);
1662             }
1663             set
1664             {
1665                 SetValue(InheritScaleProperty, value);
1666                 NotifyPropertyChanged();
1667             }
1668         }
1669
1670         /// <summary>
1671         /// Gets or sets the status of how the view and its children should be drawn.<br />
1672         /// Not all views are renderable, but DrawMode can be inherited from any view.<br />
1673         /// If an object is in a 3D layer, it will be depth-tested against other objects in the world, i.e., it may be obscured if other objects are in front.<br />
1674         /// If DrawMode.Overlay2D is used, the view and its children will be drawn as a 2D overlay.<br />
1675         /// Overlay views are drawn in a separate pass, after all non-overlay views within the layer.<br />
1676         /// For overlay views, the drawing order is with respect to tree levels of views, and depth-testing will not be used.<br />
1677         /// </summary>
1678         /// <since_tizen> 3 </since_tizen>
1679         public DrawModeType DrawMode
1680         {
1681             get
1682             {
1683                 return (DrawModeType)GetValue(DrawModeProperty);
1684             }
1685             set
1686             {
1687                 SetValue(DrawModeProperty, value);
1688                 NotifyPropertyChanged();
1689             }
1690         }
1691
1692         /// <summary>
1693         /// Gets or sets the relative to parent size factor of the view.<br />
1694         /// This factor is only used when ResizePolicyType is set to either: ResizePolicyType.SizeRelativeToParent or ResizePolicyType.SizeFixedOffsetFromParent.<br />
1695         /// This view's size is set to the view's size multiplied by or added to this factor, depending on ResizePolicyType.<br />
1696         /// </summary>
1697         /// <remarks>
1698         /// The property cascade chaining set is possible. For example, this (view.DecorationBoundingBox.X = 0.1f;) is possible.
1699         /// </remarks>
1700         /// <since_tizen> 3 </since_tizen>
1701         [Obsolete("Deprecated. Since Tizen.NUI.ResizePolicyType is deprecated, SizeModeFactor is no longer supported. Instead, please use parent view having Tizen.NUI.RelativeLayout as its Layout.")]
1702         public Vector3 SizeModeFactor
1703         {
1704             get
1705             {
1706                 Vector3 temp = (Vector3)GetValue(SizeModeFactorProperty);
1707                 return new Vector3(OnSizeModeFactorChanged, temp.X, temp.Y, temp.Z);
1708             }
1709             set
1710             {
1711                 SetValue(SizeModeFactorProperty, value);
1712                 NotifyPropertyChanged();
1713             }
1714         }
1715
1716         /// <summary>
1717         /// Gets or sets the width resize policy to be used.
1718         /// </summary>
1719         /// <since_tizen> 3 </since_tizen>
1720         [Obsolete("Deprecated. Please set Layout and use WidthSpecification instead.")]
1721         public ResizePolicyType WidthResizePolicy
1722         {
1723             get
1724             {
1725                 return (ResizePolicyType)GetValue(WidthResizePolicyProperty);
1726             }
1727             set
1728             {
1729                 SetValue(WidthResizePolicyProperty, value);
1730                 NotifyPropertyChanged();
1731             }
1732         }
1733
1734         /// <summary>
1735         /// Gets or sets the height resize policy to be used.
1736         /// </summary>
1737         /// <since_tizen> 3 </since_tizen>
1738         [Obsolete("Deprecated. Please set Layout and use HeightSpecification instead.")]
1739         public ResizePolicyType HeightResizePolicy
1740         {
1741             get
1742             {
1743                 return (ResizePolicyType)GetValue(HeightResizePolicyProperty);
1744             }
1745             set
1746             {
1747                 SetValue(HeightResizePolicyProperty, value);
1748                 NotifyPropertyChanged();
1749             }
1750         }
1751
1752         /// <summary>
1753         /// Gets or sets the policy to use when setting size with size negotiation.<br />
1754         /// Defaults to SizeScalePolicyType.UseSizeSet.<br />
1755         /// </summary>
1756         /// <since_tizen> 3 </since_tizen>
1757         public SizeScalePolicyType SizeScalePolicy
1758         {
1759             get
1760             {
1761                 return (SizeScalePolicyType)GetValue(SizeScalePolicyProperty);
1762             }
1763             set
1764             {
1765                 SetValue(SizeScalePolicyProperty, value);
1766                 NotifyPropertyChanged();
1767             }
1768         }
1769
1770         /// <summary>
1771         ///  Gets or sets the status of whether the width size is dependent on the height size.
1772         /// </summary>
1773         /// <since_tizen> 3 </since_tizen>
1774         public bool WidthForHeight
1775         {
1776             get
1777             {
1778                 return (bool)GetValue(WidthForHeightProperty);
1779             }
1780             set
1781             {
1782                 SetValue(WidthForHeightProperty, value);
1783                 NotifyPropertyChanged();
1784             }
1785         }
1786
1787         /// <summary>
1788         /// Gets or sets the status of whether the height size is dependent on the width size.
1789         /// </summary>
1790         /// <since_tizen> 3 </since_tizen>
1791         public bool HeightForWidth
1792         {
1793             get
1794             {
1795                 return (bool)GetValue(HeightForWidthProperty);
1796             }
1797             set
1798             {
1799                 SetValue(HeightForWidthProperty, value);
1800                 NotifyPropertyChanged();
1801             }
1802         }
1803
1804         /// <summary>
1805         /// Gets or sets the padding for use in layout.
1806         /// </summary>
1807         /// <remarks>
1808         /// The property cascade chaining set is possible. For example, this (view.Padding.X = 0.1f;) is possible.
1809         /// </remarks>
1810         /// <since_tizen> 5 </since_tizen>
1811         public Extents Padding
1812         {
1813             get
1814             {
1815                 // If View has a Layout then padding in stored in the base Layout class
1816                 if (Layout != null)
1817                 {
1818                     return Layout.Padding;
1819                 }
1820                 else
1821                 {
1822                     Extents temp = (Extents)GetValue(PaddingProperty);
1823                     return new Extents(OnPaddingChanged, temp.Start, temp.End, temp.Top, temp.Bottom);
1824                 }
1825                 // Two return points to prevent creating a zeroed Extent native object before assignment
1826             }
1827             set
1828             {
1829                 Extents padding = value;
1830                 if (Layout != null)
1831                 {
1832                     // Layout set so store Padding in LayoutItem instead of in View.
1833                     // If View stores the Padding value then Legacy Size Negotiation will overwrite
1834                     // the position and sizes measure in the Layouting.
1835                     Layout.Padding = value;
1836                     // If Layout is a LayoutItem then it could be a View that handles it's own padding.
1837                     // Let the View keeps it's padding.  Still store Padding in Layout to reduce code paths.
1838                     if (typeof(LayoutGroup).IsAssignableFrom(Layout.GetType())) // If a Layout container of some kind.
1839                     {
1840                         padding = new Extents(0, 0, 0, 0); // Reset value stored in View.
1841                     }
1842                 }
1843
1844                 SetValue(PaddingProperty, padding);
1845                 NotifyPropertyChanged();
1846             }
1847         }
1848
1849         /// <summary>
1850         /// Gets or sets the minimum size the view can be assigned in size negotiation.
1851         /// </summary>
1852         /// <exception cref="ArgumentNullException"> Thrown when value is null. </exception>
1853         /// <remarks>
1854         /// The property cascade chaining set is possible. For example, this (view.MinimumSize.Width = 1;) is possible.
1855         /// </remarks>
1856         /// <since_tizen> 3 </since_tizen>
1857         public Size2D MinimumSize
1858         {
1859             get
1860             {
1861                 Size2D tmp = (Size2D)GetValue(MinimumSizeProperty);
1862                 return new Size2D(OnMinimumSizeChanged, tmp.Width, tmp.Height);
1863             }
1864             set
1865             {
1866                 if (value == null)
1867                 {
1868                     throw new ArgumentNullException(nameof(value));
1869                 }
1870                 if (layout != null)
1871                 {
1872                     // Note: it only works if minimum size is >= than natural size.
1873                     // To force the size it should be done through the width&height spec or Size2D.
1874                     layout.MinimumWidth = new Tizen.NUI.LayoutLength(value.Width);
1875                     layout.MinimumHeight = new Tizen.NUI.LayoutLength(value.Height);
1876                     layout.RequestLayout();
1877                 }
1878                 SetValue(MinimumSizeProperty, value);
1879                 NotifyPropertyChanged();
1880             }
1881         }
1882
1883         /// <summary>
1884         /// Gets or sets the maximum size the view can be assigned in size negotiation.
1885         /// </summary>
1886         /// <remarks>
1887         /// The property cascade chaining set is possible. For example, this (view.MaximumSize.Width = 1;) is possible.
1888         /// </remarks>
1889         /// <since_tizen> 3 </since_tizen>
1890         public Size2D MaximumSize
1891         {
1892             get
1893             {
1894                 Size2D tmp = (Size2D)GetValue(MaximumSizeProperty);
1895                 return new Size2D(OnMaximumSizeChanged, tmp.Width, tmp.Height);
1896             }
1897             set
1898             {
1899                 // We don't have Layout.Maximum(Width|Height) so we cannot apply it to layout.
1900                 // MATCH_PARENT spec + parent container size can be used to limit
1901                 if (layout != null)
1902                 {
1903                     layout.RequestLayout();
1904                 }
1905                 SetValue(MaximumSizeProperty, value);
1906                 NotifyPropertyChanged();
1907             }
1908         }
1909
1910         /// <summary>
1911         /// Gets or sets whether a child view inherits it's parent's position.<br />
1912         /// Default is to inherit.<br />
1913         /// Switching this off means that using position sets the view's world position, i.e., translates from the world origin (0,0,0) to the pivot point of the view.<br />
1914         /// </summary>
1915         /// <since_tizen> 3 </since_tizen>
1916         public bool InheritPosition
1917         {
1918             get
1919             {
1920                 return (bool)GetValue(InheritPositionProperty);
1921             }
1922             set
1923             {
1924                 SetValue(InheritPositionProperty, value);
1925                 NotifyPropertyChanged();
1926             }
1927         }
1928
1929         /// <summary>
1930         /// Gets or sets the clipping behavior (mode) of it's children.
1931         /// </summary>
1932         /// <since_tizen> 3 </since_tizen>
1933         public ClippingModeType ClippingMode
1934         {
1935             get
1936             {
1937                 return (ClippingModeType)GetValue(ClippingModeProperty);
1938             }
1939             set
1940             {
1941                 SetValue(ClippingModeProperty, value);
1942                 NotifyPropertyChanged();
1943             }
1944         }
1945
1946         /// <summary>
1947         /// Gets the number of renderers held by the view.
1948         /// </summary>
1949         /// <since_tizen> 3 </since_tizen>
1950         public uint RendererCount
1951         {
1952             get
1953             {
1954                 return GetRendererCount();
1955             }
1956         }
1957
1958         /// <summary>
1959         /// Deprecated in API5; Will be removed in API8. Please use PivotPoint instead!
1960         /// </summary>
1961         /// <remarks>
1962         /// The property cascade chaining set is possible. For example, this (view.AnchorPoint.X = 0.1f;) is possible.
1963         /// </remarks>
1964         /// <since_tizen> 3 </since_tizen>
1965         [Obsolete("Deprecated in API5; Will be removed in API8. Please use PivotPoint instead! " +
1966             "Like: " +
1967             "View view = new View(); " +
1968             "view.PivotPoint = PivotPoint.Center; " +
1969             "view.PositionUsesPivotPoint = true;")]
1970         [EditorBrowsable(EditorBrowsableState.Never)]
1971         public Position AnchorPoint
1972         {
1973             get
1974             {
1975                 Position temp = new Position(0.0f, 0.0f, 0.0f);
1976                 var pValue = GetProperty(View.Property.AnchorPoint);
1977                 pValue.Get(temp);
1978                 pValue.Dispose();
1979                 Position ret = new Position(OnAnchorPointChanged, temp.X, temp.Y, temp.Z);
1980                 temp.Dispose();
1981                 return ret;
1982             }
1983             set
1984             {
1985                 var temp = new Tizen.NUI.PropertyValue(value);
1986                 SetProperty(View.Property.AnchorPoint, temp);
1987                 temp.Dispose();
1988                 NotifyPropertyChanged();
1989             }
1990         }
1991
1992         /// <summary>
1993         /// Sets the size of a view for the width, the height and the depth.<br />
1994         /// Geometry can be scaled to fit within this area.<br />
1995         /// This does not interfere with the view's scale factor.<br />
1996         /// The views default depth is the minimum of width and height.<br />
1997         /// </summary>
1998         /// <remarks>
1999         /// <para>
2000         /// Animatable - This property can be animated using <c>Animation</c> class.
2001         /// </para>
2002         /// The property cascade chaining set is possible. For example, this (view.Size.Width = 1.0f;) is possible.
2003         /// </remarks>
2004         /// <since_tizen> 5 </since_tizen>
2005         public Size Size
2006         {
2007             get
2008             {
2009                 Size tmp = (Size)GetValue(SizeProperty);
2010                 return new Size(OnSizeChanged, tmp.Width, tmp.Height, tmp.Depth);
2011             }
2012             set
2013             {
2014                 SetValue(SizeProperty, value);
2015                 NotifyPropertyChanged();
2016             }
2017         }
2018
2019         /// <summary>
2020         /// Deprecated in API5; Will be removed in API8. Please use 'Container GetParent() for derived class' instead!
2021         /// </summary>
2022         /// <since_tizen> 3 </since_tizen>
2023         [Obsolete("Deprecated in API5; Will be removed in API8. Please use 'Container GetParent() for derived class' instead! " +
2024             "Like: " +
2025             "Container parent =  view.GetParent(); " +
2026             "View view = parent as View;")]
2027         [EditorBrowsable(EditorBrowsableState.Never)]
2028         public new View Parent
2029         {
2030             get
2031             {
2032                 View ret;
2033                 IntPtr cPtr = Interop.Actor.GetParent(SwigCPtr);
2034                 HandleRef CPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
2035                 BaseHandle basehandle = Registry.GetManagedBaseHandleFromNativePtr(CPtr.Handle);
2036
2037                 if (basehandle is Layer layer)
2038                 {
2039                     ret = new View(Layer.getCPtr(layer).Handle, false);
2040                     NUILog.Error("This Parent property is deprecated, should do not be used");
2041                 }
2042                 else
2043                 {
2044                     ret = basehandle as View;
2045                 }
2046
2047                 Interop.BaseHandle.DeleteBaseHandle(CPtr);
2048                 CPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
2049
2050                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
2051                 return ret;
2052             }
2053         }
2054
2055         /// <summary>
2056         /// Gets/Sets whether inherit parent's the layout Direction.
2057         /// </summary>
2058         /// <since_tizen> 4 </since_tizen>
2059         public bool InheritLayoutDirection
2060         {
2061             get
2062             {
2063                 return (bool)GetValue(InheritLayoutDirectionProperty);
2064             }
2065             set
2066             {
2067                 SetValue(InheritLayoutDirectionProperty, value);
2068                 NotifyPropertyChanged();
2069             }
2070         }
2071
2072         /// <summary>
2073         /// Gets/Sets the layout Direction.
2074         /// </summary>
2075         /// <since_tizen> 4 </since_tizen>
2076         public ViewLayoutDirectionType LayoutDirection
2077         {
2078             get
2079             {
2080                 return (ViewLayoutDirectionType)GetValue(LayoutDirectionProperty);
2081             }
2082             set
2083             {
2084                 SetValue(LayoutDirectionProperty, value);
2085                 NotifyPropertyChanged();
2086                 layout?.RequestLayout();
2087             }
2088         }
2089
2090         /// <summary>
2091         /// Gets or sets the Margin for use in layout.
2092         /// </summary>
2093         /// <remarks>
2094         /// Margin property is supported by Layout algorithms and containers.
2095         /// Please Set Layout if you want to use Margin property.
2096         /// The property cascade chaining set is possible. For example, this (view.Margin.X = 0.1f;) is possible.
2097         /// </remarks>
2098         /// <since_tizen> 4 </since_tizen>
2099         public Extents Margin
2100         {
2101             get
2102             {
2103                 // If View has a Layout then margin is stored in Layout.
2104                 if (Layout != null)
2105                 {
2106                     return Layout.Margin;
2107                 }
2108                 else
2109                 {
2110                     // If Layout not set then return margin stored in View.
2111                     Extents temp = (Extents)GetValue(MarginProperty);
2112                     return new Extents(OnMarginChanged, temp.Start, temp.End, temp.Top, temp.Bottom);
2113                 }
2114                 // Two return points to prevent creating a zeroed Extent native object before assignment
2115             }
2116             set
2117             {
2118                 if (Layout != null)
2119                 {
2120                     // Layout set so store Margin in LayoutItem instead of View.
2121                     // If View stores the Margin too then the Legacy Size Negotiation will
2122                     // overwrite the position and size values measured in the Layouting.
2123                     Layout.Margin = value;
2124                     SetValue(MarginProperty, new Extents(0, 0, 0, 0));
2125                     layout?.RequestLayout();
2126                 }
2127                 else
2128                 {
2129                     SetValue(MarginProperty, value);
2130                 }
2131                 NotifyPropertyChanged();
2132                 layout?.RequestLayout();
2133             }
2134         }
2135
2136         ///<summary>
2137         /// The required policy for this dimension, <see cref="LayoutParamPolicies"/> values or exact value.
2138         ///</summary>
2139         /// <example>
2140         /// <code>
2141         /// // matchParentView matches its size to its parent size.
2142         /// matchParentView.WidthSpecification = LayoutParamPolicies.MatchParent;
2143         /// matchParentView.HeightSpecification = LayoutParamPolicies.MatchParent;
2144         ///
2145         /// // wrapContentView wraps its children with their desired size.
2146         /// wrapContentView.WidthSpecification = LayoutParamPolicies.WrapContent;
2147         /// wrapContentView.HeightSpecification = LayoutParamPolicies.WrapContent;
2148         ///
2149         /// // exactSizeView shows itself with an exact size.
2150         /// exactSizeView.WidthSpecification = 100;
2151         /// exactSizeView.HeightSpecification = 100;
2152         /// </code>
2153         /// </example>
2154         /// <since_tizen> 6 </since_tizen>
2155         public int WidthSpecification
2156         {
2157             get
2158             {
2159                 return widthPolicy;
2160             }
2161             set
2162             {
2163                 if (value == widthPolicy)
2164                     return;
2165
2166                 widthPolicy = value;
2167                 if (widthPolicy >= 0)
2168                 {
2169                     if (heightPolicy >= 0) // Policy an exact value
2170                     {
2171                         // Create Size2D only both _widthPolicy and _heightPolicy are set.
2172                         Size2D = new Size2D(widthPolicy, heightPolicy);
2173                     }
2174                 }
2175                 layout?.RequestLayout();
2176             }
2177         }
2178
2179         ///<summary>
2180         /// The required policy for this dimension, <see cref="LayoutParamPolicies"/> values or exact value.
2181         ///</summary>
2182         /// <example>
2183         /// <code>
2184         /// // matchParentView matches its size to its parent size.
2185         /// matchParentView.WidthSpecification = LayoutParamPolicies.MatchParent;
2186         /// matchParentView.HeightSpecification = LayoutParamPolicies.MatchParent;
2187         ///
2188         /// // wrapContentView wraps its children with their desired size.
2189         /// wrapContentView.WidthSpecification = LayoutParamPolicies.WrapContent;
2190         /// wrapContentView.HeightSpecification = LayoutParamPolicies.WrapContent;
2191         ///
2192         /// // exactSizeView shows itself with an exact size.
2193         /// exactSizeView.WidthSpecification = 100;
2194         /// exactSizeView.HeightSpecification = 100;
2195         /// </code>
2196         /// </example>
2197         /// <since_tizen> 6 </since_tizen>
2198         public int HeightSpecification
2199         {
2200             get
2201             {
2202                 return heightPolicy;
2203             }
2204             set
2205             {
2206                 if (value == heightPolicy)
2207                     return;
2208
2209                 heightPolicy = value;
2210                 if (heightPolicy >= 0)
2211                 {
2212                     if (widthPolicy >= 0) // Policy an exact value
2213                     {
2214                         // Create Size2D only both _widthPolicy and _heightPolicy are set.
2215                         Size2D = new Size2D(widthPolicy, heightPolicy);
2216                     }
2217                 }
2218                 layout?.RequestLayout();
2219             }
2220         }
2221
2222         ///<summary>
2223         /// Gets the List of transitions for this View.
2224         ///</summary>
2225         /// <since_tizen> 6 </since_tizen>
2226         public Dictionary<TransitionCondition, TransitionList> LayoutTransitions
2227         {
2228             get
2229             {
2230                 if (layoutTransitions == null)
2231                 {
2232                     layoutTransitions = new Dictionary<TransitionCondition, TransitionList>();
2233                 }
2234                 return layoutTransitions;
2235             }
2236         }
2237
2238         ///<summary>
2239         /// Sets a layout transitions for this View.
2240         ///</summary>
2241         /// <exception cref="ArgumentNullException"> Thrown when value is null. </exception>
2242         /// <remarks>
2243         /// Use LayoutTransitions to receive a collection of LayoutTransitions set on the View.
2244         /// </remarks>
2245         /// <since_tizen> 6 </since_tizen>
2246         public LayoutTransition LayoutTransition
2247         {
2248             get
2249             {
2250                 return layoutTransition;
2251             }
2252             set
2253             {
2254                 if (value == null)
2255                 {
2256                     throw new global::System.ArgumentNullException(nameof(value));
2257                 }
2258                 if (layoutTransitions == null)
2259                 {
2260                     layoutTransitions = new Dictionary<TransitionCondition, TransitionList>();
2261                 }
2262
2263                 LayoutTransitionsHelper.AddTransitionForCondition(layoutTransitions, value.Condition, value, true);
2264
2265                 AttachTransitionsToChildren(value);
2266
2267                 layoutTransition = value;
2268             }
2269         }
2270
2271         /// <summary>
2272         /// Deprecated in API5; Will be removed in API8. Please use Padding instead.
2273         /// </summary>
2274         /// <remarks>
2275         /// The property cascade chaining set is possible. For example, this (view.DecorationBoundingBox.X = 0.1f;) is possible.
2276         /// </remarks>
2277         /// <since_tizen> 4 </since_tizen>
2278         [Obsolete("Deprecated in API5; Will be removed in API8. Please use Padding instead.")]
2279         [EditorBrowsable(EditorBrowsableState.Never)]
2280         public Extents PaddingEX
2281         {
2282             get
2283             {
2284                 Extents temp = new Extents(0, 0, 0, 0);
2285                 var pValue = GetProperty(View.Property.PADDING);
2286                 pValue.Get(temp);
2287                 pValue.Dispose();
2288                 Extents ret = new Extents(OnPaddingEXChanged, temp.Start, temp.End, temp.Top, temp.Bottom);
2289                 temp.Dispose();
2290                 return ret;
2291             }
2292             set
2293             {
2294                 var temp = new Tizen.NUI.PropertyValue(value);
2295                 SetProperty(View.Property.PADDING, temp);
2296                 temp.Dispose();
2297                 NotifyPropertyChanged();
2298                 layout?.RequestLayout();
2299             }
2300         }
2301
2302         /// <summary>
2303         /// The Color of View. This is an RGBA value.
2304         /// </summary>
2305         /// <remarks>
2306         /// <para>
2307         /// Animatable - This property can be animated using <c>Animation</c> class.
2308         /// </para>
2309         /// The property cascade chaining set is possible. For example, this (view.Color.X = 0.1f;) is possible.
2310         /// </remarks>
2311         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
2312         [EditorBrowsable(EditorBrowsableState.Never)]
2313         public Color Color
2314         {
2315             get
2316             {
2317                 Color temp = (Color)GetValue(ColorProperty);
2318                 return new Color(OnColorChanged, temp.R, temp.G, temp.B, temp.A);
2319             }
2320             set
2321             {
2322                 SetValue(ColorProperty, value);
2323                 NotifyPropertyChanged();
2324             }
2325         }
2326
2327         /// <summary>
2328         /// Set the layout on this View. Replaces any existing Layout.
2329         /// </summary>
2330         /// <remarks>
2331         /// If this Layout is set as null explicitly, it means this View itself and it's child Views will not use Layout anymore.
2332         /// </remarks>
2333         /// <since_tizen> 6 </since_tizen>
2334         public LayoutItem Layout
2335         {
2336             get
2337             {
2338                 return layout;
2339             }
2340             set
2341             {
2342                 // Do nothing if layout provided is already set on this View.
2343                 if (value == layout)
2344                 {
2345                     return;
2346                 }
2347
2348                 LayoutingDisabled = false;
2349                 layoutSet = true;
2350
2351                 // If new layout being set already has a owner then that owner receives a replacement default layout.
2352                 // First check if the layout to be set already has a owner.
2353                 if (value?.Owner != null)
2354                 {
2355                     // Previous owner of the layout gets a default layout as a replacement.
2356                     value.Owner.Layout = new AbsoluteLayout();
2357
2358                     // Copy Margin and Padding to replacement LayoutGroup.
2359                     if (value.Owner.Layout != null)
2360                     {
2361                         value.Owner.Layout.Margin = value.Margin;
2362                         value.Owner.Layout.Padding = value.Padding;
2363                     }
2364                 }
2365
2366                 // Copy Margin and Padding to new layout being set or restore padding and margin back to
2367                 // View if no replacement. Previously margin and padding values would have been moved from
2368                 // the View to the layout.
2369                 if (layout != null) // Existing layout
2370                 {
2371                     if (value != null)
2372                     {
2373                         // Existing layout being replaced so copy over margin and padding values.
2374                         value.Margin = layout.Margin;
2375                         value.Padding = layout.Padding;
2376                     }
2377                     else
2378                     {
2379                         // Layout not being replaced so restore margin and padding to View.
2380                         SetValue(MarginProperty, layout.Margin);
2381                         SetValue(PaddingProperty, layout.Padding);
2382                         NotifyPropertyChanged();
2383                     }
2384                 }
2385                 else
2386                 {
2387                     // First Layout to be added to the View hence copy
2388
2389                     // Do not try to set Margins or Padding on a null Layout (when a layout is being removed from a View)
2390                     if (value != null)
2391                     {
2392                         Extents margin = Margin;
2393                         Extents padding = Padding;
2394                         if (margin.Top != 0 || margin.Bottom != 0 || margin.Start != 0 || margin.End != 0)
2395                         {
2396                             // If View already has a margin set then store it in Layout instead.
2397                             value.Margin = margin;
2398                             SetValue(MarginProperty, new Extents(0, 0, 0, 0));
2399                             NotifyPropertyChanged();
2400                         }
2401
2402                         if (padding.Top != 0 || padding.Bottom != 0 || padding.Start != 0 || padding.End != 0)
2403                         {
2404                             // If View already has a padding set then store it in Layout instead.
2405                             value.Padding = padding;
2406
2407                             // If Layout is a LayoutItem then it could be a View that handles it's own padding.
2408                             // Let the View keeps it's padding.  Still store Padding in Layout to reduce code paths.
2409                             if (typeof(LayoutGroup).IsAssignableFrom(value.GetType()))
2410                             {
2411                                 SetValue(PaddingProperty, new Extents(0, 0, 0, 0));
2412                                 NotifyPropertyChanged();
2413                             }
2414                         }
2415                     }
2416                 }
2417
2418                 // Remove existing layout from it's parent layout group.
2419                 layout?.Unparent();
2420
2421                 value.SetPositionByLayout = !excludeLayouting;
2422
2423                 // Set layout to this view
2424                 SetLayout(value);
2425             }
2426         }
2427
2428         /// <summary>
2429         /// The weight of the View, used to share available space in a layout with siblings.
2430         /// </summary>
2431         /// <since_tizen> 6 </since_tizen>
2432         public float Weight
2433         {
2434             get
2435             {
2436                 return weight;
2437             }
2438             set
2439             {
2440                 weight = value;
2441                 layout?.RequestLayout();
2442             }
2443         }
2444
2445         /// <summary>
2446         ///  Whether to load the BackgroundImage synchronously.
2447         ///  If not specified, the default is false, i.e. the BackgroundImage is loaded asynchronously.
2448         ///  Note: For Normal Quad images only.
2449         /// </summary>
2450         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
2451         [EditorBrowsable(EditorBrowsableState.Never)]
2452         public bool BackgroundImageSynchronosLoading
2453         {
2454             get
2455             {
2456                 return backgroundImageSynchronosLoading;
2457             }
2458             set
2459             {
2460                 backgroundImageSynchronosLoading = value;
2461
2462                 string bgUrl = null;
2463                 var pValue = Background.Find(ImageVisualProperty.URL);
2464                 pValue?.Get(out bgUrl);
2465                 pValue?.Dispose();
2466
2467                 if (!string.IsNullOrEmpty(bgUrl))
2468                 {
2469                     PropertyMap bgMap = this.Background;
2470                     var temp = new PropertyValue(backgroundImageSynchronosLoading);
2471                     bgMap.Add("synchronousLoading", temp);
2472                     temp.Dispose();
2473                     Background = bgMap;
2474                 }
2475             }
2476         }
2477
2478         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
2479         [EditorBrowsable(EditorBrowsableState.Never)]
2480         public Vector2 UpdateSizeHint
2481         {
2482             get
2483             {
2484                 return (Vector2)GetValue(UpdateSizeHintProperty);
2485             }
2486             set
2487             {
2488                 SetValue(UpdateSizeHintProperty, value);
2489                 NotifyPropertyChanged();
2490             }
2491         }
2492
2493         /// <summary>
2494         /// Enable/Disable ControlState propagation for children.
2495         /// It is false by default.
2496         /// If the View needs to share ControlState with descendants, please set it true.
2497         /// Please note that, changing the value will also changes children's EnableControlStatePropagation value recursively.
2498         /// </summary>
2499         [EditorBrowsable(EditorBrowsableState.Never)]
2500         public bool EnableControlStatePropagation
2501         {
2502             get => themeData?.ControlStatePropagation ?? false;
2503             set
2504             {
2505                 if (EnableControlStatePropagation == value) return;
2506
2507                 if (themeData == null) themeData = new ThemeData();
2508
2509                 themeData.ControlStatePropagation = value;
2510
2511                 foreach (View child in Children)
2512                 {
2513                     child.EnableControlStatePropagation = value;
2514                 }
2515             }
2516         }
2517
2518         /// <summary>
2519         /// By default, it is false in View, true in Control.
2520         /// Note that if the value is true, the View will be a touch receptor.
2521         /// </summary>
2522         [EditorBrowsable(EditorBrowsableState.Never)]
2523         public bool EnableControlState
2524         {
2525             get
2526             {
2527                 return (bool)GetValue(EnableControlStateProperty);
2528             }
2529             set
2530             {
2531                 SetValue(EnableControlStateProperty, value);
2532             }
2533         }
2534
2535         /// <summary>
2536         /// Whether the actor grab all touches even if touch leaves its boundary.
2537         /// </summary>
2538         /// <returns>true, if it grab all touch after start</returns>
2539         [EditorBrowsable(EditorBrowsableState.Never)]
2540         public bool GrabTouchAfterLeave
2541         {
2542             get
2543             {
2544                 bool temp = false;
2545                 var pValue = GetProperty(View.Property.CaptureAllTouchAfterStart);
2546                 pValue.Get(out temp);
2547                 pValue.Dispose();
2548                 return temp;
2549             }
2550             set
2551             {
2552                 var temp = new Tizen.NUI.PropertyValue(value);
2553                 SetProperty(View.Property.CaptureAllTouchAfterStart, temp);
2554                 temp.Dispose();
2555                 NotifyPropertyChanged();
2556             }
2557         }
2558
2559         /// <summary>
2560         /// Determines which blend equation will be used to render renderers of this actor.
2561         /// </summary>
2562         /// <returns>blend equation enum currently assigned</returns>
2563         /// This will be public opened in next tizen after ACR done. Before ACR, need to be hidden as inhouse API.
2564         [EditorBrowsable(EditorBrowsableState.Never)]
2565         public BlendEquationType BlendEquation
2566         {
2567             get
2568             {
2569                 int temp = 0;
2570                 var pValue = GetProperty(View.Property.BlendEquation);
2571                 pValue.Get(out temp);
2572                 pValue.Dispose();
2573                 return (BlendEquationType)temp;
2574             }
2575             set
2576             {
2577                 var temp = new Tizen.NUI.PropertyValue((int)value);
2578                 SetProperty(View.Property.BlendEquation, temp);
2579                 temp.Dispose();
2580                 NotifyPropertyChanged();
2581             }
2582         }
2583
2584         /// <summary>
2585         /// If the value is true, the View will change its style as the theme changes.
2586         /// The default value is false in normal case but it can be true when the NUIApplication is created with <see cref="NUIApplication.ThemeOptions.ThemeChangeSensitive"/>.
2587         /// </summary>
2588         /// <since_tizen> 9 </since_tizen>
2589         public bool ThemeChangeSensitive
2590         {
2591             get => (bool)GetValue(ThemeChangeSensitiveProperty);
2592             set => SetValue(ThemeChangeSensitiveProperty, value);
2593         }
2594
2595         /// <summary>
2596         /// Create Style, it is abstract function and must be override.
2597         /// </summary>
2598         [EditorBrowsable(EditorBrowsableState.Never)]
2599         protected virtual ViewStyle CreateViewStyle()
2600         {
2601             return new ViewStyle();
2602         }
2603
2604         /// <summary>
2605         /// Called after the View's ControlStates changed.
2606         /// </summary>
2607         /// <param name="controlStateChangedInfo">The information including state changed variables.</param>
2608         [EditorBrowsable(EditorBrowsableState.Never)]
2609         protected virtual void OnControlStateChanged(ControlStateChangedEventArgs controlStateChangedInfo)
2610         {
2611         }
2612
2613         /// <summary>
2614         /// </summary>
2615         [EditorBrowsable(EditorBrowsableState.Never)]
2616         protected virtual void OnThemeChanged(object sender, ThemeChangedEventArgs e)
2617         {
2618             if (string.IsNullOrEmpty(styleName)) ApplyStyle(ThemeManager.GetUpdateStyleWithoutClone(GetType()));
2619             else ApplyStyle(ThemeManager.GetUpdateStyleWithoutClone(styleName));
2620         }
2621
2622         /// <summary>
2623         /// Apply style instance to the view.
2624         /// Basically it sets the bindable property to the value of the bindable property with same name in the style.
2625         /// </summary>
2626         /// <since_tizen> 9 </since_tizen>
2627         public virtual void ApplyStyle(ViewStyle viewStyle)
2628         {
2629             if (viewStyle == null || themeData?.viewStyle == viewStyle) return;
2630
2631             if (themeData == null) themeData = new ThemeData();
2632
2633             themeData.viewStyle = viewStyle;
2634
2635             if (viewStyle.DirtyProperties == null || viewStyle.DirtyProperties.Count == 0)
2636             {
2637                 // Nothing to apply
2638                 return;
2639             }
2640
2641             BindableProperty.GetBindablePropertysOfType(GetType(), out var bindablePropertyOfView);
2642
2643             if (bindablePropertyOfView == null)
2644             {
2645                 return;
2646             }
2647
2648             var dirtyStyleProperties = new BindableProperty[viewStyle.DirtyProperties.Count];
2649             viewStyle.DirtyProperties.CopyTo(dirtyStyleProperties);
2650
2651             foreach (var sourceProperty in dirtyStyleProperties)
2652             {
2653                 var sourceValue = viewStyle.GetValue(sourceProperty);
2654
2655                 if (sourceValue == null)
2656                 {
2657                     continue;
2658                 }
2659
2660                 bindablePropertyOfView.TryGetValue(sourceProperty.PropertyName, out var destinationProperty);
2661
2662                 if (destinationProperty != null)
2663                 {
2664                     SetValue(destinationProperty, sourceValue);
2665                 }
2666             }
2667         }
2668
2669         /// <summary>
2670         /// Get whether the View is culled or not.
2671         /// True means that the View is out of the view frustum.
2672         /// </summary>
2673         /// <remarks>
2674         /// Hidden-API (Inhouse-API).
2675         /// </remarks>
2676         [EditorBrowsable(EditorBrowsableState.Never)]
2677         public bool Culled
2678         {
2679             get
2680             {
2681                 bool temp = false;
2682                 var pValue = GetProperty(View.Property.Culled);
2683                 pValue.Get(out temp);
2684                 pValue.Dispose();
2685                 return temp;
2686             }
2687         }
2688
2689         /// <summary>
2690         /// Set or Get TransitionOptions for the page transition.
2691         /// This property is used to define how this view will be transitioned during Page switching.
2692         /// </summary>
2693         /// <since_tizen> 9 </since_tizen>
2694         public TransitionOptions TransitionOptions
2695         {
2696             set
2697             {
2698                 transitionOptions = value;
2699             }
2700             get
2701             {
2702                 return transitionOptions;
2703             }
2704         }
2705     }
2706 }