gengrid: implement selectraise feature.

Gengrid item will be raised on selection. This was implemented in genlist, list, and index.
This commit is contained in:
Daniel Juyung Seo 2013-08-26 19:55:21 +09:00
parent 7658012217
commit f3537869a5
4 changed files with 30 additions and 6 deletions

View File

@ -1573,3 +1573,7 @@
applying themes more strictly if it tries to apply same theme. This applying themes more strictly if it tries to apply same theme. This
increases the performance hugely in case that user applies a specific increases the performance hugely in case that user applies a specific
theme to the window object. theme to the window object.
2013-08-26 Daniel Juyung Seo (SeoZ)
* Gengrid: implement selectraise feature.

View File

@ -83,6 +83,7 @@ Additions:
* File Selector : Support elm_object_part_text_set() for the ok, cancel part to change the OK, Cancel button label. * File Selector : Support elm_object_part_text_set() for the ok, cancel part to change the OK, Cancel button label.
* Add _elm_access_object_get, deprecate _elm_access_info_get * Add _elm_access_object_get, deprecate _elm_access_info_get
* Add elm_win_focus_highlight_animate_set/get(). * Add elm_win_focus_highlight_animate_set/get().
* Add selectraise feature to gengrid.
Improvements: Improvements:

View File

@ -292,17 +292,21 @@ static void
_item_unselect(Elm_Gen_Item *it) _item_unselect(Elm_Gen_Item *it)
{ {
Elm_Gen_Item_Type *item = GG_IT(it); Elm_Gen_Item_Type *item = GG_IT(it);
Elm_Gengrid_Smart_Data *sd = item->wsd;
if ((it->generation < item->wsd->generation) || (!it->highlighted)) if ((it->generation < sd->generation) || (!it->highlighted))
return; return;
edje_object_signal_emit(VIEW(it), "elm,state,unselected", "elm"); edje_object_signal_emit(VIEW(it), "elm,state,unselected", "elm");
evas_object_smart_callback_call(WIDGET(it), SIG_UNHIGHLIGHTED, it); evas_object_smart_callback_call(WIDGET(it), SIG_UNHIGHLIGHTED, it);
evas_object_stack_below(VIEW(it), sd->stack);
it->highlighted = EINA_FALSE; it->highlighted = EINA_FALSE;
if (it->selected) if (it->selected)
{ {
it->selected = EINA_FALSE; it->selected = EINA_FALSE;
item->wsd->selected = eina_list_remove(item->wsd->selected, it); sd->selected = eina_list_remove(sd->selected, it);
evas_object_smart_callback_call(WIDGET(it), SIG_UNSELECTED, it); evas_object_smart_callback_call(WIDGET(it), SIG_UNSELECTED, it);
} }
} }
@ -465,13 +469,21 @@ _long_press_cb(void *data)
static void static void
_item_highlight(Elm_Gen_Item *it) _item_highlight(Elm_Gen_Item *it)
{ {
if ((GG_IT(it)->wsd->select_mode == ELM_OBJECT_SELECT_MODE_NONE) const char *selectraise = NULL;
|| (!GG_IT(it)->wsd->highlight) || (it->highlighted) || Elm_Gengrid_Smart_Data *sd = GG_IT(it)->wsd;
(it->generation < GG_IT(it)->wsd->generation))
if ((sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)
|| (!sd->highlight) || (it->highlighted) ||
(it->generation < sd->generation))
return; return;
edje_object_signal_emit(VIEW(it), "elm,state,selected", "elm"); edje_object_signal_emit(VIEW(it), "elm,state,selected", "elm");
evas_object_smart_callback_call(WIDGET(it), SIG_HIGHLIGHTED, it); evas_object_smart_callback_call(WIDGET(it), SIG_HIGHLIGHTED, it);
selectraise = edje_object_data_get(VIEW(it), "selectraise");
if ((selectraise) && (!strcmp(selectraise, "on")))
evas_object_stack_above(VIEW(it), sd->stack);
it->highlighted = EINA_TRUE; it->highlighted = EINA_TRUE;
} }
@ -747,6 +759,8 @@ _item_realize(Elm_Gen_Item *it)
it->itc->item_style ? it->itc->item_style : "default"); it->itc->item_style ? it->itc->item_style : "default");
elm_widget_theme_object_set(WIDGET(it), VIEW(it), "gengrid", style, elm_widget_theme_object_set(WIDGET(it), VIEW(it), "gengrid", style,
elm_widget_style_get(WIDGET(it))); elm_widget_style_get(WIDGET(it)));
evas_object_stack_below(VIEW(it), GG_IT(it)->wsd->stack);
it->spacer = it->spacer =
evas_object_rectangle_add(evas_object_evas_get(WIDGET(it))); evas_object_rectangle_add(evas_object_evas_get(WIDGET(it)));
evas_object_color_set(it->spacer, 0, 0, 0, 0); evas_object_color_set(it->spacer, 0, 0, 0, 0);
@ -2377,7 +2391,6 @@ _elm_gengrid_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
{ {
Eina_Bool bounce = _elm_config->thumbscroll_bounce_enable; Eina_Bool bounce = _elm_config->thumbscroll_bounce_enable;
Elm_Gengrid_Pan_Smart_Data *pan_data; Elm_Gengrid_Pan_Smart_Data *pan_data;
Elm_Gengrid_Smart_Data *priv = _pd; Elm_Gengrid_Smart_Data *priv = _pd;
Elm_Widget_Smart_Data *wd = eo_data_scope_get(obj, ELM_OBJ_WIDGET_CLASS); Elm_Widget_Smart_Data *wd = eo_data_scope_get(obj, ELM_OBJ_WIDGET_CLASS);
@ -2432,6 +2445,10 @@ _elm_gengrid_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
pan_data->wobj = obj; pan_data->wobj = obj;
pan_data->wsd = priv; pan_data->wsd = priv;
priv->stack = evas_object_rectangle_add(evas_object_evas_get(obj));
evas_object_smart_member_add(priv->stack, priv->pan_obj);
evas_object_raise(priv->stack);
eo_do(obj, elm_scrollable_interface_extern_pan_set(priv->pan_obj)); eo_do(obj, elm_scrollable_interface_extern_pan_set(priv->pan_obj));
} }
@ -2444,6 +2461,7 @@ _elm_gengrid_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
eo_unref(sd->pan_obj); eo_unref(sd->pan_obj);
evas_object_del(sd->pan_obj); evas_object_del(sd->pan_obj);
sd->pan_obj = NULL; sd->pan_obj = NULL;
ELM_SAFE_FREE(sd->stack, evas_object_del);
if (sd->calc_job) ecore_job_del(sd->calc_job); if (sd->calc_job) ecore_job_del(sd->calc_job);

View File

@ -25,6 +25,7 @@ struct _Elm_Gengrid_Smart_Data
Evas_Object *hit_rect; Evas_Object *hit_rect;
Evas_Object *pan_obj; Evas_Object *pan_obj;
Evas_Object *obj; // the object itself Evas_Object *obj; // the object itself
Evas_Object *stack; // stacking markers in pan for selectraise feature
Eina_List *selected; /* a list of Eina_List *selected; /* a list of
* selected * selected