Tizen.NUI.Object.SetProperty(view.swigCPtr, View.Property.STYLE_NAME, new Tizen.NUI.PropertyValue((string)newValue));
}
},
- defaultValueCreator:(bindable) =>
+ defaultValueCreator:(bindable) =>
{
var view = (View)bindable;
string temp;
Size temp = new Size(0.0f, 0.0f, 0.0f);
Tizen.NUI.Object.GetProperty(view.swigCPtr, View.Property.SIZE).Get(temp);
Size2D size = new Size2D((int)temp.Width, (int)temp.Height);
- Console.WriteLine($"View Size2DProperty get width: {size.Width} height: {size.Height}");
return size;
});
/// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
{
Tizen.NUI.Object.SetProperty(view.swigCPtr, View.Property.POSITION_USES_ANCHOR_POINT, new Tizen.NUI.PropertyValue((bool)newValue));
}
- Console.WriteLine("View PositionUsesPivotPointProperty changed: oldValue: " + oldValue + ", newValue: " + newValue);
},
defaultValueCreator:(bindable) =>
{
{
Tizen.NUI.Object.SetProperty(view.swigCPtr, View.Property.PARENT_ORIGIN, new Tizen.NUI.PropertyValue((Position)newValue));
}
- Console.WriteLine("View ParentOriginProperty changed: oldValue: " + oldValue + ", newValue: " + newValue);
},
defaultValueCreator:(bindable) =>
{
{
Tizen.NUI.Object.SetProperty(view.swigCPtr, View.Property.ANCHOR_POINT, new Tizen.NUI.PropertyValue((Position)newValue));
}
- Console.WriteLine("View PivotPointProperty changed: oldValue: " + oldValue + ", newValue: " + newValue);
},
defaultValueCreator:(bindable) =>
{
{
Tizen.NUI.Object.SetProperty(view.swigCPtr, View.Property.SIZE_WIDTH, new Tizen.NUI.PropertyValue((float)newValue));
}
- Console.WriteLine("View SizeWidthProperty changed: oldValue: " + oldValue + ", newValue: " + newValue);
},
defaultValueCreator:(bindable) =>
{
var view = (View)bindable;
float temp = 0.0f;
Tizen.NUI.Object.GetProperty(view.swigCPtr, View.Property.SIZE_WIDTH).Get(out temp);
- Console.WriteLine($"View SizeWidthProperty get Value: {temp}");
return temp;
});
/// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
{
Tizen.NUI.Object.SetProperty(view.swigCPtr, View.Property.SIZE_HEIGHT, new Tizen.NUI.PropertyValue((float)newValue));
}
- Console.WriteLine("View SizeHeightProperty changed: oldValue: " + oldValue + ", newValue: " + newValue);
},
defaultValueCreator:(bindable) =>
{
var view = (View)bindable;
float temp = 0.0f;
Tizen.NUI.Object.GetProperty(view.swigCPtr, View.Property.SIZE_HEIGHT).Get(out temp);
- Console.WriteLine($"View SizeHeightProperty get Value: {temp}");
return temp;
});
/// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
defaultValueCreator:(bindable) =>
{
var view = (View)bindable;
- string temp;
+ int temp = 0;
if (Tizen.NUI.Object.GetProperty(view.swigCPtr, View.Property.CLIPPING_MODE).Get(out temp) == false)
{
NUILog.Error("ClippingMode get error!");
}
- switch (temp)
- {
- case "DISABLED": return ClippingModeType.Disabled;
- case "CLIP_CHILDREN": return ClippingModeType.ClipChildren;
- case "CLIP_TO_BOUNDING_BOX": return ClippingModeType.ClipToBoundingBox;
- default: return ClippingModeType.Disabled;
- }
+ return (ClippingModeType)temp;
});
/// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
[EditorBrowsable(EditorBrowsableState.Never)]
private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+ private bool layoutSet = false; // Flag to indicate if SetLayout was called or View was automatically given a Layout
+
internal View(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.View_SWIGUpcast(cPtr), cMemoryOwn)
{
swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
/// <since_tizen> 4 </since_tizen>
public override void Add(View child)
{
- Container oldParent = child.Parent;
+ if (null == child)
+ {
+ Tizen.Log.Fatal("NUI", "Child is null");
+ return;
+ }
+
+ Container oldParent = child.GetParent();
if (oldParent != this)
{
if (oldParent != null)
{
oldParent.Remove(child);
}
+ else
+ {
+ child.InternalParent = this;
+ }
+
+ if (layoutSet == true && child.Layout == null) // Only give children a layout if parent an explicit container
+ {
+ LayoutItem layoutItem = new LayoutItem();
+ child.Layout = layoutItem;
+ }
- LayoutItem layoutItem = new LayoutItem();
- child.Layout = layoutItem;
+ if (Layout)
+ {
+ Layout.LayoutChildren.Add(child.Layout);
+ }
NDalicPINVOKE.Actor_Add(swigCPtr, View.getCPtr(child));
if (NDalicPINVOKE.SWIGPendingException.Pending)
/// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
[EditorBrowsable(EditorBrowsableState.Never)]
public new event EventHandler<ChildRemovedEventArgs> ChildRemoved;
-
+
/// <summary>
/// Removes a child view from this View. If the view was not a child of this view, this is a no-op.
throw NDalicPINVOKE.SWIGPendingException.Retrieve();
Children.Remove(child);
+ child.InternalParent = null;
+
+ if (Layout)
+ {
+ if(child.Layout)
+ {
+ Layout.LayoutChildren.Remove(child.Layout);
+ }
+ }
if (ChildRemoved != null)
{
/// <since_tizen> 4 </since_tizen>
public override Container GetParent()
{
- //to fix memory leak issue, match the handle count with native side.
- IntPtr cPtr = NDalicPINVOKE.Actor_GetParent(swigCPtr);
- HandleRef CPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
- BaseHandle basehandle = Registry.GetManagedBaseHandleFromNativePtr(CPtr.Handle);
- NDalicPINVOKE.delete_BaseHandle(CPtr);
- CPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
-
- if (NDalicPINVOKE.SWIGPendingException.Pending)
- throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-
- return basehandle as Container;
+ return this.InternalParent as Container;
}
internal bool IsTopLevelView()
PageDown
}
- protected void InitXamlResource()
- {
- if (null != Application.Current)
- {
- Application.AddResourceChangedCallback(this, OnResourcesChanged);
- }
- }
-
/// <summary>
/// Creates a new instance of a view.
/// </summary>
/// <since_tizen> 3 </since_tizen>
public View() : this(NDalicPINVOKE.View_New(), true)
{
- InitXamlResource();
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
internal View(View uiControl) : this(NDalicPINVOKE.new_View__SWIG_1(View.getCPtr(uiControl)), true)
{
- InitXamlResource();
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
/// This does not interfere with the view's scale factor.<br />
/// The views default depth is the minimum of width and height.<br />
/// </summary>
+ /// <remarks>
+ /// This NUI object (Size2D) typed property can be configured by multiple cascade setting. <br />
+ /// For example, this code ( view.Size2D.Width = 100; view.Size2D.Height = 100; ) is equivalent to this ( view.Size2D = new Size2D(100, 100); ). <br />
+ /// Please note that this multi-cascade setting is especially possible for this NUI object (Size2D). <br />
+ /// This means by default others are impossible so it is recommended that NUI object typed properties are configured by their constructor with parameters. <br />
+ /// For example, this code is working fine : view.Scale = new Vector3( 2.0f, 1.5f, 0.0f); <br />
+ /// but this will not work! : view.Scale.X = 2.0f; view.Scale.Y = 1.5f; <br />
+ /// </remarks>
/// <since_tizen> 3 </since_tizen>
public Size2D Size2D
{
get
{
- return (Size2D)GetValue(Size2DProperty);
+ Size2D temp = (Size2D)GetValue(Size2DProperty);
+ return new Size2D(OnSize2DChanged, temp.Width, temp.Height);
}
set
{
SetValue(Size2DProperty, value);
+ SetProperty(LayoutItemWrapper.ChildProperty.WIDTH_SPECIFICATION, new Tizen.NUI.PropertyValue(value.Width));
+ SetProperty(LayoutItemWrapper.ChildProperty.HEIGHT_SPECIFICATION, new Tizen.NUI.PropertyValue(value.Height));
NotifyPropertyChanged();
}
}
+ private void OnSize2DChanged(int width, int height)
+ {
+ Size2D = new Size2D(width, height);
+ }
+
/// <summary>
/// Retrieves the size of the view.<br />
/// The coordinates are relative to the view's parent.<br />
/// By default, sets the position vector between the parent origin and the pivot point (default).<br />
/// If the position inheritance is disabled, sets the world position.<br />
/// </summary>
+ /// <remarks>
+ /// This NUI object (Position2D) typed property can be configured by multiple cascade setting. <br />
+ /// For example, this code ( view.Position2D.X = 100; view.Position2D.Y = 100; ) is equivalent to this ( view.Position2D = new Position2D(100, 100); ). <br />
+ /// Please note that this multi-cascade setting is especially possible for this NUI object (Position2D). <br />
+ /// This means by default others are impossible so it is recommended that NUI object typed properties are configured by their constructor with parameters. <br />
+ /// For example, this code is working fine : view.Scale = new Vector3( 2.0f, 1.5f, 0.0f); <br />
+ /// but this will not work! : view.Scale.X = 2.0f; view.Scale.Y = 1.5f; <br />
+ /// </remarks>
/// <since_tizen> 3 </since_tizen>
public Position2D Position2D
{
get
{
- return (Position2D)GetValue(Position2DProperty);
+ Position2D temp = (Position2D)GetValue(Position2DProperty);
+ return new Position2D(OnPosition2DChanged, temp.X, temp.Y);
}
set
{
}
}
+ private void OnPosition2DChanged(int x, int y)
+ {
+ Position2D = new Position2D(x, y);
+ }
+
/// <summary>
/// Retrieves the screen postion of the view.<br />
/// </summary>
set
{
SetValue(SiblingOrderProperty, value);
- NotifyPropertyChanged();
+ NotifyPropertyChanged();
}
}
/// </summary>
/// <remarks>
/// </remarks>
- /// <since_tizen> 5 </since_tizen>
- /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
- [EditorBrowsable(EditorBrowsableState.Never)]
- public LayoutItem Layout
+ internal LayoutItem Layout
{
get
{
set
{
Tizen.NUI.NDalicManualPINVOKE.SetLayout__SWIG_1(View.getCPtr(this), LayoutItem.getCPtr(value));
+ value.LayoutChildren.Clear();
+ layoutSet = true;
+ foreach (View view in Children)
+ {
+ value.LayoutChildren.Add(view.Layout);
+ }
}
}
}
set
{
+ if (Layout != null)
+ {
+ // Note: it only works if minimum size is >= than natural size.
+ // To force the size it should be done through the width&height spec or Size2D.
+ Layout.MinimumWidth = new Tizen.NUI.LayoutLength(value.Width);
+ Layout.MinimumHeight = new Tizen.NUI.LayoutLength(value.Height);
+ }
SetValue(MinimumSizeProperty, value);
NotifyPropertyChanged();
}
}
set
{
+ // We don't have Layout.Maximum(Width|Height) so we cannot apply it to layout.
+ // MATCH_PARENT spec + parent container size can be used to limit
SetValue(MaximumSizeProperty, value);
NotifyPropertyChanged();
}
internal readonly MergedStyle _mergedStyle;
- /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
- [EditorBrowsable(EditorBrowsableState.Never)]
- public int WidthSpecificationFixed
+ /// <summary>
+ /// Child property to specify desired width
+ /// </summary>
+ internal int LayoutWidthSpecificationFixed
{
get
{
SetProperty(LayoutItemWrapper.ChildProperty.WIDTH_SPECIFICATION, new Tizen.NUI.PropertyValue(value));
}
}
-
- /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
- [EditorBrowsable(EditorBrowsableState.Never)]
- public int HeightSpecificationFixed
+
+ /// <summary>
+ /// Child property to specify desired height
+ /// </summary>
+ internal int LayoutHeightSpecificationFixed
{
get
{
SetProperty(LayoutItemWrapper.ChildProperty.HEIGHT_SPECIFICATION, new Tizen.NUI.PropertyValue(value));
}
}
-
- /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
- [EditorBrowsable(EditorBrowsableState.Never)]
- public ChildLayoutData WidthSpecification
+
+ /// <summary>
+ /// Child property to specify desired width, use MatchParent/WrapContent)
+ /// </summary>
+ internal ChildLayoutData LayoutWidthSpecification
{
get
{
SetProperty(LayoutItemWrapper.ChildProperty.WIDTH_SPECIFICATION, new Tizen.NUI.PropertyValue((int)value));
}
}
-
- /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
- [EditorBrowsable(EditorBrowsableState.Never)]
- public ChildLayoutData HeightSpecification
+
+ /// <summary>
+ /// Child property to specify desired height, use MatchParent/WrapContent)
+ /// </summary>
+ internal ChildLayoutData LayoutHeightSpecification
{
get
{
}
}
-
}
-
-
-
/// <summary>
/// The View layout Direction type.
/// </summary>
RTL
}
- /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
- [EditorBrowsable(EditorBrowsableState.Never)]
- public enum ChildLayoutData
+ internal enum ChildLayoutData
{
+ /// <summary>
+ /// Constant which indicates child size should match parent size
+ /// </summary>
MatchParent = -1,
+ /// <summary>
+ /// Constant which indicates parent should take the smallest size possible to wrap it's children with their desired size
+ /// </summary>
WrapContent = -2,
}