class Elm.Hoversel (Elm.Button, Evas.Selectable_Interface,
                    Evas.Clickable_Interface,
                    Elm_Interface_Atspi_Widget_Action)
{
   eo_prefix: elm_obj_hoversel;
   methods {
      @property horizontal {
         [[Control if the hoversel should expand horizontally.

          Note: The initial button will display horizontally regradless of this setting.]]
         set {
            [[\@MOBILE_ONLY

              \@if MOBILE \@since_tizen 2.4
              \@endif
            ]]
         }
         get {
            [[\@MOBILE_ONLY

              \@if MOBILE \@since_tizen 2.4
              \@endif
            ]]
         }
         values {
            horizontal: bool; [[If $true, the hover will expand horizontally to the right.]]
         }
      }
      @property hover_parent {
         [[Control the hover parent.

          Sets the hover parent object, the area that will be darkened when the
          hoversel is clicked. Should probably be the window that the hoversel is
          in.]]
         set {
            [[\@MOBILE_ONLY

              \@if MOBILE \@since_tizen 2.4
              \@endif
            ]]
         }
         get {
            [[\@MOBILE_ONLY

              \@if MOBILE \@since_tizen 2.4
              \@endif
            ]]
         }
         values {
            parent: Evas.Object * @nullable; [[The parent to use]]
         }
      }
      @property expanded {
         get {
            [[\@MOBILE_ONLY

              Returns whether the hoversel is expanded.

              \@if MOBILE \@since_tizen 2.4
              \@endif
            ]]
            return: bool; [[$true if the hoversel is expanded or $false otherwise]]
         }
      }
      @property items {
         get {
            [[\@MOBILE_ONLY

              Get the list of items within the given hoversel.

              \@if MOBILE \@since_tizen 2.4
              \@endif
            ]]
            return: const(list<Elm.Widget_Item *>)*;
         }
      }
      @property auto_update {
         [[Update icon and text of hoversel same to those of selected item automatically.]]
         get{
            [[\@MOBILE_ONLY

              \@if MOBILE \@since_tizen 3.0
              \@endif
            ]]
         }
         set{
            [[\@MOBILE_ONLY

              \@if MOBILE \@since_tizen 3.0
              \@endif
            ]]
         }
         values {
            auto_update: bool; [[$true if hoversel is updated automatically or $false otherwise]]
         }
      }
      hover_begin {
         [[\@MOBILE_ONLY

           This triggers the hoversel popup from code, the same as if the user had clicked the button.

           \@if MOBILE \@since_tizen 2.4
           \@endif
         ]]
      }
      clear {
         [[\@MOBILE_ONLY

           This will remove all the children items from the hoversel.

         Warning Should *not* be called while the hoversel is active; use
         @Elm.Hoversel.expanded.get to check first.

         \@if MOBILE \@since_tizen 2.4
         \@endif
       ]]
      }
      hover_end {
         [[\@MOBILE_ONLY

           This dismisses the hoversel popup as if the user had clicked outside the hover.

           \@if MOBILE \@since_tizen 2.4
           \@endif
         ]]
      }
      item_add {
         [[\@MOBILE_ONLY

           Add an item to the hoversel button

           This adds an item to the hoversel to show when it is clicked. Note: if you
           need to use an icon from an edje file then use Elm.Hoversel_Item.icon.set
           right after this function, and set icon_file to $null here.

           \@if MOBILE \@since_tizen 2.4
           \@endif
         ]]

           /* FIXME: Make the hoversel_item reference in the doc a real ref. */
           /* FIXME-doc
           For more information on what $icon_file and $icon_type are, see the
           @ref Icon "icon documentation". */
         return: Elm.Widget_Item *; [[A handle to the added item.]]
         params {
            @in label: const(char)* @optional; [[The text label to use for the item (NULL if not desired)]]
            @in icon_file: const(char)* @optional; [[An image file path on disk to use for the icon or standard icon name (NULL if not desired)]]
            @in icon_type: Elm_Icon_Type; [[The icon type if relevant]]
            @in func: Evas_Smart_Cb @optional; [[Convenience function to call when this item is selected. The last parameter $event_info of $func is the selected item pointer.]]
            @in data: const(void)* @optional; [[Data to pass to item-related functions]]
         }
      }
   }
   implements {
      class.constructor;
      Eo.Base.constructor;
      Eo.Base.destructor;
      Evas.Object_Smart.hide;
      Evas.Object_Smart.show;
      Evas.Object_Smart.add;
      Evas.Object_Smart.del;
      Elm.Widget.parent.set;
      Elm.Widget.theme_apply;
      Elm.Widget.translate;
      Elm.Widget.event;
      Elm.Button.admits_autorepeat.get;
      Elm_Interface_Atspi_Widget_Action.elm_actions.get;
      //TIZEN ONLY(20160519): added atspi children get api
      Elm_Interface_Atspi_Accessible.children.get;
      //
   }
   events {
      dismissed;
      expanded;
      item,focused;
      item,unfocused;
      language,changed;
      access,changed;
   }

}
