gengrid: implement selectraise feature.
authorDaniel Juyung Seo <seojuyung2@gmail.com>
Mon, 26 Aug 2013 10:55:21 +0000 (19:55 +0900)
committerDaniel Juyung Seo <seojuyung2@gmail.com>
Mon, 26 Aug 2013 10:55:28 +0000 (19:55 +0900)
Gengrid item will be raised on selection. This was implemented in genlist, list, and index.

ChangeLog
NEWS
src/lib/elm_gengrid.c
src/lib/elm_widget_gengrid.h

index b1986a4379b2fe6e5abb2ed5e36a2733b15f8a32..55722ef8a145b667aa7e41fc0509da5dab21027d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
         applying themes more strictly if it tries to apply same theme. This
         increases the performance hugely in case that user applies a specific
         theme to the window object.
+
+2013-08-26  Daniel Juyung Seo (SeoZ)
+
+        * Gengrid: implement selectraise feature.
diff --git a/NEWS b/NEWS
index 92f42cf07f24b2c75fbd967f19b43c5d326738d1..bc866e68653e0463db27a9e1fcc390473bde8309 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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.
    * Add _elm_access_object_get, deprecate _elm_access_info_get
    * Add elm_win_focus_highlight_animate_set/get().
+   * Add selectraise feature to gengrid.
 
 Improvements:
 
index f263d8aa0ab53ad446488a8e834d45d5ea3c1a22..286ba3500087170449d07bec750332668ba8d364 100644 (file)
@@ -292,17 +292,21 @@ static void
 _item_unselect(Elm_Gen_Item *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;
 
    edje_object_signal_emit(VIEW(it), "elm,state,unselected", "elm");
    evas_object_smart_callback_call(WIDGET(it), SIG_UNHIGHLIGHTED, it);
+
+   evas_object_stack_below(VIEW(it), sd->stack);
+
    it->highlighted = EINA_FALSE;
    if (it->selected)
      {
         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);
      }
 }
@@ -465,13 +469,21 @@ _long_press_cb(void *data)
 static void
 _item_highlight(Elm_Gen_Item *it)
 {
-   if ((GG_IT(it)->wsd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)
-       || (!GG_IT(it)->wsd->highlight) || (it->highlighted) ||
-       (it->generation < GG_IT(it)->wsd->generation))
+   const char *selectraise = NULL;
+   Elm_Gengrid_Smart_Data *sd = GG_IT(it)->wsd;
+
+   if ((sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)
+       || (!sd->highlight) || (it->highlighted) ||
+       (it->generation < sd->generation))
      return;
 
    edje_object_signal_emit(VIEW(it), "elm,state,selected", "elm");
    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;
 }
 
@@ -747,6 +759,8 @@ _item_realize(Elm_Gen_Item *it)
             it->itc->item_style ? it->itc->item_style : "default");
    elm_widget_theme_object_set(WIDGET(it), VIEW(it), "gengrid", style,
                                elm_widget_style_get(WIDGET(it)));
+   evas_object_stack_below(VIEW(it), GG_IT(it)->wsd->stack);
+
    it->spacer =
      evas_object_rectangle_add(evas_object_evas_get(WIDGET(it)));
    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;
    Elm_Gengrid_Pan_Smart_Data *pan_data;
-
    Elm_Gengrid_Smart_Data *priv = _pd;
    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->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));
 }
 
@@ -2444,6 +2461,7 @@ _elm_gengrid_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
    eo_unref(sd->pan_obj);
    evas_object_del(sd->pan_obj);
    sd->pan_obj = NULL;
+   ELM_SAFE_FREE(sd->stack, evas_object_del);
 
    if (sd->calc_job) ecore_job_del(sd->calc_job);
 
index 0b5d0b96d6b5bf657606dda3178d876446e05e6b..5460193f692fc19cf17e208c3569ca3706898d3f 100644 (file)
@@ -25,6 +25,7 @@ struct _Elm_Gengrid_Smart_Data
    Evas_Object                          *hit_rect;
    Evas_Object                          *pan_obj;
    Evas_Object                          *obj; // the object itself
+   Evas_Object                          *stack; // stacking markers in pan for selectraise feature
 
    Eina_List                            *selected; /* a list of
                                                     * selected