Colorselector: Item Selection/Unselection logic changes and corresponding API additions.

SUMMARY
Item should remain selected once pressed.
When one item is selected other items should be unselected.
No special behavior on long press, item gets selected on mouse up.
APIs added are to get current selected item and to programmatically
control the selection/unselection of an item.

This is patch D515 (had to do by hand).
This commit is contained in:
Shilpa Singh 2014-02-08 13:33:58 +09:00 committed by Carsten Haitzler (Rasterman)
parent 3771a6d473
commit 9151befe0d
6 changed files with 124 additions and 14 deletions

View File

@ -84,6 +84,7 @@ test_colorselector(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
const Eina_List *item_list, *last_item_list;
Elm_Object_Item *color_item;
int r, g, b, a;
Elm_Object_Item *item;
win = elm_win_util_standard_add("colorselector", "ColorSelector");
elm_win_autodel_set(win, EINA_TRUE);
@ -113,7 +114,9 @@ test_colorselector(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
evas_object_show(fr);
cs = elm_colorselector_add(fr);
elm_colorselector_palette_color_add(cs, 255, 90, 18, 128);
item = elm_colorselector_palette_color_add(cs, 255, 90, 18, 128);
elm_colorselector_palette_item_selected_set(item, EINA_TRUE);
elm_colorselector_palette_color_add(cs, 255, 213, 0, 255);
elm_colorselector_palette_color_add(cs, 146, 255, 11, 255);
elm_colorselector_palette_color_add(cs, 9, 186, 10, 255);

View File

@ -1272,7 +1272,7 @@ _on_color_long_press(void *data)
ELM_COLORSELECTOR_DATA_GET(WIDGET(item), sd);
sd->longpress_timer = NULL;
sd->longpressed = EINA_TRUE;
evas_object_smart_callback_call
(WIDGET(item), SIG_COLOR_ITEM_LONGPRESSED, item);
@ -1293,8 +1293,6 @@ _on_color_pressed(void *data,
ELM_COLORSELECTOR_DATA_GET(WIDGET(item), sd);
if (ev->button != 1) return;
elm_object_signal_emit(VIEW(item), "elm,state,selected", "elm");
sd->longpressed = EINA_FALSE;
ecore_timer_del(sd->longpress_timer);
sd->longpress_timer = ecore_timer_add
@ -1317,15 +1315,17 @@ _on_color_released(void *data,
if (ev->button != 1) return;
ELM_SAFE_FREE(sd->longpress_timer, ecore_timer_del);
elm_object_signal_emit(VIEW(item), "elm,state,unselected", "elm");
if (!sd->longpressed)
{
elm_colorselector_color_set
(WIDGET(item), item->color->r, item->color->g, item->color->b,
item->color->a);
evas_object_smart_callback_call
(WIDGET(item), SIG_COLOR_ITEM_SELECTED, item);
}
elm_object_signal_emit(VIEW(item), "elm,state,selected", "elm");
elm_colorselector_color_set(WIDGET(item), item->color->r, item->color->g,
item->color->b, item->color->a);
evas_object_smart_callback_call(WIDGET(item), SIG_COLOR_ITEM_SELECTED,
item);
temp_item = eina_list_data_get(sd->selected);
if (temp_item && (temp_item != item))
elm_object_signal_emit(VIEW(temp_item), "elm,state,unselected", "elm");
EINA_LIST_FOREACH(sd->items, l, temp_item)
if (item == temp_item) sd->selected = l;
sd->focused = ELM_COLORSELECTOR_PALETTE;
@ -2166,6 +2166,67 @@ _palette_items_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
*ret = sd->items;
}
EAPI void
elm_colorselector_palette_item_selected_set(Elm_Object_Item *it,
Eina_Bool selected)
{
Elm_Color_Item *temp_item, *item;
item = (Elm_Color_Item *)it;
Eina_List *l;
ELM_COLORSELECTOR_DATA_GET(WIDGET(item), sd);
ELM_COLORSELECTOR_ITEM_CHECK_OR_RETURN(it);
if (selected)
{
temp_item = eina_list_data_get(sd->selected);
if (item == temp_item) return;
elm_object_signal_emit(VIEW(item), "elm,state,selected", "elm");
elm_colorselector_color_set(WIDGET(item), item->color->r, item->color->g,
item->color->b, item->color->a);
if (temp_item)
elm_object_signal_emit(VIEW(temp_item), "elm,state,unselected", "elm");
EINA_LIST_FOREACH(sd->items, l, temp_item)
if (item == temp_item) sd->selected = l;
}
else
{
elm_object_signal_emit(VIEW(item), "elm,state,unselected", "elm");
sd->selected = NULL;
}
}
EAPI Eina_Bool
elm_colorselector_palette_item_selected_get(const Elm_Object_Item *it)
{
Elm_Color_Item *temp_item, *item;
item = (Elm_Color_Item *)it;
ELM_COLORSELECTOR_ITEM_CHECK_OR_RETURN(it, EINA_FALSE);
ELM_COLORSELECTOR_DATA_GET(WIDGET(item), sd);
temp_item = eina_list_data_get(sd->selected);
if (item == temp_item) return EINA_TRUE;
else return EINA_FALSE;
}
EAPI Elm_Object_Item *
elm_colorselector_palette_selected_item_get(const Evas_Object *obj)
{
ELM_COLORSELECTOR_CHECK(obj) NULL;
Elm_Object_Item *ret = NULL;
eo_do((Eo *) obj, elm_obj_colorselector_palette_selected_item_get(&ret));
return ret;
}
static void
_palette_selected_item_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
{
Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
Elm_Colorselector_Smart_Data *sd = _pd;
*ret = eina_list_data_get(sd->selected);
}
EAPI void
elm_colorselector_palette_name_set(Evas_Object *obj,
const char *palette_name)
@ -2230,6 +2291,7 @@ _class_constructor(Eo_Class *klass)
EO_OP_FUNC(ELM_OBJ_COLORSELECTOR_ID(ELM_OBJ_COLORSELECTOR_SUB_ID_MODE_GET), _mode_get),
EO_OP_FUNC(ELM_OBJ_COLORSELECTOR_ID(ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_COLOR_ADD), _palette_color_add),
EO_OP_FUNC(ELM_OBJ_COLORSELECTOR_ID(ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_CLEAR), _palette_clear),
EO_OP_FUNC(ELM_OBJ_COLORSELECTOR_ID(ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_SELECTED_ITEM_GET), _palette_selected_item_get),
EO_OP_FUNC(ELM_OBJ_COLORSELECTOR_ID(ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_ITEMS_GET), _palette_items_get),
EO_OP_FUNC(ELM_OBJ_COLORSELECTOR_ID(ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_NAME_SET), _palette_name_set),
EO_OP_FUNC(ELM_OBJ_COLORSELECTOR_ID(ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_NAME_GET), _palette_name_get),
@ -2249,6 +2311,7 @@ static const Eo_Op_Description op_desc[] = {
EO_OP_DESCRIPTION(ELM_OBJ_COLORSELECTOR_SUB_ID_MODE_GET, "Get Colorselector's mode."),
EO_OP_DESCRIPTION(ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_COLOR_ADD, "Add a new color item to palette."),
EO_OP_DESCRIPTION(ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_CLEAR, "Clear the palette items."),
EO_OP_DESCRIPTION(ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_SELECTED_ITEM_GET, "Get Palette's current selected item"),
EO_OP_DESCRIPTION(ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_ITEMS_GET, "Get palette's item list"),
EO_OP_DESCRIPTION(ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_NAME_SET, "Set current palette's name."),
EO_OP_DESCRIPTION(ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_NAME_GET, "Get current palette's name."),

View File

@ -56,3 +56,24 @@ EAPI void elm_colorselector_palette_item_color_get(const Elm_Object_Item *it, in
*/
EAPI void elm_colorselector_palette_item_color_set(Elm_Object_Item *it, int r, int g, int b, int a);
/**
* Get the selected state of color palette item.
*
* @param it The Colorpalette item
* @return EINA_TRUE if the item is selected, EINA_FALSE otherwise.
*
* @since 1.9
* @ingroup Colorselector
*/
EAPI Eina_Bool elm_colorselector_palette_item_selected_get(const Elm_Object_Item *it);
/**
* Set the selected state of color palette item
*
* @param it The Colorpalette item
* @param selected if it's EINA_TRUE, select the item otherwise, unselect the item
*
* @since 1.9
* @ingroup Colorselector
*/
EAPI void elm_colorselector_palette_item_selected_set(Elm_Object_Item *it, Eina_Bool selected);

View File

@ -12,6 +12,7 @@ enum
ELM_OBJ_COLORSELECTOR_SUB_ID_MODE_GET,
ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_COLOR_ADD,
ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_CLEAR,
ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_SELECTED_ITEM_GET,
ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_ITEMS_GET,
ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_NAME_SET,
ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_NAME_GET,
@ -126,6 +127,18 @@ enum
*/
#define elm_obj_colorselector_palette_items_get(ret) ELM_OBJ_COLORSELECTOR_ID(ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_ITEMS_GET), EO_TYPECHECK(const Eina_List **, ret)
/**
* @def elm_obj_colorselector_palette_selected_item_get
* @since 1.9
*
* Get current selected palette item
*
* @param[out] ret
*
* @ingroup Colorselector
*/
#define elm_obj_colorselector_palette_selected_item_get(ret) ELM_OBJ_COLORSELECTOR_ID(ELM_OBJ_COLORSELECTOR_SUB_ID_PALETTE_SELECTED_ITEM_GET), EO_TYPECHECK(Elm_Object_Item **, ret)
/**
* @def elm_obj_colorselector_palette_name_set
* @since 1.8

View File

@ -94,6 +94,17 @@ EAPI void elm_colorselector_palette_clear(Evas_Object *obj);
*/
EAPI const Eina_List *elm_colorselector_palette_items_get(const Evas_Object *obj);
/**
* Get the selected item in colorselector palette.
*
* @param obj The Colorselector object
* @return The selected item, or NULL if none is selected.
*
* @since 1.9
* @ingroup Colorselector
*/
EAPI Elm_Object_Item *elm_colorselector_palette_selected_item_get(const Evas_Object *obj);
/**
* Set current palette's name
*

View File

@ -56,7 +56,6 @@ struct _Elm_Colorselector_Smart_Data
Elm_Colorselector_Mode mode, focused;
int sel_color_type;
Eina_Bool longpressed : 1;
Eina_Bool config_load : 1;
};