else if ((!strcmp(ev->keyname, "Home")) || (!strcmp(ev->keyname, "KP_Home")))
{
it = elm_gengrid_first_item_get(obj);
- elm_gengrid_item_bring_in(it);
+ elm_gengrid_item_bring_in(it, ELM_GENGRID_ITEM_SCROLLTO_IN);
elm_gengrid_item_selected_set(it, EINA_TRUE);
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
else if ((!strcmp(ev->keyname, "End")) || (!strcmp(ev->keyname, "KP_End")))
{
it = elm_gengrid_last_item_get(obj);
- elm_gengrid_item_bring_in(it);
+ elm_gengrid_item_bring_in(it, ELM_GENGRID_ITEM_SCROLLTO_IN);
elm_gengrid_item_selected_set(it, EINA_TRUE);
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
{
elm_gengrid_item_selected_set(wd->last_selected_item, EINA_FALSE);
wd->last_selected_item = prev;
- elm_gengrid_item_show(wd->last_selected_item);
+ elm_gengrid_item_show(wd->last_selected_item, ELM_GENGRID_ITEM_SCROLLTO_IN);
}
else
{
elm_gengrid_item_selected_set(prev, EINA_TRUE);
- elm_gengrid_item_show(prev);
+ elm_gengrid_item_show(prev, ELM_GENGRID_ITEM_SCROLLTO_IN);
}
return EINA_TRUE;
{
elm_gengrid_item_selected_set(wd->last_selected_item, EINA_FALSE);
wd->last_selected_item = next;
- elm_gengrid_item_show(wd->last_selected_item);
+ elm_gengrid_item_show(wd->last_selected_item, ELM_GENGRID_ITEM_SCROLLTO_IN);
}
else
{
elm_gengrid_item_selected_set(next, EINA_TRUE);
- elm_gengrid_item_show(next);
+ elm_gengrid_item_show(next, ELM_GENGRID_ITEM_SCROLLTO_IN);
}
return EINA_TRUE;
while ((prev) && (prev->generation < wd->generation))
prev = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(prev)->prev);
elm_gengrid_item_selected_set((Elm_Object_Item *) prev, EINA_TRUE);
- elm_gengrid_item_show((Elm_Object_Item *) prev);
+ elm_gengrid_item_show((Elm_Object_Item *) prev, ELM_GENGRID_ITEM_SCROLLTO_IN);
return EINA_TRUE;
}
else
_deselect_all_items(wd);
elm_gengrid_item_selected_set((Elm_Object_Item *) prev, EINA_TRUE);
- elm_gengrid_item_show((Elm_Object_Item *) prev);
+ elm_gengrid_item_show((Elm_Object_Item *) prev, ELM_GENGRID_ITEM_SCROLLTO_IN);
return EINA_TRUE;
}
while ((next) && (next->generation < wd->generation))
next = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(next)->next);
elm_gengrid_item_selected_set((Elm_Object_Item *) next, EINA_TRUE);
- elm_gengrid_item_show((Elm_Object_Item *) next);
+ elm_gengrid_item_show((Elm_Object_Item *) next, ELM_GENGRID_ITEM_SCROLLTO_IN);
return EINA_TRUE;
}
else
_deselect_all_items(wd);
elm_gengrid_item_selected_set((Elm_Object_Item *) next, EINA_TRUE);
- elm_gengrid_item_show((Elm_Object_Item *) next);
+ elm_gengrid_item_show((Elm_Object_Item *) next, ELM_GENGRID_ITEM_SCROLLTO_IN);
return EINA_TRUE;
}
_deselect_all_items(wd);
elm_gengrid_item_selected_set((Elm_Object_Item *) prev, EINA_TRUE);
- elm_gengrid_item_show((Elm_Object_Item *) prev);
+ elm_gengrid_item_show((Elm_Object_Item *) prev, ELM_GENGRID_ITEM_SCROLLTO_IN);
return EINA_TRUE;
}
_deselect_all_items(wd);
elm_gengrid_item_selected_set((Elm_Object_Item *) next, EINA_TRUE);
- elm_gengrid_item_show((Elm_Object_Item *) next);
+ elm_gengrid_item_show((Elm_Object_Item *) next, ELM_GENGRID_ITEM_SCROLLTO_IN);
return EINA_TRUE;
}
}
EAPI void
-elm_gengrid_item_show(Elm_Object_Item *it)
+elm_gengrid_item_show(Elm_Object_Item *it, Elm_Gengrid_Item_Scrollto_Type type)
{
ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
Elm_Gen_Item *_it = (Elm_Gen_Item *)it;
if ((_it->generation < _it->wd->generation)) return;
_pan_min_get(wd->pan_smart, &minx, &miny);
+ if (type==ELM_GENGRID_ITEM_SCROLLTO_IN)
+ {
+ //TODO : type based handling like genlist
+ }
+
if (wd->horizontal)
elm_smart_scroller_region_bring_in(_it->wd->scr,
((_it->x - _it->item->prev_group) * wd->item_width) + (_it->item->prev_group * _it->wd->group_item_width) + minx,
}
EAPI void
-elm_gengrid_item_bring_in(Elm_Object_Item *it)
+elm_gengrid_item_bring_in(Elm_Object_Item *it, Elm_Gengrid_Item_Scrollto_Type type)
{
ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
Elm_Gen_Item *_it = (Elm_Gen_Item *)it;
Widget_Data *wd = _it->wd;
_pan_min_get(wd->pan_smart, &minx, &miny);
+ if (type==ELM_GENGRID_ITEM_SCROLLTO_IN)
+ {
+ //TODO : type based handling like genlist
+ }
+
if (wd->horizontal)
elm_smart_scroller_region_bring_in(_it->wd->scr,
((_it->x - _it->item->prev_group) * wd->item_width) + (_it->item->prev_group * _it->wd->group_item_width) + minx,
#define ELM_GENGRID_ITEM_CLASS_HEADER ELM_GEN_ITEM_CLASS_HEADER
/**
+ * Defines where to position the item in the genlist.
+ *
+ * @ingroup Genlist
+ */
+typedef enum
+{
+ ELM_GENGRID_ITEM_SCROLLTO_NONE = 0, /**< no scrollto */
+ ELM_GENGRID_ITEM_SCROLLTO_IN = (1 << 0), /**< to the nearest viewport */
+ ELM_GENGRID_ITEM_SCROLLTO_TOP = (1 << 1), /**< to the top of viewport */
+ ELM_GENGRID_ITEM_SCROLLTO_MIDDLE = (1 << 2) /**< to the middle of viewport */
+} Elm_Gengrid_Item_Scrollto_Type;
+
+
+/**
* @see Elm_Gen_Item_Class
*/
typedef Elm_Gen_Item_Class Elm_Gengrid_Item_Class;
* item, @b immediately.
*
* @param it The item to display
+ * @param type Where to position the item in the viewport.
*
* This causes gengrid to @b redraw its viewport's contents to the
* region containing the given @p item item, if it is not fully
*
* @ingroup Gengrid
*/
-EAPI void elm_gengrid_item_show(Elm_Object_Item *it);
+EAPI void elm_gengrid_item_show(Elm_Object_Item *it, Elm_Gengrid_Item_Scrollto_Type type);
/**
* Animatedly bring in, to the visible area of a gengrid, a given
* item on it.
*
* @param it The gengrid item to display
+ * @param type Where to position the item in the viewport.
*
* This causes gengrid to jump to the given @p item and show
* it (by scrolling), if it is not fully visible. This will use
*
* @ingroup Gengrid
*/
-EAPI void elm_gengrid_item_bring_in(Elm_Object_Item *it);
-
-//XXX: Let's add as possible
-//EAPI void elm_gengrid_item_top_show(Elm_Object_Item *it);
-//EAPI void elm_gengrid_item_top_bring_in(Elm_Object_Item *it);
-//EAPI void elm_gengrid_item_middle_show(Elm_Object_Item *it);
-//EAPI void elm_gengrid_item_middle_bring_in(Elm_Object_Item *it);
+EAPI void elm_gengrid_item_bring_in(Elm_Object_Item *it, Elm_Gengrid_Item_Scrollto_Type type);
/**
* Update the contents of a given gengrid item