/* * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the License); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.Collections.Generic; namespace ElmSharp { /// /// Enumeration for the ContextPopup direction types. /// /// preview public enum ContextPopupDirection { /// /// The ContextPopup appears below the clicked area. /// /// Down, /// /// The ContextPopup appears to the right of the clicked area. /// Right, /// /// The ContextPopup appears to the left of the clicked area. /// Left, /// /// The ContextPopup appears above the clicked area. /// Up, /// /// The ContextPopup does not determine it's direction yet. /// Unknown } /// /// It inherits . /// The ContextPopup is a widget that when shown, pops up a list of items. /// /// preview public class ContextPopup : Layout { HashSet _children = new HashSet(); SmartEvent _dismissed; Interop.Evas.SmartCallback _onSelected; /// /// Creates and initializes a new instance of the ContextPopup class. /// /// The parent is a given container, which will be attached by ContextPopup /// as a child. It's type. /// preview public ContextPopup(EvasObject parent) : base(parent) { _dismissed = new SmartEvent(this, this.RealHandle, "dismissed"); _dismissed.On += (sender, e) => { Dismissed?.Invoke(this, EventArgs.Empty); }; _onSelected = (data, obj, info) => { ContextPopupItem item = ItemObject.GetItemById((int)data) as ContextPopupItem; item?.SendSelected(); }; } /// /// Dismissed is raised when the ContextPopup item is dismissed. /// /// /// Outside of ContextPopup is clicked or it's parent area is changed or the language is changed, and then ContextPopup is dismissed. /// /// preview public event EventHandler Dismissed; /// /// Gets the current direction of a ContextPopup. /// /// /// Once the ContextPopup shows up, the direction would be determined. /// /// preview public ContextPopupDirection Direction { get { return (ContextPopupDirection)Interop.Elementary.elm_ctxpopup_direction_get(RealHandle); } } /// /// Gets or sets the value of the current ContextPopup object's orientation. /// True for horizontal mode, False for vertical mode (or errors). /// /// preview public bool IsHorizontal { get { return Interop.Elementary.elm_ctxpopup_horizontal_get(RealHandle); } set { Interop.Elementary.elm_ctxpopup_horizontal_set(RealHandle, value); } } /// /// Gets or sets whether the ContextPopup hides automatically /// or not when the parent of the ContextPopup is resized. /// /// /// Default value of AutoHide is False. /// /// preview public bool AutoHide { get { return !Interop.Elementary.elm_ctxpopup_auto_hide_disabled_get(RealHandle); } set { Interop.Elementary.elm_ctxpopup_auto_hide_disabled_set(RealHandle, !value); } } /// /// Clears all the items in a given ContextPopup object. /// /// preview public void Clear() { Interop.Elementary.elm_ctxpopup_clear(Handle); } /// /// Sets the direction priority of a ContextPopup. /// /// 1st priority of the direction. /// 2nd priority of the direction. /// 3th priority of the direction. /// 4th priority of the direction. /// preview public void SetDirectionPriorty(ContextPopupDirection first, ContextPopupDirection second, ContextPopupDirection third, ContextPopupDirection fourth) { Interop.Elementary.elm_ctxpopup_direction_priority_set(RealHandle, (int)first, (int)second, (int)third, (int)fourth); } /// /// Gets the direction priority of a ContextPopup. /// /// 1st priority of the direction to be returned. /// 2nd priority of the direction to be returned. /// 2nd priority of the direction to be returned. /// 4th priority of the direction to be returned. /// preview public void GetDirectionPriority(out ContextPopupDirection first, out ContextPopupDirection second, out ContextPopupDirection third, out ContextPopupDirection fourth) { int firstOut, secondOut, thirdOut, fourthOut; Interop.Elementary.elm_ctxpopup_direction_priority_get(Handle, out firstOut, out secondOut, out thirdOut, out fourthOut); first = (ContextPopupDirection)firstOut; second = (ContextPopupDirection)secondOut; third = (ContextPopupDirection)thirdOut; fourth = (ContextPopupDirection)fourthOut; } /// /// Adds a new item to a ContextPopup object with the label. /// /// Label of the new item. /// /// A ContextPopupItem added, or null on errors. /// /// preview public ContextPopupItem Append(string label) { return Append(label, null); } /// /// Adds a new item to a ContextPopup object with the label and icon. /// /// Label of the new item. /// Icon to be set on the new item. /// A ContextPopupItem added, or null on errors. /// preview public ContextPopupItem Append(string label, EvasObject icon) { ContextPopupItem item = new ContextPopupItem(label, icon, this); item.Handle = Interop.Elementary.elm_ctxpopup_item_append(RealHandle, label, icon, _onSelected, (IntPtr)item.Id); AddInternal(item); return item; } /// /// Dismisses a ContextPopup object. The ContextPopup will be hidden and the "clicked" signal will be emitted. /// /// preview public void Dismiss() { Interop.Elementary.elm_ctxpopup_dismiss(RealHandle); } /// /// Gets the possibility that the direction would be available. /// /// A direction that the user wants to check. /// /// Get false if you cannot put it in the direction. Get true if it's possible. /// /// preview /// [Obsolete("IsAvailableDirection is obsolete as of API6 and is no longer supported.")] public bool IsAvailableDirection(ContextPopupDirection direction) { Console.WriteLine("ContextPopup.IsAvailableDirection is obsolete as of API6 and is no longer supported."); return false; } /// /// Gets the Alpha of a default Color class. /// /// preview public override int Opacity { get { return Color.Default.A; } set { Console.WriteLine("ContextPopup instance doesn't support to set Opacity."); } } /// /// Creates a widget handle. /// /// Parent EvasObject. /// Handle IntPtr. /// preview protected override IntPtr CreateHandle(EvasObject parent) { return Interop.Elementary.elm_ctxpopup_add(parent.Handle); } void AddInternal(ContextPopupItem item) { _children.Add(item); item.Deleted += Item_Deleted; } void Item_Deleted(object sender, EventArgs e) { _children.Remove((ContextPopupItem)sender); } } }