[ElmSharp] Mark ElmSharp API as API Level: preview
[platform/core/csapi/tizenfx.git] / src / ElmSharp / ElmSharp / Hoversel.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 HoverselItemEventArgs is an HoverselItem's EventArgs
23     /// </summary>
24     /// <since_tizen> preview </since_tizen>
25     public class HoverselItemEventArgs : EventArgs
26     {
27         /// <summary>
28         /// Hoversel's Item
29         /// </summary>
30         /// <since_tizen> preview </since_tizen>
31         public HoverselItem Item { get; set; }
32
33         internal static HoverselItemEventArgs CreateFromSmartEvent(IntPtr data, IntPtr obj, IntPtr info)
34         {
35             HoverselItem item = ItemObject.GetItemByHandle(info) as HoverselItem;
36             return new HoverselItemEventArgs() { Item = item };
37         }
38     }
39
40     /// <summary>
41     /// The hoversel is a button that pops up a list of items.
42     /// </summary>
43     /// <since_tizen> preview </since_tizen>
44     public class Hoversel : Layout
45     {
46         SmartEvent _clicked;
47         SmartEvent _expanded;
48         SmartEvent _dismissed;
49         SmartEvent<HoverselItemEventArgs> _selected;
50         Interop.Evas.SmartCallback _onItemSelected;
51
52         /// <summary>
53         /// Creates and initializes a new instance of the Hoversel class.
54         /// </summary>
55         /// <param name="parent">The parent is a given container which will be attached by Hoversel as a child. It's <see cref="EvasObject"/> type.</param>
56         /// <since_tizen> preview </since_tizen>
57         public Hoversel(EvasObject parent) : base(parent)
58         {
59             _clicked = new SmartEvent(this, "clicked");
60             _clicked.On += (sender, e) =>
61             {
62                 Clicked?.Invoke(this, EventArgs.Empty);
63             };
64             _expanded = new SmartEvent(this, "expanded");
65             _expanded.On += (sender, e) =>
66             {
67                 Expanded?.Invoke(this, EventArgs.Empty);
68             };
69             _dismissed = new SmartEvent(this, "dismissed");
70             _dismissed.On += (sender, e) =>
71             {
72                 Dismissed?.Invoke(this, EventArgs.Empty);
73             };
74             _selected = new SmartEvent<HoverselItemEventArgs>(this, RealHandle, "selected", HoverselItemEventArgs.CreateFromSmartEvent);
75             _selected.On += (s, e) =>
76             {
77                 if (e.Item != null) ItemSelected?.Invoke(this, e);
78             };
79             _onItemSelected = (data, obj, info) =>
80             {
81                 HoverselItem item = ItemObject.GetItemById((int)data) as HoverselItem;
82                 item?.SendItemSelected();
83             };
84         }
85
86         /// <summary>
87         /// Clicked will be triggered when Hoversel is clicked
88         /// </summary>
89         /// <since_tizen> preview </since_tizen>
90         public event EventHandler Clicked;
91
92         /// <summary>
93         /// Expanded will be triggered when Hoversel is activated by clicking the hoversel or by a function
94         /// </summary>
95         /// <since_tizen> preview </since_tizen>
96         public event EventHandler Expanded;
97
98         /// <summary>
99         /// Dismissed will be triggered when Hoversel Dismissed
100         /// </summary>
101         /// <since_tizen> preview </since_tizen>
102         public event EventHandler Dismissed;
103
104         /// <summary>
105         /// ItemSelected will be triggered when Hoversel's Item Selected
106         /// </summary>
107         /// <since_tizen> preview </since_tizen>
108         public event EventHandler<HoverselItemEventArgs> ItemSelected;
109
110         /// <summary>
111         /// Gets or sets the status to control whether the hoversel should expand horizontally.
112         /// </summary>
113         /// <since_tizen> preview </since_tizen>
114         public bool IsHorizontal
115         {
116             get
117             {
118                 return Interop.Elementary.elm_hoversel_horizontal_get(RealHandle);
119             }
120             set
121             {
122                 Interop.Elementary.elm_hoversel_horizontal_set(RealHandle, value);
123             }
124         }
125
126         /// <summary>
127         /// Gets or sets the hover parent.
128         /// </summary>
129         /// <since_tizen> preview </since_tizen>
130         public IntPtr HoverParent
131         {
132             get
133             {
134                 return Interop.Elementary.elm_hoversel_hover_parent_get(RealHandle);
135             }
136             set
137             {
138                 Interop.Elementary.elm_hoversel_hover_parent_set(RealHandle, value);
139             }
140         }
141
142         /// <summary>
143         /// Gets the flag of whether the hoversel is expanded.
144         /// </summary>
145         /// <since_tizen> preview </since_tizen>
146         public bool IsExpanded
147         {
148             get
149             {
150                 return Interop.Elementary.elm_hoversel_expanded_get(RealHandle);
151             }
152         }
153
154         /// <summary>
155         /// Gets or sets the status of whether update icon and text of hoversel same to those of selected item automatically.
156         /// </summary>
157         /// <since_tizen> preview </since_tizen>
158         public bool AutoUpdate
159         {
160             get
161             {
162                 return Interop.Elementary.elm_hoversel_auto_update_get(RealHandle);
163             }
164             set
165             {
166                 Interop.Elementary.elm_hoversel_auto_update_set(RealHandle, value);
167             }
168         }
169
170         /// <summary>
171         /// This triggers the hoversel popup from code, the same as if the user had clicked the button.
172         /// </summary>
173         /// <since_tizen> preview </since_tizen>
174         public void HoverBegin()
175         {
176             Interop.Elementary.elm_hoversel_hover_begin(RealHandle);
177         }
178
179         /// <summary>
180         /// This dismisses the hoversel popup as if the user had clicked outside the hover.
181         /// </summary>
182         /// <since_tizen> preview </since_tizen>
183         public void HoverEnd()
184         {
185             Interop.Elementary.elm_hoversel_hover_end(RealHandle);
186         }
187
188         /// <summary>
189         /// This will remove all the children items from the hoversel.
190         /// </summary>
191         /// <since_tizen> preview </since_tizen>
192         public void Clear()
193         {
194             Interop.Elementary.elm_hoversel_clear(RealHandle);
195         }
196
197         /// <summary>
198         /// Add an item to the hoversel button.
199         /// This adds an item to the hoversel to show when it is clicked.
200         /// </summary>
201         /// <param name="label">Item's label</param>
202         /// <returns>A handle to the added item.</returns>
203         /// <since_tizen> preview </since_tizen>
204         public HoverselItem AddItem(string label)
205         {
206             HoverselItem item = new HoverselItem();
207             item.Label = label;
208             item.Handle = Interop.Elementary.elm_hoversel_item_add(RealHandle, label, null, 0, _onItemSelected, (IntPtr)item.Id);
209             return item;
210         }
211
212         /// <summary>
213         /// Creates a widget handle.
214         /// </summary>
215         /// <param name="parent">Parent EvasObject</param>
216         /// <returns>Handle IntPtr</returns>
217         /// <since_tizen> preview </since_tizen>
218         protected override IntPtr CreateHandle(EvasObject parent)
219         {
220             IntPtr handle = Interop.Elementary.elm_layout_add(parent.Handle);
221             Interop.Elementary.elm_layout_theme_set(handle, "layout", "background", "default");
222
223             RealHandle = Interop.Elementary.elm_hoversel_add(handle);
224             Interop.Elementary.elm_object_part_content_set(handle, "elm.swallow.content", RealHandle);
225
226             return handle;
227         }
228     }
229 }