forked from enlightenment/efl
more list work - also some minimal safety stuff.
SVN revision: 38503
This commit is contained in:
parent
59fbfb0f02
commit
f382576f6a
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue