using System; using System.Collections.Generic; using System.Text; namespace Efl { namespace Ui { namespace Wearable { public class MoreOptionItemEventArgs : EventArgs { public MoreOptionItem item { get; set; } } /// /// The MoreOption is a widget composed of the toggle (cue button) and more option view that can change a visibility through the toggle. /// /// 6 public class MoreOption : Efl.Ui.Layout { const string IconPartName = "selector,icon"; const string ContentPartName = "selector,content"; const string BgPartName = "selector,bg_image"; const string ItemSelectedEventName = "item,selected"; const string ItemClickedEventName = "item,clicked"; readonly List Items = new List(); /// /// Clicked will be triggered when the user selects the already selected item again or selects a selector. /// /// 6 public event EventHandler ClickedEvt; /// /// Selected will be triggered when the user selects an item. /// /// 6 public event EventHandler SelectedEvt; private Interop.Evas.SmartCallback smartClicked; private Interop.Evas.SmartCallback smartSelected; /// /// Creates and initializes a new instance of the MoreOption class. /// /// The Efl.Ui.Widget to which the new MoreOption will be attached as a child. /// 6 public MoreOption(Efl.Ui.Widget parent) : base(new Efl.Eo.Globals.WrappingHandle(Interop.Eext.eext_more_option_add(parent.NativeHandle))) { smartClicked = new Interop.Evas.SmartCallback((d, o, e) => { MoreOptionItem clickedItem = FindItemByNativeHandle(e); if (clickedItem != null) ClickedEvt?.Invoke(this, new MoreOptionItemEventArgs { item = clickedItem }); }); smartSelected = new Interop.Evas.SmartCallback((d, o, e) => { MoreOptionItem selectedItem = FindItemByNativeHandle(e); if (selectedItem != null) SelectedEvt?.Invoke(this, new MoreOptionItemEventArgs { item = selectedItem }); }); Interop.Evas.evas_object_smart_callback_add(this.NativeHandle, ItemClickedEventName, smartClicked, IntPtr.Zero); Interop.Evas.evas_object_smart_callback_add(this.NativeHandle, ItemSelectedEventName, smartSelected, IntPtr.Zero); } private MoreOptionItem FindItemByNativeHandle(IntPtr handle) { foreach (MoreOptionItem item in Items) { if (item.NativeHandle == handle) return item; } return null; } /// /// Sets or gets the edit mode of more option. /// /// 6 public bool EditMode { get { return Interop.Eext.eext_more_option_editing_enabled_get(this.NativeHandle); } set { Interop.Eext.eext_more_option_editing_enabled_set(this.NativeHandle, value); } } /// /// Sets or gets the add item mode of more option. /// /// 6 public bool AddItemMode { get { return Interop.Eext.eext_more_option_add_item_enabled_get(this.NativeHandle); } set { Interop.Eext.eext_more_option_add_item_enabled_set(this.NativeHandle, value); } } /// /// Appends a more option item. /// /// 6 public void Append(MoreOptionItem item) { if (item.NativeHandle != null) { Items.Add(item); item.NativeHandle = Interop.Eext.eext_more_option_item_append(this.NativeHandle); } } /// /// Prepends a more option item. /// /// 6 public void PrependItem(MoreOptionItem item) { if (item.NativeHandle != null) { Items.Insert(0, item); item.NativeHandle = Interop.Eext.eext_more_option_item_prepend(this.NativeHandle); } } /// /// Inserts a more option item after the target item. /// /// 6 public void InsertAfter(MoreOptionItem targetItem, MoreOptionItem item) { if (item.NativeHandle != null && targetItem != null) { if (!Items.Contains(targetItem)) return; Items.Insert(Items.IndexOf(targetItem) + 1, item); item.NativeHandle = Interop.Eext.eext_more_option_item_insert_after(this.NativeHandle, targetItem.NativeHandle); } } /// /// Inserts a more option item before the target item. /// /// 6 public void InsertBefore(MoreOptionItem targetItem, MoreOptionItem item) { if (item.NativeHandle != null && targetItem != null) { if (!Items.Contains(targetItem)) return; Items.Insert(Items.IndexOf(targetItem), item); item.NativeHandle = Interop.Eext.eext_more_option_item_insert_before(this.NativeHandle, targetItem.NativeHandle); } } /// /// Delete a more option item. /// /// 6 public void DeleteItem(MoreOptionItem item) { if (item.NativeHandle != null) { if (!Items.Contains(item)) return; Items.Remove(item); Interop.Eext.eext_more_option_item_del(item.NativeHandle); } } /// /// Clears all items of more option. /// /// 6 public void ClearItems() { if (this.NativeHandle != null) { Items.Clear(); Interop.Eext.eext_more_option_items_clear(this.NativeHandle); } } /// /// Sets or gets the direction of more option. /// /// 6 public MoreOptionDirection Direction { get { int dir = Interop.Eext.eext_more_option_direction_get(this.NativeHandle); return (MoreOptionDirection)dir; } set { Interop.Eext.eext_more_option_direction_set(this.NativeHandle, (int)value); } } /// /// Sets or gets the visibility of the more option view. /// /// 6 public bool IsOpened { get { return Interop.Eext.eext_more_option_opened_get(this.NativeHandle); } set { Interop.Eext.eext_more_option_opened_set(this.NativeHandle, value); } } /// /// Enumeration for the more option direction types. /// /// 6 public enum MoreOptionDirection { Top, Bottom, Left, Right } } } } }