Documentatation and example for the twins anchorblock and anchorview
authorIván Briano <sachieru@gmail.com>
Thu, 16 Jun 2011 21:28:02 +0000 (21:28 +0000)
committerIván Briano <sachieru@gmail.com>
Thu, 16 Jun 2011 21:28:02 +0000 (21:28 +0000)
SVN revision: 60411

legacy/elementary/src/examples/Makefile.am
legacy/elementary/src/examples/anchorblock_example_01.c [new file with mode: 0644]
legacy/elementary/src/lib/Elementary.h.in
legacy/elementary/src/lib/elc_anchorblock.c
legacy/elementary/src/lib/elc_anchorview.c

index f58fcce..96b34de 100644 (file)
@@ -20,6 +20,7 @@ LDADD = \
 
 SRCS = \
        actionslider_example_01.c \
+        anchorblock_example_01.c \
        bg_example_01.c \
        bg_example_02.c \
        bg_example_03.c
@@ -34,6 +35,7 @@ endif
 if EFL_BUILD_EXAMPLES
 pkglib_PROGRAMS += \
        actionslider_example_01 \
+        anchorblock_example_01 \
        bg_example_01 \
        bg_example_02 \
        bg_example_03
diff --git a/legacy/elementary/src/examples/anchorblock_example_01.c b/legacy/elementary/src/examples/anchorblock_example_01.c
new file mode 100644 (file)
index 0000000..fe69892
--- /dev/null
@@ -0,0 +1,250 @@
+/*
+ * gcc -o anchorblock_example_01 anchorblock_example_01.c `pkg-config --cflags --libs elementary`
+ */
+#include <Elementary.h>
+
+static void _anchorblock_clicked_cb(void *data, Evas_Object *obj, void *ev);
+static void _anchorview_clicked_cb(void *data, Evas_Object *obj, void *ev);
+
+int
+elm_main(int argc, char *argv[])
+{
+   Evas_Object *win, *box, *o, *frame;
+   const char *anchortext =
+      "Example of some markup text, a long one at that, using anchors in"
+      "different ways, like <a href=random>some random text</a>.<br>"
+      "Something more useful is to have actions over urls, either in direct"
+      "form: <a href=url:http://www.enlightenment.org>"
+      "http://www.enlightenment.org</a> or with "
+      "<a href=url:http://www.enlightenment.org>more random text</a>.<br>"
+      "In any case, the href part of the anchor is what you will receive on"
+      "the callback, so it's a good idea to keep anything needed to identify"
+      "whatever is linked at in there.<br>"
+      "Playing to be a phone, we can also identify contacts from our address"
+      "list, like this dude here <a href=contact:42>Thomas Anderson</a>, or"
+      "phone numbers <a href=tel:+61432123>+61 432 1234</a>.";
+
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   win = elm_win_add(NULL, "Anchortwins example", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Anchortwins example");
+   elm_win_autodel_set(win, EINA_TRUE);
+   evas_object_resize(win, 320, 300);
+   evas_object_show(win);
+
+   o = elm_bg_add(win);
+   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, o);
+   evas_object_show(o);
+
+   box = elm_box_add(win);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_win_resize_object_add(win, box);
+   evas_object_show(box);
+
+   frame = elm_frame_add(win);
+   elm_frame_label_set(frame, "Anchorblock");
+   evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(frame);
+   elm_box_pack_end(box, frame);
+
+   o = elm_anchorblock_add(win);
+   elm_anchorblock_hover_style_set(o, "popout");
+   elm_anchorblock_hover_parent_set(o, win);
+   elm_anchorblock_text_set(o, anchortext);
+   evas_object_smart_callback_add(o, "anchor,clicked", _anchorblock_clicked_cb,
+                                  NULL);
+   evas_object_show(o);
+   elm_frame_content_set(frame, o);
+
+   frame = elm_frame_add(win);
+   elm_frame_label_set(frame, "Anchorview");
+   evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(frame);
+   elm_box_pack_end(box, frame);
+
+   o = elm_anchorview_add(win);
+   elm_anchorview_hover_parent_set(o, frame);
+   elm_anchorview_bounce_set(o, EINA_FALSE, EINA_TRUE);
+   elm_anchorview_text_set(o, anchortext);
+   evas_object_smart_callback_add(o, "anchor,clicked", _anchorview_clicked_cb,
+                                  NULL);
+   evas_object_show(o);
+   elm_frame_content_set(frame, o);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN();
+
+static void _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_Smart_Cb btn_end_cb);
+
+static void
+_btn_anchorblock_end_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   elm_anchorblock_hover_end((Evas_Object *)data);
+}
+
+static void
+_anchorblock_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   Elm_Entry_Anchorblock_Info *info = event_info;
+   _anchor_buttons_create(obj, info, _btn_anchorblock_end_cb);
+}
+
+static void
+_btn_anchorview_end_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   elm_anchorview_hover_end((Evas_Object *)data);
+}
+
+static void
+_anchorview_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   /* should be an Elm_Entry_Anchorview_Info, but since both of them are
+    * the same, it simplifies code in this example to use one only */
+   Elm_Entry_Anchorblock_Info *info = event_info;
+   _anchor_buttons_create(obj, info, _btn_anchorview_end_cb);
+}
+
+static void
+_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   const char *lbl = elm_button_label_get(obj);
+   printf("%s: %s\n", lbl, (char *)data);
+   eina_stringshare_del(data);
+}
+
+static void
+_anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_Smart_Cb btn_end_cb)
+{
+   Evas_Object *btn, *secondary = NULL, *box = NULL;
+   char *p;
+   const char *str;
+
+   btn = elm_button_add(ao);
+   evas_object_show(btn);
+
+   p = strchr(info->name, ':');
+   if (!p)
+     {
+        elm_button_label_set(btn, "Nothing to see here");
+        evas_object_smart_callback_add(btn, "clicked", btn_end_cb, ao);
+        elm_hover_content_set(info->hover, "middle", btn);
+        return;
+     }
+
+   str = eina_stringshare_add(p + 1);
+   if (!strncmp(info->name, "tel:", 4))
+     {
+        Evas_Object *o;
+        elm_button_label_set(btn, "Call");
+
+        secondary = elm_button_add(ao);
+        elm_button_label_set(secondary, "Send SMS");
+        evas_object_show(secondary);
+        evas_object_smart_callback_add(secondary, "clicked", btn_end_cb, ao);
+        evas_object_smart_callback_add(secondary, "clicked", _btn_clicked_cb,
+                                       str);
+
+        box = elm_box_add(ao);
+        evas_object_show(box);
+
+        o = elm_button_add(ao);
+        elm_button_label_set(o, "Add to contacts");
+        elm_box_pack_end(box, o);
+        evas_object_show(o);
+        evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
+        evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
+
+        o = elm_button_add(ao);
+        elm_button_label_set(o, "Send MMS");
+        elm_box_pack_end(box, o);
+        evas_object_show(o);
+        evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
+        evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
+     }
+   else if (!strncmp(info->name, "contact:", 8))
+     {
+        Evas_Object *o;
+        elm_button_label_set(btn, "Call");
+
+        secondary = elm_button_add(ao);
+        elm_button_label_set(secondary, "Send SMS");
+        evas_object_show(secondary);
+        evas_object_smart_callback_add(secondary, "clicked", btn_end_cb, ao);
+        evas_object_smart_callback_add(secondary, "clicked", _btn_clicked_cb,
+                                       str);
+
+        box = elm_box_add(ao);
+        evas_object_show(box);
+
+        o = elm_button_add(ao);
+        elm_button_label_set(o, "Send MMS");
+        elm_box_pack_end(box, o);
+        evas_object_show(o);
+        evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
+        evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
+     }
+   else if (!strncmp(info->name, "mailto:", 7))
+     {
+        Evas_Object *o;
+        elm_button_label_set(btn, "Send E-Mail");
+
+        secondary = elm_button_add(ao);
+        elm_button_label_set(secondary, "Add to contacts");
+        evas_object_show(secondary);
+        evas_object_smart_callback_add(secondary, "clicked", btn_end_cb, ao);
+        evas_object_smart_callback_add(secondary, "clicked", _btn_clicked_cb,
+                                       str);
+     }
+   else if (!strncmp(info->name, "url:", 4))
+     {
+        Evas_Object *o;
+        elm_button_label_set(btn, "Launch in browser");
+
+        box = elm_box_add(ao);
+        evas_object_show(box);
+
+        o = elm_button_add(ao);
+        elm_button_label_set(o, "Send as mail to...");
+        elm_box_pack_end(box, o);
+        evas_object_show(o);
+        evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
+        evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
+
+        o = elm_button_add(ao);
+        elm_button_label_set(o, "Send as SMS to...");
+        elm_box_pack_end(box, o);
+        evas_object_show(o);
+        evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
+        evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
+     }
+
+   evas_object_smart_callback_add(btn, "clicked", btn_end_cb, ao);
+   evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, str);
+   elm_hover_content_set(info->hover, "middle", btn);
+
+   if (secondary)
+     {
+        if (info->hover_right)
+          elm_hover_content_set(info->hover, "right", secondary);
+        else if (info->hover_left)
+          elm_hover_content_set(info->hover, "left", secondary);
+        else
+          evas_object_del(secondary);
+     }
+
+   if (box)
+     {
+        if (info->hover_bottom)
+          elm_hover_content_set(info->hover, "bottom", box);
+        else if (info->hover_top)
+          elm_hover_content_set(info->hover, "top", box);
+        else
+          evas_object_del(box);
+     }
+}
index 8d6eb50..1bb1743 100644 (file)
@@ -1852,66 +1852,550 @@ extern "C" {
     * in convenient packages that do more than basic stuff */
 
    /* anchorview */
+   /**
+    * @defgroup Anchorview Anchorview
+    *
+    * Anchorview is for displaying text that contains markup with anchors
+    * like <c>\<a href=1234\>something\</\></c> in it.
+    *
+    * Besides being styled differently, the anchorview widget provides the
+    * necessary functionality so that clicking on these anchors brings up a
+    * popup with user defined content such as "call", "add to contacts" or
+    * "open web page". This popup is provided using the @ref Hover widget.
+    *
+    * This widget is very similar to @ref Anchorblock, so refer to that
+    * widget for an example. The only difference Anchorview has is that the
+    * widget is already provided with scrolling functionality, so if the
+    * text set to it is too large to fit in the given space, it will scroll,
+    * whereas the @ref Anchorblock widget will keep growing to ensure all the
+    * text can be displayed.
+    *
+    * This widget emits the following signals:
+    * @li "anchor,clicked": will be called when an anchor is clicked. The
+    * @p event_info parameter on the callback will be a pointer of type
+    * ::Elm_Entry_Anchorview_Info.
+    *
+    * See @ref Anchorblock for an example on how to use both of them.
+    *
+    * @see Anchorblock
+    * @see Entry
+    * @see Hover
+    *
+    * @{
+    */
+   /**
+    * @typedef Elm_Entry_Anchorview_Info
+    *
+    * The info sent in the callback for "anchor,clicked" signals emitted by
+    * the Anchorview widget.
+    */
    typedef struct _Elm_Entry_Anchorview_Info Elm_Entry_Anchorview_Info;
+   /**
+    * @struct _Elm_Entry_Anchorview_Info
+    *
+    * The info sent in the callback for "anchor,clicked" signals emitted by
+    * the Anchorview widget.
+    */
    struct _Elm_Entry_Anchorview_Info
      {
-        const char     *name;
-        int             button;
-        Evas_Object    *hover;
+        const char     *name; /**< Name of the anchor, as indicated in its href
+                                   attribute */
+        int             button; /**< The mouse button used to click on it */
+        Evas_Object    *hover; /**< The hover object to use for the popup */
         struct {
              Evas_Coord    x, y, w, h;
-        } anchor, hover_parent;
-        Eina_Bool       hover_left : 1;
-        Eina_Bool       hover_right : 1;
-        Eina_Bool       hover_top : 1;
-        Eina_Bool       hover_bottom : 1;
+        } anchor, /**< Geometry selection of text used as anchor */
+          hover_parent; /**< Geometry of the object used as parent by the
+                             hover */
+        Eina_Bool       hover_left : 1; /**< Hint indicating if there's space
+                                             for content on the left side of
+                                             the hover. Before calling the
+                                             callback, the widget will make the
+                                             necessary calculations to check
+                                             which sides are fit to be set with
+                                             content, based on the position the
+                                             hover is activated and its distance
+                                             to the edges of its parent object
+                                             */
+        Eina_Bool       hover_right : 1; /**< Hint indicating content fits on
+                                              the right side of the hover.
+                                              See @ref hover_left */
+        Eina_Bool       hover_top : 1; /**< Hint indicating content fits on top
+                                            of the hover. See @ref hover_left */
+        Eina_Bool       hover_bottom : 1; /**< Hint indicating content fits
+                                               below the hover. See @ref
+                                               hover_left */
      };
+   /**
+    * Add a new Anchorview object
+    *
+    * @param parent The parent object
+    * @return The new object or NULL if it cannot be created
+    */
    EAPI Evas_Object *elm_anchorview_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   /**
+    * Set the text to show in the anchorview
+    *
+    * Sets the text of the anchorview to @p text. This text can include markup
+    * format tags, including <c>\<a href=anchorname\></c> to begin a segment of
+    * text that will be specially styled and react to click events, ended with
+    * either of \</a\> or \</\>. When clicked, the anchor will emit an
+    * "anchor,clicked" signal that you can attach a callback to with
+    * evas_object_smart_callback_add(). The name of the anchor given in the
+    * event info struct will be the one set in the href attribute, in this
+    * case, anchorname.
+    *
+    * Other markup can be used to style the text in different ways, but it's
+    * up to the style defined in the theme which tags do what.
+    */
    EAPI void         elm_anchorview_text_set(Evas_Object *obj, const char *text) EINA_ARG_NONNULL(1);
+   /**
+    * Get the markup text set for the anchorview
+    *
+    * Retrieves the text set on the anchorview, with markup tags included.
+    *
+    * @param obj The anchorview object
+    * @return The markup text set or @c NULL if nothing was set or an error
+    * occurred
+    */
    EAPI const char  *elm_anchorview_text_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
+   /**
+    * Set the parent of the hover popup
+    *
+    * Sets the parent object to use by the hover created by the anchorview
+    * when an anchor is clicked. See @ref Hover for more details on this.
+    * If no parent is set, the same anchorview object will be used.
+    *
+    * @param obj The anchorview object
+    * @param parent The object to use as parent for the hover
+    */
    EAPI void         elm_anchorview_hover_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1);
+   /**
+    * Get the parent of the hover popup
+    *
+    * Get the object used as parent for the hover created by the anchorview
+    * widget. See @ref Hover for more details on this.
+    *
+    * @param obj The anchorview object
+    * @return The object used as parent for the hover, NULL if none is set.
+    */
    EAPI Evas_Object *elm_anchorview_hover_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the style that the hover should use
+    *
+    * When creating the popup hover, anchorview will request that it's
+    * themed according to @p style.
+    *
+    * @param obj The anchorview object
+    * @param style The style to use for the underlying hover
+    *
+    * @see elm_object_style_set()
+    */
    EAPI void         elm_anchorview_hover_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
+   /**
+    * Get the style that the hover should use
+    *
+    * Get the style the hover created by anchorview will use.
+    *
+    * @param obj The anchorview object
+    * @return The style to use by the hover. NULL means the default is used.
+    *
+    * @see elm_object_style_set()
+    */
    EAPI const char  *elm_anchorview_hover_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Ends the hover popup in the anchorview
+    *
+    * When an anchor is clicked, the anchorview widget will create a hover
+    * object to use as a popup with user provided content. This function
+    * terminates this popup, returning the anchorview to its normal state.
+    *
+    * @param obj The anchorview object
+    */
    EAPI void         elm_anchorview_hover_end(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set bouncing behaviour when the scrolled content reaches an edge
+    *
+    * Tell the internal scroller object whether it should bounce or not
+    * when it reaches the respective edges for each axis.
+    *
+    * @param obj The anchorview object
+    * @param h_bounce Whether to bounce or not in the horizontal axis
+    * @param v_bounce Whether to bounce or not in the vertical axis
+    *
+    * @see elm_scroller_bounce_set()
+    */
    EAPI void         elm_anchorview_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
+   /**
+    * Get the set bouncing behaviour of the internal scroller
+    *
+    * Get whether the internal scroller should bounce when the edge of each
+    * axis is reached scrolling.
+    *
+    * @param obj The anchorview object
+    * @param h_bounce Pointer where to store the bounce state of the horizontal
+    *                 axis
+    * @param v_bounce Pointer where to store the bounce state of the vertical
+    *                 axis
+    *
+    * @see elm_scroller_bounce_get()
+    */
    EAPI void         elm_anchorview_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
+   /**
+    * Appends a custom item provider to the given anchorview
+    *
+    * Appends the given function to the list of items providers. This list is
+    * called, one function at a time, with the given @p data pointer, the
+    * anchorview object and, in the @p item parameter, the item name as
+    * referenced in its href string. Following functions in the list will be
+    * called in order until one of them returns something different to NULL,
+    * which should be an Evas_Object which will be used in place of the item
+    * element.
+    *
+    * Items in the markup text take the form \<item relsize=16x16 vsize=full
+    * href=item/name\>\</item\>
+    *
+    * @param obj The anchorview object
+    * @param func The function to add to the list of providers
+    * @param data User data that will be passed to the callback function
+    *
+    * @see elm_entry_item_provider_append()
+    */
    EAPI void         elm_anchorview_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
+   /**
+    * Prepend a custom item provider to the given anchorview
+    *
+    * Like elm_anchorview_item_provider_append(), but it adds the function
+    * @p func to the beginning of the list, instead of the end.
+    *
+    * @param obj The anchorview object
+    * @param func The function to add to the list of providers
+    * @param data User data that will be passed to the callback function
+    */
    EAPI void         elm_anchorview_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
+   /**
+    * Remove a custom item provider from the list of the given anchorview
+    *
+    * Removes the function and data pairing that matches @p func and @p data.
+    * That is, unless the same function and same user data are given, the
+    * function will not be removed from the list. This allows us to add the
+    * same callback several times, with different @p data pointers and be
+    * able to remove them later without conflicts.
+    *
+    * @param obj The anchorview object
+    * @param func The function to remove from the list
+    * @param data The data matching the function to remove from the list
+    */
    EAPI void         elm_anchorview_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
-   /* smart callbacks called:
-    * "anchor,clicked" - achor called was clicked | event_info = Elm_Entry_Anchorview_Info
+   /**
+    * @}
     */
 
    /* anchorblock */
+   /**
+    * @defgroup Anchorblock Anchorblock
+    *
+    * Anchorblock is for displaying text that contains markup with anchors
+    * like <c>\<a href=1234\>something\</\></c> in it.
+    *
+    * Besides being styled differently, the anchorblock widget provides the
+    * necessary functionality so that clicking on these anchors brings up a
+    * popup with user defined content such as "call", "add to contacts" or
+    * "open web page". This popup is provided using the @ref Hover widget.
+    *
+    * This widget emits the following signals:
+    * @li "anchor,clicked": will be called when an anchor is clicked. The
+    * @p event_info parameter on the callback will be a pointer of type
+    * ::Elm_Entry_Anchorblock_Info.
+    *
+    * @see Anchorview
+    * @see Entry
+    * @see Hover
+    *
+    * Since examples are usually better than plain words, we might as well
+    * try one. This exampel will show both Anchorblock and @ref Anchorview,
+    * since both are very similar and it's easier to show them once and side
+    * by side, so the difference is more clear.
+    *
+    * We'll show the relevant snippets of the code here, but the full example
+    * can be found here... sorry, @ref anchorblock_example_01.c "here".
+    *
+    * As for the actual example, it's just a simple window with an anchorblock
+    * and an anchorview, both containing the same text. After including
+    * Elementary.h and declaring some functions we'll need, we jump to our
+    * elm_main (see ELM_MAIN) and create our window.
+    * @dontinclude anchorblock_example_01.c
+    * @skip int
+    * @until const char
+    * @until ;
+    *
+    * With the needed variables declared, we'll create the window and a box to
+    * hold our widgets, but we don't need to go through that here.
+    *
+    * In order to make clear where the anchorblock ends and the anchorview
+    * begins, they'll be each inside a @ref Frame. After creating the frame,
+    * the anchorblock follows.
+    * @skip elm_frame_add
+    * @until elm_frame_content_set
+    *
+    * Nothing out of the ordinary there. What's worth mentioning is the call
+    * to elm_anchorblock_hover_parent_set(). We are telling our widget that
+    * when an anchor is clicked, the hover for the popup will cover the entire
+    * window. This affects the area that will be obscured by the hover and
+    * where clicking will dismiss it, as well as the calculations it does to
+    * inform the best locations where to insert the popups content.
+    * Other than that, the code is pretty standard. We also need to set our
+    * callback for when an anchor is clicked, since it's our task to populate
+    * the popup. There's no default for it.
+    *
+    * The anchorview is no different, we only change a few things so it looks
+    * different.
+    * @until elm_frame_content_set
+    *
+    * Then we run, so stuff works and close our main function in the usual way.
+    * @until ELM_MAIN
+    *
+    * Now, a little note. Normally you would use either one of anchorblock or
+    * anchorview, set your one callback to clicks and do your stuff in there.
+    * In this example, however, there are a few tricks to make it easier to
+    * show both widgets in one go (and to save me some typing). So we have
+    * two callbacks, one per widget, that will call a common function to do
+    * the rest. The trick is using ::Elm_Entry_Anchorblock_Info for the
+    * anchorview too, since both are equal, and passing a callback to use
+    * for our buttons to end the hover, because each widget has a different
+    * function for it.
+    * @until _anchorview_clicked_cb
+    * @until }
+    *
+    * The meat of our popup is in the following function. We check what kind
+    * of menu we need to show, based on the name set to the anchor in the
+    * markup text. If there's no type (something went wrong, no valid contact
+    * in the address list) we are just putting a button that does nothing, but
+    * it's perfectly reasonable to just end the hover and call it quits.
+    *
+    * Our popup will consist of one main button in the middle of our hover,
+    * and possibly a secondary button and a list of other options. We'll create
+    * first our main button and check what kind of popup we need afterwards.
+    * @skip static void
+    * @skip static void
+    * @until eina_stringshare_add
+    * @until }
+    *
+    * Each button has two callbacks, one is our hack to close the hover
+    * properly based on which widget it belongs to, the other a simple
+    * printf that will show the action with the anchors own data. This is
+    * not how you would usually do it. Instead, the common case is to have
+    * one callback for the button that will know which function to call to end
+    * things, but since we are doing it this way it's worth noting that
+    * smart callbacks will be called in reverse in respect to the order they
+    * were added, and since our @c btn_end_cb will close the hover, and thus
+    * delete our buttons, the other callback wouldn't be called if we had
+    * added it before.
+    *
+    * After our telephone popup, there are a few others that are practically
+    * the same, so they won't be shown here.
+    *
+    * Once we are done with that, it's time to place our actions into our
+    * hover. Main button goes in the middle without much questioning, and then
+    * we see if we have a secondary button and a box of extra options.
+    * Because I said so, secondary button goes on either side and box of
+    * options either on top or below the main one, but to choose which
+    * exactly, we use the hints our callback info has, which saves us from
+    * having to do the math and see which side has more space available, with
+    * a little special case where we delete our extra stuff if there's nowhere
+    * to place it.
+    * @skip url:
+    * @skip }
+    * @skip evas_object_smart
+    * @until evas_object_del(box)
+    * @until }
+    * @until }
+    */
+   /**
+    * @example anchorblock_example_01.c
+    */
+   /**
+    * @addtogroup Anchorblock
+    * @{
+    */
+   /**
+    * @typedef Elm_Entry_Anchorblock_Info
+    *
+    * The info sent in the callback for "anchor,clicked" signals emitted by
+    * the Anchorblock widget.
+    */
    typedef struct _Elm_Entry_Anchorblock_Info Elm_Entry_Anchorblock_Info;
+   /**
+    * @struct _Elm_Entry_Anchorblock_Info
+    *
+    * The info sent in the callback for "anchor,clicked" signals emitted by
+    * the Anchorblock widget.
+    */
    struct _Elm_Entry_Anchorblock_Info
      {
-        const char     *name;
-        int             button;
-        Evas_Object    *hover;
+        const char     *name; /**< Name of the anchor, as indicated in its href
+                                   attribute */
+        int             button; /**< The mouse button used to click on it */
+        Evas_Object    *hover; /**< The hover object to use for the popup */
         struct {
              Evas_Coord    x, y, w, h;
-        } anchor, hover_parent;
-        Eina_Bool       hover_left : 1;
-        Eina_Bool       hover_right : 1;
-        Eina_Bool       hover_top : 1;
-        Eina_Bool       hover_bottom : 1;
+        } anchor, /**< Geometry selection of text used as anchor */
+          hover_parent; /**< Geometry of the object used as parent by the
+                             hover */
+        Eina_Bool       hover_left : 1; /**< Hint indicating if there's space
+                                             for content on the left side of
+                                             the hover. Before calling the
+                                             callback, the widget will make the
+                                             necessary calculations to check
+                                             which sides are fit to be set with
+                                             content, based on the position the
+                                             hover is activated and its distance
+                                             to the edges of its parent object
+                                             */
+        Eina_Bool       hover_right : 1; /**< Hint indicating content fits on
+                                              the right side of the hover.
+                                              See @ref hover_left */
+        Eina_Bool       hover_top : 1; /**< Hint indicating content fits on top
+                                            of the hover. See @ref hover_left */
+        Eina_Bool       hover_bottom : 1; /**< Hint indicating content fits
+                                               below the hover. See @ref
+                                               hover_left */
      };
+   /**
+    * Add a new Anchorblock object
+    *
+    * @param parent The parent object
+    * @return The new object or NULL if it cannot be created
+    */
    EAPI Evas_Object *elm_anchorblock_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   /**
+    * Set the text to show in the anchorblock
+    *
+    * Sets the text of the anchorblock to @p text. This text can include markup
+    * format tags, including <c>\<a href=anchorname\></a></c> to begin a segment
+    * of text that will be specially styled and react to click events, ended
+    * with either of \</a\> or \</\>. When clicked, the anchor will emit an
+    * "anchor,clicked" signal that you can attach a callback to with
+    * evas_object_smart_callback_add(). The name of the anchor given in the
+    * event info struct will be the one set in the href attribute, in this
+    * case, anchorname.
+    *
+    * Other markup can be used to style the text in different ways, but it's
+    * up to the style defined in the theme which tags do what.
+    */
    EAPI void         elm_anchorblock_text_set(Evas_Object *obj, const char *text) EINA_ARG_NONNULL(1);
+   /**
+    * Get the markup text set for the anchorblock
+    *
+    * Retrieves the text set on the anchorblock, with markup tags included.
+    *
+    * @param obj The anchorblock object
+    * @return The markup text set or @c NULL if nothing was set or an error
+    * occurred
+    */
    EAPI const char  *elm_anchorblock_text_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the parent of the hover popup
+    *
+    * Sets the parent object to use by the hover created by the anchorblock
+    * when an anchor is clicked. See @ref Hover for more details on this.
+    *
+    * @param obj The anchorblock object
+    * @param parent The object to use as parent for the hover
+    */
    EAPI void         elm_anchorblock_hover_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1);
+   /**
+    * Get the parent of the hover popup
+    *
+    * Get the object used as parent for the hover created by the anchorblock
+    * widget. See @ref Hover for more details on this.
+    * If no parent is set, the same anchorblock object will be used.
+    *
+    * @param obj The anchorblock object
+    * @return The object used as parent for the hover, NULL if none is set.
+    */
    EAPI Evas_Object *elm_anchorblock_hover_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the style that the hover should use
+    *
+    * When creating the popup hover, anchorblock will request that it's
+    * themed according to @p style.
+    *
+    * @param obj The anchorblock object
+    * @param style The style to use for the underlying hover
+    *
+    * @see elm_object_style_set()
+    */
    EAPI void         elm_anchorblock_hover_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
+   /**
+    * Get the style that the hover should use
+    *
+    * Get the style the hover created by anchorblock will use.
+    *
+    * @param obj The anchorblock object
+    * @return The style to use by the hover. NULL means the default is used.
+    *
+    * @see elm_object_style_set()
+    */
    EAPI const char  *elm_anchorblock_hover_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Ends the hover popup in the anchorblock
+    *
+    * When an anchor is clicked, the anchorblock widget will create a hover
+    * object to use as a popup with user provided content. This function
+    * terminates this popup, returning the anchorblock to its normal state.
+    *
+    * @param obj The anchorblock object
+    */
    EAPI void         elm_anchorblock_hover_end(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Appends a custom item provider to the given anchorblock
+    *
+    * Appends the given function to the list of items providers. This list is
+    * called, one function at a time, with the given @p data pointer, the
+    * anchorblock object and, in the @p item parameter, the item name as
+    * referenced in its href string. Following functions in the list will be
+    * called in order until one of them returns something different to NULL,
+    * which should be an Evas_Object which will be used in place of the item
+    * element.
+    *
+    * Items in the markup text take the form \<item relsize=16x16 vsize=full
+    * href=item/name\>\</item\>
+    *
+    * @param obj The anchorblock object
+    * @param func The function to add to the list of providers
+    * @param data User data that will be passed to the callback function
+    *
+    * @see elm_entry_item_provider_append()
+    */
    EAPI void         elm_anchorblock_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
+   /**
+    * Prepend a custom item provider to the given anchorblock
+    *
+    * Like elm_anchorblock_item_provider_append(), but it adds the function
+    * @p func to the beginning of the list, instead of the end.
+    *
+    * @param obj The anchorblock object
+    * @param func The function to add to the list of providers
+    * @param data User data that will be passed to the callback function
+    */
    EAPI void         elm_anchorblock_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
+   /**
+    * Remove a custom item provider from the list of the given anchorblock
+    *
+    * Removes the function and data pairing that matches @p func and @p data.
+    * That is, unless the same function and same user data are given, the
+    * function will not be removed from the list. This allows us to add the
+    * same callback several times, with different @p data pointers and be
+    * able to remove them later without conflicts.
+    *
+    * @param obj The anchorblock object
+    * @param func The function to remove from the list
+    * @param data The data matching the function to remove from the list
+    */
    EAPI void         elm_anchorblock_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
-   /* smart callbacks called:
-    * "anchor,clicked" - achor called was clicked | event_info = Elm_Entry_Anchorblock_Info
+   /**
+    * @}
     */
 
    /* bubble */
index c79d345..77658a8 100644 (file)
@@ -1,20 +1,6 @@
 #include <Elementary.h>
 #include "elm_priv.h"
 
-/**
- * @defgroup Anchorblock Anchorblock
- *
- * Anchorblock is for displaying text that contains markup with anchors like:
- * \<a href=1234\>something\</\> in it. These will be drawn differently and will
- * be able to be clicked on by the user to display a popup. This popup then
- * is intended to contain extra options such as "call", "add to contacts",
- * "open web page" etc.
- *
- * Signals that you can add callbacks for are:
- *
- * "anchor,clicked" - anchor called was clicked. event_info is anchor info -
- *                    Elm_Entry_Anchorview_Info
- */
 typedef struct _Widget_Data Widget_Data;
 typedef struct _Elm_Anchorblock_Item_Provider Elm_Anchorblock_Item_Provider;
 
@@ -195,14 +181,6 @@ _item_provider(void *data, Evas_Object *entry __UNUSED__, const char *item)
    return NULL;
 }
 
-/**
- * Add a new Anchorblock object
- *
- * @param parent The parent object
- * @return The new object or NULL if it cannot be created
- *
- * @ingroup Anchorblock
- */
 EAPI Evas_Object *
 elm_anchorblock_add(Evas_Object *parent)
 {
@@ -245,19 +223,6 @@ elm_anchorblock_add(Evas_Object *parent)
    return obj;
 }
 
-/**
- * Set the text markup of the anchorblock
- *
- * This sets the text of the anchorblock to be the text given as @p text. This
- * text is in markup format with \<a href=XXX\> beginning an achor with the
- * string link of 'XXX', and \</\> or \</a\> ending the link. Other markup can
- * be used dependign on the style support.
- *
- * @param obj The anchorblock object
- * @param text The text to set, or NULL to clear
- *
- * @ingroup Anchorblock
- */
 EAPI void
 elm_anchorblock_text_set(Evas_Object *obj, const char *text)
 {
@@ -272,17 +237,6 @@ elm_anchorblock_text_set(Evas_Object *obj, const char *text)
    _sizing_eval(obj);
 }
 
-/**
- * Get the markup text set for the anchorblock
- *
- * This retrieves back the string set by @c elm_anchorblock_text_set().
- *
- * @param obj The anchorblock object
- * @return text The markup text set or @c NULL, either if it was not set
- * or an error occurred
- *
- * @ingroup Anchorblock
- */
 EAPI const char*
 elm_anchorblock_text_get(const Evas_Object *obj)
 {
@@ -292,17 +246,6 @@ elm_anchorblock_text_get(const Evas_Object *obj)
    return elm_entry_entry_get(wd->entry);
 }
 
-/**
- * Set the parent of the hover popup
- *
- * This sets the parent of the hover that anchorblock will create. See hover
- * objects for more information on this.
- *
- * @param obj The anchorblock object
- * @param parent The parent the hover should use
- *
- * @ingroup Anchorblock
- */
 EAPI void
 elm_anchorblock_hover_parent_set(Evas_Object *obj, Evas_Object *parent)
 {
@@ -316,17 +259,6 @@ elm_anchorblock_hover_parent_set(Evas_Object *obj, Evas_Object *parent)
      evas_object_event_callback_add(wd->hover_parent, EVAS_CALLBACK_DEL, _parent_del, obj);
 }
 
-/**
- * Get the parent of the hover popup
- *
- * This sgets the parent of the hover that anchorblock will create. See hover
- * objects for more information on this.
- *
- * @param obj The anchorblock object
- * @return The parent used by the hover
- *
- * @ingroup Anchorblock
- */
 EAPI Evas_Object *
 elm_anchorblock_hover_parent_get(const Evas_Object *obj)
 {
@@ -336,17 +268,6 @@ elm_anchorblock_hover_parent_get(const Evas_Object *obj)
    return wd->hover_parent;
 }
 
-/**
- * Set the style that the hover should use
- *
- * This sets the style for the hover that anchorblock will create. See hover
- * objects for more information
- *
- * @param obj The anchorblock object
- * @param style The style to use
- *
- * @ingroup Anchorblock
- */
 EAPI void
 elm_anchorblock_hover_style_set(Evas_Object *obj, const char *style)
 {
@@ -356,17 +277,6 @@ elm_anchorblock_hover_style_set(Evas_Object *obj, const char *style)
    eina_stringshare_replace(&wd->hover_style, style);
 }
 
-/**
- * Get the style that the hover should use
- *
- * This gets the style for the hover that anchorblock will create. See hover
- * objects for more information
- *
- * @param obj The anchorblock object
- * @return The style defined
- *
- * @ingroup Anchorblock
- */
 EAPI const char *
 elm_anchorblock_hover_style_get(const Evas_Object *obj)
 {
@@ -376,15 +286,6 @@ elm_anchorblock_hover_style_get(const Evas_Object *obj)
    return wd->hover_style;
 }
 
-/**
- * Stop the hover popup in the anchorblock
- *
- * This will stop the hover popup in the anchorblock if it is currently active.
- *
- * @param obj The anchorblock object
- *
- * @ingroup Anchorblock
- */
 EAPI void
 elm_anchorblock_hover_end(Evas_Object *obj)
 {
@@ -397,22 +298,6 @@ elm_anchorblock_hover_end(Evas_Object *obj)
    wd->pop = NULL;
 }
 
-/**
- * This appends a custom item provider to the list for that anchorblock
- *
- * This appends the given callback. The list is walked from beginning to end
- * with each function called given the item href string in the text. If the
- * function returns an object handle other than NULL (it should create an
- * and object to do this), then this object is used to replace that item. If
- * not the next provider is called until one provides an item object, or the
- * default provider in anchorblock does.
- *
- * @param obj The anchorblock object
- * @param func The function called to provide the item object
- * @param data The data passed to @p func
- *
- * @ingroup Anchorblock
- */
 EAPI void
 elm_anchorblock_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data)
 {
@@ -427,18 +312,6 @@ elm_anchorblock_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (voi
    wd->item_providers = eina_list_append(wd->item_providers, ip);
 }
 
-/**
- * This prepends a custom item provider to the list for that anchorblock
- *
- * This prepends the given callback. See elm_anchorblock_item_provider_append() for
- * more information
- *
- * @param obj The anchorblock object
- * @param func The function called to provide the item object
- * @param data The data passed to @p func
- *
- * @ingroup Anchorblock
- */
 EAPI void
 elm_anchorblock_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data)
 {
@@ -453,18 +326,6 @@ elm_anchorblock_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (vo
    wd->item_providers = eina_list_prepend(wd->item_providers, ip);
 }
 
-/**
- * This removes a custom item provider to the list for that anchorblock
- *
- * This removes the given callback. See elm_anchorblock_item_provider_append() for
- * more information
- *
- * @param obj The anchorblock object
- * @param func The function called to provide the item object
- * @param data The data passed to @p func
- *
- * @ingroup Anchorblock
- */
 EAPI void
 elm_anchorblock_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data)
 {
index dd586c7..95857e0 100644 (file)
@@ -1,17 +1,6 @@
 #include <Elementary.h>
 #include "elm_priv.h"
 
-/**
- * @defgroup Anchorview Anchorview
- *
- * This is just like the Anchorblock object, but provides a scroller to hold
- * the text automatically.
- *
- * Signals that you can add callbacks for are:
- *
- * "anchor,clicked" - achor called was clicked. event_info is anchor info -
- *                    Elm_Entry_Anchorview_Info
- */
 typedef struct _Widget_Data Widget_Data;
 typedef struct _Elm_Anchorview_Item_Provider Elm_Anchorview_Item_Provider;
 
@@ -186,14 +175,6 @@ _item_provider(void *data, Evas_Object *entry __UNUSED__, const char *item)
    return NULL;
 }
 
-/**
- * Add a new Anchorview object
- *
- * @param parent The parent object
- * @return The new object or NULL if it cannot be created
- *
- * @ingroup Anchorview
- */
 EAPI Evas_Object *
 elm_anchorview_add(Evas_Object *parent)
 {
@@ -239,19 +220,6 @@ elm_anchorview_add(Evas_Object *parent)
    return obj;
 }
 
-/**
- * Set the text markup of the anchorview
- *
- * This sets the text of the anchorview to be the text given as @p text. This
- * text is in markup format with \<a href=XXX\> beginning an achor with the
- * string link of 'XXX', and \</\> or \</a\> ending the link. Other markup can
- * be used dependign on the style support.
- *
- * @param obj The anchorview object
- * @param text The text to set, or NULL to clear
- *
- * @ingroup Anchorview
- */
 EAPI void
 elm_anchorview_text_set(Evas_Object *obj, const char *text)
 {
@@ -266,17 +234,6 @@ elm_anchorview_text_set(Evas_Object *obj, const char *text)
    _sizing_eval(obj);
 }
 
-/**
- * Get the markup text set for the anchorview
- *
- * This retrieves back the string set by @c elm_anchorview_text_set().
- *
- * @param obj The anchorview object
- * @return text The markup text set or @c NULL, either if it was not set
- * or an error occurred
- *
- * @ingroup Anchorview
- */
 EAPI const char*
 elm_anchorview_text_get(const Evas_Object *obj)
 {
@@ -286,17 +243,6 @@ elm_anchorview_text_get(const Evas_Object *obj)
    return elm_entry_entry_get(wd->entry);
 }
 
-/**
- * Set the parent of the hover popup
- *
- * This sets the parent of the hover that anchorview will create. See hover
- * objects for more information on this.
- *
- * @param obj The anchorview object
- * @param parent The parent the hover should use
- *
- * @ingroup Anchorview
- */
 EAPI void
 elm_anchorview_hover_parent_set(Evas_Object *obj, Evas_Object *parent)
 {
@@ -310,17 +256,6 @@ elm_anchorview_hover_parent_set(Evas_Object *obj, Evas_Object *parent)
      evas_object_event_callback_add(wd->hover_parent, EVAS_CALLBACK_DEL, _parent_del, obj);
 }
 
-/**
- * Get the parent of the hover popup
- *
- * This gets the parent of the hover that anchorview will created. See hover
- * objects for more information on this.
- *
- * @param obj The anchorview object
- * @return The parent used by hover
- *
- * @ingroup Anchorview
- */
 EAPI Evas_Object *
 elm_anchorview_hover_parent_get(const Evas_Object *obj)
 {
@@ -330,17 +265,6 @@ elm_anchorview_hover_parent_get(const Evas_Object *obj)
    return wd->hover_parent;
 }
 
-/**
- * Set the style that the hover should use
- *
- * This sets the style for the hover that anchorview will create. See hover
- * objects for more information
- *
- * @param obj The anchorview object
- * @param style The style to use
- *
- * @ingroup Anchorview
- */
 EAPI void
 elm_anchorview_hover_style_set(Evas_Object *obj, const char *style)
 {
@@ -350,17 +274,6 @@ elm_anchorview_hover_style_set(Evas_Object *obj, const char *style)
    eina_stringshare_replace(&wd->hover_style, style);
 }
 
-/**
- * Get the style that the hover should use
- *
- * This gets the style for the hover that anchorview will create. See hover
- * objects for more information
- *
- * @param obj The anchorview object
- * @return The style defined
- *
- * @ingroup Anchorview
- */
 EAPI const char *
 elm_anchorview_hover_style_get(const Evas_Object *obj)
 {
@@ -370,15 +283,6 @@ elm_anchorview_hover_style_get(const Evas_Object *obj)
    return wd->hover_style;
 }
 
-/**
- * Stop the hover popup in the anchorview
- *
- * This will stop the hover popup in the anchorview if it is currently active.
- *
- * @param obj The anchorview object
- *
- * @ingroup Anchorview
- */
 EAPI void
 elm_anchorview_hover_end(Evas_Object *obj)
 {
@@ -391,18 +295,6 @@ elm_anchorview_hover_end(Evas_Object *obj)
    wd->pop = NULL;
 }
 
-/**
- * Set bounce mode
- *
- * This will enable or disable the scroller bounce mode for the anchorview. See
- * elm_scroller_bounce_set() for details
- *
- * @param obj The anchorview anchorview
- * @param h_bounce Allow bounce horizontally
- * @param v_bounce Allow bounce vertically
- *
- * @ingroup Anchorview
- */
 EAPI void
 elm_anchorview_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce)
 {
@@ -412,15 +304,6 @@ elm_anchorview_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_boun
    elm_scroller_bounce_set(wd->scroller, h_bounce, v_bounce);
 }
 
-/**
- * Get the bounce mode
- *
- * @param obj The Anchorview object
- * @param h_bounce Allow bounce horizontally
- * @param v_bounce Allow bounce vertically
- *
- * @ingroup Anchorview
- */
 EAPI void
 elm_anchorview_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce)
 {
@@ -430,22 +313,6 @@ elm_anchorview_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool
    elm_scroller_bounce_get(wd->scroller, h_bounce, v_bounce);
 }
 
-/**
- * This appends a custom item provider to the list for that anchorview
- *
- * This appends the given callback. The list is walked from beginning to end
- * with each function called given the item href string in the text. If the
- * function returns an object handle other than NULL (it should create an
- * and object to do this), then this object is used to replace that item. If
- * not the next provider is called until one provides an item object, or the
- * default provider in anchorview does.
- *
- * @param obj The anchorview object
- * @param func The function called to provide the item object
- * @param data The data passed to @p func
- *
- * @ingroup Anchorview
- */
 EAPI void
 elm_anchorview_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data)
 {
@@ -460,18 +327,6 @@ elm_anchorview_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void
    wd->item_providers = eina_list_append(wd->item_providers, ip);
 }
 
-/**
- * This prepends a custom item provider to the list for that anchorview
- *
- * This prepends the given callback. See elm_anchorview_item_provider_append() for
- * more information
- *
- * @param obj The anchorview object
- * @param func The function called to provide the item object
- * @param data The data passed to @p func
- *
- * @ingroup Anchorview
- */
 EAPI void
 elm_anchorview_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data)
 {
@@ -486,18 +341,6 @@ elm_anchorview_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (voi
    wd->item_providers = eina_list_prepend(wd->item_providers, ip);
 }
 
-/**
- * This removes a custom item provider to the list for that anchorview
- *
- * This removes the given callback. See elm_anchorview_item_provider_append() for
- * more information
- *
- * @param obj The anchorview object
- * @param func The function called to provide the item object
- * @param data The data passed to @p func
- *
- * @ingroup Anchorview
- */
 EAPI void
 elm_anchorview_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data)
 {