2 using System.Collections.Generic;
13 /// The event argument of Rotary Selector.
15 /// <since_tizen> 6 </since_tizen>
16 public class RotarySelectorItemEventArgs : EventArgs
18 public RotarySelectorItem item { get; set; }
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.
25 /// <since_tizen> 6 </since_tizen>
26 public class RotarySelector : Efl.Ui.Layout
28 const string IconPartName = "selector,icon";
29 const string ContentPartName = "selector,content";
30 const string BgPartName = "selector,bg_image";
32 const string ItemSelectedEventName = "item,selected";
33 const string ItemClickedEventName = "item,clicked";
37 readonly List<RotarySelectorItem> Items = new List<RotarySelectorItem>();
40 /// Clicked will be triggered when selecting again the already selected item or selecting a selector.
42 /// <since_tizen> 6 </since_tizen>
43 public event EventHandler<RotarySelectorItemEventArgs> Clicked;
46 /// Selected will be triggered when selecting an item.
48 /// <since_tizen> 6 </since_tizen>
49 public event EventHandler<RotarySelectorItemEventArgs> Selected;
51 private Interop.Evas.SmartCallback smartClicked;
52 private Interop.Evas.SmartCallback smartSelected;
55 /// Creates and initializes a new instance of the RotarySelector class.
57 /// <param name="parent">The Efl.Ui.Widget to which the new RotarySelector will be attached as a child.</param>
58 /// <since_tizen> 6 </since_tizen>
59 public RotarySelector(Efl.Ui.Widget parent) : base(Interop.Eext.eext_rotary_selector_add(parent.NativeHandle))
61 smartClicked = new Interop.Evas.SmartCallback((d, o, e) =>
63 RotarySelectorItem clickedItem = FindItemByNativeHandle(e);
64 if (clickedItem != null)
65 Clicked?.Invoke(this, new RotarySelectorItemEventArgs { item = clickedItem});
68 smartSelected = new Interop.Evas.SmartCallback((d, o, e) =>
70 RotarySelectorItem selectedItem = FindItemByNativeHandle(e);
71 if (selectedItem != null)
72 Selected.Invoke(this, new RotarySelectorItemEventArgs { item = selectedItem });
75 Interop.Evas.evas_object_smart_callback_add(this.NativeHandle, ItemClickedEventName, smartClicked, IntPtr.Zero);
76 Interop.Evas.evas_object_smart_callback_add(this.NativeHandle, ItemSelectedEventName, smartSelected, IntPtr.Zero);
79 private RotarySelectorItem FindItemByNativeHandle(IntPtr handle)
81 foreach(RotarySelectorItem item in Items)
83 if (item.NativeHandle == handle)
91 /// Sets or gets the edit mode of rotary selector.
93 /// <since_tizen> 6 </since_tizen>
98 return Interop.Eext.eext_rotary_selector_editing_enabled_get(this.NativeHandle);
102 Interop.Eext.eext_rotary_selector_editing_enabled_set(this.NativeHandle, value);
107 /// Sets or gets the add item mode of rotary selector.
109 /// <since_tizen> 6 </since_tizen>
110 public bool AddItemMode
114 return Interop.Eext.eext_rotary_selector_add_item_enabled_get(this.NativeHandle);
118 Interop.Eext.eext_rotary_selector_add_item_enabled_set(this.NativeHandle, value);
123 /// Appends a rotary selector item.
125 /// <since_tizen> 6 </since_tizen>
126 public void Append(RotarySelectorItem item)
128 if (item.NativeHandle != null)
131 item.NativeHandle = Interop.Eext.eext_rotary_selector_item_append(this.NativeHandle);
136 /// Prepends a rotary selector item.
138 /// <since_tizen> 6 </since_tizen>
139 public void Prepend(RotarySelectorItem item)
141 if (item.NativeHandle != null)
143 Items.Insert(0, item);
144 item.NativeHandle = Interop.Eext.eext_rotary_selector_item_prepend(this.NativeHandle);
149 /// Inserts a rotary selector item after the target item.
151 /// <since_tizen> 6 </since_tizen>
152 public void InsertAfter(RotarySelectorItem targetItem, RotarySelectorItem item)
154 if (item.NativeHandle != null && targetItem != null)
156 if (!Items.Contains(targetItem)) return;
157 Items.Insert(Items.IndexOf(targetItem) + 1, item);
158 item.NativeHandle = Interop.Eext.eext_rotary_selector_item_insert_after(this.NativeHandle, targetItem.NativeHandle);
163 /// Inserts a rotary selector item before the target item.
165 /// <since_tizen> 6 </since_tizen>
166 public void InsertBefore(RotarySelectorItem targetItem, RotarySelectorItem item)
168 if (item.NativeHandle != null && targetItem != null)
170 if (!Items.Contains(targetItem)) return;
171 Items.Insert(Items.IndexOf(targetItem), item);
172 item.NativeHandle = Interop.Eext.eext_rotary_selector_item_insert_before(this.NativeHandle, targetItem.NativeHandle);
177 /// Delete a rotary selector item.
179 /// <since_tizen> 6 </since_tizen>
180 public void DeleteItem(RotarySelectorItem item)
182 if (item.NativeHandle != null)
184 if (!Items.Contains(item)) return;
186 Interop.Eext.eext_rotary_selector_item_del(item.NativeHandle);
191 /// Clears all items of rotary selector.
193 /// <since_tizen> 6 </since_tizen>
194 public void ClearItems()
196 if (this.NativeHandle != null)
199 Interop.Eext.eext_rotary_selector_items_clear(this.NativeHandle);
204 /// Sets or gets the selected item of a rotary selector object.
206 /// <since_tizen> 6 </since_tizen>
207 public RotarySelectorItem SelectedItem
211 IntPtr nativeHandle = Interop.Eext.eext_rotary_selector_selected_item_get(this.NativeHandle);
212 RotarySelectorItem item = FindItemByNativeHandle(nativeHandle);
217 Interop.Eext.eext_rotary_selector_selected_item_set(this.NativeHandle, value.NativeHandle);
221 void SetPart(string partName, State state, Image img)
224 Interop.Eext.eext_rotary_selector_part_content_set(this.NativeHandle, partName, (int)state, img.NativeHandle);
228 /// Sets or gets the background image of a rotary selector object.
230 /// <since_tizen> 6 </since_tizen>
231 public Image BackgroundImage
235 return _normalBgImage;
239 _normalBgImage = value;
240 SetPart(BgPartName, State.Normal, value);