[NUI] TCSACR-226 code change (#1032)
[platform/core/csapi/tizenfx.git] / src / ElmSharp / ElmSharp / Check.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     /// The Check is a widget that allows for toggling a value between true and false.
23     /// </summary>
24     /// <since_tizen> preview </since_tizen>
25     public class Check : Layout
26     {
27         private SmartEvent _changed;
28         private bool _currentState;
29
30         /// <summary>
31         /// Creates and initializes a new instance of the Check class.
32         /// </summary>
33         /// <param name="parent">
34         /// The EvasObject to which the new check will be attached as a child.
35         /// </param>
36         /// <since_tizen> preview </since_tizen>
37         public Check(EvasObject parent) : base(parent)
38         {
39             _changed = new SmartEvent(this, this.RealHandle, "changed");
40             _changed.On += (sender, e) =>
41             {
42                 StateChanged?.Invoke(this, new CheckStateChangedEventArgs(_currentState, IsChecked));
43             };
44         }
45
46         /// <summary>
47         /// StateChanged will be triggered when the IsChecked in the check is changed.
48         /// </summary>
49         /// <since_tizen> preview </since_tizen>
50         public event EventHandler<CheckStateChangedEventArgs> StateChanged;
51
52         /// <summary>
53         /// Sets or gets whether the given check is checked or not.
54         /// </summary>
55         /// <remarks>
56         /// When an object is checked, the value will be set to true. Conversely, will be set to false.
57         /// </remarks>
58         /// <since_tizen> preview </since_tizen>
59         public bool IsChecked
60         {
61             get
62             {
63                 _currentState = Interop.Elementary.elm_check_state_get(RealHandle);
64                 return _currentState;
65             }
66             set
67             {
68                 Interop.Elementary.elm_check_state_set(RealHandle, value);
69             }
70         }
71
72         /// <summary>
73         /// Creates a widget handle.
74         /// </summary>
75         /// <param name="parent">Parent EvasObject.</param>
76         /// <returns>Handle IntPtr.</returns>
77         /// <since_tizen> preview </since_tizen>
78         protected override IntPtr CreateHandle(EvasObject parent)
79         {
80             IntPtr handle = Interop.Elementary.elm_layout_add(parent.Handle);
81             Interop.Elementary.elm_layout_theme_set(handle, "layout", "elm_widget", "default");
82
83             RealHandle = Interop.Elementary.elm_check_add(handle);
84             Interop.Elementary.elm_object_part_content_set(handle, "elm.swallow.content", RealHandle);
85
86             return handle;
87         }
88     }
89 }