* Insert a new item into the toolbar object after item @p after.
*
* @param obj The toolbar object.
- * @param before The toolbar item to insert before.
+ * @param after The toolbar item to insert after.
* @param icon A string with icon name or the absolute path of an image file.
* @param label The label of the item.
* @param func The function to call when the item is clicked.
* deleted when it is popped.
*
* @see also elm_naviframe_item_style_set()
+ * @see also elm_naviframe_item_insert_before()
+ * @see also elm_naviframe_item_insert_after()
*
* The following styles are available for this item:
* @li @c "default"
* @ingroup Naviframe
*/
EAPI Elm_Object_Item *elm_naviframe_item_push(Evas_Object *obj, const char *title_label, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *content, const char *item_style) EINA_ARG_NONNULL(1, 5);
+ /**
+ * @brief Insert a new item into the naviframe before item @p before.
+ *
+ * @param before The naviframe item to insert before.
+ * @param title_label The label in the title area. The name of the title
+ * label part is "elm.text.title"
+ * @param prev_btn 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"
+ * @param next_btn 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"
+ * @param content The main content object. The name of content part is
+ * "elm.swallow.content"
+ * @param item_style The current item style name. @c NULL would be default.
+ * @return The created item or @c NULL upon failure.
+ *
+ * The item is inserted into the naviframe straight away without any
+ * transition operations. This item will be deleted when it is popped.
+ *
+ * @see also elm_naviframe_item_style_set()
+ * @see also elm_naviframe_item_push()
+ * @see also elm_naviframe_item_insert_after()
+ *
+ * The following styles are available for this item:
+ * @li @c "default"
+ *
+ * @ingroup Naviframe
+ */
+ EAPI Elm_Object_Item *elm_naviframe_item_insert_before(Elm_Object_Item *before, const char *title_label, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *content, const char *item_style) EINA_ARG_NONNULL(1, 5);
+ /**
+ * @brief Insert a new item into the naviframe after item @p after.
+ *
+ * @param after The naviframe item to insert after.
+ * @param title_label The label in the title area. The name of the title
+ * label part is "elm.text.title"
+ * @param prev_btn 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"
+ * @param next_btn 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"
+ * @param content The main content object. The name of content part is
+ * "elm.swallow.content"
+ * @param item_style The current item style name. @c NULL would be default.
+ * @return The created item or @c NULL upon failure.
+ *
+ * The item is inserted into the naviframe straight away without any
+ * transition operations. This item will be deleted when it is popped.
+ *
+ * @see also elm_naviframe_item_style_set()
+ * @see also elm_naviframe_item_push()
+ * @see also elm_naviframe_item_insert_before()
+ *
+ * The following styles are available for this item:
+ * @li @c "default"
+ *
+ * @ingroup Naviframe
+ */
+ EAPI Elm_Object_Item *elm_naviframe_item_insert_after(Elm_Object_Item *after, const char *title_label, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *content, const char *item_style) EINA_ARG_NONNULL(1, 5);
/**
* @brief Pop an item that is on top of the stack
*
* @see also elm_naviframe_item_push()
* elm_naviframe_prev_btn_auto_pushed_set()
*/
- EAPI Eina_Bool elm_naviframe_prev_btn_auto_pushed_get(const Evas_Object *obj); EINA_ARG_NONNULL(1);
+ EAPI Eina_Bool elm_naviframe_prev_btn_auto_pushed_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+ /**
+ * @brief Get a list of all the naviframe items.
+ *
+ * @param obj The naviframe object
+ * @return An Eina_Inlist* of naviframe items, #Elm_Object_Item,
+ * or @c NULL on failure.
+ */
+ EAPI Eina_Inlist *elm_naviframe_items_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
* @}
Evas_Object *content);
static void _item_style_set(Elm_Naviframe_Item *navi_it,
const char *item_style);
+static Elm_Naviframe_Item * _item_new(Evas_Object *obj,
+ const char *title_label,
+ Evas_Object *prev_btn,
+ Evas_Object *next_btn,
+ Evas_Object *content,
+ const char *item_style);
static void
_del_hook(Evas_Object *obj)
evas_object_freeze_events_set(VIEW(navi_it), EINA_FALSE);
}
-EAPI Evas_Object *
-elm_naviframe_add(Evas_Object *parent)
+static Elm_Naviframe_Item *
+_item_new(Evas_Object *obj,
+ const char *title_label,
+ Evas_Object *prev_btn,
+ Evas_Object *next_btn,
+ Evas_Object *content,
+ const char *item_style)
{
- Evas_Object *obj;
- Evas *e;
- Widget_Data *wd;
-
- ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
- ELM_SET_WIDTYPE(widtype, "naviframe");
- elm_widget_type_set(obj, "naviframe");
- elm_widget_sub_object_add(parent, obj);
- elm_widget_data_set(obj, wd);
- elm_widget_del_hook_set(obj, _del_hook);
- elm_widget_disable_hook_set(obj, _disable_hook);
- elm_widget_theme_hook_set(obj, _theme_hook);
- elm_widget_signal_emit_hook_set(obj, _emit_hook);
-
- //base
- wd->base = edje_object_add(e);
- edje_object_mirrored_set(wd->base, elm_widget_mirrored_get(obj));
- elm_widget_resize_object_set(obj, wd->base);
- _elm_theme_object_set(obj, wd->base, "naviframe", "base", "default");
-
- evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _move, obj);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize, obj);
- evas_object_smart_callbacks_descriptions_set(obj, _signals);
-
- wd->auto_pushed = EINA_TRUE;
- wd->freeze_events = EINA_TRUE;
-
- return obj;
-}
-
-EAPI Elm_Object_Item *
-elm_naviframe_item_push(Evas_Object *obj,
- const char *title_label,
- Evas_Object *prev_btn,
- Evas_Object *next_btn,
- Evas_Object *content,
- const char *item_style)
-{
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd;
- Elm_Naviframe_Item *prev_it, *it;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
+ Widget_Data *wd = elm_widget_data_get(obj);
//create item
- it = elm_widget_item_new(obj, Elm_Naviframe_Item);
+ Elm_Naviframe_Item *it = elm_widget_item_new(obj, Elm_Naviframe_Item);
if (!it)
{
ERR("Failed to allocate new item! : naviframe=%p", obj);
_title_clicked, it);
_item_style_set(it, item_style);
-
_item_text_set_hook((Elm_Object_Item *) it, "elm.text.title", title_label);
//title buttons
_title_prev_btn_set(it, prev_btn, EINA_FALSE);
_title_next_btn_set(it, next_btn);
-
_item_content_set(it, content);
-
_item_sizing_eval(it);
+
+ it->title_visible = EINA_TRUE;
+ return it;
+}
+
+EAPI Evas_Object *
+elm_naviframe_add(Evas_Object *parent)
+{
+ Evas_Object *obj;
+ Evas *e;
+ Widget_Data *wd;
+
+ ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
+ ELM_SET_WIDTYPE(widtype, "naviframe");
+ elm_widget_type_set(obj, "naviframe");
+ elm_widget_sub_object_add(parent, obj);
+ elm_widget_data_set(obj, wd);
+ elm_widget_del_hook_set(obj, _del_hook);
+ elm_widget_disable_hook_set(obj, _disable_hook);
+ elm_widget_theme_hook_set(obj, _theme_hook);
+ elm_widget_signal_emit_hook_set(obj, _emit_hook);
+
+ //base
+ wd->base = edje_object_add(e);
+ edje_object_mirrored_set(wd->base, elm_widget_mirrored_get(obj));
+ elm_widget_resize_object_set(obj, wd->base);
+ _elm_theme_object_set(obj, wd->base, "naviframe", "base", "default");
+
+ evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _move, obj);
+ evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize, obj);
+ evas_object_smart_callbacks_descriptions_set(obj, _signals);
+
+ wd->auto_pushed = EINA_TRUE;
+ wd->freeze_events = EINA_TRUE;
+
+ return obj;
+}
+
+EAPI Elm_Object_Item *
+elm_naviframe_item_push(Evas_Object *obj,
+ const char *title_label,
+ Evas_Object *prev_btn,
+ Evas_Object *next_btn,
+ Evas_Object *content,
+ const char *item_style)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ Widget_Data *wd;
+ Elm_Naviframe_Item *prev_it, *it;
+
+ wd = elm_widget_data_get(obj);
+ if (!wd) return NULL;
+
+ it = _item_new(obj, title_label, prev_btn, next_btn, content, item_style);
+ if (!it) return NULL;
+
evas_object_show(VIEW(it));
prev_it = (Elm_Naviframe_Item *) elm_naviframe_top_item_get(obj);
"elm,state,new,pushed",
"elm");
}
- it->title_visible = EINA_TRUE;
wd->stack = eina_inlist_append(wd->stack, EINA_INLIST_GET(it));
return (Elm_Object_Item *) it;
}
+EAPI Elm_Object_Item *
+elm_naviframe_item_insert_before(Elm_Object_Item *before,
+ const char *title_label,
+ Evas_Object *prev_btn,
+ Evas_Object *next_btn,
+ Evas_Object *content,
+ const char *item_style)
+{
+ ELM_OBJ_ITEM_CHECK_OR_RETURN(before, NULL);
+ Elm_Naviframe_Item *it;
+ Widget_Data *wd;
+
+ wd = elm_widget_data_get(WIDGET(before));
+ if (!wd) return NULL;
+
+ it = _item_new(WIDGET(before), title_label, prev_btn, next_btn, content,
+ item_style);
+ if (!it) return NULL;
+
+ wd->stack =
+ eina_inlist_prepend_relative(wd->stack, EINA_INLIST_GET(it),
+ EINA_INLIST_GET(((Elm_Naviframe_Item *) before)));
+ return (Elm_Object_Item *) it;
+}
+
+EAPI Elm_Object_Item *
+elm_naviframe_item_insert_after(Elm_Object_Item *after,
+ const char *title_label,
+ Evas_Object *prev_btn,
+ Evas_Object *next_btn,
+ Evas_Object *content,
+ const char *item_style)
+{
+ ELM_OBJ_ITEM_CHECK_OR_RETURN(after, NULL);
+ Elm_Naviframe_Item *it;
+ Widget_Data *wd;
+
+ wd = elm_widget_data_get(WIDGET(after));
+ if (!wd) return NULL;
+
+ it = _item_new(WIDGET(after), title_label, prev_btn, next_btn, content,
+ item_style);
+ if (!it) return NULL;
+
+ if (elm_naviframe_top_item_get(WIDGET(after)) == after)
+ {
+ evas_object_hide(VIEW(after));
+ evas_object_show(VIEW(it));
+ }
+ wd->stack =
+ eina_inlist_append_relative(wd->stack, EINA_INLIST_GET(it),
+ EINA_INLIST_GET(((Elm_Naviframe_Item *) after)));
+ return (Elm_Object_Item *) it;
+}
+
EAPI Evas_Object *
elm_naviframe_item_pop(Evas_Object *obj)
{
return wd->auto_pushed;
}
+EAPI Eina_Inlist *
+elm_naviframe_items_get(const Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return NULL;
+ return wd->stack;
+}
+