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 event argument of Rotary Selector Reorder.
24 /// <since_tizen> 6 </since_tizen>
25 public class RotarySelectorItemReorderedEventArgs : RotarySelectorItemEventArgs
27 public int NewIndex { get; internal set; }
29 public int OldIndex { get; internal set; }
33 /// The event argument of Rotary Selector editing state.
35 /// <since_tizen> 6 </since_tizen>
36 public class RotarySelectorEditingEventArgs : EventArgs
38 public bool editing { get; internal set; }
42 /// The RotarySelector is a widget to display a selector and multiple items surrounding the selector.
43 /// An item can be selected by the Rotary event or user item click.
45 /// <since_tizen> 6 </since_tizen>
46 public class RotarySelector : Efl.Ui.Layout
48 const string IconPartName = "selector,icon";
49 const string ContentPartName = "selector,content";
50 const string BgPartName = "selector,bg_image";
52 const string ItemSelectedEventName = "item,selected";
53 const string ItemClickedEventName = "item,clicked";
54 const string ItemDeletedEventName = "item,deleted";
55 const string ItemReorderedEventName = "item,reordered";
56 const string EditingEnterEventName = "editing,entered";
57 const string EditingLeaveEventName = "editing,exited";
61 readonly List<RotarySelectorItem> Items = new List<RotarySelectorItem>();
64 /// Clicked will be triggered when selecting again the already selected item or selecting a selector.
66 /// <since_tizen> 6 </since_tizen>
67 public event EventHandler<RotarySelectorItemEventArgs> ClickedEvt;
70 /// Selected will be triggered when selecting an item.
72 /// <since_tizen> 6 </since_tizen>
73 public event EventHandler<RotarySelectorItemEventArgs> SelectedEvt;
76 /// Triggered when the user deleted the item
78 /// <since_tizen> 6 </since_tizen>
79 public event EventHandler<RotarySelectorItemEventArgs> Deleted;
82 /// Triggered when the user reordered the item
84 /// <since_tizen> 6 </since_tizen>
85 public event EventHandler<RotarySelectorItemReorderedEventArgs> Reordered;
88 /// Editing will be triggered when entering and leaving the editing state.
90 /// <since_tizen> 6 </since_tizen>
91 public event EventHandler<RotarySelectorEditingEventArgs> EditingStateChanged;
93 private Interop.Evas.SmartCallback smartClicked;
94 private Interop.Evas.SmartCallback smartSelected;
95 private Interop.Evas.SmartCallback smartDeleted;
96 private Interop.Evas.SmartCallback smartReordered;
97 private Interop.Evas.SmartCallback smartEditingEnter;
98 private Interop.Evas.SmartCallback smartEditingLeave;
101 /// Creates and initializes a new instance of the RotarySelector class.
103 /// <param name="parent">The Efl.Ui.Widget to which the new RotarySelector will be attached as a child.</param>
104 /// <since_tizen> 6 </since_tizen>
105 public RotarySelector(Efl.Ui.Widget parent) : base(new Efl.Eo.Globals.WrappingHandle(Interop.Eext.eext_rotary_selector_add(parent.NativeHandle)))
107 smartClicked = new Interop.Evas.SmartCallback((d, o, e) =>
109 RotarySelectorItem clickedItem = FindItemByNativeHandle(e);
110 if (clickedItem != null)
111 ClickedEvt?.Invoke(this, new RotarySelectorItemEventArgs { item = clickedItem});
114 smartSelected = new Interop.Evas.SmartCallback((d, o, e) =>
116 RotarySelectorItem selectedItem = FindItemByNativeHandle(e);
117 if (selectedItem != null)
118 SelectedEvt?.Invoke(this, new RotarySelectorItemEventArgs { item = selectedItem });
121 smartDeleted = new Interop.Evas.SmartCallback((d, o, e) =>
123 RotarySelectorItem deletedItem = FindItemByNativeHandle(e);
124 if (deletedItem != null)
125 Deleted?.Invoke(this, new RotarySelectorItemEventArgs { item = deletedItem });
126 Items.Remove(deletedItem);
129 smartReordered = new Interop.Evas.SmartCallback((d, o, e) =>
131 var items_list = Interop.Eext.eext_rotary_selector_items_get(this.NativeHandle);
132 int idx = Eina.ListNativeFunctions.eina_list_data_idx(items_list, e);
133 RotarySelectorItem reorderedItem = FindItemByNativeHandle(e);
134 if (reorderedItem != null)
135 Reordered?.Invoke(this, new RotarySelectorItemReorderedEventArgs
136 { item = reorderedItem, OldIndex = Items.IndexOf(reorderedItem), NewIndex = idx });
137 UpdateListOrder(reorderedItem, idx);
140 smartEditingEnter = new Interop.Evas.SmartCallback((d, o, e) =>
142 EditingStateChanged?.Invoke(this, new RotarySelectorEditingEventArgs { editing = true});
145 smartEditingLeave = new Interop.Evas.SmartCallback((d, o, e) =>
147 EditingStateChanged?.Invoke(this, new RotarySelectorEditingEventArgs { editing = false });
150 Interop.Evas.evas_object_smart_callback_add(this.NativeHandle, ItemClickedEventName, smartClicked, IntPtr.Zero);
151 Interop.Evas.evas_object_smart_callback_add(this.NativeHandle, ItemSelectedEventName, smartSelected, IntPtr.Zero);
152 Interop.Evas.evas_object_smart_callback_add(this.NativeHandle, ItemDeletedEventName, smartDeleted, IntPtr.Zero);
153 Interop.Evas.evas_object_smart_callback_add(this.NativeHandle, ItemReorderedEventName, smartReordered, IntPtr.Zero);
154 Interop.Evas.evas_object_smart_callback_add(this.NativeHandle, EditingEnterEventName, smartEditingEnter, IntPtr.Zero);
155 Interop.Evas.evas_object_smart_callback_add(this.NativeHandle, EditingLeaveEventName, smartEditingLeave, IntPtr.Zero);
158 private void UpdateListOrder(RotarySelectorItem reorderedItem, int currentIdx)
160 Items.Remove(reorderedItem);
161 Items.Insert(currentIdx, reorderedItem);
164 private RotarySelectorItem FindItemByNativeHandle(IntPtr handle)
166 foreach(RotarySelectorItem item in Items)
168 if (item.NativeHandle == handle)
176 /// Sets or gets the edit mode of rotary selector.
178 /// <since_tizen> 6 </since_tizen>
183 return Interop.Eext.eext_rotary_selector_editing_enabled_get(this.NativeHandle);
187 Interop.Eext.eext_rotary_selector_editing_enabled_set(this.NativeHandle, value);
192 /// Sets or gets the add item mode of rotary selector.
194 /// <since_tizen> 6 </since_tizen>
195 public bool AddItemMode
199 return Interop.Eext.eext_rotary_selector_add_item_enabled_get(this.NativeHandle);
203 Interop.Eext.eext_rotary_selector_add_item_enabled_set(this.NativeHandle, value);
208 /// Appends a rotary selector item.
210 /// <since_tizen> 6 </since_tizen>
211 public void Append(RotarySelectorItem item)
213 if (item.NativeHandle != null)
216 item.NativeHandle = Interop.Eext.eext_rotary_selector_item_append(this.NativeHandle);
221 /// Prepends a rotary selector item.
223 /// <since_tizen> 6 </since_tizen>
224 public void Prepend(RotarySelectorItem item)
226 if (item.NativeHandle != null)
228 Items.Insert(0, item);
229 item.NativeHandle = Interop.Eext.eext_rotary_selector_item_prepend(this.NativeHandle);
234 /// Inserts a rotary selector item after the target item.
236 /// <since_tizen> 6 </since_tizen>
237 public void InsertAfter(RotarySelectorItem targetItem, RotarySelectorItem item)
239 if (item.NativeHandle != null && targetItem != null)
241 if (!Items.Contains(targetItem)) return;
242 Items.Insert(Items.IndexOf(targetItem) + 1, item);
243 item.NativeHandle = Interop.Eext.eext_rotary_selector_item_insert_after(this.NativeHandle, targetItem.NativeHandle);
248 /// Inserts a rotary selector item before the target item.
250 /// <since_tizen> 6 </since_tizen>
251 public void InsertBefore(RotarySelectorItem targetItem, RotarySelectorItem item)
253 if (item.NativeHandle != null && targetItem != null)
255 if (!Items.Contains(targetItem)) return;
256 Items.Insert(Items.IndexOf(targetItem), item);
257 item.NativeHandle = Interop.Eext.eext_rotary_selector_item_insert_before(this.NativeHandle, targetItem.NativeHandle);
262 /// Delete a rotary selector item.
264 /// <since_tizen> 6 </since_tizen>
265 public void DeleteItem(RotarySelectorItem item)
267 if (item.NativeHandle != null)
269 if (!Items.Contains(item)) return;
271 Interop.Eext.eext_rotary_selector_item_del(item.NativeHandle);
276 /// Clears all items of rotary selector.
278 /// <since_tizen> 6 </since_tizen>
279 public void ClearItems()
281 if (this.NativeHandle != null)
284 Interop.Eext.eext_rotary_selector_items_clear(this.NativeHandle);
289 /// Sets or gets the selected item of a rotary selector object.
291 /// <since_tizen> 6 </since_tizen>
292 public RotarySelectorItem SelectedItem
296 IntPtr nativeHandle = Interop.Eext.eext_rotary_selector_selected_item_get(this.NativeHandle);
297 RotarySelectorItem item = FindItemByNativeHandle(nativeHandle);
302 Interop.Eext.eext_rotary_selector_selected_item_set(this.NativeHandle, value.NativeHandle);
306 void SetPart(string partName, State state, Image img)
309 Interop.Eext.eext_rotary_selector_part_content_set(this.NativeHandle, partName, (int)state, img.NativeHandle);
313 /// Sets or gets the background image of a rotary selector object.
315 /// <since_tizen> 6 </since_tizen>
316 public Image BackgroundImage
320 return _normalBgImage;
324 _normalBgImage = value;
325 SetPart(BgPartName, State.Normal, value);