summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Tizen/Native/DatePicker.cs
blob: fabd5269ac0436e2525b2b12b2c409ed612c209b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using System;
using ElmSharp;

namespace Xamarin.Forms.Platform.Tizen.Native
{
	/// <summary>
	/// Extends the ElmSharp.DateTimeSelector class with functionality useful to renderer.
	/// </summary>
	public class DatePicker : DateTimeSelector
	{
		const string DateLayoutStyle = "date_layout";
		const string DefaultEFLFormat = "%d/%b/%Y";
		static readonly DateTime s_defaultMaximumDate = new DateTime(2037, 12, 31);
		static readonly DateTime s_defaultMinimumDate = new DateTime(1970, 1, 1);
		DateTime _date;
		DateTime _maxDate;
		DateTime _minDate;

		/// <summary>
		/// Initializes a new instance of the <see cref="DatePicker"/> class.
		/// </summary>
		/// <param name="parent">The parent EvasObject.</param>
		public DatePicker(EvasObject parent) : base(parent)
		{
			SetFieldVisible(DateTimeFieldType.Hour, false);
			Style = DateLayoutStyle;
			ApplyDate(Date);
			ApplyMinDate(s_defaultMinimumDate);
			ApplyMaxDate(s_defaultMaximumDate);
			//TODO use date format currently set on the platform
			Format = DefaultEFLFormat;

			DateTimeChanged += (sender, e) =>
			{
				Date = e.NewDate;
			};
		}

		/// <summary>
		/// Gets or sets the displayed date.
		/// </summary>
		public DateTime Date
		{
			get
			{
				return _date;
			}
			set
			{
				if (_date != value)
				{
					ApplyDate(value);
				}
			}
		}

		/// <summary>
		/// Gets of sets the highest date selectable for this <see cref="DatePicker"/>.
		/// </summary>
		/// <remarks>
		/// Default value is 31st Dec, 2037.
		/// </remarks>
		public DateTime MaximumDate
		{
			get
			{
				return _maxDate;
			}
			set
			{
				if (_maxDate != value)
				{
					ApplyMaxDate(value);
				}
			}
		}

		/// <summary>
		/// Gets of sets the lowest date selectable for this <see cref="DatePicker"/>.
		/// </summary>
		/// <remarks>
		/// Default value is 1st Jan, 1970.
		/// </remarks>
		public DateTime MinimumDate
		{
			get
			{
				return _minDate;
			}
			set
			{
				if (_minDate != value)
				{
					ApplyMinDate(value);
				}
			}
		}

		/// <summary>
		/// Sets the <c>DateTime</c> property according to the given <paramref name="date"/>.
		/// </summary>
		/// <param name="date">The date value to be applied to the date picker.</param>
		void ApplyDate(DateTime date)
		{
			_date = date;
			DateTime = date;
		}

		/// <summary>
		/// Sets the <c>MaximumDateTime</c> property according to the given <paramref name="maxDate"/>.
		/// </summary>
		/// <param name="maxDate">The maximum date value to be applied to the date picker.</param>
		void ApplyMaxDate(DateTime maxDate)
		{
			_maxDate = maxDate;
			MaximumDateTime = maxDate;
		}

		/// <summary>
		/// Sets the <c>MinimumDateTime</c> property according to the given <paramref name="minDate"/>.
		/// </summary>
		/// <param name="minDate">The minimum date value to be applied to the date picker.</param>
		void ApplyMinDate(DateTime minDate)
		{
			_minDate = minDate;
			MinimumDateTime = minDate;
		}
	}
}