});
/// 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 static readonly BindableProperty WeightProperty = BindableProperty.Create("Weight", typeof(float), typeof(View), default(float), propertyChanged: (bindable, oldValue, newValue) =>
+ {
+ var view = (View)bindable;
+ if (newValue != null)
+ {
+ Tizen.NUI.Object.SetProperty(view.swigCPtr, LinearLayout.ChildProperty.WEIGHT, new Tizen.NUI.PropertyValue((float)newValue));
+ }
+ },
+ defaultValueCreator:(bindable) =>
+ {
+ var view = (View)bindable;
+ float temp = 0.0f;
+ Tizen.NUI.Object.GetProperty(view.swigCPtr, LinearLayout.ChildProperty.WEIGHT).Get(out temp);
+ return 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)]
public static readonly BindableProperty LeftFocusableViewProperty = BindableProperty.Create("LeftFocusableView", typeof(View), typeof(View), default(View), propertyChanged: (bindable, oldValue, newValue) =>
{
var view = (View)bindable;
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);
}
/// <summary>
- /// Event argument passed through ChildAdded event
+ /// Event argument passed through the ChildAdded event.
/// </summary>
/// <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 class ChildAddedEventArgs : EventArgs
{
/// <summary>
- /// Added child View at moment
+ /// Added child view at moment.
/// </summary>
/// <since_tizen> 5 </since_tizen>
public View Added { get; set; }
}
/// <summary>
- /// Event when a child is added
+ /// Event when a child is added.
/// </summary>
/// <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 new event EventHandler<ChildAddedEventArgs> ChildAdded;
// From Container Base class
return;
}
- Container oldParent = child.Parent;
+ Container oldParent = child.GetParent();
if (oldParent != this)
{
if (oldParent != null)
{
oldParent.Remove(child);
}
+ child.InternalParent = this;
- if (child.Layout == null)
+ if (layoutSet == true && child.Layout == null) // Only give children a layout if parent an explicit container
{
- LayoutItem layoutItem = new LayoutItem();
- child.Layout = layoutItem;
+ if( child.GetType() == typeof(View) || true == child.LayoutingRequired )
+ {
+ child.Layout = new LayoutGroup();
+
+ }
+ else
+ {
+ child.Layout = new LayoutItem();
+ }
}
if (Layout)
}
/// <summary>
- /// Event argument passed through ChildRemoved event
+ /// Event argument passed through the ChildRemoved event.
/// </summary>
/// <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 class ChildRemovedEventArgs : EventArgs
{
/// <summary>
- /// Removed child View at moment
+ /// Removed child view at moment.
/// </summary>
/// <since_tizen> 5 </since_tizen>
public View Removed { get; set; }
}
/// <summary>
- /// Event when a child is removed
+ /// Event when a child is removed.
/// </summary>
/// <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 new event EventHandler<ChildRemovedEventArgs> ChildRemoved;
throw NDalicPINVOKE.SWIGPendingException.Retrieve();
Children.Remove(child);
+ child.InternalParent = null;
+
if (Layout)
{
if(child.Layout)
/// <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()
swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
}
+ foreach (View view in Children)
+ {
+ view.InternalParent = null;
+ }
+
base.Dispose(type);
}
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();
}
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));
+ // Set Specification so when layouts measure this View it matches the value set here.
+ // All Views are currently Layouts.
+ SetProperty(LayoutItemWrapper.ChildProperty.WIDTH_SPECIFICATION, new Tizen.NUI.PropertyValue(value.Width));
+ SetProperty(LayoutItemWrapper.ChildProperty.HEIGHT_SPECIFICATION, new Tizen.NUI.PropertyValue(value.Height));
NotifyPropertyChanged();
}
}
/// <remarks>
/// Deriving classes stipulate the natural size and by default a view has a zero natural size.
/// </remarks>
- /// /// Please do not use! this will be deprecated!
- /// Instead please use NaturalSize2D.
- /// <since_tizen> 3 </since_tizen>
- [Obsolete("Please do not use! This will be deprecated! Please use NaturalSize2D instead! " +
- "Like: " +
- "TextLabel label = new TextLabel(\"Hello World!\"); " +
- "Size2D size = label.NaturalSize2D;")]
- [EditorBrowsable(EditorBrowsableState.Never)]
+ /// <since_tizen> 5 </since_tizen>
public Vector3 NaturalSize
{
get
{
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);
}
/// <summary>
+ /// Set that layouting is required on this View. It will automatically receive a Layout.
+ /// </summary>
+ /// <remarks>
+ /// </remarks>
+ internal bool LayoutingRequired
+ {
+ get
+ {
+ bool result = Tizen.NUI.NDalicManualPINVOKE.View_IsLayoutingRequired(View.getCPtr(this));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return result;
+ }
+ set
+ {
+ Tizen.NUI.NDalicManualPINVOKE.View_SetLayoutingRequired(View.getCPtr(this), value);
+ }
+ }
+
+ /// <summary>
/// Shows the view.
/// </summary>
/// <remarks>
}
/// <summary>
- /// Gets the parent layer of this view.If a view has no parent, this method does nothing.
+ /// Gets the parent layer of this view.If a view has no parent, this method does not do anything.
/// </summary>
/// <pre>The view has been initialized. </pre>
- /// <returns>the parent layer of view </returns>
+ /// <returns>The parent layer of view </returns>
/// <since_tizen> 5 </since_tizen>
public Layer GetLayer()
{
}
/// <summary>
- /// [Obsolete("Please do not use! this will be deprecated")]
+ /// Sets the size of a view for the width, the height and the depth.<br />
+ /// Geometry can be scaled to fit within this area.<br />
+ /// This does not interfere with the view's scale factor.<br />
+ /// The views default depth is the minimum of width and height.<br />
/// </summary>
- /// <since_tizen> 3 </since_tizen>
- [Obsolete("Please do not use! This will be deprecated! Please use Size2D instead! " +
- "Like: " +
- "View view = new View(); " +
- "view.Size2D = new Size2D(100, 100);")]
- [EditorBrowsable(EditorBrowsableState.Never)]
+ /// <remarks>
+ /// Please note that multi-cascade setting is not possible for this NUI object. <br />
+ /// It is recommended that NUI object typed properties are configured by their constructor with parameters. <br />
+ /// For example, this code is working fine : view.Size = new Size( 1.0f, 1.0f, 0.0f); <br />
+ /// but this will not work! : view.Size.Width = 2.0f; view.Size.Height = 2.0f; <br />
+ /// </remarks>
+ /// <since_tizen> 5 </since_tizen>
public Size Size
{
get
/// <summary>
/// Gets or sets the Margin for use in layout.
/// </summary>
+ /// <remarks>
+ /// Margin property is supported by Layout algorithms and containers.
+ /// Please Set Layout if you want to use Margin property.
+ /// </remarks>
/// <since_tizen> 4 </since_tizen>
public Extents Margin
{
/// <summary>
/// Perform an action on a visual registered to this view. <br />
- /// Visuals will have actions, this API is used to perform one of these actions with the given attributes.
+ /// Visuals will have actions. This API is used to perform one of these actions with the given attributes.
/// </summary>
/// <param name="propertyIndexOfVisual">The Property index of the visual.</param>
- /// <param name="propertyIndexOfActionId">The action to perform. See Visual to find supported actions.</param>
+ /// <param name="propertyIndexOfActionId">The action to perform. See Visual to find the supported actions.</param>
/// <param name="attributes">Optional attributes for the action.</param>
/// <since_tizen> 5 </since_tizen>
public void DoAction(int propertyIndexOfVisual, int propertyIndexOfActionId, PropertyValue attributes)
}
}
+ internal float Weight
+ {
+ get
+ {
+ return (float)GetValue(WeightProperty);
+ }
+ set
+ {
+ SetValue(WeightProperty, value);
+ NotifyPropertyChanged();
+ }
+ }
+
}
/// <summary>