[NUI] TCSACR-226 code change (#1032)
[platform/core/csapi/tizenfx.git] / src / ElmSharp / ElmSharp / Index.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 using System.Collections.Generic;
19
20 namespace ElmSharp
21 {
22     /// <summary>
23     /// The Index widget gives you an index for fast access to whichever group of the other UI items one might have.
24     /// Inherits Layout.
25     /// </summary>
26     /// <since_tizen> preview </since_tizen>
27     public class Index : Layout
28     {
29         HashSet<IndexItem> _children = new HashSet<IndexItem>();
30         SmartEvent _delayedChanged;
31
32         /// <summary>
33         /// Creates and initializes a new instance of the Index class.
34         /// </summary>
35         /// <param name="parent">The parent is a given container, which will be attached by Index as a child. It's <see cref="EvasObject"/> type.</param>
36         /// <since_tizen> preview </since_tizen>
37         public Index(EvasObject parent) : base(parent)
38         {
39             _delayedChanged = new SmartEvent(this, this.RealHandle, "delay,changed");
40             _delayedChanged.On += _delayedChanged_On;
41         }
42
43         /// <summary>
44         /// Changed will be triggered when the selected index item is changed.
45         /// </summary>
46         /// <since_tizen> preview </since_tizen>
47         public event EventHandler Changed;
48
49         /// <summary>
50         /// Sets or gets whether the auto hiding feature is enabled or not for a given index widget.
51         /// </summary>
52         /// <since_tizen> preview </since_tizen>
53         public bool AutoHide
54         {
55             get
56             {
57                 return !Interop.Elementary.elm_index_autohide_disabled_get(RealHandle);
58             }
59             set
60             {
61                 Interop.Elementary.elm_index_autohide_disabled_set(RealHandle, !value);
62             }
63         }
64
65         /// <summary>
66         /// Sets or gets a value whether the horizontal mode is enabled or not.
67         /// </summary>
68         /// <since_tizen> preview </since_tizen>
69         public bool IsHorizontal
70         {
71             get
72             {
73                 return Interop.Elementary.elm_index_horizontal_get(RealHandle);
74             }
75             set
76             {
77                 Interop.Elementary.elm_index_horizontal_set(RealHandle, value);
78             }
79         }
80
81         /// <summary>
82         /// Sets or gets a value of the indicator's disabled status.
83         /// </summary>
84         /// <since_tizen> preview </since_tizen>
85         public bool IndicatorVisible
86         {
87             get
88             {
89                 return !Interop.Elementary.elm_index_indicator_disabled_get(RealHandle);
90             }
91             set
92             {
93                 Interop.Elementary.elm_index_indicator_disabled_set(RealHandle, !value);
94             }
95         }
96
97         /// <summary>
98         /// Sets or gets whether the omit feature is enabled or not for a given index widget.
99         /// </summary>
100         /// <since_tizen> preview </since_tizen>
101         public bool OmitEnabled
102         {
103             get
104             {
105                 return Interop.Elementary.elm_index_omit_enabled_get(RealHandle);
106             }
107             set
108             {
109                 Interop.Elementary.elm_index_omit_enabled_set(RealHandle, value);
110             }
111         }
112
113         /// <summary>
114         /// Sets a delay change time for the index object.
115         /// The delay time is 0.2 seconds by default.
116         /// </summary>
117         /// <since_tizen> preview </since_tizen>
118         public double Delay
119         {
120             get
121             {
122                 return Interop.Elementary.elm_index_delay_change_time_get(RealHandle);
123             }
124             set
125             {
126                 Interop.Elementary.elm_index_delay_change_time_set(RealHandle, value);
127             }
128         }
129
130         /// <summary>
131         /// Gets or sets the items level for a given index widget.
132         /// </summary>
133         /// <since_tizen> preview </since_tizen>
134         public int Level
135         {
136             get
137             {
138                 return Interop.Elementary.elm_index_item_level_get(RealHandle);
139             }
140             set
141             {
142                 Interop.Elementary.elm_index_item_level_set(RealHandle, value);
143             }
144         }
145
146         /// <summary>
147         /// Controls the standard_priority group of the index.
148         /// Priority group will be shown as many items as it can, and other group will be shown for one character only.
149         /// </summary>
150         /// <since_tizen> preview </since_tizen>
151         public int Priority
152         {
153             get
154             {
155                 return Interop.Elementary.elm_index_standard_priority_get(RealHandle);
156             }
157             set
158             {
159                 Interop.Elementary.elm_index_standard_priority_set(RealHandle, value);
160             }
161         }
162
163         /// <summary>
164         /// Gets the last selected item for a given index widget.
165         /// </summary>
166         /// <since_tizen> preview </since_tizen>
167         public IndexItem SelectedItem
168         {
169             get
170             {
171                 IntPtr handle = Interop.Elementary.elm_index_selected_item_get(RealHandle, 0);
172                 return ItemObject.GetItemByHandle(handle) as IndexItem;
173             }
174         }
175
176         /// <summary>
177         /// Appends a new item on a given index widget.
178         /// </summary>
179         /// <param name="label">The label for which the item should be indexed.</param>
180         /// <returns>An object to the IndexItem if added, or null on errors.</returns>
181         /// <since_tizen> preview </since_tizen>
182         public IndexItem Append(string label)
183         {
184             IndexItem item = new IndexItem(label, this);
185             item.Handle = Interop.Elementary.elm_index_item_append(RealHandle, label, null, (IntPtr)item.Id);
186             return item;
187         }
188
189         /// <summary>
190         /// Prepends a new item on a given index widget.
191         /// </summary>
192         /// <param name="label">The label for which the item should be indexed.</param>
193         /// <returns>A handle to the item if added, or null on errors.</returns>
194         /// <since_tizen> preview </since_tizen>
195         public IndexItem Prepend(string label)
196         {
197             IndexItem item = new IndexItem(label, this);
198             item.Handle = Interop.Elementary.elm_index_item_prepend(RealHandle, label, null, (IntPtr)item.Id);
199             return item;
200         }
201
202         /// <summary>
203         /// Inserts a new item into the index object before the item before.
204         /// </summary>
205         /// <param name="label">The label for which the item should be indexed.</param>
206         /// <param name="before">The index item to insert after.</param>
207         /// <returns>An object to the IndexItem if added, or null on errors.</returns>
208         /// <since_tizen> preview </since_tizen>
209         public IndexItem InsertBefore(string label, IndexItem before)
210         {
211             IndexItem item = new IndexItem(label, this);
212             item.Handle = Interop.Elementary.elm_index_item_insert_before(RealHandle, before, label, null, (IntPtr)item.Id);
213             return item;
214         }
215
216         /// <summary>
217         /// Inserts a new item into the index object after the item after.
218         /// </summary>
219         /// <param name="label">The label for which the item should be indexed.</param>
220         /// <param name="after">The index item to insert after.</param>
221         /// <returns>An object to the IndexItem if added, or null on errors.</returns>
222         /// <since_tizen> preview </since_tizen>
223         public IndexItem InsertAfter(string label, IndexItem after)
224         {
225             IndexItem item = new IndexItem(label, this);
226             item.Handle = Interop.Elementary.elm_index_item_insert_after(RealHandle, after, label, null, (IntPtr)item.Id);
227             return item;
228         }
229
230         /// <summary>
231         /// Flushes the changes made to the index items so that they work correctly.
232         /// </summary>
233         /// <param name="level">The index level (one of 0 or 1) where the changes were made.</param>
234         /// <since_tizen> preview </since_tizen>
235         public void Update(int level)
236         {
237             Interop.Elementary.elm_index_level_go(RealHandle, level);
238         }
239
240         /// <summary>
241         /// Removes all the items from a given index widget.
242         /// </summary>
243         /// <since_tizen> preview </since_tizen>
244         public void Clear()
245         {
246             Interop.Elementary.elm_index_item_clear(RealHandle);
247         }
248
249         /// <summary>
250         /// Creates a widget handle.
251         /// </summary>
252         /// <param name="parent">Parent EvasObject.</param>
253         /// <returns>Handle IntPtr.</returns>
254         /// <since_tizen> preview </since_tizen>
255         protected override IntPtr CreateHandle(EvasObject parent)
256         {
257             IntPtr handle = Interop.Elementary.elm_layout_add(parent.Handle);
258             Interop.Elementary.elm_layout_theme_set(handle, "layout", "elm_widget", "default");
259
260             RealHandle = Interop.Elementary.elm_index_add(handle);
261             Interop.Elementary.elm_object_part_content_set(handle, "elm.swallow.content", RealHandle);
262
263             return handle;
264         }
265
266         void _delayedChanged_On(object sender, EventArgs e)
267         {
268             SelectedItem?.SendSelected();
269             Changed?.Invoke(this, e);
270         }
271     }
272 }