more list work - also some minimal safety stuff.

SVN revision: 38503
This commit is contained in:
Carsten Haitzler 2009-01-08 14:29:13 +00:00
parent 59fbfb0f02
commit f382576f6a
7 changed files with 255 additions and 56 deletions

View File

@ -4411,47 +4411,47 @@ collections {
///////////////////////////////////////////////////////////////////////////////
group { name: "elm/icon/home/default"; min: 32 32;
images.image: "icon_home.png" COMP; parts { part { name: "base";
description { state: "default" 0.0; aspect: 1.0 1.0;
description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH;
image.normal: "icon_home.png"; } } } }
group { name: "elm/icon/close/default"; min: 32 32;
images.image: "icon_close.png" COMP; parts { part { name: "base";
description { state: "default" 0.0; aspect: 1.0 1.0;
description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH;
image.normal: "icon_close.png"; } } } }
group { name: "elm/icon/apps/default"; min: 32 32;
images.image: "icon_apps.png" COMP; parts { part { name: "base";
description { state: "default" 0.0; aspect: 1.0 1.0;
description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH;
image.normal: "icon_apps.png"; } } } }
group { name: "elm/icon/arrow_up/default"; min: 32 32;
images.image: "icon_arrow_up.png" COMP; parts { part { name: "base";
description { state: "default" 0.0; aspect: 1.0 1.0;
description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH;
image.normal: "icon_arrow_up.png"; } } } }
group { name: "elm/icon/arrow_down/default"; min: 32 32;
images.image: "icon_arrow_down.png" COMP; parts { part { name: "base";
description { state: "default" 0.0; aspect: 1.0 1.0;
description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH;
image.normal: "icon_arrow_down.png"; } } } }
group { name: "elm/icon/arrow_left/default"; min: 32 32;
images.image: "icon_arrow_left.png" COMP; parts { part { name: "base";
description { state: "default" 0.0; aspect: 1.0 1.0;
description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH;
image.normal: "icon_arrow_left.png"; } } } }
group { name: "elm/icon/arrow_right/default"; min: 32 32;
images.image: "icon_arrow_right.png" COMP; parts { part { name: "base";
description { state: "default" 0.0; aspect: 1.0 1.0;
description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH;
image.normal: "icon_arrow_right.png"; } } } }
group { name: "elm/icon/chat/default"; min: 32 32;
images.image: "icon_chat.png" COMP; parts { part { name: "base";
description { state: "default" 0.0; aspect: 1.0 1.0;
description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH;
image.normal: "icon_chat.png"; } } } }
group { name: "elm/icon/clock/default"; min: 32 32;
images.image: "icon_clock.png" COMP; parts { part { name: "base";
description { state: "default" 0.0; aspect: 1.0 1.0;
description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH;
image.normal: "icon_clock.png"; } } } }
group { name: "elm/icon/delete/default"; min: 32 32;
images.image: "icon_delete.png" COMP; parts { part { name: "base";
description { state: "default" 0.0; aspect: 1.0 1.0;
description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH;
image.normal: "icon_delete.png"; } } } }
group { name: "elm/icon/edit/default"; min: 32 32;
images.image: "icon_edit.png" COMP; parts { part { name: "base";
description { state: "default" 0.0; aspect: 1.0 1.0;
description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH;
image.normal: "icon_edit.png"; } } } }
///////////////////////////////////////////////////////////////////////////////
@ -4885,8 +4885,6 @@ collections {
description {
state: "default" 0.0;
align: 0.0 0.5;
aspect: 1.0 1.0;
aspect_preference: VERTICAL;
rel1 {
relative: 0.0 0.0;
offset: 4 4;
@ -4897,6 +4895,22 @@ collections {
}
}
}
part {
name: "elm.swallow.end";
type: SWALLOW;
description {
state: "default" 0.0;
align: 1.0 0.5;
rel1 {
relative: 1.0 0.0;
offset: -5 4;
}
rel2 {
relative: 1.0 1.0;
offset: -5 -5;
}
}
}
part {
name: "elm.text";
type: TEXT;
@ -4909,11 +4923,12 @@ collections {
rel1 {
to_x: "elm.swallow.icon";
relative: 1.0 0.0;
offset: 4 4;
offset: 0 4;
}
rel2 {
relative: 1.0 1.0;
offset: -5 -5;
to_x: "elm.swallow.end";
relative: 0.0 1.0;
offset: -1 -5;
}
color: 0 0 0 255;
color3: 0 0 0 0;
@ -4971,6 +4986,7 @@ collections {
part {
name: "event";
type: RECT;
repeat_events: 1;
description {
state: "default" 0.0;
color: 0 0 0 0;
@ -5020,6 +5036,7 @@ collections {
normal: "ilist_2.png";
border: 2 2 2 2;
}
fill.smooth: 0;
}
}
part { name: "bg";
@ -5039,7 +5056,6 @@ collections {
normal: "bt_sm_base1.png";
border: 6 6 6 6;
}
fill.smooth: 0;
}
description { state: "selected" 0.0;
inherit: "default" 0.0;
@ -5061,8 +5077,6 @@ collections {
description {
state: "default" 0.0;
align: 0.0 0.5;
aspect: 1.0 1.0;
aspect_preference: VERTICAL;
rel1 {
relative: 0.0 0.0;
offset: 4 4;
@ -5073,6 +5087,22 @@ collections {
}
}
}
part {
name: "elm.swallow.end";
type: SWALLOW;
description {
state: "default" 0.0;
align: 1.0 0.5;
rel1 {
relative: 1.0 0.0;
offset: -5 4;
}
rel2 {
relative: 1.0 1.0;
offset: -5 -5;
}
}
}
part {
name: "elm.text";
type: TEXT;
@ -5085,11 +5115,12 @@ collections {
rel1 {
to_x: "elm.swallow.icon";
relative: 1.0 0.0;
offset: 4 4;
offset: 0 4;
}
rel2 {
relative: 1.0 1.0;
offset: -5 -5;
to_x: "elm.swallow.end";
relative: 0.0 1.0;
offset: -1 -5;
}
color: 0 0 0 255;
color3: 0 0 0 0;
@ -5147,6 +5178,7 @@ collections {
part {
name: "event";
type: RECT;
repeat_events: 1;
description {
state: "default" 0.0;
color: 0 0 0 0;

View File

@ -1486,7 +1486,7 @@ my_bt_19(void *data, Evas_Object *obj, void *event_info)
static void
my_bt_20(void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *win, *bg, *li;
Evas_Object *win, *bg, *li, *ic, *ic2, *bx;
char buf[PATH_MAX];
win = elm_win_add(NULL, "list", ELM_WIN_BASIC);
@ -1502,16 +1502,71 @@ my_bt_20(void *data, Evas_Object *obj, void *event_info)
elm_win_resize_object_add(win, li);
evas_object_size_hint_weight_set(li, 1.0, 1.0);
elm_list_item_append(li, "Hello", NULL, NULL, NULL, NULL, NULL);
elm_list_item_append(li, "World", NULL, NULL, NULL, NULL, NULL);
elm_list_item_append(li, "How", NULL, NULL, NULL, NULL, NULL);
elm_list_item_append(li, "Are", NULL, NULL, NULL, NULL, NULL);
elm_list_item_append(li, "You", NULL, NULL, NULL, NULL, NULL);
elm_list_item_append(li, "Doing", NULL, NULL, NULL, NULL, NULL);
elm_list_item_append(li, "Out", NULL, NULL, NULL, NULL, NULL);
elm_list_item_append(li, "There", NULL, NULL, NULL, NULL, NULL);
elm_list_item_append(li, "?", NULL, NULL, NULL, NULL, NULL);
elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL, NULL, NULL);
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
elm_icon_file_set(ic, buf, NULL);
elm_list_item_append(li, "Hello", ic, NULL, NULL, NULL);
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
elm_icon_scale_set(ic, 0, 0);
elm_icon_file_set(ic, buf, NULL);
elm_list_item_append(li, "world", ic, NULL, NULL, NULL);
ic = elm_icon_add(win);
elm_icon_standard_set(ic, "edit");
elm_icon_scale_set(ic, 0, 0);
elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
ic = elm_icon_add(win);
elm_icon_standard_set(ic, "delete");
elm_icon_scale_set(ic, 0, 0);
ic2 = elm_icon_add(win);
elm_icon_standard_set(ic2, "clock");
elm_icon_scale_set(ic2, 0, 0);
elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
bx = elm_box_add(win);
elm_box_horizontal_set(bx, 1);
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
elm_icon_file_set(ic, buf, NULL);
elm_icon_scale_set(ic, 0, 0);
evas_object_size_hint_align_set(ic, 0.5, 0.5);
elm_box_pack_end(bx, ic);
evas_object_show(ic);
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
elm_icon_file_set(ic, buf, NULL);
elm_icon_scale_set(ic, 0, 0);
evas_object_size_hint_align_set(ic, 0.5, 0.0);
elm_box_pack_end(bx, ic);
evas_object_show(ic);
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
elm_icon_file_set(ic, buf, NULL);
elm_icon_scale_set(ic, 0, 0);
evas_object_size_hint_align_set(ic, 0.0, 1.0);
elm_box_pack_end(bx, ic);
evas_object_show(ic);
elm_list_item_append(li, "are", bx, NULL, NULL, NULL);
elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL);
elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
elm_list_item_append(li, "some", NULL, NULL, NULL, NULL);
elm_list_item_append(li, "more", NULL, NULL, NULL, NULL);
elm_list_item_append(li, "items", NULL, NULL, NULL, NULL);
elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL, NULL);
elm_list_item_append(li, "Maybe this one is even longer so we can test long long items.", NULL, NULL, NULL, NULL);
elm_list_go(li);
evas_object_show(li);

View File

@ -408,7 +408,7 @@ extern "C" {
} Elementary_List_Mode;
typedef struct _Elm_List_Item Elm_List_Item;
EAPI Evas_Object *elm_list_add(Evas_Object *parent);
EAPI Elm_List_Item *elm_list_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data);
EAPI Elm_List_Item *elm_list_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data);
/* smart callbacks called:
* "clicked" - when the user double-clicked an item
*/
@ -426,13 +426,13 @@ extern "C" {
//
//// (incomplete - medium priority)
// * entry selection conflicts with finger scroll (make selection start/stop work on signals?)
// * disabled not supported
// * tab widget focusing (not useful for touchscreen tho...)
// * on the fly theme changes - test (should work)
// * need a hold-scroll counter in elm_widget
// * add fullscreen mode on/off for windows
// * hoversel only vertical right now - make horizontal
// * set scaling per widget (and if scaling should be inheited by children)
//
//// (more widgets/features - medium priority)
// * biglist widget (restricted format label + icon intended for massive lists)
@ -455,6 +455,7 @@ extern "C" {
// * imageview widget (for large not iconic images)
// * tiled image + zoom widget (tiled map viewer)
// * dialpad widget - need one with a phone dialpad
// * file selector widget
//
//// (improvements - low priority)
// * use evas's new box instead of a box smart

View File

@ -18,7 +18,7 @@ struct _Item
const char *icon_file;
Elm_Icon_Type icon_type;
void (*func) (void *data, Evas_Object *obj, void *event_info);
const void *data;
void *data;
};
static void _del_pre_hook(Evas_Object *obj);
@ -38,6 +38,7 @@ static void
_del_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
elm_hoversel_hover_end(obj);
free(wd);
}
@ -46,6 +47,7 @@ static void
_sizing_eval(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
evas_object_size_hint_min_get(wd->btn, &minw, &minh);
@ -80,6 +82,7 @@ static void
_button_clicked(void *data, Evas_Object *obj, void *event_info)
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
Evas_Object *bt, *bx, *ic;
Eina_List *l;
wd->hover = elm_hover_add(data);
@ -129,6 +132,7 @@ static void
_parent_del(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
wd->hover_parent = NULL;
}
@ -160,6 +164,7 @@ EAPI void
elm_hoversel_hover_parent_set(Evas_Object *obj, Evas_Object *parent)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (wd->hover_parent)
evas_object_event_callback_del(wd->hover_parent, EVAS_CALLBACK_DEL, _parent_del);
wd->hover_parent = parent;
@ -171,6 +176,7 @@ EAPI void
elm_hoversel_label_set(Evas_Object *obj, const char *label)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
elm_button_label_set(wd->btn, label);
}
@ -178,6 +184,7 @@ EAPI void
elm_hoversel_icon_set(Evas_Object *obj, Evas_Object *icon)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
elm_button_icon_set(wd->btn, icon);
}
@ -185,6 +192,7 @@ EAPI void
elm_hoversel_hover_end(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (wd->hover) evas_object_del(wd->hover);
wd->hover = NULL;
evas_object_smart_callback_call(obj, "dismissed", NULL);
@ -194,6 +202,7 @@ EAPI Elm_Hoversel_Item *
elm_hoversel_item_add(Evas_Object *obj, const char *label, const char *icon_file, Elm_Icon_Type icon_type, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
Item *it = calloc(1, sizeof(Item));
if (!it) return NULL;
wd->items = eina_list_append(wd->items, it);
@ -202,7 +211,7 @@ elm_hoversel_item_add(Evas_Object *obj, const char *label, const char *icon_file
it->icon_file = eina_stringshare_add(icon_file);
it->icon_type = icon_type;
it->func = func;
it->data = data;
it->data = (void *)data;
return (Elm_Hoversel_Item *)it;
}
@ -211,6 +220,7 @@ elm_hoversel_item_del(Elm_Hoversel_Item *item)
{
Item *it = (Item *)item;
Widget_Data *wd = elm_widget_data_get(it->obj);
if (!wd) return;
elm_hoversel_hover_end(it->obj);
wd->items = eina_list_remove(wd->items, it);
eina_stringshare_del(it->label);

View File

@ -22,6 +22,7 @@ static void
_del_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (wd->label) eina_stringshare_del(wd->label);
if (wd->style) eina_stringshare_del(wd->style);
free(wd);
@ -31,6 +32,7 @@ static void
_theme_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (wd->style) _elm_theme_set(wd->btn, "button", "base", wd->style);
else _elm_theme_set(wd->btn, "button", "base", "default");
if (wd->icon)
@ -52,6 +54,7 @@ static void
_sizing_eval(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
edje_object_size_min_calc(wd->btn, &minw, &minh);
@ -63,6 +66,7 @@ static void
_changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
if (obj != wd->icon) return;
edje_object_part_swallow(wd->btn, "elm.swallow.content", obj);
_sizing_eval(data);
@ -72,6 +76,7 @@ static void
_sub_del(void *data, Evas_Object *obj, void *event_info)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
Evas_Object *sub = event_info;
if (sub == wd->icon)
{
@ -88,6 +93,7 @@ static void
_signal_clicked(void *data, Evas_Object *obj, const char *emission, const char *source)
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
evas_object_smart_callback_call(data, "clicked", NULL);
}
@ -120,6 +126,7 @@ EAPI void
elm_button_label_set(Evas_Object *obj, const char *label)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
Evas_Coord mw, mh;
if (wd->label) eina_stringshare_del(wd->label);
@ -143,6 +150,7 @@ EAPI void
elm_button_icon_set(Evas_Object *obj, Evas_Object *icon)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if ((wd->icon != icon) && (wd->icon))
elm_widget_sub_object_del(obj, wd->icon);
if ((icon) && (wd->icon != icon))
@ -164,6 +172,7 @@ EAPI void
elm_button_style_set(Evas_Object *obj, const char *style)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (wd->style) eina_stringshare_del(wd->style);
if (style) wd->style = eina_stringshare_add(style);
else wd->style = NULL;

View File

@ -23,6 +23,7 @@ static void
_del_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (wd->stdicon) eina_stringshare_del(wd->stdicon);
free(wd);
}
@ -31,6 +32,7 @@ static void
_theme_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (wd->stdicon)
_elm_theme_icon_set(wd->img, wd->stdicon, "default");
_sizing_eval(obj);
@ -40,6 +42,7 @@ static void
_sizing_eval(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
int w, h;
@ -107,6 +110,7 @@ EAPI void
elm_icon_file_set(Evas_Object *obj, const char *file, const char *group)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
const char *p;
if (!file) return;
@ -123,6 +127,7 @@ EAPI void
elm_icon_standard_set(Evas_Object *obj, const char *name)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (!name) return;
if (wd->stdicon) eina_stringshare_del(wd->stdicon);
@ -135,6 +140,7 @@ EAPI void
elm_icon_smooth_set(Evas_Object *obj, Evas_Bool smooth)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
wd->smooth = smooth;
_sizing_eval(obj);
}
@ -143,6 +149,7 @@ EAPI void
elm_icon_no_scale_set(Evas_Object *obj, Evas_Bool no_scale)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
wd->no_scale = no_scale;
_sizing_eval(obj);
}
@ -151,6 +158,7 @@ EAPI void
elm_icon_scale_set(Evas_Object *obj, Evas_Bool scale_up, Evas_Bool scale_down)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
wd->scale_up = scale_up;
wd->scale_down = scale_down;
_sizing_eval(obj);
@ -160,6 +168,7 @@ EAPI void
elm_icon_fill_outside_set(Evas_Object *obj, Evas_Bool fill_outside)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
wd->fill_outside = fill_outside;
_sizing_eval(obj);
}

View File

@ -11,6 +11,7 @@ struct _Widget_Data
Eina_List *selected;
Elementary_List_Mode mode;
Evas_Bool on_hold : 1;
Evas_Coord minw[2], minh[2];
};
struct _Item
@ -18,7 +19,7 @@ struct _Item
Evas_Object *obj;
Evas_Object *base;
const char *label;
Evas_Object *icon, *indicator, *end;
Evas_Object *icon, *end;
void (*func) (void *data, Evas_Object *obj, void *event_info);
const void *data;
Evas_Bool even : 1;
@ -78,7 +79,7 @@ _item_select(Item *it)
if ((selectraise) && (!strcmp(selectraise, "on")))
evas_object_raise(it->base);
it->selected = 1;
if (it->func) it->func(it->data, it->obj, it);
if (it->func) it->func((void *)it->data, it->obj, it);
}
static void
@ -120,7 +121,7 @@ _mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info)
}
static Item *
_item_new(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
_item_new(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
{
Widget_Data *wd = elm_widget_data_get(obj);
Item *it;
@ -129,7 +130,6 @@ _item_new(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *i
it->obj = obj;
it->label = eina_stringshare_add(label);
it->icon = icon;
it->indicator = indicator;
it->end = end;
it->func = func;
it->data = data;
@ -148,13 +148,41 @@ _fix_items(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
Eina_List *l;
int i;
Evas_Coord minw[2] = { 0, 0 }, minh[2] = { 0, 0 };
int i, redo = 0;
for (l = wd->items; l; l = l->next)
{
Evas_Coord mw, mh;
Item *it = l->data;
if (it->icon)
{
evas_object_size_hint_min_get(it->icon, &mw, &mh);
if (mw > minw[0]) minw[0] = mw;
if (mh > minh[0]) minh[0] = mh;
}
if (it->end)
{
evas_object_size_hint_min_get(it->end, &mw, &mh);
if (mw > minw[1]) minw[1] = mw;
if (mh > minh[1]) minh[1] = mh;
}
}
if ((minw[0] != wd->minw[0]) || (minw[1] != wd->minw[1]) ||
(minw[0] != wd->minh[0]) || (minh[1] != wd->minh[1]))
{
wd->minw[0] = minw[0];
wd->minw[1] = minw[1];
wd->minh[0] = minh[0];
wd->minh[1] = minh[1];
redo = 1;
}
printf("%ix%i | %ix%i\n", minw[0], minh[0], minw[1], minh[1]);
for (i = 0, l = wd->items; l; l = l->next, i++)
{
Item *it = l->data;
it->even = i & 0x1;
if ((it->even != it->is_even) || (!it->fixed))
if ((it->even != it->is_even) || (!it->fixed) || (redo))
{
const char *stacking;
if (it->even)
@ -170,6 +198,27 @@ _fix_items(Evas_Object *obj)
evas_object_raise(it->base);
}
edje_object_part_text_set(it->base, "elm.text", it->label);
if ((!it->icon) && (minw[0] > 0))
{
it->icon = evas_object_rectangle_add(evas_object_evas_get(it->base));
evas_object_color_set(it->icon, 0, 0, 0, 0);
}
if ((!it->end) && (minw[1] > 0))
{
it->end = evas_object_rectangle_add(evas_object_evas_get(it->base));
evas_object_color_set(it->end, 0, 0, 0, 0);
}
if (it->icon)
{
edje_extern_object_min_size_set(it->icon, minw[0], minh[0]);
printf("|%s| %ix%i\n", it->label, minw[0], minh[0]);
edje_object_part_swallow(it->base, "elm.swallow.icon", it->icon);
}
if (it->end)
{
edje_extern_object_min_size_set(it->end, minw[1], minh[1]);
edje_object_part_swallow(it->base, "elm.swallow.end", it->end);
}
if (!it->fixed)
{
Evas_Coord minw, minh;
@ -177,6 +226,7 @@ _fix_items(Evas_Object *obj)
edje_object_message_signal_process(it->base);
edje_object_size_min_calc(it->base, &minw, &minh);
if (wd->mode == ELM_LIST_COMPRESS) minw = 0;
printf("-- %ix%i\n", minw, minh);
evas_object_size_hint_min_set(it->base, minw, minh);
evas_object_show(it->base);
}
@ -206,66 +256,85 @@ elm_list_add(Evas_Object *parent)
elm_widget_resize_object_set(obj, wd->scroller);
wd->box = elm_box_add(parent);
elm_box_homogenous_set(wd->box, 1);
evas_object_size_hint_weight_set(wd->box, 1.0, 0.0);
evas_object_size_hint_align_set(wd->box, -1.0, 0.0);
elm_scroller_content_set(wd->scroller, wd->box);
evas_object_show(wd->box);
wd->mode = ELM_LIST_COMPRESS;
wd->mode = ELM_LIST_SCROLL;
_sizing_eval(obj);
return obj;
}
EAPI Elm_List_Item *
elm_list_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
elm_list_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
{
Widget_Data *wd = elm_widget_data_get(obj);
Item *it = _item_new(obj, label, icon, indicator, end, func, data);
Item *it = _item_new(obj, label, icon, end, func, data);
wd->items = eina_list_append(wd->items, it);
elm_box_pack_end(wd->box, it->base);
_fix_items(obj);
return (Elm_List_Item *)it;
}
EAPI Elm_List_Item *
elm_list_item_prepend(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
elm_list_item_prepend(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
{
Widget_Data *wd = elm_widget_data_get(obj);
return NULL;
Item *it = _item_new(obj, label, icon, end, func, data);
wd->items = eina_list_prepend(wd->items, it);
elm_box_pack_start(wd->box, it->base);
return (Elm_List_Item *)it;
}
EAPI Elm_List_Item *
elm_list_item_insert_before(Evas_Object *obj, Elm_List_Item *before, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
elm_list_item_insert_before(Evas_Object *obj, Elm_List_Item *before, const char *label, Evas_Object *icon, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
{
Widget_Data *wd = elm_widget_data_get(obj);
return NULL;
Item *it = _item_new(obj, label, icon, end, func, data);
wd->items = eina_list_prepend_relative(wd->items, it, before);
elm_box_pack_before(wd->box, it->base, ((Item *)before)->base);
return (Elm_List_Item *)it;
}
EAPI Elm_List_Item *
elm_list_item_insert_after(Evas_Object *obj, Elm_List_Item *after, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
elm_list_item_insert_after(Evas_Object *obj, Elm_List_Item *after, const char *label, Evas_Object *icon, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
{
Widget_Data *wd = elm_widget_data_get(obj);
return NULL;
Item *it = _item_new(obj, label, icon, end, func, data);
wd->items = eina_list_append_relative(wd->items, it, after);
elm_box_pack_after(wd->box, it->base, ((Item *)after)->base);
return (Elm_List_Item *)it;
}
EAPI void
elm_list_go(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
_fix_items(obj);
}
EAPI void
elm_list_multi_select_set(Evas_Object *obj, Evas_Bool multi)
{
Widget_Data *wd = elm_widget_data_get(obj);
// FIXME: implement
}
EAPI void
elm_list_horizontal_mode_set(Evas_Object *obj, Elementary_List_Mode mode)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->mode == mode) return;
wd->mode = mode;
}
EAPI const Elm_List_Item *
elm_list_selected_item_get(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
// FIXME: implement
return NULL;
}
@ -273,26 +342,40 @@ EAPI const Eina_List *
elm_list_items_get(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
return NULL;
if (wd->selected) return wd->selected;
return wd->items;
}
EAPI void
elm_list_item_selected_set(Elm_List_Item *item, Evas_Bool selected)
{
Item *it = (Item *)item;
Widget_Data *wd = elm_widget_data_get(it->obj);
Eina_List *l;
if (it->selected) return;
for (l = wd->items; l; l = l->next)
{
Item *it2 = l->data;
if ((it2 != it) && (it2->selected)) _item_unselect(it2);
}
_item_select(it);
}
EAPI void
elm_list_item_show(Elm_List_Item *item)
{
// FIXME: implement
}
EAPI void
elm_list_item_del(Elm_List_Item *item)
{
// FIXME: implement
}
EAPI const void *
elm_list_item_data_get(Elm_List_Item *item)
{
return NULL;
Item *it = (Item *)item;
return it->data;
}