summaryrefslogtreecommitdiff
path: root/src/examples/elementary/efl_ui_list_example_1.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/examples/elementary/efl_ui_list_example_1.c')
-rw-r--r--src/examples/elementary/efl_ui_list_example_1.c340
1 files changed, 278 insertions, 62 deletions
diff --git a/src/examples/elementary/efl_ui_list_example_1.c b/src/examples/elementary/efl_ui_list_example_1.c
index 488dca0dfb..432c58621c 100644
--- a/src/examples/elementary/efl_ui_list_example_1.c
+++ b/src/examples/elementary/efl_ui_list_example_1.c
@@ -1,4 +1,5 @@
// gcc -o efl_ui_list_example_1 efl_ui_list_example_1.c `pkg-config --cflags --libs elementary`
+// ./efl_ui_list_example_1 item_style_name
#ifdef HAVE_CONFIG_H
# include "elementary_config.h"
@@ -14,98 +15,313 @@
#define NUM_ITEMS 400
-const char *styles[] = {
- "odd",
- "even"
- };
+typedef struct _List_Scroll_Data {
+ Eo *list;
+ Eo *slider;
+ Eina_Bool anim;
+} List_Scroll_Data;
+List_Scroll_Data priv_d;
-char edj_path[PATH_MAX];
static void
-_realized_cb(void *data, const Efl_Event *event)
+_list_selected(void *data, const Efl_Event *ev)
{
- Efl_Ui_List_Item_Event *ie = event->info;
- if (!ie->layout) return;
+ Eo *list = ev->object;
+ Eo *item = ev->info, *tmp;
+ printf("list item [%p:%d] is %s\n", item, efl_ui_item_index_get(item), (efl_ui_item_selected_get(item)? "selected" : "unselected"));
- Efl_Ui_Layout *layout = ie->layout;
- elm_object_focus_allow_set(layout, EINA_TRUE);
+ Eina_Iterator *selects = efl_ui_list_selected_items_get(list);
+
+ EINA_ITERATOR_FOREACH(selects, tmp)
+ printf("selected [%p:%d] ", tmp, efl_ui_item_index_get(tmp));
+ printf("\n");
+ eina_iterator_free(selects);
}
-/*
static void
-_unrealized_cb(void *data EINA_UNUSED, const Efl_Event *event)
+_list_unselected(void *data, const Efl_Event *ev)
{
- Efl_Ui_List_Item_Event *ie = event->info;
+ Eo *item = ev->info;
+ printf("list item [%p : %d] is %s\n", item, efl_ui_item_index_get(item), (efl_ui_item_selected_get(item)? "selected" : "unselected"));
+}
- efl_ui_view_model_set(ie->layout, NULL);
- efl_del(ie->layout);
+static void
+_list_pressed(void *data, const Efl_Event *ev)
+{
+ Eo *item = ev->info;
+ printf("list item [%p : %d] is pressed\n", item, efl_ui_item_index_get(item));
}
-*/
-static Efl_Model*
-_make_model()
+
+static void
+_list_unpressed(void *data, const Efl_Event *ev)
{
- Eina_Value vtext, vstyle;
- Efl_Model_Item *model, *child;
- unsigned int i, s;
- char buf[256];
+ Eo *item = ev->info;
+ printf("list item [%p : %d] is unpressed\n", item, efl_ui_item_index_get(item));
+}
- model = efl_add(EFL_MODEL_ITEM_CLASS, NULL);
- eina_value_setup(&vtext, EINA_VALUE_TYPE_STRING);
+static void
+_list_longpressed(void *data, const Efl_Event *ev)
+{
+ Eo *item = ev->info;
+ printf("list item [%p : %d] is longpressed\n", item, efl_ui_item_index_get(item));
+}
- for (i = 0; i < (NUM_ITEMS); i++)
- {
- s = i%2;
- child = efl_model_child_add(model);
- eina_value_set(&vtext, styles[s]);
- efl_model_property_set(child, "odd_style", &vtext);
-
- snprintf(buf, sizeof(buf), "Item # %i", i);
- eina_value_set(&vtext, buf);
- efl_model_property_set(child, "name", &vtext);
- }
-
- eina_value_flush(&vtext);
- return model;
+static void
+_select_radio_changed(void *data, const Efl_Event *ev)
+{
+ Eo *list = data;
+ efl_ui_select_mode_set(list, efl_ui_radio_state_value_get(ev->object));
+}
+
+static void
+_anim_radio_changed(void *data, const Efl_Event *ev)
+{
+ priv_d.anim = efl_ui_radio_state_value_get(ev->object);
+}
+
+static void
+_scrl_btn_clicked(void *data, const Efl_Event *ev)
+{
+ Efl_Ui_List_Item *item = efl_ui_list_last_selected_item_get(priv_d.list);
+ printf("show [%d:%p] [%d]\n", efl_ui_item_index_get(item), item, priv_d.anim);
+ efl_ui_list_item_scroll(priv_d.list, item, priv_d.anim);
+}
+
+static void
+_scrl_align_btn_clicked(void *data, const Efl_Event *ev)
+{
+ Efl_Ui_List_Item *item = efl_ui_list_last_selected_item_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_list_item_scroll_align(priv_d.list, item, align, priv_d.anim);
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
- Efl_Ui_Layout_Factory *factory;
- Evas_Object *win, *li, *bx, *vbx;
- Eo *model;
+ Eo *win, *list;
+ Eo *wbox, *ibox, *bbox, *rbox;
+ Eo *item, *check, *txt;
+ Eo *radio, *select_radio, *anim_radio;
+ Eo *slider, *scrl_btn;
+ int i;
+ char buf[256];
+ Eina_Bool emptystyle = EINA_FALSE;
- win = elm_win_util_standard_add("viewlist", "Viewlist");
+ win = elm_win_util_standard_add("list", "list");
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
-
elm_win_autodel_set(win, EINA_TRUE);
+ efl_gfx_entity_size_set(win, EINA_SIZE2D(400, 800));
+
+ wbox = efl_add(EFL_UI_BOX_CLASS, win);
+ efl_ui_direction_set(wbox, EFL_UI_DIR_VERTICAL);
+ efl_gfx_size_hint_weight_set(wbox, EFL_GFX_SIZE_HINT_EXPAND, EFL_GFX_SIZE_HINT_EXPAND);
+ efl_gfx_size_hint_align_set(wbox, EFL_GFX_SIZE_HINT_FILL, EFL_GFX_SIZE_HINT_FILL);
+
+ if ((argv[1] != NULL) &&
+ (!strcmp(argv[1], "empty")))
+ emptystyle = EINA_TRUE;
+
+ priv_d.list = list = efl_add(EFL_UI_LIST_CLASS, wbox);
+ efl_gfx_size_hint_weight_set(list, EFL_GFX_SIZE_HINT_EXPAND, 0.9);
+
+ efl_event_callback_add(list, EFL_UI_EVENT_SELECTED, _list_selected, NULL);
+ efl_event_callback_add(list, EFL_UI_EVENT_UNSELECTED, _list_unselected, NULL);
+ efl_event_callback_add(list, EFL_UI_EVENT_PRESSED, _list_pressed, NULL);
+ efl_event_callback_add(list, EFL_UI_EVENT_UNPRESSED, _list_unpressed, NULL);
+ efl_event_callback_add(list, EFL_UI_EVENT_LONGPRESSED, _list_longpressed, NULL);
+
+ for (i = 0; i < NUM_ITEMS; i++)
+ {
+ if (emptystyle) item = efl_add(EFL_UI_LIST_EMPTY_ITEM_CLASS, list);
+ else item = efl_add(EFL_UI_LIST_DEFAULT_ITEM_CLASS, list);
+
+ /* disable case test */
+ if (i == 1) efl_ui_widget_disabled_set(item, EINA_TRUE);
+
+ if (emptystyle)
+ {
+ ibox = efl_add(EFL_UI_BOX_CLASS, item);
+ efl_ui_direction_set(ibox, EFL_UI_DIR_HORIZONTAL);
+
+ txt = efl_add(EFL_UI_TEXT_CLASS, ibox);
+ efl_gfx_size_hint_weight_set(txt, 0.95, EFL_GFX_SIZE_HINT_EXPAND);
+ efl_text_halign_set(txt, 0.2);
+ efl_text_interactive_selection_allowed_set(txt, EINA_FALSE);
+ snprintf(buf, sizeof(buf), "empty style item [%d]", i);
+ efl_text_set(txt, buf);
+ efl_pack_end(ibox, txt);
+
+ check = efl_add(EFL_UI_CHECK_CLASS, ibox);
+ efl_gfx_size_hint_weight_set(check, 0.05, EFL_GFX_SIZE_HINT_EXPAND);
+ efl_pack_end(ibox, check);
+
+ if (i % 2)
+ efl_content_set(item, ibox);
+ else
+ efl_content_set(efl_part(item, "content"), ibox);
+ }
+ else
+ {
+ snprintf(buf, sizeof(buf), "default style item [%d]", i);
+ if (i % 2)
+ efl_text_set(efl_part(item, "text"), buf);
+ else
+ efl_text_set(item, buf);
+
+
+ check = efl_add(EFL_UI_CHECK_CLASS, item);
+ if ((i % 3) == 0)
+ efl_content_set(efl_part(item, "end"), check);
+ else if ((i % 3) == 1)
+ efl_content_set(efl_part(item, "icon"), check);
+ else
+ efl_content_set(item, check);
+ }
+ /* Pack APIs test */
+ switch (i)
+ {
+ case 10:
+ efl_gfx_color_set(efl_part(item, "background"), 255, 0, 0, 255);
+ efl_pack_begin(list, item);
+ break;
+
+ case 20:
+ efl_gfx_color_set(efl_part(item, "background"), 0, 255, 0, 255);
+ efl_pack_before(list, item, efl_pack_content_get(list, 19));
+ break;
+
+ case 30:
+ efl_gfx_color_set(efl_part(item, "background"), 0, 0, 255, 255);
+ efl_pack_after(list, item, efl_pack_content_get(list, 29));
+ break;
+
+ case 40:
+ efl_file_set(efl_part(item, "background"), "./sky_01.jpg", NULL);
+ efl_gfx_image_scale_type_set(efl_part(item, "background"), EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE);
+ efl_pack_at(list, item, 39);
+ break;
+
+ case 50:
+ efl_file_set(efl_part(item, "background"), "./sky_01.jpg", NULL);
+ efl_gfx_image_scale_type_set(efl_part(item, "background"), EFL_GFX_IMAGE_SCALE_TYPE_TILE);
+ efl_pack(list, item);
+ break;
+
+ case 60:
+ efl_pack(list, item);
+ efl_pack_unpack(list, item);
+ efl_del(item);
+ break;
+
+ default:
+ efl_pack_end(list, item);
+ }
+ }
+
+ efl_pack_end(wbox, list);
+
+ /*select mode */
+ txt = efl_add(EFL_UI_TEXT_CLASS, wbox);
+ efl_gfx_size_hint_weight_set(txt, EFL_GFX_SIZE_HINT_EXPAND, 0.01);
+ efl_text_halign_set(txt, 0.02);
+ efl_text_interactive_selection_allowed_set(txt, EINA_FALSE);
+ efl_text_set(txt, "Select Mode");
+ efl_pack_end(wbox, txt);
+
+ bbox = efl_add(EFL_UI_BOX_CLASS, wbox);
+ efl_ui_direction_set(bbox, EFL_UI_DIR_HORIZONTAL);
+ efl_gfx_size_hint_weight_set(bbox, EFL_GFX_SIZE_HINT_EXPAND, 0.05);
+
+ select_radio = radio = efl_add(EFL_UI_RADIO_CLASS, wbox);
+ efl_text_set(radio, "SINGLE");
+ efl_ui_radio_state_value_set(radio, EFL_UI_SELECT_SINGLE);
+ efl_event_callback_add(radio, EFL_UI_RADIO_EVENT_CHANGED, _select_radio_changed, list);
+ efl_pack_end(bbox, radio);
+ radio = efl_add(EFL_UI_RADIO_CLASS, wbox);
+ efl_text_set(radio, "SINGLE_ALWAYS");
+ efl_ui_radio_state_value_set(radio, EFL_UI_SELECT_SINGLE_ALWAYS);
+ efl_ui_radio_group_add(radio, select_radio);
+ efl_event_callback_add(radio, EFL_UI_RADIO_EVENT_CHANGED, _select_radio_changed, list);
+ efl_pack_end(bbox, radio);
+ radio = efl_add(EFL_UI_RADIO_CLASS, wbox);
+ efl_text_set(radio, "MULTI");
+ efl_ui_radio_state_value_set(radio, EFL_UI_SELECT_MULTI);
+ efl_ui_radio_group_add(radio, select_radio);
+ efl_event_callback_add(radio, EFL_UI_RADIO_EVENT_CHANGED, _select_radio_changed, list);
+ efl_pack_end(bbox, radio);
+ radio = efl_add(EFL_UI_RADIO_CLASS, wbox);
+ efl_text_set(radio, "NONE");
+ efl_ui_radio_state_value_set(radio, EFL_UI_SELECT_NONE);
+ efl_ui_radio_group_add(radio, select_radio);
+ efl_event_callback_add(radio, EFL_UI_RADIO_EVENT_CHANGED, _select_radio_changed, list);
+ efl_pack_end(bbox, radio);
+ efl_pack_end(wbox, bbox);
+
+ /* scroll mode */
+ txt = efl_add(EFL_UI_TEXT_CLASS, wbox);
+ efl_gfx_size_hint_weight_set(txt, EFL_GFX_SIZE_HINT_EXPAND, 0.01);
+ efl_text_interactive_selection_allowed_set(txt, EINA_FALSE);
+ efl_text_halign_set(txt, 0.02);
+ efl_text_set(txt, "Item Scroll");
+ efl_pack_end(wbox, txt);
+
+ priv_d.slider = slider = efl_add(EFL_UI_SLIDER_CLASS, wbox);
+ efl_ui_direction_set(slider, EFL_UI_DIR_HORIZONTAL);
+ efl_gfx_size_hint_weight_set(slider, 0.0, 0.05);
+ efl_gfx_size_hint_align_set(slider, 0.5, 0.5);
+ efl_gfx_size_hint_min_set(slider, EINA_SIZE2D(380, 20));
+ efl_ui_range_min_max_set(slider, 0.0, 1.0);
+ efl_pack_end(wbox, slider);
+
+ bbox = efl_add(EFL_UI_BOX_CLASS, wbox);
+ efl_ui_direction_set(bbox, EFL_UI_DIR_HORIZONTAL);
+ efl_gfx_size_hint_weight_set(bbox, EFL_GFX_SIZE_HINT_EXPAND, 0.05);
+
+ rbox = efl_add(EFL_UI_BOX_CLASS, bbox);
+ efl_ui_direction_set(rbox, EFL_UI_DIR_VERTICAL);
- model = _make_model();
+ anim_radio = radio = efl_add(EFL_UI_RADIO_CLASS, rbox);
+ efl_gfx_size_hint_align_set(radio, 0.5, 0.5);
+ efl_text_set(radio, "ANIMATION OFF");
+ efl_ui_radio_state_value_set(radio, 0);
+ efl_event_callback_add(radio, EFL_UI_RADIO_EVENT_CHANGED, _anim_radio_changed, NULL);
+ efl_pack_end(rbox, radio);
+ radio = efl_add(EFL_UI_RADIO_CLASS, rbox);
+ efl_gfx_size_hint_align_set(radio, 0.5, 0.5);
+ efl_text_set(radio, "ANIMATION ON");
+ efl_ui_radio_state_value_set(radio, 1);
+ efl_ui_radio_group_add(radio, anim_radio);
+ efl_event_callback_add(radio, EFL_UI_RADIO_EVENT_CHANGED, _anim_radio_changed, NULL);
+ efl_pack_end(rbox, radio);
+ efl_pack_end(bbox, rbox);
- factory = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, win);
- efl_ui_model_connect(factory, "signal/elm,state,%v", "odd_style");
- efl_ui_model_connect(factory, "elm.text", "name");
- efl_ui_layout_factory_theme_config(factory, "list", "item", "default");
+ rbox = efl_add(EFL_UI_BOX_CLASS, bbox);
+ efl_ui_direction_set(rbox, EFL_UI_DIR_VERTICAL);
- li = efl_add(EFL_UI_LIST_CLASS, win);
- efl_ui_list_layout_factory_set(li, factory);
- efl_ui_view_model_set(li, model);
- elm_box_pack_end(bx, li);
+ scrl_btn = efl_add(EFL_UI_BUTTON_CLASS, rbox);
+ efl_text_set(scrl_btn, "Scroll Item");
+ efl_gfx_size_hint_align_set(scrl_btn, 0.5, 0.5);
+ efl_gfx_size_hint_min_set(scrl_btn, EINA_SIZE2D(200, 25));
+ efl_event_callback_add(scrl_btn, EFL_UI_EVENT_CLICKED, _scrl_btn_clicked, NULL);
+ efl_pack_end(rbox, scrl_btn);
- efl_event_callback_add(li, EFL_UI_LIST_EVENT_ITEM_REALIZED, _realized_cb, NULL);
-// efl_event_callback_add(li, EFL_UI_LIST_EVENT_ITEM_UNREALIZED, _unrealized_cb, NULL);
+ scrl_btn = efl_add(EFL_UI_BUTTON_CLASS, rbox);
+ efl_text_set(scrl_btn, "Scroll Item Align");
+ efl_gfx_size_hint_align_set(scrl_btn, 0.5, 0.5);
+ efl_gfx_size_hint_min_set(scrl_btn, EINA_SIZE2D(200, 25));
+ efl_event_callback_add(scrl_btn, EFL_UI_EVENT_CLICKED, _scrl_align_btn_clicked, NULL);
+ efl_pack_end(rbox, scrl_btn);
- elm_win_resize_object_add(win, li);
- evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ efl_pack_end(bbox, rbox);
+ efl_pack_end(wbox, bbox);
- //showall
- evas_object_show(li);
- evas_object_resize(win, 320, 320);
- evas_object_show(win);
+ elm_win_resize_object_add(win, wbox);
+ //window show
+ efl_gfx_entity_visible_set(win, EINA_TRUE);
elm_run();
return 0;
}
-ELM_MAIN()
+ELM_MAIN() \ No newline at end of file