elm test_box.c: Revised box_pack sample code.

Signed-off-by: Daniel Juyung Seo <juyung.seo@samsung.com>

SVN revision: 68216
This commit is contained in:
Daniel Juyung Seo 2012-02-21 11:46:05 +00:00 committed by Daniel Juyung Seo
parent 7d91161099
commit b40b6d68b8
1 changed files with 103 additions and 112 deletions

View File

@ -181,54 +181,49 @@ test_box_horiz(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_i
evas_object_show(win); evas_object_show(win);
} }
static void static Eina_Bool radio_index[ICON_MAX];
_unpack_btn_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
static int
_index_get(void)
{ {
Evas_Object *box, *radio; int i;
Eina_List *rl, *l; for (i = 0; i < ICON_MAX; i++)
int value, svalue;
box = (Evas_Object *)data;
rl = (Eina_List *) evas_object_data_get(box, "radio-list");
EINA_LIST_FOREACH(rl, l, radio)
{ {
value = elm_radio_value_get(radio); if (!radio_index[i])
svalue = elm_radio_state_value_get(radio); {
radio_index[i] = EINA_TRUE;
return i;
}
if (value != svalue) continue;
elm_radio_value_set(radio, -1);
elm_box_unpack(box, radio);
rl = eina_list_remove(rl, radio);
evas_object_data_set(box, "radio-list", rl);
evas_object_del(radio);
} }
return -1;
} }
static void static void
_unpack_all_btn_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) _index_remove(int index)
{ {
Evas_Object *box, *radio; if (index >= ICON_MAX) return;
Eina_List *rl, *l; radio_index[index] = EINA_FALSE;
}
box = (Evas_Object *)data; static void
elm_box_unpack_all(box); _index_clear()
{
rl = (Eina_List *) evas_object_data_get(box, "radio-list"); int i;
EINA_LIST_FOREACH(rl, l, radio) evas_object_del(radio); for (i = 0; i < ICON_MAX; i++)
radio_index[i] = EINA_FALSE;
evas_object_data_del(box, "radio-list");
eina_list_free(rl);
} }
static Evas_Object * static Evas_Object *
_radio_new(Evas_Object *obj, int index) _radio_new(Evas_Object *obj)
{ {
Evas_Object *ic, *rd; Evas_Object *ic, *rd;
int index;
char buf[PATH_MAX]; char buf[PATH_MAX];
Evas_Object *rdg;
if (index >= ICON_MAX) return NULL; index = _index_get();
if (index == -1) return NULL;
ic = elm_icon_add(obj); ic = elm_icon_add(obj);
snprintf(buf, sizeof(buf), "%s/images/icon_%02d.png", snprintf(buf, sizeof(buf), "%s/images/icon_%02d.png",
@ -242,110 +237,108 @@ _radio_new(Evas_Object *obj, int index)
evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5); evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5);
elm_object_part_content_set(rd, "icon", ic); elm_object_part_content_set(rd, "icon", ic);
rdg = evas_object_data_get(obj, "radio-group");
if (rdg) elm_radio_group_add(rd, rdg);
evas_object_show(rd); evas_object_show(rd);
evas_object_show(ic); evas_object_show(ic);
return rd; return rd;
} }
static void
_pack(Evas_Object *box, Box_Pack_Position pos)
{
Evas_Object *radio;
Evas_Object *rd, *rdg = NULL;
Eina_List *rl, *l = NULL;
int value, svalue, count;
rl = (Eina_List *) evas_object_data_get(box, "radio-list");
if (!rl && ((pos == BOX_PACK_POSITION_START) ||
(pos == BOX_PACK_POSITION_END)))
{
rd = _radio_new(box, 0);
if (pos == BOX_PACK_POSITION_START) elm_box_pack_start(box, rd);
else elm_box_pack_end(box, rd);
l = eina_list_append(l, rd);
evas_object_data_set(box, "radio-list", l);
rdg = rd;
evas_object_data_set(box, "radio-group", rdg);
return;
}
count = eina_list_count(rl);
EINA_LIST_FOREACH(rl, l, radio)
{
value = elm_radio_value_get(radio);
svalue = elm_radio_state_value_get(radio);
if (value != svalue) continue;
rd = _radio_new(box, count);
if (!rd) break;
switch (pos)
{
case BOX_PACK_POSITION_START:
elm_box_pack_start(box, rd);
break;
case BOX_PACK_POSITION_BEFORE:
elm_box_pack_before(box, rd, radio);
break;
case BOX_PACK_POSITION_AFTER:
elm_box_pack_after(box, rd, radio);
break;
case BOX_PACK_POSITION_END:
elm_box_pack_end(box, rd);
break;
}
rdg = evas_object_data_get(box, "radio-group");
elm_radio_group_add(rd, rdg);
rl = eina_list_append(rl, rd);
evas_object_data_set(box, "radio-list", rl);
}
}
static void static void
_pack_start_btn_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) _pack_start_btn_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{ {
Evas_Object *box; Evas_Object *rd;
if (!data) return; if (!data) return;
box = (Evas_Object *)data; rd = _radio_new(data);
_pack(box, BOX_PACK_POSITION_START); if (!rd) return;
elm_box_pack_start(data, rd);
} }
static void static void
_pack_before_btn_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) _pack_before_btn_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{ {
Evas_Object *box; Evas_Object *rd, *selected_rd, *rdg;
if (!data) return; if (!data) return;
box = (Evas_Object *)data; rdg = evas_object_data_get(data, "radio-group");
_pack(box, BOX_PACK_POSITION_BEFORE); if (!rdg) return;
selected_rd = elm_radio_selected_object_get(rdg);
if (!selected_rd || (selected_rd == rdg)) return;
rd = _radio_new(data);
if (!rd) return;
elm_box_pack_before(data, rd, selected_rd);
} }
static void static void
_pack_after_btn_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) _pack_after_btn_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{ {
Evas_Object *box; Evas_Object *rd, *selected_rd, *rdg;
if (!data) return; if (!data) return;
box = (Evas_Object *)data; rdg = evas_object_data_get(data, "radio-group");
_pack(box, BOX_PACK_POSITION_AFTER); if (!rdg) return;
selected_rd = elm_radio_selected_object_get(rdg);
if (!selected_rd || (selected_rd == rdg)) return;
rd = _radio_new(data);
if (!rd) return;
elm_box_pack_after(data, rd, selected_rd);
} }
static void static void
_pack_end_btn_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) _pack_end_btn_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{ {
Evas_Object *box; Evas_Object *rd;
if (!data) return; if (!data) return;
box = (Evas_Object *)data; rd = _radio_new(data);
_pack(box, BOX_PACK_POSITION_END); if (!rd) return;
elm_box_pack_end(data, rd);
}
static void
_unpack_btn_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Evas_Object *rdg, *selected_rd;
if (!data) return;
rdg = evas_object_data_get(data, "radio-group");
if (!rdg) return;
selected_rd = elm_radio_selected_object_get(rdg);
if (selected_rd == rdg) return;
_index_remove(elm_radio_value_get(selected_rd));
elm_box_unpack(data, selected_rd);
evas_object_del(selected_rd);
elm_radio_value_set(rdg, -1);
}
static void
_unpack_all_btn_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Evas_Object *radio, *rdg;
Eina_List *rl, *l;
if (!data) return;
rdg = evas_object_data_get(data, "radio-group");
if (!rdg) return;
_index_clear();
rl = elm_box_children_get(data);
EINA_LIST_FOREACH(rl, l, radio)
{
if (radio != rdg)
evas_object_del(radio);
}
elm_box_unpack_all(data);
elm_radio_value_set(rdg, -1);
} }
void void
@ -354,7 +347,6 @@ test_box_pack(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in
Evas_Object *win, *sc, *bt; Evas_Object *win, *sc, *bt;
Evas_Object *box, *lbox, *rbox; Evas_Object *box, *lbox, *rbox;
Evas_Object *rd, *rdg = NULL; Evas_Object *rd, *rdg = NULL;
Eina_List *l = NULL;
int i; int i;
win = elm_win_util_standard_add("box-pack", "Box Pack"); win = elm_win_util_standard_add("box-pack", "Box Pack");
@ -377,17 +369,16 @@ test_box_pack(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in
evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL);
for(i = 0; i < 3; i++) rdg = elm_radio_add(win); /* a radio for easy group handling */
elm_radio_state_value_set(rdg, -1);
evas_object_data_set(lbox, "radio-group", rdg);
for (i = 0; i < 3; i++)
{ {
rd = _radio_new(win, i); rd = _radio_new(lbox);
elm_box_pack_end(lbox, rd); elm_box_pack_end(lbox, rd);
l = eina_list_append(l, rd);
if (i == 0) rdg = rd;
else elm_radio_group_add(rd, rdg);
} }
evas_object_data_set(lbox, "radio-list", l);
evas_object_data_set(lbox, "radio-group", rdg);
elm_object_content_set(sc, lbox); elm_object_content_set(sc, lbox);
evas_object_show(lbox); evas_object_show(lbox);
elm_box_pack_end(box, sc); elm_box_pack_end(box, sc);