private Picker dayPicker;
private Picker monthPicker;
private Picker yearPicker;
- private DatePickerStyle datePickerStyle => ViewStyle as DatePickerStyle;
/// <summary>
/// Creates a new instance of DatePicker.
[EditorBrowsable(EditorBrowsableState.Never)]
public DatePicker()
{
- Initialize();
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public DatePicker(string style) : base(style)
{
- Initialize();
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public DatePicker(DatePickerStyle datePickerStyle) : base(datePickerStyle)
{
- Initialize();
}
dayPicker.CurrentValue = currentDate.Day;
monthPicker.CurrentValue = currentDate.Month;
yearPicker.CurrentValue = currentDate.Year;
+
+ Initialize();
}
-
+
+ /// <inheritdoc/>
+ [EditorBrowsable(EditorBrowsableState.Never)]
[SuppressMessage("Microsoft.Reliability",
"CA2000:DisposeObjectsBeforeLosingScope",
Justification = "The CellPadding will be dispose when the date picker disposed")]
+ public override void ApplyStyle(ViewStyle viewStyle)
+ {
+ base.ApplyStyle(viewStyle);
+
+ if (viewStyle is DatePickerStyle datePickerStyle && Layout is LinearLayout linearLayout)
+ {
+ linearLayout.CellPadding = new Size(datePickerStyle.CellPadding.Width, datePickerStyle.CellPadding.Height);
+
+ yearPicker.ApplyStyle(datePickerStyle.Pickers);
+ monthPicker.ApplyStyle(datePickerStyle.Pickers);
+ dayPicker.ApplyStyle(datePickerStyle.Pickers);
+ }
+ }
+
private void Initialize()
{
HeightSpecification = LayoutParamPolicies.MatchParent;
Layout = new LinearLayout() {
LinearOrientation = LinearLayout.Orientation.Horizontal,
- CellPadding = new Size(datePickerStyle.CellPadding.Width, datePickerStyle.CellPadding.Height),
};
PickersOrderSet();
private View upLine;
private View downLine;
private IList<TextLabel> itemList;
- private PickerStyle pickerStyle => ViewStyle as PickerStyle;
+ private Vector2 size;
+ private TextLabelStyle itemTextLabel;
/// <summary>
/// Creates a new instance of Picker.
[EditorBrowsable(EditorBrowsableState.Never)]
public Picker()
{
- Initialize();
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public Picker(string style) : base(style)
{
- Initialize();
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public Picker(PickerStyle pickerStyle) : base(pickerStyle)
{
- Initialize();
}
/// <summary>
{
base.OnInitialize();
SetAccessibilityConstructor(Role.List);
+
+ Initialize();
}
/// <summary>
{
base.ApplyStyle(viewStyle);
+ var pickerStyle = viewStyle as PickerStyle;
+
+ if (pickerStyle == null) return;
+
+ pickerScroller?.SetPickerStyle(pickerStyle);
+
//Apply StartScrollOffset style.
- if (pickerStyle?.StartScrollOffset != null)
+ if (pickerStyle.StartScrollOffset != null)
+ {
startScrollOffset = (int)pickerStyle.StartScrollOffset.Height;
+ }
//Apply ItemTextLabel style.
- if (pickerStyle?.ItemTextLabel != null)
+ if (pickerStyle.ItemTextLabel != null)
{
+ if (itemTextLabel == null)
+ {
+ itemTextLabel = (TextLabelStyle)pickerStyle.ItemTextLabel.Clone();
+ }
+ else
+ {
+ itemTextLabel.MergeDirectly(pickerStyle.ItemTextLabel);
+ }
+
itemHeight = (int)pickerStyle.ItemTextLabel.Size.Height;
if (itemList != null)
}
//Apply PickerCenterLine style.
- if (pickerStyle?.Divider != null && upLine != null && downLine != null)
+ if (pickerStyle.Divider != null && upLine != null && downLine != null)
{
upLine.ApplyStyle(pickerStyle.Divider);
downLine.ApplyStyle(pickerStyle.Divider);
downLine.PositionY = (int)pickerStyle.Divider.PositionY + itemHeight;
}
+
+ startScrollY = (itemHeight * dummyItemsForLoop) + startScrollOffset;
+ startY = startScrollOffset;
+ }
+
+ /// <inheritdoc/>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public override void OnRelayout(Vector2 size, RelayoutContainer container)
+ {
+ if (size == null) return;
+
+ if (size.Equals(this.size))
+ {
+ return;
+ }
+
+ this.size = new Vector2(size);
+
+ if (pickerScroller != null && itemList != null)
+ {
+ pickerScroller.ScrollAvailableArea = new Vector2(0, (itemList.Count * itemHeight) - size.Height);
+ }
}
private void Initialize()
//Picker Using scroller internally. actually it is a kind of scroller which has infinity loop,
//and item center align features.
- pickerScroller = new PickerScroller(pickerStyle)
+ pickerScroller = new PickerScroller()
{
- Size = new Size(-1, pickerStyle.Size.Height),
+ WidthSpecification = LayoutParamPolicies.MatchParent,
+ HeightSpecification = LayoutParamPolicies.MatchParent,
ScrollingDirection = ScrollableBase.Direction.Vertical,
Layout = new LinearLayout()
{
ScrollAvailableArea = new Vector2(0, 10000),
Name = "pickerScroller",
};
+
pickerScroller.Scrolling += OnScroll;
pickerScroller.ScrollAnimationEnded += OnScrollAnimationEnded;
pickerScroller.ScrollAnimationStarted += OnScrollAnimationStarted;
onAnimation = false;
loopEnabled = false;
- startScrollOffset = (int)pickerStyle.StartScrollOffset.Height;
- itemHeight = (int)pickerStyle.ItemTextLabel.Size.Height;
- startScrollY = (itemHeight * dummyItemsForLoop) + startScrollOffset;
- startY = startScrollOffset;
-
Add(pickerScroller);
AddLine();
}
//This is UI requirement. It helps where exactly center item is.
private void AddLine()
{
- upLine = new View(pickerStyle.Divider);
- downLine = new View(pickerStyle.Divider)
- {
- Position = new Position(0, (int)pickerStyle.Divider.PositionY + itemHeight),
- };
+ upLine = new View();
+ downLine = new View();
Add(upLine);
Add(downLine);
Justification = "The items are added to itemList and are disposed in Picker.Dispose().")]
private void AddPickerItem(bool loopEnabled, int idx)
{
- TextLabel temp = new TextLabel(pickerStyle.ItemTextLabel)
+ TextLabel temp = new TextLabel(itemTextLabel)
{
WidthSpecification = LayoutParamPolicies.MatchParent,
Text = GetItemText(loopEnabled, idx),
UpdateCurrentValue();
//Give a correct scroll area.
- pickerScroller.ScrollAvailableArea = new Vector2(0, (itemList.Count * itemHeight) - pickerStyle.Size.Height);
+ if (size != null)
+ {
+ pickerScroller.ScrollAvailableArea = new Vector2(0, (itemList.Count * itemHeight) - size.Height);
+ }
needItemUpdate = false;
}
private delegate float UserAlphaFunctionDelegate(float progress);
private UserAlphaFunctionDelegate customScrollAlphaFunction;
- public PickerScroller(PickerStyle pickerStyle) : base()
+ public PickerScroller() : base()
{
//Default rate is 0.998. this is for reduce scroll animation length.
decelerationRate = 0.991f;
- startScrollOffset = (int)pickerStyle.StartScrollOffset.Height;
- itemHeight = (int)pickerStyle.ItemTextLabel.Size.Height;
logValueOfDeceleration = (float)Math.Log(decelerationRate);
}
+ public void SetPickerStyle(PickerStyle pickerStyle)
+ {
+ if (pickerStyle.StartScrollOffset != null)
+ {
+ startScrollOffset = (int)pickerStyle.StartScrollOffset.Height;
+ }
+
+ if (pickerStyle.ItemTextLabel?.Size != null)
+ {
+ itemHeight = (int)pickerStyle.ItemTextLabel.Size.Height;
+ }
+
+ if (pickerStyle.Size != null)
+ {
+ Size = new Size(-1, pickerStyle.Size.Height);
+ }
+ }
+
private float CustomScrollAlphaFunction(float progress)
{
if (panAnimationDelta == 0)
*
*/
using System;
-using Tizen.NUI;
using Tizen.NUI.BaseComponents;
using System.Collections.Generic;
using System.Collections.ObjectModel;
private Picker hourPicker;
private Picker minutePicker;
private Picker ampmPicker;
- private TimePickerStyle timePickerStyle => ViewStyle as TimePickerStyle;
/// <summary>
/// Creates a new instance of TimePicker.
[EditorBrowsable(EditorBrowsableState.Never)]
public TimePicker()
{
- Initialize();
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public TimePicker(string style) : base(style)
{
- Initialize();
}
/// <summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public TimePicker(TimePickerStyle timePickerStyle) : base(timePickerStyle)
{
- Initialize();
}
/// <summary>
hourPicker.CurrentValue = currentTime.Hour;
minutePicker.CurrentValue = currentTime.Minute;
+
+ Initialize();
}
/// <summary>
{
base.ApplyStyle(viewStyle);
+ var timePickerStyle = viewStyle as TimePickerStyle;
+
+ if (timePickerStyle == null) return;
+
//Apply CellPadding.
if (timePickerStyle?.CellPadding != null && Layout != null)
((LinearLayout)Layout).CellPadding = new Size2D(timePickerStyle.CellPadding.Width, timePickerStyle.CellPadding.Height);
Layout = new LinearLayout() {
LinearOrientation = LinearLayout.Orientation.Horizontal,
- CellPadding = new Size(timePickerStyle.CellPadding.Width, timePickerStyle.CellPadding.Height),
};
Console.WriteLine("initialize");