forked from Clancey/MonoDroid.Dialog
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathDateTimeElement.cs
132 lines (115 loc) · 4.22 KB
/
DateTimeElement.cs
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
131
132
using System;
using Android.App;
using Android.Text.Format;
namespace Android.Dialog
{
public class DateTimeElement : StringElement
{
public int MinuteInterval { get; set; }
public DateTime? DateValue
{
get
{
DateTime dt;
if (DateTime.TryParse(Value, out dt))
return dt;
return null;
}
set { Value = Format(value); }
}
public DateTimeElement(string caption, DateTime? date)
: base(caption)
{
Click = delegate { EditDate(); };
DateValue = date;
}
public DateTimeElement(string caption, DateTime? date, int layoutId)
: base(caption, layoutId)
{
Click = delegate { EditDate(); };
DateValue = date;
}
public virtual string Format(DateTime? dt)
{
if (dt.HasValue)
return dt.Value.ToShortDateString() + " " + dt.Value.ToShortTimeString();
return string.Empty;
}
protected void EditDate()
{
var context = GetContext();
if (context == null)
{
Util.Log.Warn("DateElement", "No Context for Edit");
return;
}
var val = DateValue.HasValue ? DateValue.Value : DateTime.Now;
new DatePickerDialog(context, DateCallback ?? OnDateTimeSet, val.Year, val.Month - 1, val.Day).Show();
}
protected void EditTime()
{
var context = GetContext();
if (context == null)
{
Util.Log.Warn("TimeElement", "No Context for Edit");
return;
}
DateTime val = DateValue.HasValue ? DateValue.Value : DateTime.Now;
new TimePickerDialog(context, OnTimeSet, val.Hour, val.Minute, DateFormat.Is24HourFormat(context)).Show();
}
// the event received when the user "sets" the date in the dialog
protected void OnDateSet(object sender, DatePickerDialog.DateSetEventArgs e)
{
DateTime current = DateValue.HasValue ? DateValue.Value : DateTime.Now;
DateValue = new DateTime(e.Date.Year, e.Date.Month, e.Date.Day, current.Hour, current.Minute, 0);
}
// the event received when the user "sets" the date in the dialog
protected void OnDateTimeSet(object sender, DatePickerDialog.DateSetEventArgs e)
{
DateTime current = DateValue.HasValue ? DateValue.Value : DateTime.Now;
DateValue = new DateTime(e.Date.Year, e.Date.Month, e.Date.Day, current.Hour, current.Minute, 0);
EditTime();
}
// the event received when the user "sets" the time in the dialog
protected void OnTimeSet(object sender, TimePickerDialog.TimeSetEventArgs e)
{
DateTime current = DateValue.HasValue ? DateValue.Value : DateTime.Now;
DateValue = new DateTime(current.Year, current.Month, current.Day, e.HourOfDay, e.Minute, 0);
}
protected EventHandler<DatePickerDialog.DateSetEventArgs> DateCallback = null;
}
public class DateElement : DateTimeElement
{
public DateElement(string caption, DateTime? date)
: base(caption, date)
{
DateCallback = OnDateSet;
}
public DateElement(string caption, DateTime? date, int layoutId)
: base(caption, date, layoutId)
{
DateCallback = OnDateSet;
}
public override string Format(DateTime? dt)
{
return dt.HasValue ? dt.Value.ToShortDateString() : string.Empty;
}
}
public class TimeElement : DateTimeElement
{
public TimeElement(string caption, DateTime? date)
: base(caption, date)
{
Click = delegate { EditTime(); };
}
public TimeElement(string caption, DateTime? date, int layoutId)
: base(caption, date, layoutId)
{
Click = delegate { EditTime(); };
}
public override string Format(DateTime? dt)
{
return dt.HasValue ? dt.Value.ToShortTimeString() : string.Empty;
}
}
}