forked from enlightenment/efl
introduce efl_ui_multi_selectable and efl_ui_single_selectable
right now they are just thin wrappers from what have been in efl_ui_collection. This is just a first effort, the interfaces have to be equipped with more and better API, more events, and tests. ref T8057 Reviewed-by: SangHyeon Jade Lee <sh10233.lee@samsung.com> Differential Revision: https://phab.enlightenment.org/D9515
This commit is contained in:
parent
f34f92bb29
commit
54c524f7f6
|
@ -30,7 +30,7 @@ _list_selected(void *data EINA_UNUSED, const Efl_Event *ev)
|
|||
Eo *item = ev->info, *tmp;
|
||||
printf("list item [%p:%d] is %s\n", item, efl_ui_item_index_get(item), (efl_ui_selectable_selected_get(item)? "selected" : "unselected"));
|
||||
|
||||
Eina_Iterator *selects = efl_ui_collection_selected_items_get(list);
|
||||
Eina_Iterator *selects = efl_ui_selected_items_get(list);
|
||||
|
||||
EINA_ITERATOR_FOREACH(selects, tmp)
|
||||
printf("selected [%p:%d] ", tmp, efl_ui_item_index_get(tmp));
|
||||
|
@ -82,7 +82,7 @@ _anim_radio_changed(void *data, const Efl_Event *ev EINA_UNUSED)
|
|||
static void
|
||||
_scrl_btn_clicked(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
|
||||
{
|
||||
Efl_Ui_List_Default_Item *item = efl_ui_collection_last_selected_item_get(priv_d.list);
|
||||
Efl_Ui_List_Default_Item *item = efl_ui_single_selectable_last_selected_get(priv_d.list);
|
||||
printf("show [%d:%p] [%d]\n", efl_ui_item_index_get(item), item, priv_d.anim);
|
||||
efl_ui_collection_item_scroll(priv_d.list, item, priv_d.anim);
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ _scrl_btn_clicked(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
|
|||
static void
|
||||
_scrl_align_btn_clicked(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
|
||||
{
|
||||
Efl_Ui_List_Default_Item *item = efl_ui_collection_last_selected_item_get(priv_d.list);
|
||||
Efl_Ui_List_Default_Item *item = efl_ui_single_selectable_last_selected_get(priv_d.list);
|
||||
double align = efl_ui_range_value_get(priv_d.slider);
|
||||
printf("show [%d:%p] [%.2lf], [%d]\n", efl_ui_item_index_get(item), item, align, priv_d.anim);
|
||||
efl_ui_collection_item_scroll_align(priv_d.list, item, align, priv_d.anim);
|
||||
|
|
|
@ -109,7 +109,6 @@ typedef Efl_Gfx_Path_Command_Type Efl_Gfx_Path_Command;
|
|||
#include "interfaces/efl_ui_scrollable_interactive.eo.h"
|
||||
#include "interfaces/efl_ui_text_selectable.eo.h"
|
||||
#include "interfaces/efl_ui_container_selectable.eo.h"
|
||||
#include "interfaces/efl_ui_multi_selectable.eo.h"
|
||||
#include "interfaces/efl_ui_zoom.eo.h"
|
||||
|
||||
#include "interfaces/efl_screen.eo.h"
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
#include "interfaces/efl_ui_scrollbar.eo.c"
|
||||
#include "interfaces/efl_ui_container_selectable.eo.c"
|
||||
#include "interfaces/efl_ui_text_selectable.eo.c"
|
||||
#include "interfaces/efl_ui_multi_selectable.eo.c"
|
||||
|
||||
#include "interfaces/efl_ui_zoom.eo.c"
|
||||
|
||||
#include "interfaces/efl_cached_item.eo.c"
|
||||
|
|
|
@ -84,7 +84,6 @@ pub_eo_files = [
|
|||
'efl_ui_property_bind.eo',
|
||||
'efl_ui_factory.eo',
|
||||
'efl_ui_factory_bind.eo',
|
||||
'efl_ui_multi_selectable.eo',
|
||||
'efl_screen.eo',
|
||||
'efl_io_closer.eo',
|
||||
'efl_io_positioner.eo',
|
||||
|
|
|
@ -260,6 +260,8 @@ typedef Eo Efl_Ui_Spotlight_Indicator;
|
|||
# include <efl_ui_grid_default_item.eo.h>
|
||||
# include <efl_ui_list_placeholder_item.eo.h>
|
||||
# include <efl_ui_selectable.eo.h>
|
||||
# include <efl_ui_single_selectable.eo.h>
|
||||
# include <efl_ui_multi_selectable.eo.h>
|
||||
# include <efl_ui_popup.eo.h>
|
||||
# include <efl_ui_alert_popup.eo.h>
|
||||
# include <efl_ui_scroll_alert_popup.eo.h>
|
||||
|
|
|
@ -251,14 +251,14 @@ _efl_ui_collection_item_scroll_align(Eo *obj, Efl_Ui_Collection_Data *pd, Efl_Ui
|
|||
_item_scroll_internal(obj, pd, item, align, animation);
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Ui_Item*
|
||||
_efl_ui_collection_last_selected_item_get(const Eo *obj EINA_UNUSED, Efl_Ui_Collection_Data *pd)
|
||||
EOLIAN static Efl_Ui_Selectable*
|
||||
_efl_ui_collection_efl_ui_single_selectable_last_selected_get(const Eo *obj EINA_UNUSED, Efl_Ui_Collection_Data *pd)
|
||||
{
|
||||
return eina_list_last_data_get(pd->selected);
|
||||
}
|
||||
|
||||
EOLIAN static Eina_Iterator*
|
||||
_efl_ui_collection_selected_items_get(Eo *obj EINA_UNUSED, Efl_Ui_Collection_Data *pd)
|
||||
_efl_ui_collection_efl_ui_multi_selectable_selected_items_get(Eo *obj EINA_UNUSED, Efl_Ui_Collection_Data *pd)
|
||||
{
|
||||
return eina_list_iterator_new(pd->selected);
|
||||
}
|
||||
|
|
|
@ -32,18 +32,6 @@ class @beta Efl.Ui.Collection extends Efl.Ui.Layout_Base implements
|
|||
@in animation: bool; [[If you want to have an animation or not.]]
|
||||
}
|
||||
}
|
||||
@property last_selected_item {
|
||||
[[The item that was selected most recently.
|
||||
]]
|
||||
get {}
|
||||
values {
|
||||
item: Efl.Ui.Item; [[The latest selected item.]]
|
||||
}
|
||||
}
|
||||
selected_items_get {
|
||||
[[Get the selected items iterator. The iterator sequence will be decided by selection.]]
|
||||
return: iterator<Efl.Ui.Item> @owned @no_unused; [[User has to free the iterator after usage.]]
|
||||
}
|
||||
@property position_manager {
|
||||
[[Position manager object that handles placement of items.]]
|
||||
values {
|
||||
|
@ -73,10 +61,12 @@ class @beta Efl.Ui.Collection extends Efl.Ui.Layout_Base implements
|
|||
Efl.Pack_Linear.pack_index_get;
|
||||
Efl.Pack_Linear.pack_content_get;
|
||||
Efl.Ui.Scrollable_Interactive.match_content { set; }
|
||||
Efl.Ui.Multi_Selectable.select_mode {get; set;}
|
||||
Efl.Ui.Widget_Focus_Manager.focus_manager_create;
|
||||
Efl.Ui.Widget.focus_state_apply;
|
||||
Efl.Ui.Focus.Manager.move;
|
||||
Efl.Ui.Single_Selectable.last_selected { get; }
|
||||
Efl.Ui.Multi_Selectable.selected_items_get;
|
||||
Efl.Ui.Multi_Selectable.select_mode {get; set;}
|
||||
}
|
||||
events {
|
||||
item,pressed : Efl.Ui.Item; [[A $press event occurred over an item.]]
|
||||
|
|
|
@ -273,3 +273,5 @@ _efl_ui_item_container_get(const Eo *obj EINA_UNUSED, Efl_Ui_Item_Data *pd)
|
|||
|
||||
#include "efl_ui_item.eo.c"
|
||||
#include "efl_ui_selectable.eo.c"
|
||||
#include "efl_ui_multi_selectable.eo.c"
|
||||
#include "efl_ui_single_selectable.eo.c"
|
||||
|
|
|
@ -8,10 +8,11 @@ enum @beta Efl.Ui.Select_Mode {
|
|||
none [[Last value of select mode. child cannot be selected at all.]]
|
||||
}
|
||||
|
||||
interface @beta Efl.Ui.Multi_Selectable
|
||||
interface @beta Efl.Ui.Multi_Selectable extends Efl.Ui.Single_Selectable
|
||||
{
|
||||
[[Efl UI Multi selectable interface.
|
||||
The container have to control select property of multiple chidren.]]
|
||||
[[Interface for getting access to a range of selected items.
|
||||
|
||||
The implementor of this interface provides the possibility to select multiple Selectables. (If not, only Efl.Ui.Single_Selectable should be implemented)]]
|
||||
c_prefix: efl_ui;
|
||||
methods
|
||||
{
|
||||
|
@ -23,5 +24,9 @@ interface @beta Efl.Ui.Multi_Selectable
|
|||
mode: Efl.Ui.Select_Mode; [[Type of selection of children]]
|
||||
}
|
||||
}
|
||||
selected_items_get {
|
||||
[[Get the selected items in a iterator. The iterator sequence will be decided by selection.]]
|
||||
return: iterator<Efl.Ui.Selectable> @owned @no_unused; [[User has to free the iterator after usage.]]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
interface @beta Efl.Ui.Single_Selectable {
|
||||
[[Interface for getting access to a single selected item in the implementor.
|
||||
|
||||
The implementor is free to allow a specific number of selectables beeing selected or not. This interface just covers always the latest selected selectable.
|
||||
]]
|
||||
methods {
|
||||
@property last_selected {
|
||||
[[The selectable that was selected most recently.]]
|
||||
get {
|
||||
|
||||
}
|
||||
values {
|
||||
selectable : Efl.Ui.Selectable; [[The latest selected item.]]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -183,6 +183,8 @@ pub_eo_files = [
|
|||
'efl_ui_position_manager_list.eo',
|
||||
'efl_ui_position_manager_grid.eo',
|
||||
'efl_ui_selectable.eo',
|
||||
'efl_ui_multi_selectable.eo',
|
||||
'efl_ui_single_selectable.eo',
|
||||
]
|
||||
|
||||
foreach eo_file : pub_eo_files
|
||||
|
|
|
@ -22,212 +22,6 @@ fill_items(const Efl_Class *klass)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_set_pointer_quit(void *data, const Efl_Event *ev)
|
||||
void efl_ui_test_item_container_common_add(TCase *tc EINA_UNUSED)
|
||||
{
|
||||
Efl_Ui_Item **b = data;
|
||||
|
||||
ck_assert_ptr_eq(*b, NULL);
|
||||
*b = ev->info;
|
||||
}
|
||||
|
||||
static void
|
||||
_iterator_to_array(Eina_Array **arr, Eina_Iterator *iter)
|
||||
{
|
||||
Efl_Ui_Widget *widget;
|
||||
|
||||
*arr = eina_array_new(10);
|
||||
|
||||
EINA_ITERATOR_FOREACH(iter, widget)
|
||||
{
|
||||
eina_array_push(*arr, widget);
|
||||
}
|
||||
eina_iterator_free(iter);
|
||||
}
|
||||
|
||||
EFL_START_TEST(test_multi_select)
|
||||
{
|
||||
Efl_Ui_Item *selected = NULL;
|
||||
Efl_Ui_Item *unselected = NULL;
|
||||
Eina_Array *arr_selected;
|
||||
efl_ui_select_mode_set(item_container, EFL_UI_SELECT_MODE_MULTI);
|
||||
efl_event_callback_add(item_container, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_add(item_container, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
fill_items(EFL_UI_LIST_DEFAULT_ITEM_CLASS);
|
||||
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 0), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, efl_pack_content_get(item_container, 0));
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 2), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, efl_pack_content_get(item_container, 2));
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(item_container, 0)), EINA_TRUE);
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(item_container, 2)), EINA_TRUE);
|
||||
ck_assert_ptr_eq(efl_ui_collection_last_selected_item_get(item_container), efl_pack_content_get(item_container, 2));
|
||||
_iterator_to_array(&arr_selected, efl_ui_collection_selected_items_get(item_container));
|
||||
ck_assert_int_eq(eina_array_count(arr_selected), 2);
|
||||
ck_assert_ptr_eq(eina_array_data_get(arr_selected, 0), efl_pack_content_get(item_container, 0));
|
||||
ck_assert_ptr_eq(eina_array_data_get(arr_selected, 1), efl_pack_content_get(item_container, 2));
|
||||
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 2), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, NULL);
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_event_callback_del(item_container, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_del(item_container, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(test_multi_select_removal)
|
||||
{
|
||||
Efl_Ui_Item *selected = NULL;
|
||||
Efl_Ui_Item *unselected = NULL;
|
||||
Eina_Array *arr_selected;
|
||||
efl_ui_select_mode_set(item_container, EFL_UI_SELECT_MODE_MULTI);
|
||||
efl_event_callback_add(item_container, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_add(item_container, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
fill_items(EFL_UI_LIST_DEFAULT_ITEM_CLASS);
|
||||
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 0), EINA_TRUE);
|
||||
selected = NULL;//No need to ckeck the flag, we asserted in the tcase before
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 2), EINA_TRUE);
|
||||
selected = NULL;//No need to ckeck the flag, we asserted in the tcase before
|
||||
unselected = NULL;
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 0), EINA_FALSE);
|
||||
ck_assert_ptr_eq(selected, NULL);
|
||||
ck_assert_ptr_eq(unselected, efl_pack_content_get(item_container, 0));
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 2), EINA_FALSE);
|
||||
ck_assert_ptr_eq(selected, NULL);
|
||||
ck_assert_ptr_eq(unselected, efl_pack_content_get(item_container, 2));
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
|
||||
ck_assert_ptr_eq(efl_ui_collection_last_selected_item_get(item_container), NULL);
|
||||
_iterator_to_array(&arr_selected, efl_ui_collection_selected_items_get(item_container));
|
||||
ck_assert_int_eq(eina_array_count(arr_selected), 0);
|
||||
efl_event_callback_del(item_container, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_del(item_container, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(test_single_select)
|
||||
{
|
||||
Efl_Ui_Item *selected = NULL;
|
||||
Efl_Ui_Item *unselected = NULL;
|
||||
Eina_Array *arr_selected;
|
||||
|
||||
efl_ui_select_mode_set(item_container, EFL_UI_SELECT_MODE_SINGLE);
|
||||
efl_event_callback_add(item_container, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_add(item_container, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
fill_items(EFL_UI_LIST_DEFAULT_ITEM_CLASS);
|
||||
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 0), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, efl_pack_content_get(item_container, 0));
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 2), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, efl_pack_content_get(item_container, 2));
|
||||
ck_assert_ptr_eq(unselected, efl_pack_content_get(item_container, 0));
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(item_container, 0)), EINA_FALSE);
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(item_container, 2)), EINA_TRUE);
|
||||
ck_assert_ptr_eq(efl_ui_collection_last_selected_item_get(item_container), efl_pack_content_get(item_container, 2));
|
||||
_iterator_to_array(&arr_selected, efl_ui_collection_selected_items_get(item_container));
|
||||
ck_assert_int_eq(eina_array_count(arr_selected), 1);
|
||||
ck_assert_ptr_eq(eina_array_data_get(arr_selected, 0), efl_pack_content_get(item_container, 2));
|
||||
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 2), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, NULL);
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_event_callback_del(item_container, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_del(item_container, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(test_single_select_always)
|
||||
{
|
||||
Efl_Ui_Item *selected = NULL;
|
||||
Efl_Ui_Item *unselected = NULL;
|
||||
Eina_Array *arr_selected;
|
||||
|
||||
efl_ui_select_mode_set(item_container, EFL_UI_SELECT_MODE_SINGLE_ALWAYS);
|
||||
efl_event_callback_add(item_container, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_add(item_container, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
fill_items(EFL_UI_LIST_DEFAULT_ITEM_CLASS);
|
||||
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 0), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, efl_pack_content_get(item_container, 0));
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 2), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, efl_pack_content_get(item_container, 2));
|
||||
ck_assert_ptr_eq(unselected, efl_pack_content_get(item_container, 0));
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 2), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, efl_pack_content_get(item_container, 2));
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(item_container, 0)), EINA_FALSE);
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(item_container, 2)), EINA_TRUE);
|
||||
ck_assert_ptr_eq(efl_ui_collection_last_selected_item_get(item_container), efl_pack_content_get(item_container, 2));
|
||||
_iterator_to_array(&arr_selected, efl_ui_collection_selected_items_get(item_container));
|
||||
ck_assert_int_eq(eina_array_count(arr_selected), 1);
|
||||
ck_assert_ptr_eq(eina_array_data_get(arr_selected, 0), efl_pack_content_get(item_container, 2));
|
||||
efl_event_callback_del(item_container, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_del(item_container, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(test_none_select)
|
||||
{
|
||||
Efl_Ui_Item *selected = NULL;
|
||||
Efl_Ui_Item *unselected = NULL;
|
||||
Eina_Array *arr_selected;
|
||||
|
||||
efl_ui_select_mode_set(item_container, EFL_UI_SELECT_MODE_NONE);
|
||||
efl_event_callback_add(item_container, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_add(item_container, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
fill_items(EFL_UI_LIST_DEFAULT_ITEM_CLASS);
|
||||
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 0), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, NULL);
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(item_container, 2), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, NULL);
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(item_container, 0)), EINA_FALSE);
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(item_container, 2)), EINA_FALSE);
|
||||
ck_assert_ptr_eq(efl_ui_collection_last_selected_item_get(item_container), NULL);
|
||||
_iterator_to_array(&arr_selected, efl_ui_collection_selected_items_get(item_container));
|
||||
ck_assert_int_eq(eina_array_count(arr_selected), 0);
|
||||
efl_event_callback_del(item_container, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_del(item_container, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
void efl_ui_test_item_container_common_add(TCase *tc)
|
||||
{
|
||||
tcase_add_test(tc, test_multi_select);
|
||||
tcase_add_test(tc, test_multi_select_removal);
|
||||
tcase_add_test(tc, test_single_select);
|
||||
tcase_add_test(tc, test_none_select);
|
||||
tcase_add_test(tc, test_single_select_always);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,239 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
# include "elementary_config.h"
|
||||
#endif
|
||||
|
||||
#include <Efl_Ui.h>
|
||||
#include "efl_ui_spec_suite.h"
|
||||
#include "suite_helpers.h"
|
||||
|
||||
/* spec-meta-start
|
||||
{"test-interface":"Efl.Ui.Multi_Selectable",
|
||||
"test-widgets": ["Efl.Ui.Grid", "Efl.Ui.List"],
|
||||
"custom-mapping" : {
|
||||
"Efl.Ui.Grid" : "EFL_UI_GRID_DEFAULT_ITEM_CLASS",
|
||||
"Efl.Ui.List" : "EFL_UI_LIST_DEFAULT_ITEM_CLASS"
|
||||
}
|
||||
}
|
||||
|
||||
spec-meta-end */
|
||||
|
||||
|
||||
static void
|
||||
_setup(void)
|
||||
{
|
||||
Eo *c[3];
|
||||
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
c[i] = create_test_widget();
|
||||
efl_pack_end(widget, c[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_set_pointer_quit(void *data, const Efl_Event *ev)
|
||||
{
|
||||
Efl_Ui_Item **b = data;
|
||||
|
||||
ck_assert_ptr_eq(*b, NULL);
|
||||
*b = ev->info;
|
||||
}
|
||||
|
||||
static void
|
||||
_iterator_to_array(Eina_Array **arr, Eina_Iterator *iter)
|
||||
{
|
||||
Efl_Ui_Widget *widget;
|
||||
|
||||
*arr = eina_array_new(10);
|
||||
|
||||
EINA_ITERATOR_FOREACH(iter, widget)
|
||||
{
|
||||
eina_array_push(*arr, widget);
|
||||
}
|
||||
eina_iterator_free(iter);
|
||||
}
|
||||
|
||||
EFL_START_TEST(test_multi_select)
|
||||
{
|
||||
Efl_Ui_Item *selected = NULL;
|
||||
Efl_Ui_Item *unselected = NULL;
|
||||
Eina_Array *arr_selected;
|
||||
efl_ui_select_mode_set(widget, EFL_UI_SELECT_MODE_MULTI);
|
||||
efl_event_callback_add(widget, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_add(widget, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 0), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, efl_pack_content_get(widget, 0));
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 2), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, efl_pack_content_get(widget, 2));
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(widget, 0)), EINA_TRUE);
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(widget, 2)), EINA_TRUE);
|
||||
ck_assert_ptr_eq(efl_ui_single_selectable_last_selected_get(widget), efl_pack_content_get(widget, 2));
|
||||
_iterator_to_array(&arr_selected, efl_ui_selected_items_get(widget));
|
||||
ck_assert_int_eq(eina_array_count(arr_selected), 2);
|
||||
ck_assert_ptr_eq(eina_array_data_get(arr_selected, 0), efl_pack_content_get(widget, 0));
|
||||
ck_assert_ptr_eq(eina_array_data_get(arr_selected, 1), efl_pack_content_get(widget, 2));
|
||||
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 2), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, NULL);
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_event_callback_del(widget, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_del(widget, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(test_multi_select_removal)
|
||||
{
|
||||
Efl_Ui_Item *selected = NULL;
|
||||
Efl_Ui_Item *unselected = NULL;
|
||||
Eina_Array *arr_selected;
|
||||
efl_ui_select_mode_set(widget, EFL_UI_SELECT_MODE_MULTI);
|
||||
efl_event_callback_add(widget, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_add(widget, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 0), EINA_TRUE);
|
||||
selected = NULL;//No need to ckeck the flag, we asserted in the tcase before
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 2), EINA_TRUE);
|
||||
selected = NULL;//No need to ckeck the flag, we asserted in the tcase before
|
||||
unselected = NULL;
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 0), EINA_FALSE);
|
||||
ck_assert_ptr_eq(selected, NULL);
|
||||
ck_assert_ptr_eq(unselected, efl_pack_content_get(widget, 0));
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 2), EINA_FALSE);
|
||||
ck_assert_ptr_eq(selected, NULL);
|
||||
ck_assert_ptr_eq(unselected, efl_pack_content_get(widget, 2));
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
|
||||
ck_assert_ptr_eq(efl_ui_single_selectable_last_selected_get(widget), NULL);
|
||||
_iterator_to_array(&arr_selected, efl_ui_selected_items_get(widget));
|
||||
ck_assert_int_eq(eina_array_count(arr_selected), 0);
|
||||
efl_event_callback_del(widget, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_del(widget, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(test_single_select)
|
||||
{
|
||||
Efl_Ui_Item *selected = NULL;
|
||||
Efl_Ui_Item *unselected = NULL;
|
||||
Eina_Array *arr_selected;
|
||||
|
||||
efl_ui_select_mode_set(widget, EFL_UI_SELECT_MODE_SINGLE);
|
||||
efl_event_callback_add(widget, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_add(widget, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 0), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, efl_pack_content_get(widget, 0));
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 2), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, efl_pack_content_get(widget, 2));
|
||||
ck_assert_ptr_eq(unselected, efl_pack_content_get(widget, 0));
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(widget, 0)), EINA_FALSE);
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(widget, 2)), EINA_TRUE);
|
||||
ck_assert_ptr_eq(efl_ui_single_selectable_last_selected_get(widget), efl_pack_content_get(widget, 2));
|
||||
_iterator_to_array(&arr_selected, efl_ui_selected_items_get(widget));
|
||||
ck_assert_int_eq(eina_array_count(arr_selected), 1);
|
||||
ck_assert_ptr_eq(eina_array_data_get(arr_selected, 0), efl_pack_content_get(widget, 2));
|
||||
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 2), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, NULL);
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_event_callback_del(widget, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_del(widget, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(test_single_select_always)
|
||||
{
|
||||
Efl_Ui_Item *selected = NULL;
|
||||
Efl_Ui_Item *unselected = NULL;
|
||||
Eina_Array *arr_selected;
|
||||
|
||||
efl_ui_select_mode_set(widget, EFL_UI_SELECT_MODE_SINGLE_ALWAYS);
|
||||
efl_event_callback_add(widget, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_add(widget, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 0), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, efl_pack_content_get(widget, 0));
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 2), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, efl_pack_content_get(widget, 2));
|
||||
ck_assert_ptr_eq(unselected, efl_pack_content_get(widget, 0));
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 2), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, efl_pack_content_get(widget, 2));
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(widget, 0)), EINA_FALSE);
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(widget, 2)), EINA_TRUE);
|
||||
ck_assert_ptr_eq(efl_ui_single_selectable_last_selected_get(widget), efl_pack_content_get(widget, 2));
|
||||
_iterator_to_array(&arr_selected, efl_ui_selected_items_get(widget));
|
||||
ck_assert_int_eq(eina_array_count(arr_selected), 1);
|
||||
ck_assert_ptr_eq(eina_array_data_get(arr_selected, 0), efl_pack_content_get(widget, 2));
|
||||
efl_event_callback_del(widget, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_del(widget, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(test_none_select)
|
||||
{
|
||||
Efl_Ui_Item *selected = NULL;
|
||||
Efl_Ui_Item *unselected = NULL;
|
||||
Eina_Array *arr_selected;
|
||||
|
||||
efl_ui_select_mode_set(widget, EFL_UI_SELECT_MODE_NONE);
|
||||
efl_event_callback_add(widget, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_add(widget, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 0), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, NULL);
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
efl_ui_selectable_selected_set(efl_pack_content_get(widget, 2), EINA_TRUE);
|
||||
ck_assert_ptr_eq(selected, NULL);
|
||||
ck_assert_ptr_eq(unselected, NULL);
|
||||
selected = NULL;
|
||||
unselected = NULL;
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(widget, 0)), EINA_FALSE);
|
||||
ck_assert_int_eq(efl_ui_selectable_selected_get(efl_pack_content_get(widget, 2)), EINA_FALSE);
|
||||
ck_assert_ptr_eq(efl_ui_single_selectable_last_selected_get(widget), NULL);
|
||||
_iterator_to_array(&arr_selected, efl_ui_selected_items_get(widget));
|
||||
ck_assert_int_eq(eina_array_count(arr_selected), 0);
|
||||
efl_event_callback_del(widget, EFL_UI_EVENT_ITEM_SELECTED, _set_pointer_quit, &selected);
|
||||
efl_event_callback_del(widget, EFL_UI_EVENT_ITEM_UNSELECTED, _set_pointer_quit, &unselected);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
void
|
||||
efl_ui_multi_selectable_behavior_test(TCase *tc)
|
||||
{
|
||||
tcase_add_checked_fixture(tc, _setup, NULL);
|
||||
tcase_add_test(tc, test_multi_select);
|
||||
tcase_add_test(tc, test_multi_select_removal);
|
||||
tcase_add_test(tc, test_single_select);
|
||||
tcase_add_test(tc, test_none_select);
|
||||
tcase_add_test(tc, test_single_select_always);
|
||||
efl_ui_single_selectable_behavior_test(tc);
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
# include "elementary_config.h"
|
||||
#endif
|
||||
|
||||
#include <Efl_Ui.h>
|
||||
#include "efl_ui_spec_suite.h"
|
||||
#include "suite_helpers.h"
|
||||
|
||||
/* spec-meta-start
|
||||
{"test-interface":"Efl.Ui.Single_Selectable",
|
||||
"test-widgets": ["Efl.Ui.Grid", "Efl.Ui.List"],
|
||||
"custom-mapping" : {
|
||||
"Efl.Ui.Grid" : "EFL_UI_GRID_DEFAULT_ITEM_CLASS",
|
||||
"Efl.Ui.List" : "EFL_UI_LIST_DEFAULT_ITEM_CLASS"
|
||||
}
|
||||
}
|
||||
|
||||
spec-meta-end */
|
||||
|
||||
static void
|
||||
_setup(void)
|
||||
{
|
||||
Eo *c[3];
|
||||
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
c[i] = create_test_widget();
|
||||
if (efl_isa(c[i], EFL_UI_RADIO_CLASS))
|
||||
efl_ui_radio_state_value_set(c[i], i+1);
|
||||
efl_pack_end(widget, c[i]);
|
||||
}
|
||||
}
|
||||
|
||||
EFL_START_TEST(last_selectable_check)
|
||||
{
|
||||
Eo *c1 = efl_pack_content_get(widget, 0);
|
||||
Eo *c2 = efl_pack_content_get(widget, 2);
|
||||
|
||||
efl_ui_selectable_selected_set(c1, EINA_TRUE);
|
||||
ck_assert_ptr_eq(efl_ui_single_selectable_last_selected_get(widget), c1);
|
||||
|
||||
efl_ui_selectable_selected_set(c2, EINA_TRUE);
|
||||
ck_assert_ptr_eq(efl_ui_single_selectable_last_selected_get(widget), c2);
|
||||
efl_ui_selectable_selected_set(c1, EINA_FALSE);
|
||||
ck_assert_ptr_eq(efl_ui_single_selectable_last_selected_get(widget), c2);
|
||||
efl_ui_selectable_selected_set(c2, EINA_FALSE);
|
||||
ck_assert_ptr_eq(efl_ui_single_selectable_last_selected_get(widget), NULL);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
void
|
||||
efl_ui_single_selectable_behavior_test(TCase *tc)
|
||||
{
|
||||
tcase_add_checked_fixture(tc, _setup, NULL);
|
||||
tcase_add_test(tc, last_selectable_check);
|
||||
}
|
|
@ -19,6 +19,8 @@ void efl_ui_format_behavior_test(TCase *tc);
|
|||
void efl_ui_range_display_behavior_test(TCase *tc);
|
||||
void efl_ui_range_display_interactive_behavior_test(TCase *tc);
|
||||
void efl_ui_view_behavior_test(TCase *tc);
|
||||
void efl_ui_single_selectable_behavior_test(TCase *tc);
|
||||
void efl_ui_multi_selectable_behavior_test(TCase *tc);
|
||||
|
||||
void efl_test_container_content_equal(Efl_Ui_Widget **wid, unsigned int len);
|
||||
void efl_test_container_expect_evt_content_added(Efl_Ui_Widget *widget, const Efl_Event_Description *ev, Eina_Bool *flag, void *event_data);
|
||||
|
|
|
@ -8,6 +8,8 @@ efl_ui_suite_behavior_test_files = files([
|
|||
'efl_test_range_display.c',
|
||||
'efl_test_range_interactive.c',
|
||||
'efl_test_ui_view.c',
|
||||
'efl_test_single_selectable.c',
|
||||
'efl_test_multi_selectable.c',
|
||||
])
|
||||
|
||||
efl_ui_suite_behavior_src = files([
|
||||
|
|
Loading…
Reference in New Issue