I am submitting a new version of this patch that conforms to the
whitespace rules for e17, as per a suggestion from Daniel.

PS: In this patch is also a small cosmetic change which publishes an
extant gengrid "longpress" event that never got documented.

On Thu, Sep 1, 2011 at 6:34 PM, Benjamin Drucker
<[email protected]> wrote:
>>Hello,
>>This looks ok to me.
>>
>>1. Can you attach the diff file to this mail instead of pasting diff
>>into the email contents?
>>2. Can you add any sample code either elementary test or src/examples?
>>
>>Thanks.
>>Daniel Juyung Seo (SeoZ)
>
> Patch is attached, with
> a) example usage as part of elemental/src/examples/gengrid_example_01.c; and
> b) a bug fix to related code in elementary/src/lib/els_scroller.c
> (there was a div/0 case)
>
Index: elementary/src/lib/elm_gengrid.c
===================================================================
--- elementary/src/lib/elm_gengrid.c	(revision 63079)
+++ elementary/src/lib/elm_gengrid.c	(working copy)
@@ -127,6 +127,7 @@
 
 static const char SIG_ACTIVATED[] = "activated";
 static const char SIG_CLICKED_DOUBLE[] = "clicked,double";
+static const char SIG_LONGPRESSED[] = "longpressed";
 static const char SIG_SELECTED[] = "selected";
 static const char SIG_UNSELECTED[] = "unselected";
 static const char SIG_REALIZED[] = "realized";
@@ -148,6 +149,7 @@
 static const Evas_Smart_Cb_Description _signals[] = {
    {SIG_ACTIVATED, ""},
    {SIG_CLICKED_DOUBLE, ""},
+   {SIG_LONGPRESSED, ""},
    {SIG_SELECTED, ""},
    {SIG_UNSELECTED, ""},
    {SIG_REALIZED, ""},
@@ -754,7 +756,7 @@
    item->long_timer = NULL;
    if ((item->disabled) || (item->dragging)) return ECORE_CALLBACK_CANCEL;
    item->wd->longpressed = EINA_TRUE;
-   evas_object_smart_callback_call(item->wd->self, "longpressed", item);
+   evas_object_smart_callback_call(item->wd->self, SIG_LONGPRESSED, item);
    if (item->wd->reorder_mode)
      {
         item->wd->reorder_item = item;
@@ -2471,6 +2473,46 @@
                                  v_pagesize);
 }
 
+EAPI void
+elm_gengrid_current_page_get(Evas_Object *obj, int *h_pagenumber, int *v_pagenumber)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype);
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   if (wd->scr)
+     elm_smart_scroller_current_page_get(wd->scr, h_pagenumber, v_pagenumber);
+}
+
+EAPI void
+elm_gengrid_last_page_get(Evas_Object *obj, int *h_pagenumber, int *v_pagenumber)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype);
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   if (wd->scr)
+     elm_smart_scroller_last_page_get(wd->scr, h_pagenumber, v_pagenumber);
+}
+
+EAPI void
+elm_gengrid_page_show(Evas_Object *obj, int h_pagenumber, int v_pagenumber)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype);
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   if (wd->scr)
+     elm_smart_scroller_page_show(wd->scr, h_pagenumber, v_pagenumber);
+}
+
+EAPI void
+elm_gengrid_page_bring_in(Evas_Object *obj, int h_pagenumber, int v_pagenumber)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype);
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   if (wd->scr)
+     elm_smart_scroller_page_bring_in(wd->scr, h_pagenumber, v_pagenumber);
+}
+
 EAPI Elm_Gengrid_Item *
 elm_gengrid_first_item_get(const Evas_Object *obj)
 {
Index: elementary/src/lib/els_scroller.c
===================================================================
--- elementary/src/lib/els_scroller.c	(revision 63079)
+++ elementary/src/lib/els_scroller.c	(working copy)
@@ -1339,8 +1339,20 @@
    API_ENTRY return;
    Evas_Coord x, y;
    elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y);
-   if (pagenumber_h) *pagenumber_h = (x + sd->pagesize_h - 1) / sd->pagesize_h;
-   if (pagenumber_v) *pagenumber_v = (y + sd->pagesize_v - 1) / sd->pagesize_v;
+   if (pagenumber_h)
+     {
+        if (sd->pagesize_h > 0)
+          *pagenumber_h = (x + sd->pagesize_h - 1) / sd->pagesize_h;
+        else
+          *pagenumber_h = 0;
+     }
+   if (pagenumber_v)
+     {
+        if (sd->pagesize_v > 0)
+          *pagenumber_v = (y + sd->pagesize_v - 1) / sd->pagesize_v;
+        else
+          *pagenumber_v = 0;
+     }
 }
 
 void
@@ -1352,16 +1364,16 @@
    if (pagenumber_h)
      {
         if (sd->pagesize_h > 0)
-           *pagenumber_h = cw / sd->pagesize_h + 1;
+          *pagenumber_h = (cw / sd->pagesize_h) + 1;
         else
-           *pagenumber_h = 0;
+          *pagenumber_h = 0;
      }
    if (pagenumber_v)
      {
         if (sd->pagesize_v > 0)
-           *pagenumber_v = ch / sd->pagesize_v + 1;
+          *pagenumber_v = (ch / sd->pagesize_v) + 1;
         else
-           *pagenumber_v = 0;
+          *pagenumber_v = 0;
      }
 }
 
Index: elementary/src/lib/Elementary.h.in
===================================================================
--- elementary/src/lib/Elementary.h.in	(revision 63079)
+++ elementary/src/lib/Elementary.h.in	(working copy)
@@ -7817,6 +7817,8 @@
     *   is the gengrid item that was activated.
     * - @c "clicked,double" - The user has double-clicked an item.
     *   The @c event_info parameter is the gengrid item that was double-clicked.
+    * - @c "longpressed" - This is called when the item is pressed for a certain
+    *   amount of time. By default it's 1 second.
     * - @c "selected" - The user has made an item selected. The
     *   @c event_info parameter is the gengrid item that was selected.
     * - @c "unselected" - The user has made an item unselected. The
@@ -8346,6 +8348,87 @@
    EAPI void               elm_gengrid_page_size_set(Evas_Object *obj, Evas_Coord h_pagesize, Evas_Coord v_pagesize) EINA_ARG_NONNULL(1);
 
    /**
+    * @brief Get gengrid current page number.
+    *
+    * @param obj The gengrid object
+    * @param h_pagenumber The horizontal page number
+    * @param v_pagenumber The vertical page number
+    *
+    * The page number starts from 0. 0 is the first page.
+    * Current page means the page which meet the top-left of the viewport.
+    * If there are two or more pages in the viewport, it returns the number of page
+    * which meet the top-left of the viewport.
+    *
+    * @see elm_gengrid_last_page_get()
+    * @see elm_gengrid_page_show()
+    * @see elm_gengrid_page_brint_in()
+    */
+   EAPI void         elm_gengrid_current_page_get(Evas_Object *obj, int *h_pagenumber, int *v_pagenumber) EINA_ARG_NONNULL(1);
+
+   /**
+    * @brief Get scroll last page number.
+    *
+    * @param obj The gengrid object
+    * @param h_pagenumber The horizoptal page number
+    * @param v_pagenumber The vertical page number
+    *
+    * The page number starts from 0. 0 is the first page.
+    * This returns the last page number among the pages.
+    *
+    * @see elm_gengrid_current_page_get()
+    * @see elm_gengrid_page_show()
+    * @see elm_gengrid_page_brint_in()
+    */
+   EAPI void         elm_gengrid_last_page_get(Evas_Object *obj, int *h_pagenumber, int *v_pagenumber) EINA_ARG_NONNULL(1);
+   /**
+    * Show a specific virtual region within the gengrid content object by page number.
+    *
+    * @param obj The gengrid object
+    * @param h_pagenumber The horizoptal page number
+    * @param v_pagenumber The vertical page number
+    *
+    * 0, 0 of the indicated page is located at the top-left of the viewport.
+    * This will jump to the page directly without animation.
+    *
+    * Example of usage:
+    *
+    * @code
+    * sc = elm_gengrid_add(win);
+    * elm_gengrid_content_set(sc, content);
+    * elm_gengrid_page_relative_set(sc, 1, 0);
+    * elm_gengrid_current_page_get(sc, &h_page, &v_page);
+    * elm_gengrid_page_show(sc, h_page + 1, v_page);
+    * @endcode
+    *
+    * @see elm_gengrid_page_bring_in()
+    */
+   EAPI void         elm_gengrid_page_show(Evas_Object *obj, int h_pagenumber, int v_pagenumber) EINA_ARG_NONNULL(1);
+
+   /**
+    * Show a specific virtual region within the gengrid content object by page number.
+    *
+    * @param obj The gengrid object
+    * @param h_pagenumber The horizoptal page number
+    * @param v_pagenumber The vertical page number
+    *
+    * 0, 0 of the indicated page is located at the top-left of the viewport.
+    * This will slide to the page with animation.
+    *
+    * Example of usage:
+    *
+    * @code
+    * sc = elm_gengrid_add(win);
+    * elm_gengrid_content_set(sc, content);
+    * elm_gengrid_page_relative_set(sc, 1, 0);
+    * elm_gengrid_last_page_get(sc, &h_page, &v_page);
+    * elm_gengrid_page_bring_in(sc, h_page, v_page);
+    * @endcode
+    *
+    * @see elm_gengrid_page_show()
+    */
+    EAPI void         elm_gengrid_page_bring_in(Evas_Object *obj, int h_pagenumber, int v_pagenumber) EINA_ARG_NONNULL(1);
+
+   /**
     * Set for what direction a given gengrid widget will expand while
     * placing its items.
     *
Index: elementary/src/examples/gengrid_example.c
===================================================================
--- elementary/src/examples/gengrid_example.c	(revision 63079)
+++ elementary/src/examples/gengrid_example.c	(working copy)
@@ -355,6 +355,18 @@
    free(it);
 }
 
+/* scrolling animation stopped callback */
+static void
+_grid_scroll_stopped_cb(void        *data __UNUSED__,
+			Evas_Object *obj,
+			void        *event_info __UNUSED__)
+{
+  int h_pagenumber=0, v_pagenumber=0;
+  elm_gengrid_current_page_get(obj, &h_pagenumber, &v_pagenumber);
+  fprintf(stdout, "Grid current horiz page is %d, vert page is %d\n", 
+	  h_pagenumber, v_pagenumber);
+}
+
 /* items grid horizontal alignment change */
 static void
 _h_align_change_cb(void        *data,
@@ -540,6 +552,7 @@
    evas_object_show(hbx_3);
 
    elm_gengrid_align_get(grid, &h, &v);
+   evas_object_smart_callback_add(grid, "scroll,anim,stop", _grid_scroll_stopped_cb, NULL);
 
    sl = elm_slider_add(win);
    elm_object_text_set(sl, "Horiz. alignment");
@@ -577,6 +590,7 @@
    elm_box_pack_end(hbx_3, sl);
    evas_object_show(sl);
 
+   _page_change_cb(grid, sl, NULL);
    evas_object_smart_callback_add(sl, "changed", _page_change_cb, grid);
 
    gic.item_style = "default";
------------------------------------------------------------------------------
Doing More with Less: The Next Generation Virtual Desktop 
What are the key obstacles that have prevented many mid-market businesses
from deploying virtual desktops?   How do next-generation virtual desktops
provide companies an easier-to-deploy, easier-to-manage and more affordable
virtual desktop model.http://www.accelacomm.com/jaw/sfnl/114/51426474/
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to