class Elm.Naviframe (Elm.Layout, Elm_Interface_Atspi_Widget_Action)
{
   eo_prefix: elm_obj_naviframe;
   methods {
      @property event_enabled {
         [[Control the event enabled when pushing/popping items

           If $enabled is $true, the contents of the naviframe item will
           receives events from mouse and keyboard during view changing such as
           item push/pop.

           Warning: Events will be blocked by calling evas_object_freeze_events_set()
           internally. So don't call the API whiling pushing/popping items.]]
         set {
            [[
              \@if MOBILE \@since_tizen 2.3
              \@elseif WEARABLE \@since_tizen 2.3.1
              \@endif
            ]]
         }
         get {
            [[
              \@if MOBILE \@since_tizen 2.3
              \@elseif WEARABLE \@since_tizen 2.3.1
              \@endif
            ]]
         }
         values {
            enabled: bool; [[Events are received when enabled is $true, and ignored otherwise.]]
         }
      }
      @property content_preserve_on_pop {
         [[Preserve the content objects when items are popped.]]
         set {
            [[
              \@if MOBILE \@since_tizen 2.3
              \@elseif WEARABLE \@since_tizen 2.3.1
              \@endif
            ]]
         }
         get {
            [[
              \@if MOBILE \@since_tizen 2.3
              \@elseif WEARABLE \@since_tizen 2.3.1
              \@endif
            ]]
         }
         values {
            preserve: bool; [[Enable the preserve mode if $true, disable otherwise]]
         }
      }
      @property prev_btn_auto_pushed {
         [[Control if creating prev button automatically or not]]
         set {
            [[
              \@if MOBILE \@since_tizen 2.3
              \@elseif WEARABLE \@since_tizen 2.3.1
              \@endif
            ]]
         }
         get {
            [[
              \@if MOBILE \@since_tizen 2.3
              \@elseif WEARABLE \@since_tizen 2.3.1
              \@endif
            ]]
         }
         values {
            auto_pushed: bool; [[If $true, the previous button(back button) will be created internally when you pass the $NULL to the prev_btn parameter in elm_naviframe_item_push]]
         }
      }
      @property items {
         get {
            [[Get a list of all the naviframe items.

              \@if MOBILE \@since_tizen 2.3
              \@elseif WEARABLE \@since_tizen 2.3.1
              \@endif
            ]]

            return: free(own(list<Elm.Widget_Item *> *), eina_list_free) @warn_unused; [[A list of naviframe items, @Elm.Widget_Item, or $NULL on failure. Note: The returned list MUST be freed.]]
         }
      }
      @property top_item {
         get {
            [[Get a top item on the naviframe stack

              \@if MOBILE \@since_tizen 2.3
              \@elseif WEARABLE \@since_tizen 2.3.1
              \@endif
            ]]

            return: Elm.Widget_Item *; [[The top item on the naviframe stack or $NULL, if the stack is empty]]
         }
      }
      @property bottom_item {
         get {
            [[Get a bottom item on the naviframe stack

              \@if MOBILE \@since_tizen 2.3
              \@elseif WEARABLE \@since_tizen 2.3.1
              \@endif
            ]]

            return: Elm.Widget_Item *; [[The bottom item on the naviframe stack or $NULL, if the stack is empty]]
         }
      }
      item_pop {
         [[Pop an item that is on top of the stack

           This pops an item that is on the top(visible) of the naviframe, makes it
           disappear, then deletes the item. The item that was underneath it on the
           stack will become visible.
           
           When pop transition animation is in progress, new pop operation is blocked until current pop operation
           is complete.

            \@if MOBILE \@since_tizen 2.3
            \@elseif WEARABLE \@since_tizen 2.3.1
            \@endif
          ]]

         return: Evas.Object *; [[$NULL or the content object(if the elm_naviframe_content_preserve_on_pop_get is true).]]
      }
      item_insert_before {
         [[Insert a new item into the naviframe before item $before.

           The item is inserted into the naviframe straight away without any
           transition operations. This item will be deleted when it is popped.

           \@if MOBILE \@since_tizen 2.3
           \@elseif WEARABLE \@since_tizen 2.3.1
           \@endif
         ]]

         return: Elm.Widget_Item *; [[The created item or $NULL upon failure.]]
         params {
            @in before: Elm.Widget_Item *; [[The naviframe item to insert before.]]
            @in title_label: const(char)* @optional; [[The label in the title area. The name of the title label part is "elm.text.title"]]
            @in prev_btn: Evas.Object * @nullable; [[The button to go to the previous item. If it is NULL, then naviframe will create a back button automatically. The name of the prev_btn part is "elm.swallow.prev_btn"]]
            @in next_btn: Evas.Object * @nullable; [[The button to go to the next item. Or It could be just an extra function button. The name of the next_btn part is "elm.swallow.next_btn"]]
            @in content: Evas.Object *; [[The main content object. The name of content part is "elm.swallow.content"]]
            @in item_style: const(char)* @nullable; [[The current item style name. $NULL would be default.]]
         }
      }
      item_push {
         [[Push a new item to the top of the naviframe stack (and show it).


           The item pushed becomes one page of the naviframe, this item will be
           deleted when it is popped.
           
           When push transition animation is in progress, pop operation is blocked until push is complete.

           The following styles are available for this item:
           "default"

            \@if MOBILE \@since_tizen 2.3
            \@elseif WEARABLE \@since_tizen 2.3.1
            \@endif
          ]]

         return: Elm.Widget_Item *; [[The created item or $NULL upon failure.]]
         params {
            @in title_label: const(char)* @optional; [[The label in the title area. The name of the title label part is "elm.text.title"]]
            @in prev_btn: Evas.Object * @nullable; [[The button to go to the previous item. If it is NULL, then naviframe will create a back button automatically. The name of the prev_btn part is "elm.swallow.prev_btn"]]
            @in next_btn: Evas.Object * @nullable; [[The button to go to the next item. Or It could be just an extra function button. The name of the next_btn part is "elm.swallow.next_btn"]]
            @in content: Evas.Object *; [[The main content object. The name of content part is "elm.swallow.content"]]
            @in item_style: const(char)* @nullable; [[The current item style name. $NULL would be default.]]
         }
      }
      item_simple_promote {
         [[Simple version of item_promote.

           \@if MOBILE \@since_tizen 2.3
           \@elseif WEARABLE \@since_tizen 2.3.1
           \@endif
         ]]

         params {
            @in content: Evas.Object *;
         }
      }
      item_insert_after {
         [[Insert a new item into the naviframe after item $after.

           The item is inserted into the naviframe straight away without any
           transition operations. This item will be deleted when it is popped.

           The following styles are available for this item:
           "default"

            \@if MOBILE \@since_tizen 2.3
            \@elseif WEARABLE \@since_tizen 2.3.1
            \@endif
          ]]

         return: Elm.Widget_Item *; [[The created item or $NULL upon failure.]]
         params {
            @in after: Elm.Widget_Item *; [[The naviframe item to insert after.]]
            @in title_label: const(char)* @optional; [[The label in the title area. The name of the title label part is "elm.text.title"]]
            @in prev_btn: Evas.Object * @nullable; [[The button to go to the previous item. If it is NULL, then naviframe will create a back button automatically. The name of the prev_btn part is "elm.swallow.prev_btn"]]
            @in next_btn: Evas.Object * @nullable; [[The button to go to the next item. Or It could be just an extra function button. The name of the next_btn part is "elm.swallow.next_btn"]]
            @in content: Evas.Object *; [[The main content object. The name of content part is "elm.swallow.content"]]
            @in item_style: const(char)* @nullable; [[The current item style name. $NULL would be default.]]
         }
      }
   }
   implements {
      class.constructor;
      Eo.Base.constructor;
      Evas.Object_Smart.del;
      Evas.Object_Smart.show;
      Evas.Object_Smart.add;
      Elm.Widget.focus_direction;
      Elm.Widget.focus_next_manager_is;
      Elm.Widget.focus_direction_manager_is;
      Elm.Widget.access;
      //TIZEN_ONLY(20160822): When atspi mode is dynamically switched on/off,
      //register/unregister access objects accordingly.
      // TIZEN_ONLY(20170516): connect to at-spi dbus based on org.a11y.Status.IsEnabled property
      Elm.Widget.screen_reader;
      //
      //
      //TIZEN_ONLY(20161208): add API elm_object_part_access_object_get
      Elm.Widget.part_access_object_get;
      //
      Elm.Widget.focus_next;
      Elm.Widget.translate;
      Elm.Widget.theme_apply;
      Elm.Widget.event;
      Elm.Container.content_get;
      Elm.Container.content_set;
      Elm.Container.content_unset;
      Elm.Layout.text_set;
      Elm.Layout.text_get;
      Elm.Layout.signal_emit;
      Elm.Layout.sizing_eval;
      Elm_Interface_Atspi_Widget_Action.elm_actions.get;
      //TIZEN_ONLY(20161213) Using VIEW(item) for naviframe, naviframe item accessible information
      Elm_Interface_Atspi_Accessible.name.get;
      Elm_Interface_Atspi_Accessible.description.get;
      //
   }
   events {
      transition,finished;
      title,transition,finished;
      title,clicked;
      item,activated;
      language,changed;
      access,changed;
   }

}
