[NUI] TCSACR-226 code change (#1032)
[platform/core/csapi/tizenfx.git] / src / ElmSharp / ElmSharp / DateTimeSelector.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 using System;
18
19 namespace ElmSharp
20 {
21     /// <summary>
22     /// Enumeration for the datetime field types for DateTimeSelector.
23     /// </summary>
24     /// <since_tizen> preview </since_tizen>
25     public enum DateTimeFieldType
26     {
27         /// <summary>
28         /// Indicates the Year field.
29         /// </summary>
30         Year,
31         /// <summary>
32         /// Indicates the Month field.
33         /// </summary>
34         Month,
35         /// <summary>
36         /// Indicates the Date field.
37         /// </summary>
38         Date,
39         /// <summary>
40         /// Indicates the Hour field.
41         /// </summary>
42         Hour,
43         /// <summary>
44         /// Indicates the Minute field.
45         /// </summary>
46         Minute,
47         /// <summary>
48         /// Indicates the AM/PM field.
49         /// </summary>
50         AmPm
51     }
52
53     /// <summary>
54     /// It inherits <see cref="Layout"/>.
55     /// The DateTimeSelector is a widget to display and input the date &amp; time values.
56     /// This widget displays the date and time as per the system's locale settings
57     /// (Date includes Day, Month &amp; Year) along with the defined separators and time including hour, minute &amp; AM/PM fields. Separator for the AM/PM field is ignored.
58     /// </summary>
59     /// <since_tizen> preview </since_tizen>
60     public class DateTimeSelector : Layout
61     {
62         SmartEvent _changed;
63         DateTime _cacheDateTime;
64
65         /// <summary>
66         /// Creates and initializes a new instance of the DateTimeSelector class.
67         /// </summary>
68         /// <param name="parent">The parent is a given container, which will be attached by the DateTimeSelector
69         ///  as a child. It's <see cref="EvasObject"/> type.</param>
70         /// <since_tizen> preview </since_tizen>
71         public DateTimeSelector(EvasObject parent) : base(parent)
72         {
73         }
74
75         /// <summary>
76         /// Creates and initializes a new instance of the DateTimeSelector class.
77         /// </summary>
78         /// <since_tizen> preview </since_tizen>
79         protected DateTimeSelector() : base()
80         {
81         }
82
83         /// <summary>
84         /// ItemSelected is raised when the DateTime field value is changed.
85         /// </summary>
86         /// <since_tizen> preview </since_tizen>
87         public event EventHandler<DateChangedEventArgs> DateTimeChanged;
88
89         /// <summary>
90         /// Gets or sets the datetime format.
91         /// </summary>
92         /// <remarks>
93         /// Format is a combination of the allowed LIBC date format specifiers like: "%b %d, %Y %I : %M %p".
94         /// </remarks>
95         /// <since_tizen> preview </since_tizen>
96         public string Format
97         {
98             get
99             {
100                 return Interop.Elementary.elm_datetime_format_get(RealHandle);
101             }
102             set
103             {
104                 Interop.Elementary.elm_datetime_format_set(RealHandle, value);
105             }
106         }
107
108         /// <summary>
109         /// Gets or sets the upper boundary of the DateTime field.
110         /// </summary>
111         /// <since_tizen> preview </since_tizen>
112         public DateTime MaximumDateTime
113         {
114             get
115             {
116                 var tm = new Interop.Libc.SystemTime();
117                 Interop.Elementary.elm_datetime_value_max_get(RealHandle, ref tm);
118                 return tm;
119             }
120             set
121             {
122                 Interop.Libc.SystemTime tm = value;
123                 Interop.Elementary.elm_datetime_value_max_set(RealHandle, ref tm);
124             }
125         }
126
127         /// <summary>
128         /// Gets or sets the lower boundary of the DateTime field.
129         /// </summary>
130         /// <since_tizen> preview </since_tizen>
131         public DateTime MinimumDateTime
132         {
133             get
134             {
135                 var tm = new Interop.Libc.SystemTime();
136                 Interop.Elementary.elm_datetime_value_min_get(RealHandle, ref tm);
137                 return tm;
138             }
139             set
140             {
141                 Interop.Libc.SystemTime tm = value;
142                 Interop.Elementary.elm_datetime_value_min_set(RealHandle, ref tm);
143             }
144         }
145
146         /// <summary>
147         /// Gets or sets the current value of the DateTime field.
148         /// </summary>
149         /// <since_tizen> preview </since_tizen>
150         public DateTime DateTime
151         {
152             get
153             {
154                 var tm = new Interop.Libc.SystemTime();
155                 Interop.Elementary.elm_datetime_value_get(RealHandle, ref tm);
156                 return tm;
157             }
158             set
159             {
160                 Interop.Libc.SystemTime tm = value;
161                 Interop.Elementary.elm_datetime_value_set(RealHandle, ref tm);
162                 _cacheDateTime = value;
163             }
164         }
165
166         /// <summary>
167         /// Gets whether a field can be visible.
168         /// </summary>
169         /// <param name="type">Enumeration for <see cref="DateTimeFieldType"/>.</param>
170         /// <returns>
171         /// The field is visible or not.
172         /// Type is bool. If visible, return true.
173         /// </returns>
174         /// <since_tizen> preview </since_tizen>
175         public bool IsFieldVisible(DateTimeFieldType type)
176         {
177             return Interop.Elementary.elm_datetime_field_visible_get(RealHandle, (int)type);
178         }
179
180         /// <summary>
181         /// Sets the field limits of a field.
182         /// </summary>
183         /// <param name="type">Enumeration for <see cref="DateTimeFieldType"/>.</param>
184         /// <param name="minimum">The minimum limit.</param>
185         /// <param name="maximum">The maximum limit.</param>
186         /// <since_tizen> preview </since_tizen>
187         public void SetFieldLimit(DateTimeFieldType type, int minimum, int maximum)
188         {
189             Interop.Elementary.elm_datetime_field_limit_set(RealHandle, (int)type, minimum, maximum);
190         }
191
192         /// <summary>
193         /// Gets whether a field can be visible.
194         /// </summary>
195         /// <param name="type">Enumeration for <see cref="DateTimeFieldType"/>.</param>
196         /// <param name="visible">When set as true, the field type is visible.</param>
197         /// <since_tizen> preview </since_tizen>
198         public void SetFieldVisible(DateTimeFieldType type, bool visible)
199         {
200             Interop.Elementary.elm_datetime_field_visible_set(RealHandle, (int)type, visible);
201         }
202
203         /// <summary>
204         /// The callback of the Realized event.
205         /// </summary>
206         /// <since_tizen> preview </since_tizen>
207         protected override void OnRealized()
208         {
209             base.OnRealized();
210             _changed = new SmartEvent(this, this.RealHandle, "changed");
211             _changed.On += (s, e) =>
212             {
213                 DateTime newDateTime = DateTime;
214                 DateTimeChanged?.Invoke(this, new DateChangedEventArgs(_cacheDateTime, newDateTime));
215                 DateTime = newDateTime;
216             };
217         }
218
219         /// <summary>
220         /// Creates a widget handle.
221         /// </summary>
222         /// <param name="parent">Parent EvasObject.</param>
223         /// <returns>Handle IntPtr.</returns>
224         /// <since_tizen> preview </since_tizen>
225         protected override IntPtr CreateHandle(EvasObject parent)
226         {
227             IntPtr handle = Interop.Elementary.elm_layout_add(parent.Handle);
228             Interop.Elementary.elm_layout_theme_set(handle, "layout", "elm_widget", "default");
229
230             RealHandle = Interop.Elementary.elm_datetime_add(handle);
231             Interop.Elementary.elm_object_part_content_set(handle, "elm.swallow.content", RealHandle);
232
233             return handle;
234         }
235     }
236 }