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
}
}
}
}
}