Hello. All.

I made genlist edit mode.

The edit mode can be used when the application want to change existing item
edc into more expanded item edc.
The application can use this edit mode for genlist item editing.
For example, if the application want to show check box or plus/minus button
at the left or right of item in some case,
they can use this edit mode.

This edit mode style includes existing item and will be extended according
to edit_item_style.

edit_item_style  "edit_default" EDC layout is like below. each part is
swallow part.
the existing item is swllowed to original_edc part.
--------------------------------------------------------------------------
| elm.edit.icon.1 |                original_edc                |
elm.edit.icon,2 |
--------------------------------------------------------------------------

After applitciaon set edit mode, genlist loads
Elm_Genlist_Item_Class.edit_item_style if the style is not NULL.
Then genlist swallows a existing item to "original_edc" swallow part in
edit_item_style EDC.)
and the genlist will start to call application icon_get callback function to
swallow application objects(checkbox, radio button, plus/minus button. etc.)

In time, the application returns checkbox or another object in icon_get
callback. edit mode EDC part name is "elm.edit.icon.1", "elm.edit.icon.2".. 

This API will change all realized items to edit mode style. In caes the list
is scrolled, when an item is realized,  the item will be also changed to
edit mode style.

For edit mode, I newly added elm_genlist_edit_mode_set /
elm_genlist_edit_mode_get api.

I changed below files.

a) elm_genlist.patch.txt
-----------------------------------
elementary/src/lib/Elementary.h.in
elementary/src/lib/elm_genlist.c

b) test_genlist.patch.txt
-----------------------------------
elementary/src/bin/test.c
elementary/src/bin/test_genlist.c

c) theme_default.patch.txt
-----------------------------------
elementary/data/themes/default.edc

Please review about this.
Thanks.
Index: src/lib/Elementary.h.in
===================================================================
--- src/lib/Elementary.h.in     (revision 58696)
+++ src/lib/Elementary.h.in     (working copy)
@@ -1762,6 +1762,7 @@ extern "C" {
              GenlistItemStateGetFunc  state_get;
              GenlistItemDelFunc       del;
           } func;
+        const char *edit_item_style;
      };
 
    EAPI Evas_Object      *elm_genlist_add(Evas_Object *parent) 
EINA_ARG_NONNULL(1);
@@ -1847,6 +1848,8 @@ extern "C" {
    EAPI void               
elm_genlist_item_cursor_engine_only_set(Elm_Genlist_Item *item, Eina_Bool 
engine_only) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool          elm_genlist_item_cursor_engine_only_get(const 
Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
    EAPI void               elm_genlist_realized_items_update(Evas_Object *obj) 
EINA_ARG_NONNULL(1);
+   EAPI void               elm_genlist_edit_mode_set(Evas_Object *obj, 
Eina_Bool edit_mode) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool          elm_genlist_edit_mode_get(const Evas_Object *obj) 
EINA_ARG_NONNULL(1);
    /* smart callbacks called:
     * "clicked,double" - This is called when a user has double-clicked an 
item. The
     *                    event_info parameter is the genlist item that was 
double-clicked.
Index: src/lib/elm_genlist.c
===================================================================
--- src/lib/elm_genlist.c       (revision 58696)
+++ src/lib/elm_genlist.c       (working copy)
@@ -315,6 +315,7 @@ struct _Widget_Data
    int               group_item_height;
    int               max_items_per_block;
    double            longpress_timeout;
+   int               edit_mode;
 };
 
 struct _Item_Block
@@ -393,6 +394,9 @@ struct _Elm_Genlist_Item
    Eina_Bool                     dragging : 1;
    Eina_Bool                     updateme : 1;
    Eina_Bool                     nocache : 1;
+   Eina_Bool                     edit_mode_item_realized : 1;
+   Eina_List                     *edit_icon_objs;
+   Evas_Object                   *edit_obj;
 };
 
 struct _Item_Cache
@@ -448,6 +452,9 @@ static void      _signal_emit_hook(Evas_Object *ob
                                    const char *source);
 static Eina_Bool _deselect_all_items(Widget_Data *wd);
 static void      _pan_calculate(Evas_Object *obj);
+static void _edit_mode_item_controls(Elm_Genlist_Item *it, int itx, int ity);
+static void _edit_mode_item_realize(Elm_Genlist_Item *it, Eina_Bool effect_on);
+static void _edit_mode_item_unrealize(Elm_Genlist_Item *it);
 
 static Evas_Smart_Class _pan_sc = EVAS_SMART_CLASS_INIT_VERSION;
 
@@ -832,13 +839,16 @@ _item_highlight(Elm_Genlist_Item *it)
 {
    const char *selectraise;
    if ((it->wd->no_select) || (it->delete_me) || (it->highlighted) || 
(it->disabled) || (it->display_only)) return;
-   edje_object_signal_emit(it->base.view, "elm,state,selected", "elm");
-   selectraise = edje_object_data_get(it->base.view, "selectraise");
-   if ((selectraise) && (!strcmp(selectraise, "on")))
+   if (!it->wd->edit_mode)
      {
-        evas_object_raise(it->base.view);
-        if ((it->group_item) && (it->group_item->realized))
-          evas_object_raise(it->group_item->base.view);
+       edje_object_signal_emit(it->base.view, "elm,state,selected", "elm");
+       selectraise = edje_object_data_get(it->base.view, "selectraise");
+       if ((selectraise) && (!strcmp(selectraise, "on")))
+         {
+           evas_object_raise(it->base.view);
+           if ((it->group_item) && (it->group_item->realized))
+             evas_object_raise(it->group_item->base.view);
+        }
      }
    it->highlighted = EINA_TRUE;
 }
@@ -983,7 +993,7 @@ _item_unselect(Elm_Genlist_Item *it)
    edje_object_signal_emit(it->base.view, "elm,state,unselected", "elm");
    stacking = edje_object_data_get(it->base.view, "stacking");
    selectraise = edje_object_data_get(it->base.view, "selectraise");
-   if ((selectraise) && (!strcmp(selectraise, "on")))
+   if ((selectraise) && (!strcmp(selectraise, "on")) && (!it->wd->edit_mode))
      {
         if ((stacking) && (!strcmp(stacking, "below")))
           evas_object_lower(it->base.view);
@@ -1710,7 +1720,7 @@ _item_realize(Elm_Genlist_Item *it,
                                        _multi_move, it);
         if (itc)
           {
-             if (it->selected != itc->selected)
+             if ((it->selected != itc->selected) && (!it->wd->edit_mode))
                {
                   if (it->selected)
                     edje_object_signal_emit(it->base.view,
@@ -1731,7 +1741,7 @@ _item_realize(Elm_Genlist_Item *it,
           }
         else
           {
-             if (it->selected)
+             if ((it->selected) && (!it->wd->edit_mode))
                edje_object_signal_emit(it->base.view,
                                        "elm,state,selected", "elm");
              if (it->disabled)
@@ -1879,6 +1889,14 @@ _item_realize(Elm_Genlist_Item *it,
 
    if (itc) _item_cache_free(itc);
    if (!calc) evas_object_smart_callback_call(it->base.widget, "realized", it);
+   if ((!calc) && (it->wd->edit_mode) && (it->flags != ELM_GENLIST_ITEM_GROUP))
+     {
+        if (it->itc->edit_item_style )
+          {
+            _edit_mode_item_realize(it, EINA_FALSE);
+            edje_object_message_signal_process(it->edit_obj);
+          }
+     }
 }
 
 static void
@@ -1917,6 +1935,7 @@ _item_unrealize(Elm_Genlist_Item *it, Eina_Bool ca
    it->states = NULL;
    it->realized = EINA_FALSE;
    it->want_unrealize = EINA_FALSE;
+   if (it->wd->edit_mode) _edit_mode_item_unrealize(it);
 }
 
 static Eina_Bool
@@ -2062,10 +2081,17 @@ _item_block_position(Item_Block *itb,
                               git->scrl_y = (it->scrl_y + it->h) - git->h;
                             git->want_realize = EINA_TRUE;
                          }
-                       evas_object_resize(it->base.view, it->w, it->h);
-                       evas_object_move(it->base.view,
-                                        it->scrl_x, it->scrl_y);
-                       evas_object_show(it->base.view);
+                       if (it->wd->edit_mode && it->itc->edit_item_style)
+                         {
+                            _edit_mode_item_controls(it, it->scrl_x, 
it->scrl_y);
+                         }
+                       else 
+                         {
+                            evas_object_resize(it->base.view, it->w, it->h);
+                            evas_object_move(it->base.view,
+                                             it->scrl_x, it->scrl_y);
+                            evas_object_show(it->base.view);
+                         }
                     }
                   else
                     {
@@ -4943,3 +4969,184 @@ elm_genlist_realized_items_update(Evas_Object *obj
    EINA_LIST_FOREACH(list, l, it)
      elm_genlist_item_update(it);
 }
+
+static void
+_edit_mode_item_controls(Elm_Genlist_Item *it, int itx, int ity)
+{
+   if (!it->wd->edit_mode) return;
+   evas_object_resize(it->edit_obj,it->w, it->h);
+   evas_object_move(it->edit_obj, itx, ity);
+}
+
+static void
+_edit_mode_item_realize(Elm_Genlist_Item *it, Eina_Bool effect_on)
+{
+   if ((it->edit_mode_item_realized) || (it->delete_me)) return;
+   char buf[1024];
+
+   it->edit_obj = edje_object_add(evas_object_evas_get(it->base.widget));
+   edje_object_scale_set(it->edit_obj, elm_widget_scale_get(it->base.widget) *
+                         _elm_config->scale);
+   evas_object_smart_member_add(it->edit_obj, it->wd->pan_smart);
+   elm_widget_sub_object_add(it->base.widget, it->edit_obj);
+
+   if (it->flags & ELM_GENLIST_ITEM_SUBITEMS) strncpy(buf, "tree", 
sizeof(buf));
+   else strncpy(buf, "item", sizeof(buf));
+   if (it->wd->compress) strncat(buf, "_compress", sizeof(buf) - strlen(buf));
+
+   if (it->order_num_in & 0x1) strncat(buf, "_odd", sizeof(buf) - strlen(buf));
+
+   strncat(buf, "/", sizeof(buf) - strlen(buf));
+
+   if (it->itc->edit_item_style && strcmp(it->itc->edit_item_style, "default"))
+     {
+        strncat(buf, it->itc->edit_item_style, sizeof(buf) - strlen(buf));
+        _elm_theme_object_set(it->base.widget, it->edit_obj, "genlist", buf, 
elm_widget_style_get(it->base.widget));
+     }
+   else
+     {
+        _elm_theme_object_set(it->base.widget, it->edit_obj, "genlist", 
"item/edit_default", elm_widget_style_get(it->base.widget));
+     }
+
+   if (effect_on) edje_object_signal_emit(it->edit_obj, 
"elm,state,emode_enabled_effect", "elm");
+   else edje_object_signal_emit(it->edit_obj, "elm,state,emode_enabled", 
"elm");
+
+   if (it->disabled) edje_object_signal_emit(it->edit_obj, 
"elm,state,disabled", "elm");
+   else edje_object_signal_emit(it->edit_obj, "elm,state,enabled", "elm");   
+
+
+   if ((it->wd->edit_mode))
+     {
+         if (it->itc->func.icon_get)
+          {
+             const Eina_List *l;
+             const char *key;
+
+             it->icons = 
elm_widget_stringlist_get(edje_object_data_get(it->edit_obj, "edit_icons"));
+
+             EINA_LIST_FOREACH(it->icons, l, key)
+               {
+                  Evas_Object *ic = it->itc->func.icon_get
+                      ((void *)it->base.data, it->base.widget, l->data);
+
+                  if (ic)
+                    {
+                       it->edit_icon_objs = 
eina_list_append(it->edit_icon_objs, ic);
+                       edje_object_part_swallow(it->edit_obj, key, ic);
+                       evas_object_show(ic);
+                       elm_widget_sub_object_add(it->base.widget, ic);
+                    }
+               }
+          }
+     }
+
+   edje_object_part_swallow(it->edit_obj, "original_edc", it->base.view);
+   
+   _edit_mode_item_controls(it,it->scrl_x, it->scrl_y);
+   evas_object_show(it->edit_obj);
+
+   it->edit_mode_item_realized = EINA_TRUE;
+   it->want_unrealize = EINA_FALSE;
+}
+
+static void
+_edit_mode_item_unrealize(Elm_Genlist_Item *it)
+{
+   Evas_Object *icon;
+
+   if (!it->edit_mode_item_realized) return;
+
+   edje_object_signal_emit(it->edit_obj, "elm,state,edit_end,disable", "elm");
+   edje_object_message_signal_process(it->edit_obj);
+   edje_object_part_unswallow(it->edit_obj, it->base.view);
+   evas_object_smart_member_add(it->base.view, it->wd->pan_smart);
+   elm_widget_sub_object_add(it->base.widget, it->base.view);
+   evas_object_del(it->edit_obj);
+   it->edit_obj = NULL;
+   EINA_LIST_FREE(it->edit_icon_objs, icon)
+      evas_object_del(icon);
+   it->edit_mode_item_realized = EINA_FALSE;
+}
+
+/**
+ * Get Genlist edit mode
+ *
+ * @param obj The genlist object
+ * @return The edit mode status
+ * (EINA_TRUE = edit mode, EINA_FALSE = normal mode
+ *
+ * @ingroup Genlist
+ */
+EAPI Eina_Bool
+elm_genlist_edit_mode_get(const Evas_Object *obj)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype);
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return EINA_FALSE;
+
+   if (wd->edit_mode) return EINA_TRUE;
+   else return EINA_FALSE;
+}
+
+/**
+ * Set Genlist edit mode
+ *
+ * This sets Genlist edit mode.
+ *
+ * @param obj The Genlist object
+ * @param The edit mode status
+ * (EINA_TRUE = edit mode, EINA_FALSE = normal mode
+ *
+ * @ingroup Genlist
+ */
+EAPI void
+elm_genlist_edit_mode_set(Evas_Object *obj, Eina_Bool edit_mode)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype);
+   Item_Block *itb;
+   Eina_List *l;
+   Elm_Genlist_Item *it;
+
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   if (wd->edit_mode == edit_mode) return;
+
+   wd->edit_mode = edit_mode;
+   if (!wd->edit_mode)
+     {
+       EINA_INLIST_FOREACH(wd->blocks, itb)
+         {
+           if (itb->realized)
+             {
+               EINA_LIST_FOREACH(itb->items, l, it)
+                 {
+                   if (it->flags != ELM_GENLIST_ITEM_GROUP && it->realized)
+                     {
+                       _edit_mode_item_unrealize(it);
+                     }
+                 }
+             }
+         } 
+       _item_cache_zero(wd);
+     }
+   else
+     {
+       EINA_INLIST_FOREACH(wd->blocks, itb)
+         {
+           if (itb->realized)
+             {
+               EINA_LIST_FOREACH(itb->items, l, it)
+                 {
+                   if (it->flags != ELM_GENLIST_ITEM_GROUP && it->realized)
+                     {
+                       if(it->selected) _item_unselect(it);
+                       if (it->itc->edit_item_style) 
_edit_mode_item_realize(it, EINA_TRUE);
+                     }
+                 }
+             }
+         }
+     }
+
+   if (wd->calc_job) ecore_job_del(wd->calc_job);
+   wd->calc_job = ecore_job_add(_calc_job, wd);
+}
Index: src/bin/test.c
===================================================================
--- src/bin/test.c      (revision 58696)
+++ src/bin/test.c      (working copy)
@@ -67,6 +67,7 @@ void test_genlist6(void *data, Evas_Object *obj, v
 void test_genlist7(void *data, Evas_Object *obj, void *event_info);
 void test_genlist8(void *data, Evas_Object *obj, void *event_info);
 void test_genlist9(void *data, Evas_Object *obj, void *event_info);
+void test_genlist10(void *data, Evas_Object *obj, void *event_info);
 void test_table(void *data, Evas_Object *obj, void *event_info);
 void test_gengrid(void *data, Evas_Object *obj, void *event_info);
 void test_gengrid2(void *data, Evas_Object *obj, void *event_info);
@@ -321,6 +322,7 @@ my_win_main(char *autorun)
    ADD_TEST("Genlist Tree", test_genlist6);
    ADD_TEST("Genlist Group", test_genlist8);
    ADD_TEST("Genlist Group Tree", test_genlist9);
+   ADD_TEST("Genlist Edit", test_genlist10);   
    ADD_TEST("GenGrid", test_gengrid);
    ADD_TEST("GenGrid 2", test_gengrid2);
    ADD_TEST("Checks", test_check);
Index: src/bin/test_genlist.c
===================================================================
--- src/bin/test_genlist.c      (revision 58696)
+++ src/bin/test_genlist.c      (working copy)
@@ -17,6 +17,7 @@ typedef struct _Testitem
    Elm_Genlist_Item *item;
    int mode;
    int onoff;
+   Eina_Bool checked;   
 } Testitem;
 
 
@@ -1630,4 +1631,194 @@ test_genlist9(void *data __UNUSED__, Evas_Object *
    evas_object_resize(win, 480, 800);
    evas_object_show(win);
 }
+
+/*************/
+
+static void _icon_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   Elm_Genlist_Item *item = (Elm_Genlist_Item *)data;
+   elm_genlist_item_del(item);
+}
+
+char *gl10_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part 
__UNUSED__)
+{
+   const Testitem *tit = data;
+   char buf[256];
+   snprintf(buf, sizeof(buf), "Item #%i", tit->mode);
+   return strdup(buf);
+}
+
+Evas_Object *gl10_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+   Testitem *tit = data;
+   char buf[PATH_MAX];
+
+   // "edit_default" EDC layout is like below. each part is swallow part.
+   // the existing item is swllowed to original_edc part.
+   // -------------------------------------------------------------
+   // | elm.edit.icon.1 |                original_edc                |  
elm.edit.icon,2 |
+   // -------------------------------------------------------------
+
+   if (!strcmp(part, "elm.swallow.icon"))
+     {
+        Evas_Object *ic = elm_icon_add(obj);
+        if (!(tit->mode & 0x3))
+           snprintf(buf, sizeof(buf), "%s/images/logo_small.png", 
PACKAGE_DATA_DIR);
+        else if ((tit->mode & 0x3) == 1)
+           snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR);
+        else if ((tit->mode & 0x3) == 2)
+           snprintf(buf, sizeof(buf), "%s/images/panel_01.jpg", 
PACKAGE_DATA_DIR);
+        else if ((tit->mode & 0x3) == 3)
+           snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", 
PACKAGE_DATA_DIR);
+        elm_icon_file_set(ic, buf, NULL);
+        evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 
1);
+        return ic;        
+     }
+   else if (!strcmp(part, "elm.swallow.end"))
+     {
+        Evas_Object *ic = elm_icon_add(obj);
+        if (!(tit->mode & 0x3))
+           snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", 
PACKAGE_DATA_DIR);
+        else if ((tit->mode & 0x3) == 1)
+           snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", 
PACKAGE_DATA_DIR);
+        else if ((tit->mode & 0x3) == 2)
+           snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", 
PACKAGE_DATA_DIR);
+        else if ((tit->mode & 0x3) == 3)
+           snprintf(buf, sizeof(buf), "%s/images/sky_04.jpg", 
PACKAGE_DATA_DIR);
+        elm_icon_file_set(ic, buf, NULL);
+        evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 
1);
+        return ic;        
+     }
+   else if (!strcmp(part, "elm.edit.icon.1")) {
+        Evas_Object *ck;
+        ck = elm_check_add(obj);
+        elm_check_state_pointer_set(ck, &tit->checked);
+       //vas_object_smart_callback_add(ck, "changed", _item_check_changed_cb, 
tit);
+        evas_object_propagate_events_set(ck, EINA_FALSE);
+        evas_object_show(ck);
+        return ck;
+     }   
+   else if (!strcmp(part, "elm.edit.icon.2")) {
+        Evas_Object *ic = elm_icon_add(obj);
+        snprintf(buf, sizeof(buf), "%s/images/icon_06.png", PACKAGE_DATA_DIR);
+        elm_icon_file_set(ic, buf, NULL);
+        evas_object_propagate_events_set(ic, EINA_FALSE);        
+        evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 
1);
+        evas_object_smart_callback_add(ic, "clicked", _icon_clicked_cb, (void 
*)tit->item);        
+        return ic;
+     }
+   else return NULL;
+}
+
+static void
+gl10_sel(void *data, Evas_Object *obj, void *event_info)
+{
+   Testitem *tit = data;
+   if (elm_genlist_edit_mode_get(obj))
+     {
+        if(!tit->checked) tit->checked = EINA_TRUE;
+        else tit->checked = EINA_FALSE;
+     }
+   elm_genlist_item_update(tit->item);
+}
+
+Eina_Bool gl10_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, 
const char *part __UNUSED__)
+{
+   return EINA_FALSE;
+}
+
+void gl10_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__)
+{
+}
+
+static void
+gl10_edit_mode(void *data, Evas_Object *obj __UNUSED__, void *event_info 
__UNUSED__)
+{
+   elm_genlist_edit_mode_set(data, EINA_TRUE);
+   elm_genlist_always_select_mode_set(data, EINA_TRUE);
+}
+
+static void
+gl10_normal_mode(void *data, Evas_Object *obj __UNUSED__, void *event_info 
__UNUSED__)
+{
+   elm_genlist_edit_mode_set(data, EINA_FALSE);
+   elm_genlist_always_select_mode_set(data, EINA_FALSE);
+}
+
+void
+test_genlist10(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void 
*event_info __UNUSED__)
+{
+   Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
+   Elm_Genlist_Item *git;
+   int i;   
+   static Testitem tit[3];
+   
+   win = elm_win_add(NULL, "genlist-edit-mode", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Genlist Edit Mode");
+   elm_win_autodel_set(win, 1);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   gl = elm_genlist_add(win);
+   evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(gl);
+
+   itc1.item_style     = "default";
+   itc1.func.label_get = gl10_label_get;
+   itc1.func.icon_get  = gl10_icon_get;
+   itc1.func.state_get = gl10_state_get;
+   itc1.func.del       = gl10_del;
+   itc1.edit_item_style = "edit_default";
+   
+   for (i = 0; i < 100; i++)
+     {
+        tit[i].mode = i;     
+        tit[i].item = elm_genlist_item_append(gl, &itc1,
+                                      &(tit[i])/* item data */,
+                                      NULL/* parent */,
+                                      ELM_GENLIST_ITEM_NONE,
+                                      gl10_sel/* func */,
+                                      &(tit[i])/* func data */);
+     }
+   
+   elm_box_pack_end(bx, gl);
+   evas_object_show(bx);
+
+   bx2 = elm_box_add(win);
+   elm_box_horizontal_set(bx2, 1);
+   elm_box_homogenous_set(bx2, 1);
+   evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+   bt = elm_button_add(win);
+   elm_button_label_set(bt, "Edit mode");
+   evas_object_smart_callback_add(bt, "clicked", gl10_edit_mode, gl);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
+   elm_box_pack_end(bx2, bt);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_button_label_set(bt, "Normal mode");
+   evas_object_smart_callback_add(bt, "clicked", gl10_normal_mode,gl);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
+   elm_box_pack_end(bx2, bt);
+   evas_object_show(bt);
+
+   elm_box_pack_end(bx, bx2);
+   evas_object_show(bx2);
+   
+   evas_object_resize(win, 480, 320);
+   evas_object_show(win);
+}
 #endif
Index: data/themes/default.edc
===================================================================
--- data/themes/default.edc     (revision 58696)
+++ data/themes/default.edc     (working copy)
@@ -16197,6 +16197,583 @@ collections {
          }
       }
    }
+
+   group { name: "elm/genlist/item/edit_default/default";
+      data.item: "edit_icons" "elm.edit.icon.1 elm.edit.icon.2";
+      data.item: "stacking" "above";
+      data.item: "selectraise" "on";
+      
+      parts {
+         part { name: "base";
+            type: RECT;
+            repeat_events: 1;
+            scale: 1; 
+            description { state: "default" 0.0; 
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "elm.padding.top";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 0;
+               fixed: 0 1;
+               visible: 0;
+               rel2.relative: 1.0 0.0;
+               align: 0.0 0.0;
+            }
+            }
+         part { name: "elm.padding.bottom";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 0 1;
+               visible: 0;
+               rel1.relative: 0.0 1.0;
+               align: 0.0 1.0;
+            }
+         }
+         part { name: "elm.padding.left";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 10 0;
+               fixed: 1 0;
+               visible: 0;
+               rel2.relative: 0.0  1.0;
+               align: 0.0 0.0;
+            }
+         }              
+         part { name: "elm.padding.right";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 10 0;
+               fixed: 1 0;
+               visible: 0;
+               rel1.relative: 1.0  0.0;
+               align: 1.0 0.0;
+            }
+         }
+         part { name: "elm.edit_bg";
+            scale: 1;
+            description { state: "default" 0.0;
+               visible: 1;
+               color: 255 255 255 255;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "elm.padding.top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_y: "elm.padding.bottom";
+               }
+               image {
+                  normal: "ilist_1.png";
+                  border: 2 2 2 2;
+               }
+               fill.smooth: 0;
+            }
+            description { state: "selected" 0.0;
+               inherit: "default" 0.0;
+               image {
+                  normal: "bt_sm_base1.png";
+                  border: 6 6 6 6;
+               }
+               image.middle: SOLID;
+            }            
+         }
+        part { name: "elm.edit.icon.1";
+           clip_to: "disclip";
+           type: SWALLOW;
+           description { state: "default" 0.0;
+              fixed: 1 0;
+              align: 1.0 0;
+              rel1 {
+                 to_x: "elm.padding.left";
+                 relative: 1.0  0.0;
+                 offset:   -1    4;
+              }
+              rel2 {
+                 to_x: "elm.padding.left";
+                 relative: 1.0  1.0;
+                 offset:   -1   -5;
+              }
+           }
+           description { state: "enabled" 0.0;
+              inherit: "default" 0.0;
+              align: 0.0 0.5;
+           }            
+        }
+        part { name: "elm.padding.icon1.right";
+           type: RECT;
+           scale: 1;
+           description { state: "default" 0.0;
+              min: 5 0;
+              fixed: 1 0;
+              visible: 0;
+              rel1 {
+                 relative: 1.0 0.0;
+                 to_x: "elm.edit.icon.1";
+              }
+              rel2.to_x: "elm.edit.icon.1";
+              align: 0.0 0.0;
+           }
+         }
+         part { name: "elm.padding.icon2.left";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 10 0;
+               fixed: 1 0;
+               visible: 0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to_x: "original_edc";
+               }
+               rel2.to_x: "original_edc";
+               align: 0.0 0.0;
+            }
+         }
+         part { name: "elm.edit.icon.2";
+            clip_to: "disclip";
+            type: SWALLOW;
+            description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               visible: 1;
+               color: 255 0 0 255;
+               rel1 {
+                  relative: 1.0  0.0;
+                  offset:   -5    4;
+               }
+               rel2 {
+                  relative: 1.0  1.0;
+                  offset:   -5   -5;
+               }
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+            description { state: "enabled" 0.0;
+               inherit: "default" 0.0;
+               align: 1.0 0.5;
+            }
+         }
+         part { name: "original_edc";
+            clip_to: "disclip";
+            type: SWALLOW;
+            repeat_events: 0;
+            mouse_events: 1;
+            scale: 1;
+            description { state: "default" 0.0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "elm.padding.icon1.right";
+                  to_y: "elm.padding.top";
+               }
+             rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "elm.edit.icon.2";
+                  to_y: "elm.padding.bottom";
+                  offset: -5 0;
+               }        
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "bottom_line";
+            type: RECT;
+            clip_to: "disclip";
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 0 1;
+               visible: 0;
+               color: 0 0 0 255;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "elm.edit_bg";
+                  offset: 0 -1;
+               }
+            }
+            description {
+               state: "hide" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+            description {
+               state: "reorder" 0.0;
+               inherit: "default" 0.0;
+               min: 0 5;
+               fixed: 0 1;
+            }
+         }
+         part { name: "disclip";
+            type: RECT;
+            description { state: "default" 0.0;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 255 255 255 64;
+            }
+         }
+      }
+      programs {
+         program {
+            name:    "go_active";
+            signal:  "elm,state,selected";
+            source:  "elm";
+            action:  STATE_SET "selected" 0.0;
+            target:  "elm.edit_bg";
+         }
+         program {
+            name:    "go_passive";
+            signal:  "elm,state,unselected";
+            source:  "elm";
+            action:  STATE_SET "default" 0.0;
+            target:  "elm.edit_bg";
+            transition: LINEAR 0.1;
+         }
+         program { name: "go_disabled";
+            signal: "elm,state,disabled";
+            source: "elm";
+            action: STATE_SET "disabled" 0.0;
+            target: "disclip";
+         }
+         program { name: "go_enabled";
+            signal: "elm,state,enabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "disclip";
+         }
+         // edit mode signal
+         program { name: "emode_enabled_effect";
+            signal: "elm,state,emode_enabled_effect";
+            source: "elm";
+            action: STATE_SET "enabled" 0.0;
+            transition: DECELERATE 0.7;
+                       target: "elm.edit.icon.1";
+            target: "elm.edit.icon.2";
+         }
+         program { name: "emode_disabled_effect";
+            signal: "elm,state,emode_disabled_effect";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            transition: DECELERATE 0.7;
+                       target: "elm.edit.icon.1";
+            target: "elm.edit.icon.2";
+         }
+         program { name: "emode_enabled";
+            signal: "elm,state,emode_enabled";
+            source: "elm";
+            action: STATE_SET "enabled" 0.0;
+                       target: "elm.edit.icon.1";
+            target: "elm.edit.icon.2";
+         }
+         program { name: "emode_disabled";
+            signal: "elm,state,emode_disabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+                       target: "elm.edit.icon.1";
+            target: "elm.edit.icon.2";
+         }
+      }
+   }
+
+  group { name: "elm/genlist/item_odd/edit_default/default";
+      data.item: "edit_icons" "elm.edit.icon.1 elm.edit.icon.2";
+      data.item: "stacking" "below";
+      data.item: "selectraise" "on";
+      
+      parts {
+         part { name: "base";
+            type: RECT;
+            repeat_events: 1;
+            scale: 1; 
+            description { state: "default" 0.0; 
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "elm.padding.top";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 0;
+               fixed: 0 1;
+               visible: 0;
+               rel2.relative: 1.0 0.0;
+               align: 0.0 0.0;
+            }
+            }
+         part { name: "elm.padding.bottom";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 0 1;
+               visible: 0;
+               rel1.relative: 0.0 1.0;
+               align: 0.0 1.0;
+            }
+         }
+         part { name: "elm.padding.left";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 10 0;
+               fixed: 1 0;
+               visible: 0;
+               rel2.relative: 0.0  1.0;
+               align: 0.0 0.0;
+            }
+         }              
+         part { name: "elm.padding.right";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 10 0;
+               fixed: 1 0;
+               visible: 0;
+               rel1.relative: 1.0  0.0;
+               align: 1.0 0.0;
+            }
+         }
+         part { name: "elm.edit_bg";
+            scale: 1;
+            description { state: "default" 0.0;
+               visible: 1;
+               color: 255 255 255 255;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "elm.padding.top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_y: "elm.padding.bottom";
+               }
+               image {
+                  normal: "ilist_2.png";
+                  border: 2 2 2 2;
+               }
+               fill.smooth: 0;
+            }
+            description { state: "selected" 0.0;
+               inherit: "default" 0.0;
+               image {
+                  normal: "bt_sm_base1.png";
+                  border: 6 6 6 6;
+               }
+               image.middle: SOLID;
+            }            
+         }
+        part { name: "elm.edit.icon.1";
+           clip_to: "disclip";
+           type: SWALLOW;
+           description { state: "default" 0.0;
+              fixed: 1 0;
+              align: 1.0 0;
+              rel1 {
+                 to_x: "elm.padding.left";
+                 relative: 1.0  0.0;
+                 offset:   -1    4;
+              }
+              rel2 {
+                 to_x: "elm.padding.left";
+                 relative: 1.0  1.0;
+                 offset:   -1   -5;
+              }
+           }
+           description { state: "enabled" 0.0;
+              inherit: "default" 0.0;
+              align: 0.0 0.5;
+           }            
+        }
+        part { name: "elm.padding.icon1.right";
+           type: RECT;
+           scale: 1;
+           description { state: "default" 0.0;
+              min: 5 0;
+              fixed: 1 0;
+              visible: 0;
+              rel1 {
+                 relative: 1.0 0.0;
+                 to_x: "elm.edit.icon.1";
+              }
+              rel2.to_x: "elm.edit.icon.1";
+              align: 0.0 0.0;
+           }
+         }
+         part { name: "elm.padding.icon2.left";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 10 0;
+               fixed: 1 0;
+               visible: 0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to_x: "original_edc";
+               }
+               rel2.to_x: "original_edc";
+               align: 0.0 0.0;
+            }
+         }
+         part { name: "elm.edit.icon.2";
+            clip_to: "disclip";
+            type: SWALLOW;
+            description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               visible: 1;
+               color: 255 0 0 255;
+               rel1 {
+                  relative: 1.0  0.0;
+                  offset:   -5    4;
+               }
+               rel2 {
+                  relative: 1.0  1.0;
+                  offset:   -5   -5;
+               }
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+            description { state: "enabled" 0.0;
+               inherit: "default" 0.0;
+               align: 1.0 0.5;
+            }
+         }
+         part { name: "original_edc";
+            clip_to: "disclip";
+            type: SWALLOW;
+            repeat_events: 0;
+            mouse_events: 1;
+            scale: 1;
+            description { state: "default" 0.0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "elm.padding.icon1.right";
+                  to_y: "elm.padding.top";
+               }
+             rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "elm.edit.icon.2";
+                  to_y: "elm.padding.bottom";
+                  offset: -5 0;
+               }        
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "bottom_line";
+            type: RECT;
+            clip_to: "disclip";
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 0 1;
+               visible: 0;
+               color: 0 0 0 255;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "elm.edit_bg";
+                  offset: 0 -1;
+               }
+            }
+            description {
+               state: "hide" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+            description {
+               state: "reorder" 0.0;
+               inherit: "default" 0.0;
+               min: 0 5;
+               fixed: 0 1;
+            }
+         }
+         part { name: "disclip";
+            type: RECT;
+            description { state: "default" 0.0;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 255 255 255 64;
+            }
+         }
+      }
+      programs {
+         program {
+            name:    "go_active";
+            signal:  "elm,state,selected";
+            source:  "elm";
+            action:  STATE_SET "selected" 0.0;
+            target:  "elm.edit_bg";
+         }
+         program {
+            name:    "go_passive";
+            signal:  "elm,state,unselected";
+            source:  "elm";
+            action:  STATE_SET "default" 0.0;
+            target:  "elm.edit_bg";
+            transition: LINEAR 0.1;
+         }
+         program { name: "go_disabled";
+            signal: "elm,state,disabled";
+            source: "elm";
+            action: STATE_SET "disabled" 0.0;
+            target: "disclip";
+         }
+         program { name: "go_enabled";
+            signal: "elm,state,enabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "disclip";
+         }
+         // edit mode signal
+         program { name: "emode_enabled_effect";
+            signal: "elm,state,emode_enabled_effect";
+            source: "elm";
+            action: STATE_SET "enabled" 0.0;
+            transition: DECELERATE 0.7;
+                       target: "elm.edit.icon.1";
+            target: "elm.edit.icon.2";
+         }
+         program { name: "emode_disabled_effect";
+            signal: "elm,state,emode_disabled_effect";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            transition: DECELERATE 0.7;
+                       target: "elm.edit.icon.1";
+            target: "elm.edit.icon.2";
+         }
+         program { name: "emode_enabled";
+            signal: "elm,state,emode_enabled";
+            source: "elm";
+            action: STATE_SET "enabled" 0.0;
+                       target: "elm.edit.icon.1";
+            target: "elm.edit.icon.2";
+         }
+         program { name: "emode_disabled";
+            signal: "elm,state,emode_disabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+                       target: "elm.edit.icon.1";
+            target: "elm.edit.icon.2";
+         }
+      }
+   }
+   
    group { name: "elm/genlist/item_compress/message/default";
       data.item: "stacking" "above";
       data.item: "selectraise" "on";
------------------------------------------------------------------------------
Benefiting from Server Virtualization: Beyond Initial Workload 
Consolidation -- Increasing the use of server virtualization is a top
priority.Virtualization can reduce costs, simplify management, and improve 
application availability and disaster protection. Learn more about boosting 
the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to