class Elm.Menu (Elm.Widget, Evas.Clickable_Interface)
{
   eo_prefix: elm_obj_menu;
   methods {
      @property selected_item {
         get @internal {
            [[Get the selected item in the menu.]]
            return: Elm.Widget_Item *; [[The selected item or $null.]]
         }
      }
      @property items {
         get @internal {
            [[Returns a list of the item's items.]]
            return: const(list<Elm.Widget_Item *>)*;
         }
      }
      @property first_item {
         get @internal {
            [[Get the first item in the menu.]]
            return: Elm.Widget_Item *;
         }
      }
      @property last_item {
         get @internal {
            [[Get the last item in the menu.]]
            return: Elm.Widget_Item *;
         }
      }
      move @internal {
         [[Move the menu to a new position

           Sets the top-left position of the menu to ($x, $y).

           Note: $x and $y coordinates are relative to parent.
         ]]
         params {
            @in x: Evas.Coord; [[The new position.]]
            @in y: Evas.Coord; [[The new position.]]
         }
      }
      item_add @internal {
         [[Add an item at the end of the given menu widget.

           Note: This function does not accept relative icon path.
         ]]
         return: Elm.Widget_Item *; [[The new menu item.]]
         params {
            @in parent: Elm.Widget_Item * @optional; [[The parent menu item (optional).]]
            @in icon: const(char)* @optional; [[An icon display on the item. The icon will be destroyed by the menu.]]
            @in label: const(char)*; [[The label of the item.]]
            @in func: Evas_Smart_Cb @optional; [[Function called when the user select the item.]]
            @in data: const(void)* @optional; [[Data sent by the callback.]]
         }
      }
      close @internal {
         [[Close a opened menu

           Hides the menu and all it's sub-menus.
         ]]
      }
      item_separator_add @internal {
         [[Add a separator item to menu $obj under $parent.]]
         return: Elm.Widget_Item *; [[The created item or $null.]]
         params {
            @in parent: Elm.Widget_Item *; [[The item to add the separator under.]]
         }
      }
   }
   implements {
      class.constructor;
      Eo.Base.constructor;
      Eo.Base.destructor;
      Evas.Object_Smart.show;
      Evas.Object_Smart.add;
      Evas.Object_Smart.del;
      Elm.Widget.parent;
      Elm.Widget.theme_apply;
      Elm.Widget.translate;
   }
   events {
      language,changed;
      access,changed;
      dismissed;
      elm,action,block_menu;
      elm,action,unblock_menu;
   }

}
