Release 4.0.0-preview1-00051
[platform/core/csapi/tizenfx.git] / src / ElmSharp / ElmSharp / Radio.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 Radio is a widget that allows for 1 or more options to be displayed and have the user choose only 1 of them.
23     /// </summary>
24     public class Radio : Layout
25     {
26         SmartEvent _changed;
27
28         /// <summary>
29         /// Creates and initializes a new instance of the Radio class.
30         /// </summary>
31         /// <param name="parent">The EvasObject to which the new Radio will be attached as a child.</param>
32         public Radio(EvasObject parent) : base(parent)
33         {
34             _changed = new SmartEvent(this, this.RealHandle, "changed");
35             _changed.On += (s, e) => ValueChanged?.Invoke(this, EventArgs.Empty);
36         }
37
38         /// <summary>
39         /// ValueChanged will be triggered when value of Radio change.
40         /// </summary>
41         public event EventHandler ValueChanged;
42
43         /// <summary>
44         /// Sets or gets a unique value to each Radio button.
45         /// </summary>
46         public int StateValue
47         {
48             get
49             {
50                 return Interop.Elementary.elm_radio_state_value_get(RealHandle);
51             }
52             set
53             {
54                 Interop.Elementary.elm_radio_state_value_set(RealHandle, value);
55             }
56         }
57
58         /// <summary>
59         /// Sets or gets the value of the radio group.
60         /// </summary>
61         public int GroupValue
62         {
63             get
64             {
65                 return Interop.Elementary.elm_radio_value_get(RealHandle);
66             }
67             set
68             {
69                 Interop.Elementary.elm_radio_value_set(RealHandle, value);
70             }
71         }
72
73         /// <summary>
74         /// Adds this radio to a group of other radio objects.
75         /// </summary>
76         /// <param name="group">Group which add radio in.</param>
77         public void SetGroup(Radio group)
78         {
79             if (group == null)
80             {
81                 throw new ArgumentNullException("group");
82             }
83             Interop.Elementary.elm_radio_group_add(RealHandle, group.RealHandle);
84         }
85
86         protected override IntPtr CreateHandle(EvasObject parent)
87         {
88             IntPtr handle = Interop.Elementary.elm_layout_add(parent.Handle);
89             Interop.Elementary.elm_layout_theme_set(handle, "layout", "elm_widget", "default");
90
91             RealHandle = Interop.Elementary.elm_radio_add(handle);
92             Interop.Elementary.elm_object_part_content_set(handle, "elm.swallow.content", RealHandle);
93
94             return handle;
95         }
96     }
97 }