elementary/naviframe - 3 more APIs.
authorhermet <hermet@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 3 Nov 2011 07:15:18 +0000 (07:15 +0000)
committerhermet <hermet@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 3 Nov 2011 07:15:18 +0000 (07:15 +0000)
elm_naviframe_items_get()
elm_naviframe_item_insert_before()
elm_naviframe_item_insert_after()

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@64679 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/Elementary.h.in
src/lib/elc_naviframe.c

index 5d428c7..f122551 100644 (file)
@@ -14662,7 +14662,7 @@ extern "C" {
     * 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.
@@ -28371,6 +28371,8 @@ extern "C" {
     * 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"
@@ -28378,6 +28380,66 @@ extern "C" {
     * @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
     *
@@ -28539,7 +28601,15 @@ extern "C" {
     * @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);
 
    /**
     * @}
index daef696..a2825b6 100644 (file)
@@ -135,6 +135,12 @@ static void _item_content_set(Elm_Naviframe_Item *navi_it,
                               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)
@@ -866,56 +872,18 @@ _item_style_set(Elm_Naviframe_Item *navi_it, const char *item_style)
      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);
@@ -952,7 +920,6 @@ elm_naviframe_item_push(Evas_Object *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
@@ -965,10 +932,64 @@ elm_naviframe_item_push(Evas_Object *obj,
      _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);
@@ -986,11 +1007,65 @@ elm_naviframe_item_push(Evas_Object *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)
 {
@@ -1221,3 +1296,12 @@ elm_naviframe_prev_btn_auto_pushed_get(const 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;
+}
+