ELM_GENLIST_EDIT_MODE_REORDER = (1 << 0),
ELM_GENLIST_EDIT_MODE_INSERT = (1 << 1),
ELM_GENLIST_EDIT_MODE_DELETE = (1 << 2),
- ELM_GENLIST_EDIT_MODE_SELECTALL = (1 << 3)
+ ELM_GENLIST_EDIT_MODE_SELECT = (1 << 3),
+ ELM_GENLIST_EDIT_MODE_SELECTALL = (1 << 4)
}Elm_Genlist_Edit_Mode;
typedef struct _Elm_Genlist_Item_Class Elm_Genlist_Item_Class;
typedef struct _Elm_Genlist_Item Elm_Genlist_Item;
typedef struct _Elm_Genlist_Item_Class_Func Elm_Genlist_Item_Class_Func;
typedef struct _Elm_Genlist_Edit_Class Elm_Genlist_Edit_Class;
typedef char *(*GenlistItemLabelGetFunc) (const void *data, Evas_Object *obj, const char *part);
- typedef char *(*GenlistItemLabelChangedFunc) (const void *data, Evas_Object *obj, const char *text, const int sub_text);
+ typedef char *(*GenlistItemLabelChangedFunc) (const void *data, Elm_Genlist_Item *it, const char *text, const int sub_text );
typedef Evas_Object *(*GenlistItemIconGetFunc) (const void *data, Evas_Object *obj, const char *part);
typedef Eina_Bool (*GenlistItemStateGetFunc) (const void *data, Evas_Object *obj, const char *part);
typedef void (*GenlistItemDelFunc) (const void *data, Evas_Object *obj);
typedef int (*GenlistItemEditModeGetFunc) (const void *data, Evas_Object *obj, const int enabled_edit_modes);
typedef void (*GenlistInsertNewFunc) (Evas_Object *genlist, Elm_Genlist_Item *rel_item);
+ typedef void (*GenlistItemSelectedFunc) (const void *data, Evas_Object *obj);
typedef Eina_Bool (*GenlistMoveFunc) ( Evas_Object *genlist, Elm_Genlist_Item *item, Elm_Genlist_Item *rel_item, Eina_Bool move_after);
typedef Eina_Bool (*GenlistRemoveItemFunc) (Evas_Object *genlist, Elm_Genlist_Item *rel_item);
GenlistRemoveItemFunc remove;
GenlistInsertNewFunc insert_new;
GenlistMoveFunc move;
+ GenlistItemSelectedFunc item_selected;
};
EAPI Evas_Object *elm_genlist_add(Evas_Object *parent);
EAPI Elm_Genlist_Item *elm_genlist_item_append(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data);
EINA_DEPRECATED EAPI void elm_genlist_set_edit_mode(Evas_Object *obj, int emode, Elm_Genlist_Edit_Class *ec);
EAPI void elm_genlist_edit_mode_set(Evas_Object *obj, int emode, Elm_Genlist_Edit_Class *ec);
EAPI int elm_genlist_item_expanded_depth_get(Elm_Genlist_Item *it);
- EAPI void elm_genlist_selected_items_del(Evas_Object *obj);
+ EAPI void elm_genlist_edit_selected_items_del(Evas_Object *obj);
+ EAPI Eina_List * elm_genlist_edit_selected_items_get(const Evas_Object *obj);
+ EAPI void elm_genlist_item_rename_mode_set(Elm_Genlist_Item *it, int emode);
+
EAPI Evas_Object *elm_check_add(Evas_Object *parent);
EAPI void elm_check_label_set(Evas_Object *obj, const char *label);
Evas_Coord prev_multi_x, prev_multi_y;
Eina_Bool multi_down : 1;
Eina_Bool multi_touch : 1;
+ Eina_List *edit_field;
};
struct _Edit_Data
{
} func;
Evas_Object *base, *spacer, *edit_obj;
- Eina_List *labels, *icons, *states, *icon_objs;
+ Eina_List *labels, *icons, *states, *icon_objs, *edit_icon_objs;
Ecore_Timer *long_timer, *edit_long_timer;
Evas_Coord dx, dy, scrl_x, scrl_y;
Evas_Coord reoder_cavas_x, reoder_cavas_y;
Eina_Bool menuopened : 1;
Eina_Bool select_all_item : 1;
Eina_Bool reorder_check: 1;
+ Eina_Bool renamed : 1;
int pad_left, pad_right;
int depth;
if( it->wd->edit_mode != ELM_GENLIST_EDIT_MODE_NONE )
(void)_edit_mode_reset( it->wd );
if (ev->button != 1) return;
+
+ if(it->wd->edit_field && !it->renamed)
+ elm_genlist_item_rename_mode_set(it, 0);
+
it->down = 1;
it->dragging = 0;
evas_object_geometry_get(obj, &x, &y, NULL, NULL);
EINA_LIST_FREE(it->icon_objs, icon)
evas_object_del(icon);
+ EINA_LIST_FREE(it->edit_icon_objs, icon)
+ evas_object_del(icon);
+
it->states = NULL;
it->realized = EINA_FALSE;
it->want_unrealize = EINA_FALSE;
it->delete_check = 0;
edje_object_signal_emit(it->edit_obj, "elm,state,del,animated,enable", "elm");
it->wd->selct_all = 0;
- edje_object_signal_emit(it->wd->select_all_item->base, "elm,state,del,animated,enable", "elm");
+ if(it->wd->select_all_item)
+ edje_object_signal_emit(it->wd->select_all_item->base, "elm,state,del,animated,enable", "elm");
+
+ if (!it->wd->selct_all && it->wd->ed->ec->item_selected)
+ {
+ it->wd->ed->ec->item_selected(it->data, it->wd->obj);
+ }
return;
}
it->wd->ed->del_item = it;
+ if (!it->wd->selct_all && it->wd->ed->ec->item_selected)
+ {
+ it->wd->ed->ec->item_selected(it->data, it->wd->obj);
+ }
+
del_conf_style = edje_object_data_get(it->edit_obj, "del_button_style");
if(del_conf_style )
elm_object_style_set( it->wd->ed->del_confirm, del_conf_style);
Evas_Event_Mouse_Down *ev = event_info;
Evas_Coord x, y;
+ if(!elm_genlist_item_next_get(it))
+ return;
+
+ if(it->wd->edit_field && !it->renamed)
+ elm_genlist_item_rename_mode_set(it, 0);
+
+ if(!(it->wd->edit_mode & ELM_GENLIST_EDIT_MODE_REORDER))
+ return;
+
if(_edit_mode_reset( it->wd ) )
return;
wd->selct_all ^= 0xFF;
+ if (wd->ed->ec->item_selected)
+ {
+ wd->ed->ec->item_selected(NULL, wd->obj);
+ }
+
if (wd->calc_job) ecore_job_del(wd->calc_job);
wd->calc_job = ecore_job_add(_calc_job, wd);
}
int pad = 0;
it->pad_left = 0;
it->pad_right = 0;
-
+ Evas_Object *icon;
if( it->wd->edit_mode == ELM_GENLIST_EDIT_MODE_NONE && !it->edit_obj )
return;
itmode &= it->wd->edit_mode;
if(itmode & ELM_GENLIST_EDIT_MODE_SELECTALL)
- itmode |= ELM_GENLIST_EDIT_MODE_DELETE;
+ itmode |= ELM_GENLIST_EDIT_MODE_SELECT;
if( !it->edit_obj )
{
"elm", _insert_new_item_cb );
}
- if( (itmode & ELM_GENLIST_EDIT_MODE_DELETE) )
+ if( (itmode & ELM_GENLIST_EDIT_MODE_DELETE) || (itmode & ELM_GENLIST_EDIT_MODE_SELECT) )
{
if(it->wd->animate_edit_controls)
edje_object_signal_emit(it->edit_obj, "elm,state,del,animated,enable", "elm");
edje_object_signal_callback_add(it->edit_obj, "elm,action,hide,del_confirm",
"elm", _hide_delete_confirm_object, it );
it->pad_left += pad;
+ evas_object_event_callback_add(it->edit_obj, EVAS_CALLBACK_MOUSE_DOWN,
+ _reorder_mouse_down, it);
}
else
{
{
reorder_icon = edje_object_part_object_get(it->edit_obj, reorder_part );
+ if(itmode == ELM_GENLIST_EDIT_MODE_NONE)
+ {
evas_object_event_callback_del(it->edit_obj, EVAS_CALLBACK_MOUSE_DOWN,
_reorder_mouse_down);
evas_object_event_callback_del(it->edit_obj, EVAS_CALLBACK_MOUSE_UP,
_reorder_mouse_up);
evas_object_event_callback_del(it->edit_obj, EVAS_CALLBACK_MOUSE_MOVE,
_reorder_mouse_move);
+ }
}
}
+ if( it->wd->edit_mode != 0xF0) {
+ if( it->wd->edit_mode != ELM_GENLIST_EDIT_MODE_NONE)
+ {
+ if (it->itc->func.icon_get)
+ {
+ edje_object_signal_emit(it->edit_obj, "elm,state,edit_end,enable", "elm");
+
+ const Eina_List *l;
+ const char *key;
+
+ it->icons = _elm_stringlist_get(edje_object_data_get(it->edit_obj, "icons"));
+ EINA_LIST_FOREACH(it->icons, l, key)
+ {
+ Evas_Object *ic = it->itc->func.icon_get(it->data, it->wd->obj, 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->wd->obj, ic);
+ }
+ }
+ }
+ }
+ else
+ {
+ edje_object_signal_emit(it->edit_obj, "elm,state,edit_end,disable", "elm");
+ EINA_LIST_FREE(it->edit_icon_objs, icon)
+ evas_object_del(icon);
+
+ Evas_Object *editfield;
+ EINA_LIST_FREE(it->wd->edit_field, editfield)
+ evas_object_del(editfield);
+
+
+ }
+ }
+
if( it->wd->edit_mode == ELM_GENLIST_EDIT_MODE_NONE )//Unrealize
{
evas_object_del(it->edit_obj);
{
int top=0;
Evas_Coord rox, roy, row, roh;
+ if(!it->wd->ed)
+ return 0;
if( !(it->wd->edit_mode & ELM_GENLIST_EDIT_MODE_REORDER ) || !it->wd->ed->reorder_item )
return 0;
* This sets Genlist edit mode.
*
* @param obj The Genlist object
- * @param emode ELM_GENLIST_EDIT_MODE_{NONE & REORDER & INSERT & DELETE}
+ * @param emode ELM_GENLIST_EDIT_MODE_{NONE & REORDER & INSERT & DELETE & SELECT & SELECT_ALL}
* @param edit_class Genlist edit class (Elm_Genlist_Edit_Class structure)
*
* @ingroup Genlist
wd->animate_edit_controls = 1;
if(wd->edit_mode & ELM_GENLIST_EDIT_MODE_SELECTALL)
- wd->edit_mode |= ELM_GENLIST_EDIT_MODE_DELETE;
+ wd->edit_mode |= ELM_GENLIST_EDIT_MODE_SELECT;
if( wd->edit_mode == ELM_GENLIST_EDIT_MODE_NONE)
{
wd->ed->ec = edit_class;
- if( (wd->edit_mode & ELM_GENLIST_EDIT_MODE_DELETE) && !wd->ed->del_confirm)
+ if( ((wd->edit_mode & ELM_GENLIST_EDIT_MODE_DELETE) || (wd->edit_mode & ELM_GENLIST_EDIT_MODE_SELECT)) && !wd->ed->del_confirm)
{
wd->ed->del_confirm = elm_button_add(wd->obj);
elm_button_label_set(wd->ed->del_confirm, "Delete");
it->delete_check = 0;
it->del_confirm_state = 0;
+ _item_unselect(it);
_edit_controls_eval(it);
}
}
-// if(wd->edit_mode & ELM_GENLIST_EDIT_MODE_SELECTALL) {
- if(wd->edit_mode & ELM_GENLIST_EDIT_MODE_SELECTALL || wd->edit_mode & ELM_GENLIST_EDIT_MODE_DELETE) { // temp fix
+ if(wd->edit_mode & ELM_GENLIST_EDIT_MODE_SELECTALL) {
itc.item_style = "select_all";
itc.func.label_get = NULL;
itc.func.icon_get = NULL;
}
else {
- if(wd->select_all_item)
- elm_genlist_item_del(wd->select_all_item);
+ if(wd->select_all_item) {
+ if (wd->select_all_item->realized) _item_unrealize(wd->select_all_item);
+ free(wd->select_all_item);
+ }
wd->select_all_item = NULL;
}
return it->depth;
}
+
/**
* Delete selected items in genlist edit mode.
*
* @ingroup Genlist
*/
EAPI void
-elm_genlist_selected_items_del(Evas_Object *obj)
+elm_genlist_edit_selected_items_del(Evas_Object *obj)
{
Elm_Genlist_Item *it;
Eina_List *l, *realized_list;
+ Item_Block *itb;
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
- realized_list = elm_genlist_realized_items_get(obj);
- EINA_LIST_FOREACH(realized_list, l, it)
- {
- if (it->delete_check)
- elm_genlist_item_del( it );
- }
+ EINA_INLIST_FOREACH(wd->blocks, itb)
+ {
+ if (itb->realized)
+ {
+ EINA_LIST_FOREACH(itb->items, l, it)
+ {
+ if (it->delete_check)
+ elm_genlist_item_del( it );
+ }
+ }
+ }
if (wd->calc_job) ecore_job_del(wd->calc_job);
wd->calc_job = ecore_job_add(_calc_job, wd);
}
+EAPI void
+elm_genlist_selected_items_del(Evas_Object *obj)
+{
+ fprintf(stderr, "=================> Caution!!! <========================\n");
+ fprintf(stderr, "==> elm_genlist_selected_items_del() is deprecated. <=======\n");
+ fprintf(stderr, "==> Please use elm_genlist_edit_selected_items_del() instead. <==\n");
+ fprintf(stderr, "=======================================================\n");
+ elm_genlist_edit_selected_items_del(obj);
+}
+
+
/**
- * Get a list of checked items in genlist
+ * Get a list of selected items in genlist
*
- * This returns a list of the checked items in the genlist. The list
+ * This returns a list of the selected items in the genlist. The list
* contains Elm_Genlist_Item pointers. The list must be freed by the
* caller when done with eina_list_free(). The item pointers in the list
* are only vallid so long as those items are not deleted or the genlist is
* not deleted.
*
* @param obj The genlist object
- * @return The list of checked items, nor NULL if none are checked.
+ * @return The list of selected items, nor NULL if none are selected.
*
* @ingroup Genlist
*/
- /*
EAPI Eina_List *
-elm_genlist_edit_checked_items_get(const Evas_Object *obj)
+elm_genlist_edit_selected_items_get(const Evas_Object *obj)
{
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
}
return list;
}
-*/
+/**
+ * Set a given item's rename mode
+ *
+ * This renames the item's label from genlist
+ *
+ * @param it The item
+ * @param emode set if emode is EINA_TRUE, unset if emode is EINA_FALSE
+ *
+ * @ingroup Genlist
+ */
+EAPI void
+elm_genlist_item_rename_mode_set(Elm_Genlist_Item *it, int emode)
+{
+ if (!it) return;
+
+ const Eina_List *l, *list, *l2;
+ const char *label, *rename_swallow_part, *s;
+ Eina_Bool done = EINA_FALSE;
+ int label_cnt = 0 , swallow_part_cnt = 0;
+
+ Item_Block *itb;
+ Evas_Object *editfield;
+ Evas_Object *entry;
+ int edit_field_cnt = 0;
+
+ if(it->wd->edit_mode == ELM_GENLIST_EDIT_MODE_NONE)
+ {
+ it->wd->edit_mode = 0xF0;
+ _edit_controls_eval(it);
+ }
+
+ EINA_INLIST_FOREACH(it->wd->blocks, itb)
+ {
+ if (itb->realized)
+ {
+ Eina_List *l;
+ Elm_Genlist_Item *it;
+
+ done = EINA_TRUE;
+ EINA_LIST_FOREACH(itb->items, l, it)
+ {
+ if (it->renamed) {
+ it->renamed = EINA_FALSE;
+
+
+ EINA_LIST_FOREACH(it->wd->edit_field, l2, editfield)
+ {
+ entry = elm_editfield_entry_get(editfield);
+ char *text = elm_entry_entry_get(entry);
+
+ if( it->itc->func.label_changed )
+ it->itc->func.label_changed( it->data, it, text, edit_field_cnt++);
+ }
+ Ecore_IMF_Context *imf = elm_entry_imf_context_get(entry);
+ ecore_imf_context_input_panel_hide(imf);
+
+ Evas_Object *editfield;
+ EINA_LIST_FREE(it->wd->edit_field, editfield)
+ evas_object_del(editfield);
+
+ if(it->wd->edit_mode) {
+ if( (it->wd->edit_mode & ELM_GENLIST_EDIT_MODE_INSERT) )
+ edje_object_signal_emit(it->edit_obj, "elm,state,ins,enable", "elm");
+
+ if( (it->wd->edit_mode & ELM_GENLIST_EDIT_MODE_DELETE) || (it->wd->edit_mode & ELM_GENLIST_EDIT_MODE_SELECT) )
+ edje_object_signal_emit(it->edit_obj, "elm,state,del,enable", "elm");
+
+ if( (it->wd->edit_mode & ELM_GENLIST_EDIT_MODE_REORDER) )
+ edje_object_signal_emit(it->edit_obj, "elm,state,rename,disable", "elm");
+ }
+ if(it->edit_obj)
+ {
+ evas_object_del(it->edit_obj);
+ it->edit_obj = NULL;
+ }
+
+ }
+ }
+ }
+ else
+ {
+ if (done) break;
+ }
+ }
+
+// if(emode != ELM_GENLIST_RENAME_MODE_NONE)
+ if(emode != 0)
+ {
+ it->renamed = EINA_TRUE;
+
+ it->labels = _elm_stringlist_get(edje_object_data_get(it->base, "labels"));
+ EINA_LIST_FOREACH(it->labels, list, label)
+ {
+ edje_object_signal_emit(it->edit_obj, "elm,state,rename,enable", "elm");
+ edje_object_signal_emit(it->edit_obj, "elm,state,ins,disable", "elm");
+ edje_object_signal_emit(it->edit_obj, "elm,state,del,disable", "elm");
+ edje_object_signal_emit(it->edit_obj, "elm,state,edit_end,disable", "elm");
+
+ if (it->itc->func.label_get)
+ {
+ it->renamed = EINA_TRUE;
+ swallow_part_cnt = 0;
+
+ Eina_List *rename = _elm_stringlist_get(edje_object_data_get(it->edit_obj, "rename"));
+ EINA_LIST_FOREACH(rename, l, rename_swallow_part)
+ {
+ if(label_cnt == swallow_part_cnt) {
+ editfield = elm_editfield_add(it->wd->obj);
+ it->wd->edit_field = eina_list_append(it->wd->edit_field, editfield);
+
+
+ elm_editfield_entry_single_line_set(editfield, EINA_TRUE);
+ elm_editfield_eraser_set(editfield, EINA_TRUE);
+ edje_object_part_swallow(it->edit_obj, rename_swallow_part, editfield);
+
+ evas_object_show(editfield);
+
+ s = it->itc->func.label_get(it->data, it->wd->obj, list->data);
+
+ if (s)
+ {
+ Evas_Object *entry = elm_editfield_entry_get(editfield);
+ elm_entry_entry_set(entry,s);
+
+ free(s);
+ }
+ else
+ elm_editfield_guide_text_set(editfield, "Text Input");
+ }
+ swallow_part_cnt++;
+ }
+ label_cnt++;
+ }
+ }
+ }
+
+ if(it->wd->edit_mode == 0xF0) {
+ it->wd->edit_mode = 0;
+ }
+}