[Bluetooth][Non-ACR] Fix no data exception issue (#787)
[platform/core/csapi/tizenfx.git] / internals / src / EflSharp / EflSharp / Circle / RotarySelector.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace Efl
6 {
7     namespace Ui
8     {
9         namespace Wearable
10         {
11
12             /// <summary>
13             /// The event argument of Rotary Selector.
14             /// </summary>
15             /// <since_tizen> 6 </since_tizen>
16             public class RotarySelectorItemEventArgs : EventArgs
17             {
18                 public RotarySelectorItem item { get; set; }
19             }
20
21             /// <summary>
22             /// The RotarySelector is a widget to display a selector and multiple items surrounding the selector.
23             /// An item can be selected by the Rotary event or user item click.
24             /// </summary>
25             /// <since_tizen> 6 </since_tizen>
26             public class RotarySelector : Efl.Ui.Layout
27             {
28                 const string IconPartName = "selector,icon";
29                 const string ContentPartName = "selector,content";
30                 const string BgPartName = "selector,bg_image";
31
32                 const string ItemSelectedEventName = "item,selected";
33                 const string ItemClickedEventName = "item,clicked";
34
35                 Image _normalBgImage;
36
37                 /// <summary>
38                 /// Clicked will be triggered when selecting again the already selected item or selecting a selector.
39                 /// </summary>
40                 /// <since_tizen> 6 </since_tizen>
41                 public event EventHandler<RotarySelectorItemEventArgs> Clicked;
42
43                 /// <summary>
44                 /// Selected will be triggered when selecting an item.
45                 /// </summary>
46                 /// <since_tizen> 6 </since_tizen>
47                 public event EventHandler<RotarySelectorItemEventArgs> Selected;
48
49                 private Interop.Evas.SmartCallback smartClicked;
50                 private Interop.Evas.SmartCallback smartSelected;
51
52                 /// <summary>
53                 /// Creates and initializes a new instance of the RotarySelector class.
54                 /// </summary>
55                 /// <param name="parent">The Efl.Ui.Widget to which the new RotarySelector will be attached as a child.</param>
56                 /// <since_tizen> 6 </since_tizen>
57                 public RotarySelector(Efl.Ui.Widget parent) : base(Interop.Eext.eext_rotary_selector_add(parent.NativeHandle))
58                 {
59                     smartClicked = new Interop.Evas.SmartCallback((d, o, e) =>
60                     {
61                         RotarySelectorItem clickedItem = new RotarySelectorItem();
62                         clickedItem._handle = e;
63                         Clicked?.Invoke(this, new RotarySelectorItemEventArgs { item = clickedItem});
64                     });
65
66                     smartSelected = new Interop.Evas.SmartCallback((d, o, e) =>
67                     {
68                         Selected?.Invoke(this, new RotarySelectorItemEventArgs { item = this.SelectedItem });
69                     });
70
71                     Interop.Evas.evas_object_smart_callback_add(this.NativeHandle, ItemClickedEventName, smartClicked, IntPtr.Zero);
72                     Interop.Evas.evas_object_smart_callback_add(this.NativeHandle, ItemSelectedEventName, smartSelected, IntPtr.Zero);
73                 }
74
75                 /// <summary>
76                 /// Appends a rotary selector item.
77                 /// </summary>
78                 /// <since_tizen> 6 </since_tizen>
79                 public void Append(RotarySelectorItem item)
80                 {
81                     if (item.NativeHandle != null)
82                       item.NativeHandle = Interop.Eext.eext_rotary_selector_item_append(this.NativeHandle);
83                 }
84
85                 /// <summary>
86                 /// Prepends a rotary selector item.
87                 /// </summary>
88                 /// <since_tizen> 6 </since_tizen>
89                 public void Prepend(RotarySelectorItem item)
90                 {
91                     if (item.NativeHandle != null)
92                       item.NativeHandle = Interop.Eext.eext_rotary_selector_item_prepend(this.NativeHandle);
93                 }
94
95                 /// <summary>
96                 /// Inserts a rotary selector item after the target item.
97                 /// </summary>
98                 /// <since_tizen> 6 </since_tizen>
99                 public void InsertAfter(RotarySelectorItem targetItem, RotarySelectorItem item)
100                 {
101                     if (item.NativeHandle != null)
102                     item.NativeHandle = Interop.Eext.eext_rotary_selector_item_insert_after(this.NativeHandle, targetItem.NativeHandle);
103                 }
104
105                 /// <summary>
106                 /// Inserts a rotary selector item before the target item.
107                 /// </summary>
108                 /// <since_tizen> 6 </since_tizen>
109                 public void InsertBefore(RotarySelectorItem targetItem, RotarySelectorItem item)
110                 {
111                     if (item.NativeHandle != null)
112                       item.NativeHandle = Interop.Eext.eext_rotary_selector_item_insert_before(this.NativeHandle, targetItem.NativeHandle);
113                 }
114
115                 /// <summary>
116                 /// Delete a rotary selector item.
117                 /// </summary>
118                 /// <since_tizen> 6 </since_tizen>
119                 public void DeleteItem(RotarySelectorItem item)
120                 {
121                     if (item.NativeHandle != null)
122                       Interop.Eext.eext_rotary_selector_item_del(item.NativeHandle);
123                 }
124
125                 /// <summary>
126                 /// Clears all items of rotary selector.
127                 /// </summary>
128                 /// <since_tizen> 6 </since_tizen>
129                 public void ClearItems()
130                 {
131                     if (this.NativeHandle != null)
132                       Interop.Eext.eext_rotary_selector_items_clear(this.NativeHandle);
133                 }
134
135                 /// <summary>
136                 /// Sets or gets the selected item of a rotary selector object.
137                 /// </summary>
138                 /// <since_tizen> 6 </since_tizen>
139                 public RotarySelectorItem SelectedItem
140                 {
141                     get
142                     {
143                         RotarySelectorItem item = new RotarySelectorItem();
144                         item.NativeHandle = Interop.Eext.eext_rotary_selector_selected_item_get(this.NativeHandle);
145                         return item;
146                     }
147                     set
148                     {
149                         Interop.Eext.eext_rotary_selector_selected_item_set(this.NativeHandle, value.NativeHandle);
150                     }
151                 }
152
153                 void SetPart(string partName, State state, Image img)
154                 {
155                     if (img != null)
156                         Interop.Eext.eext_rotary_selector_part_content_set(this.NativeHandle, partName, (int)state, img.NativeHandle);
157                 }
158
159                 /// <summary>
160                 /// Sets or gets the background image of a rotary selector object.
161                 /// </summary>
162                 /// <since_tizen> 6 </since_tizen>
163                 public Image BackgroundImage
164                 {
165                     get
166                     {
167                         return _normalBgImage;
168                     }
169                     set
170                     {
171                         _normalBgImage = value;
172                         SetPart(BgPartName, State.Normal, value);
173                     }
174                 }
175
176                 internal enum State
177                 {
178                     Normal,
179                     Pressed
180                 }
181             }
182         }
183     }
184 }