using System.ComponentModel;
using System.Runtime.InteropServices;
using Tizen.NUI.Binding;
+using Tizen.NUI.Components;
namespace Tizen.NUI.BaseComponents
{
[EditorBrowsable(EditorBrowsableState.Never)]
public static bool layoutingDisabled{get; set;} = true;
- private global::System.Runtime.InteropServices.HandleRef swigCPtr;
private LayoutItem _layout; // Exclusive layout assigned to this View.
// List of transitions paired with the condition that uses the transition.
private bool _backgroundImageSynchronosLoading = false;
private Dictionary<string, Transition> transDictionary = new Dictionary<string, Transition>();
private string[] transitionNames;
+ private Rectangle backgroundImageBorder;
+
+ private ViewSelector<ImageShadow> imageShadow;
+
+ private ViewSelector<Shadow> boxShadow;
+
+ internal Size2D sizeSetExplicitly = new Size2D(); // Store size set by API, will be used in place of NaturalSize if not set.
+
+ static View() {}
+
+ private ViewStyle viewStyle;
+ /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public ViewStyle ViewStyle
+ {
+ get
+ {
+ if (null == viewStyle)
+ {
+ ApplyStyle(GetViewStyle());
+ }
+
+ return viewStyle;
+ }
+ }
/// <summary>
/// Creates a new instance of a view.
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
+ /// This will be public opened in next release of tizen after ACR done. Before ACR, it is used as HiddenAPI (InhouseAPI).
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public View(ViewStyle viewStyle) : this(Interop.View.View_New(), true)
+ {
+ this.ViewStyle.CopyFrom(viewStyle);
+ }
+
/// <summary>
/// Create a new instance of a View with setting the status of shown or hidden.
/// </summary>
}
}
+ internal View(global::System.IntPtr cPtr, bool cMemoryOwn, ViewStyle viewStyle, bool shown = true) : this(cPtr, cMemoryOwn, shown)
+ {
+ this.ViewStyle.CopyFrom(viewStyle);
+ }
+
internal View(global::System.IntPtr cPtr, bool cMemoryOwn, bool shown = true) : base(Interop.View.View_SWIGUpcast(cPtr), cMemoryOwn)
{
- swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
if (HasBody())
{
PositionUsesPivotPoint = false;
}
}
+ internal delegate void ControlStateChangesDelegate(View obj, ControlStates state);
+ internal event ControlStateChangesDelegate ControlStateChangeEvent;
+
+ private ControlStates controlStates;
+ /// <summary>
+ /// Get/Set the control state.
+ /// </summary>
+ /// <since_tizen> 6 </since_tizen>
+ /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public ControlStates ControlState
+ {
+ get
+ {
+ return controlStates;
+ }
+ set
+ {
+ if (controlStates != value)
+ {
+ controlStates = value;
+
+ ControlStateChangeEvent?.Invoke(this, value);
+
+ if (true == OnControlStateChanged(value))
+ {
+ foreach (View child in Children)
+ {
+ child.ControlState = 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 bool IsResourcesCreated
}
/// <summary>
+ /// Get or set the border of background image.
+ /// </summary>
+ /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public Rectangle BackgroundImageBorder
+ {
+ get
+ {
+ return (Rectangle)GetValue(BackgroundImageBorderProperty);
+ }
+ set
+ {
+ SetValue(BackgroundImageBorderProperty, value);
+ NotifyPropertyChanged();
+ }
+ }
+
+ /// <summary>
/// The background of view.
/// </summary>
/// <since_tizen> 3 </since_tizen>
}
/// <summary>
+ /// Describes a shadow as an image for a View.
+ /// It is null by default.
+ /// </summary>
+ /// <remarks>
+ /// The mutually exclusive with "BoxShadow".
+ /// </remarks>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public ImageShadow ImageShadow
+ {
+ get
+ {
+ var value = (ImageShadow)GetValue(ImageShadowProperty);
+ return value == null ? null : new ImageShadow(value, OnImageShadowChanged);
+ }
+ set
+ {
+ SetValue(ImageShadowProperty, value);
+ NotifyPropertyChanged();
+ }
+ }
+
+ /// <summary>
+ /// Describes a box shaped shadow drawing for a View.
+ /// It is null by default.
+ /// </summary>
+ /// <remarks>
+ /// The mutually exclusive with "ImageShadow".
+ /// </remarks>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public Shadow BoxShadow
+ {
+ get
+ {
+ var value = (Shadow)GetValue(BoxShadowProperty);
+ return value == null ? null : new Shadow(value, OnBoxShadowChanged);
+ }
+ set
+ {
+ SetValue(BoxShadowProperty, value);
+ NotifyPropertyChanged();
+ }
+ }
+
+ /// <summary>
/// The current state of the view.
/// </summary>
/// <since_tizen> 3 </since_tizen>
}
set
{
+ sizeSetExplicitly = value; // Store size set by API, will be used in place of NaturalSize if not set.
SetValue(Size2DProperty, value);
// Set Specification so when layouts measure this View it matches the value set here.
// All Views are currently Layouts.
if (_widthPolicy >= 0)
{
_measureSpecificationWidth = new MeasureSpecification( new LayoutLength(value), MeasureSpecification.ModeType.Exactly );
- Size2D.Width = _widthPolicy;
+ if(_heightPolicy>=0) // Policy an exact value
+ {
+ Size2D.Width = _widthPolicy;
+ }
+ else
+ {
+ // Store _heightPolicy in the Size2D memember as will be reset to 0 by a Size2D callback.
+ // Size2D height will store the specification value (negative number) this will then be applied to the
+ // HeightSpecification when the Size2D callback is invoked.
+ Size2D = new Size2D(_widthPolicy,_heightPolicy);
+ }
}
_layout?.RequestLayout();
}
if (_heightPolicy >= 0)
{
_measureSpecificationHeight = new MeasureSpecification( new LayoutLength(value), MeasureSpecification.ModeType.Exactly );
- Size2D.Height = _heightPolicy;
+
+ if(_widthPolicy>=0) // Policy an exact value
+ {
+ Size2D.Height = _heightPolicy;
+ }
+ else
+ {
+ // Store widthPolicy in the Size2D memember as will be reset to 0 by a Size2D callback.
+ // Size2D height will store the specification value (negative number) this will then be applied to the
+ // HeightSpecification when the Size2D callback is invoked.
+ Size2D = new Size2D(_widthPolicy,_heightPolicy);
+ }
}
_layout?.RequestLayout();
LoadTransitions();
}
}
+
+ /// <summary>
+ /// Get Style, it is abstract function and must be override.
+ /// </summary>
+ /// <since_tizen> 6 </since_tizen>
+ /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected virtual ViewStyle GetViewStyle()
+ {
+ return new ViewStyle();
+ }
+
+ /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected virtual bool OnControlStateChanged(ControlStates currentState)
+ {
+ //If need to apply the state to all child, return true;
+ return true;
+ }
+ internal static readonly BindableProperty BackgroundImageSelectorProperty = BindableProperty.Create("BackgroundImageSelector", typeof(Selector<string>), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
+ {
+ var view = (View)bindable;
+ view.backgroundImageSelector.Clone((Selector<string>)newValue);
+ },
+ defaultValueCreator: (bindable) =>
+ {
+ var view = (View)bindable;
+ return view.backgroundImageSelector;
+ });
+ private TriggerableSelector<string> _backgroundImageSelector;
+ private TriggerableSelector<string> backgroundImageSelector
+ {
+ get
+ {
+ if (null == _backgroundImageSelector)
+ {
+ _backgroundImageSelector = new TriggerableSelector<string>(this, BackgroundImageProperty);
+ }
+ return _backgroundImageSelector;
+ }
+ }
+ internal static readonly BindableProperty BackgroundColorSelectorProperty = BindableProperty.Create("BackgroundColorSelector", typeof(Selector<Color>), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
+ {
+ var view = (View)bindable;
+ view.backgroundColorSelector.Clone((Selector<Color>)newValue);
+ },
+ defaultValueCreator: (bindable) =>
+ {
+ var view = (View)bindable;
+ return view.backgroundColorSelector;
+ });
+ private TriggerableSelector<Color> _backgroundColorSelector;
+ private TriggerableSelector<Color> backgroundColorSelector
+ {
+ get
+ {
+ if (null == _backgroundColorSelector)
+ {
+ _backgroundColorSelector = new TriggerableSelector<Color>(this, BackgroundColorProperty);
+ }
+ return _backgroundColorSelector;
+ }
+ }
+ internal static readonly BindableProperty BackgroundImageBorderSelectorProperty = BindableProperty.Create("BackgroundImageBorderSelector", typeof(Selector<Rectangle>), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
+ {
+ var view = (View)bindable;
+ view.backgroundImageBorderSelector.Clone((Selector<Rectangle>)newValue);
+ },
+ defaultValueCreator: (bindable) =>
+ {
+ var view = (View)bindable;
+ return view.backgroundImageBorderSelector;
+ });
+ private TriggerableSelector<Rectangle> _backgroundImageBorderSelector;
+ private TriggerableSelector<Rectangle> backgroundImageBorderSelector
+ {
+ get
+ {
+ if (null == _backgroundImageBorderSelector)
+ {
+ _backgroundImageBorderSelector = new TriggerableSelector<Rectangle>(this, BackgroundImageBorderProperty);
+ }
+ return _backgroundImageBorderSelector;
+ }
+ }
+ internal static readonly BindableProperty OpacitySelectorProperty = BindableProperty.Create("OpacitySelector", typeof(Selector<float?>), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
+ {
+ var view = (View)bindable;
+ view.opacitySelector.Clone((Selector<float?>)newValue);
+ },
+ defaultValueCreator: (bindable) =>
+ {
+ var view = (View)bindable;
+ return view.opacitySelector;
+ });
+ private TriggerableSelector<float?> _opacitySelector;
+ private TriggerableSelector<float?> opacitySelector
+ {
+ get
+ {
+ if (null == _opacitySelector)
+ {
+ _opacitySelector = new TriggerableSelector<float?>(this, OpacityProperty);
+ }
+ return _opacitySelector;
+ }
+ }
+
+ /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public virtual void ApplyStyle(ViewStyle viewStyle)
+ {
+ if (null == viewStyle)
+ {
+ return;
+ }
+
+ if (this.viewStyle == viewStyle)
+ {
+ return;
+ }
+
+ if (null != this.viewStyle)
+ {
+ simpleBinding.Clear();
+ }
+
+ this.viewStyle = viewStyle;
+
+ Dictionary<string, BindableProperty> bindablePropertyOfView;
+ Type viewType = GetType();
+
+ Dictionary<string, BindableProperty> bindablePropertyOfStyle;
+ Type styleType = viewStyle.GetType();
+
+ BindableProperty.GetBindablePropertysOfType(viewType, out bindablePropertyOfView);
+ BindableProperty.GetBindablePropertysOfType(styleType, out bindablePropertyOfStyle);
+
+ if (null != bindablePropertyOfView && null != bindablePropertyOfStyle)
+ {
+ foreach (KeyValuePair<string, BindableProperty> keyValuePair in bindablePropertyOfStyle)
+ {
+ BindableProperty viewProperty;
+ bindablePropertyOfView.TryGetValue(keyValuePair.Key, out viewProperty);
+
+ if (null != viewProperty)
+ {
+ object value = viewStyle.GetValue(keyValuePair.Value);
+
+ if (null != value)
+ {
+ SetValue(viewProperty, value);
+ }
+
+ simpleBinding.Bind(viewStyle, keyValuePair.Value, this, viewProperty, BindingDirection.TwoWay);
+ }
+ }
+ }
+ }
+
+ /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ private BundledPipe simpleBinding = new BundledPipe();
}
}