From: Enlightenment S. <no-...@en...> - 2008-10-07 06:59:32
|
Log: fix sub object tracking. add layout object (untested) Author: raster Date: 2008-10-06 23:55:11 -0700 (Mon, 06 Oct 2008) New Revision: 36491 Added: trunk/TMP/st/elementary/src/lib/elm_layout.c Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h trunk/TMP/st/elementary/src/lib/Makefile.am trunk/TMP/st/elementary/src/lib/elm_box.c trunk/TMP/st/elementary/src/lib/elm_button.c trunk/TMP/st/elementary/src/lib/elm_frame.c trunk/TMP/st/elementary/src/lib/elm_scroller.c trunk/TMP/st/elementary/src/lib/elm_table.c trunk/TMP/st/elementary/src/lib/elm_toggle.c trunk/TMP/st/elementary/src/lib/elm_widget.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-07 05:57:37 UTC (rev 36490) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-07 06:55:11 UTC (rev 36491) @@ -506,8 +506,8 @@ /* set weight to 1.0 x 1.0 == expand in x and y) */ evas_object_size_hint_weight_set(bx, 1.0, 0.0); - /* set the box ad the child int he scrolled view*/ - elm_scroller_child_set(sc, bx); + /* set the box ad the content in the scrolled view*/ + elm_scroller_content_set(sc, bx); /* show the box, scroller and main box */ evas_object_show(bx); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-07 05:57:37 UTC (rev 36490) +++ trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-07 06:55:11 UTC (rev 36491) @@ -123,7 +123,7 @@ */ EAPI Evas_Object *elm_scroller_add(Evas_Object *parent); - EAPI void elm_scroller_child_set(Evas_Object *obj, Evas_Object *child); + EAPI void elm_scroller_content_set(Evas_Object *obj, Evas_Object *child); /* smart callbacks elm_win objects will call: */ @@ -164,4 +164,18 @@ * "changed" - the user changed the time */ +// FIXME: fixes to do +// * current sizing inefficient +// * scroller could do with page up/down/left/right buttons and and idea of +// a page size +// +// FIXME: immediate hitlist for widgets: +// HOVER: select a widget (any) and attach a hover to it - the over will hover +// on top of the hover target and accept child widgets. haver may +// optionally place something to cover the window (under the hover +// widget, above everything else) +// POPSEL: a buttont that when pressed uses a hover to display a h/v box or +// a table of options surrounding the button with scroll butons at +// the end and the ability to drag and scroll + #endif Modified: trunk/TMP/st/elementary/src/lib/Makefile.am =================================================================== --- trunk/TMP/st/elementary/src/lib/Makefile.am 2008-10-07 05:57:37 UTC (rev 36490) +++ trunk/TMP/st/elementary/src/lib/Makefile.am 2008-10-07 06:55:11 UTC (rev 36491) @@ -30,6 +30,7 @@ elm_frame.c \ elm_table.c \ elm_clock.c \ +elm_layout.c \ \ els_pan.c \ els_pan.h \ Modified: trunk/TMP/st/elementary/src/lib/elm_box.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_box.c 2008-10-07 05:57:37 UTC (rev 36490) +++ trunk/TMP/st/elementary/src/lib/elm_box.c 2008-10-07 06:55:11 UTC (rev 36491) @@ -10,6 +10,8 @@ static void _del_hook(Evas_Object *obj); static void _sizing_eval(Evas_Object *obj); +static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _sub_del(void *data, Evas_Object *obj, void *event_info); static void _del_hook(Evas_Object *obj) @@ -42,7 +44,17 @@ { _sizing_eval(data); } - + +static void +_sub_del(void *data, Evas_Object *obj, void *event_info) +{ + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *sub = event_info; + evas_object_event_callback_del + (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints); + _sizing_eval(obj); +} + EAPI Evas_Object * elm_box_add(Evas_Object *parent) { @@ -60,7 +72,10 @@ elm_widget_sub_object_add(obj, wd->box); evas_object_event_callback_add(wd->box, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); - elm_widget_resize_object_set(obj, wd->box); + elm_widget_resize_object_set(obj, wd->box); + + evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); + return obj; } @@ -84,7 +99,6 @@ Widget_Data *wd = elm_widget_data_get(obj); _els_smart_box_pack_start(wd->box, subobj); elm_widget_sub_object_add(obj, subobj); - // FIXME: track new sub obj... } EAPI void @@ -93,7 +107,6 @@ Widget_Data *wd = elm_widget_data_get(obj); _els_smart_box_pack_end(wd->box, subobj); elm_widget_sub_object_add(obj, subobj); - // FIXME: track new sub obj... } EAPI void @@ -102,7 +115,6 @@ Widget_Data *wd = elm_widget_data_get(obj); _els_smart_box_pack_before(wd->box, subobj, before); elm_widget_sub_object_add(obj, subobj); - // FIXME: track new sub obj... } EAPI void @@ -111,5 +123,4 @@ Widget_Data *wd = elm_widget_data_get(obj); _els_smart_box_pack_after(wd->box, subobj, after); elm_widget_sub_object_add(obj, subobj); - // FIXME: track new sub obj... } Modified: trunk/TMP/st/elementary/src/lib/elm_button.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_button.c 2008-10-07 05:57:37 UTC (rev 36490) +++ trunk/TMP/st/elementary/src/lib/elm_button.c 2008-10-07 06:55:11 UTC (rev 36491) @@ -6,11 +6,13 @@ struct _Widget_Data { Evas_Object *btn; + Evas_Object *icon; }; static void _del_hook(Evas_Object *obj); static void _sizing_eval(Evas_Object *obj); static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _sub_del(void *data, Evas_Object *obj, void *event_info); static void _signal_clicked(void *data, Evas_Object *obj, const char *emission, const char *source); static void @@ -35,11 +37,27 @@ _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(data); + if (obj != wd->icon) return; edje_object_part_swallow(wd->btn, "elm.swallow.content", obj); _sizing_eval(data); } static void +_sub_del(void *data, Evas_Object *obj, void *event_info) +{ + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *sub = event_info; + if (sub == wd->icon) + { + edje_object_signal_emit(wd->btn, "elm,state,icon,hidden", "elm"); + evas_object_event_callback_del + (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints); + wd->icon = NULL; + _sizing_eval(obj); + } +} + +static void _signal_clicked(void *data, Evas_Object *obj, const char *emission, const char *source) { Widget_Data *wd = elm_widget_data_get(data); @@ -63,6 +81,8 @@ _elm_theme_set(wd->btn, "button", "button"); edje_object_signal_callback_add(wd->btn, "elm,action,click", "", _signal_clicked, obj); elm_widget_resize_object_set(obj, wd->btn); + + evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); _sizing_eval(obj); return obj; @@ -92,11 +112,16 @@ elm_button_icon_set(Evas_Object *obj, Evas_Object *icon) { Widget_Data *wd = elm_widget_data_get(obj); - edje_object_part_swallow(wd->btn, "elm.swallow.content", icon); - edje_object_signal_emit(wd->btn, "elm,state,icon,visible", "elm"); - elm_widget_sub_object_add(obj, icon); - evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _changed_size_hints, obj); - // FIXME: track new sub obj... - _sizing_eval(obj); + if ((wd->icon != icon) && (wd->icon)) + elm_widget_sub_object_del(obj, wd->icon); + wd->icon = icon; + if (icon) + { + edje_object_part_swallow(wd->btn, "elm.swallow.content", icon); + edje_object_signal_emit(wd->btn, "elm,state,icon,visible", "elm"); + elm_widget_sub_object_add(obj, icon); + evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, + _changed_size_hints, obj); + _sizing_eval(obj); + } } Modified: trunk/TMP/st/elementary/src/lib/elm_frame.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_frame.c 2008-10-07 05:57:37 UTC (rev 36490) +++ trunk/TMP/st/elementary/src/lib/elm_frame.c 2008-10-07 06:55:11 UTC (rev 36491) @@ -6,11 +6,13 @@ struct _Widget_Data { Evas_Object *frm; + Evas_Object *content; }; static void _del_hook(Evas_Object *obj); static void _sizing_eval(Evas_Object *obj); static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _sub_del(void *data, Evas_Object *obj, void *event_info); static void _del_hook(Evas_Object *obj) @@ -38,6 +40,20 @@ _sizing_eval(data); } +static void +_sub_del(void *data, Evas_Object *obj, void *event_info) +{ + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *sub = event_info; + if (sub == wd->content) + { + evas_object_event_callback_del + (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints); + wd->content = NULL; + _sizing_eval(obj); + } +} + EAPI Evas_Object * elm_frame_add(Evas_Object *parent) { @@ -54,6 +70,8 @@ wd->frm = edje_object_add(e); _elm_theme_set(wd->frm, "frame", "frame"); elm_widget_resize_object_set(obj, wd->frm); + + evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); _sizing_eval(obj); return obj; @@ -71,148 +89,15 @@ elm_frame_content_set(Evas_Object *obj, Evas_Object *content) { Widget_Data *wd = elm_widget_data_get(obj); - edje_object_part_swallow(wd->frm, "elm.swallow.content", content); - elm_widget_sub_object_add(obj, content); - evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _changed_size_hints, obj); - // FIXME: track new sub obj... - _sizing_eval(obj); -} - -/* -static void _elm_frame_text_set(Elm_Frame *fr, const char *text); - -Elm_Frame_Class _elm_frame_class = -{ - &_elm_widget_class, - ELM_OBJ_FRAME, - _elm_frame_text_set -}; - -static void -_elm_frame_text_set(Elm_Frame *fr, const char *text) -{ - Evas_Coord mw, mh; - - edje_object_part_text_set(fr->base, "elm.text", text); - edje_object_size_min_calc(fr->base, &mw, &mh); - if ((fr->minw != mw) || (fr->minh != mh)) + if ((wd->content != content) && (wd->content)) + elm_widget_sub_object_del(obj, wd->content); + wd->content = content; + if (content) { - fr->minw = mw; - fr->minh = mh; - ((Elm_Widget *)(fr->parent))->size_req(fr->parent, fr, fr->minw, fr->minh); - fr->geom_set(fr, fr->x, fr->y, fr->minw, fr->minh); + edje_object_part_swallow(wd->frm, "elm.swallow.content", content); + elm_widget_sub_object_add(obj, content); + evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, + _changed_size_hints, obj); + _sizing_eval(obj); } } - -static void -_elm_frame_size_alloc(Elm_Frame *fr, int w, int h) -{ - if (w < fr->minw) w = fr->minw; - if (h < fr->minh) h = fr->minh; - fr->req.w = w; - fr->req.h = h; -} - -static void -_elm_frame_size_req(Elm_Frame *fr, Elm_Widget *child, int w, int h) -{ - Evas_Coord mw, mh; - - if (child) - { - Evas_Coord maxx, maxy; - - child->size_alloc(child, 0, 0); - maxx = child->req.w; - maxy = child->req.h; - if (child->expand_x) maxx = 32767; - if (child->expand_y) maxy = 32767; - edje_extern_object_min_size_set(child->base, - child->req.w, - child->req.h); - edje_object_part_swallow(fr->base , "elm.swallow.content", - child->base); - edje_object_size_min_calc(fr->base, &mw, &mh); - if ((fr->minw != mw) || (fr->minh != mh)) - { - fr->minw = mw; - fr->minh = mh; - ((Elm_Widget *)(fr->parent))->size_req(fr->parent, fr, mw, mh); - fr->geom_set(fr, fr->x, fr->y, mw, mh); - } - } - else - { - // FIXME: handle - } -} - -static void -_elm_on_child_add(void *data, Elm_Frame *fr, Elm_Cb_Type type, Elm_Obj *obj) -{ - Evas_Coord mw, mh; - - if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; - ((Elm_Widget *)(obj))->size_alloc(obj, 0, 0); - ((Elm_Widget *)(obj))->geom_set(obj, - ((Elm_Widget *)(obj))->x, - ((Elm_Widget *)(obj))->y, - ((Elm_Widget *)(obj))->req.w, - ((Elm_Widget *)(obj))->req.h); - edje_extern_object_min_size_set(((Elm_Widget *)(obj))->base, - ((Elm_Widget *)(obj))->req.w, - ((Elm_Widget *)(obj))->req.h); - edje_object_part_swallow(fr->base , "elm.swallow.content", - ((Elm_Widget *)(obj))->base); - edje_object_size_min_calc(fr->base, &mw, &mh); - if ((fr->minw != mw) || (fr->minh != mh)) - { - fr->minw = mw; - fr->minh = mh; - ((Elm_Widget *)(fr->parent))->size_req(fr->parent, fr, mw, mh); - fr->geom_set(fr, fr->x, fr->y, mw, mh); - } -} - -static void -_elm_on_child_del(void *data, Elm_Frame *fr, Elm_Cb_Type type, Elm_Obj *obj) -{ - if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; - // FIXME: allow for removal of child - size down -} - -static void -_elm_frame_del(Elm_Frame *fr) -{ - if (fr->text) evas_stringshare_del(fr->text); - ((Elm_Obj_Class *)(((Elm_Frame_Class *)(fr->clas))->parent))->del(ELM_OBJ(fr)); -} - -EAPI Elm_Frame * -elm_frame_new(Elm_Win *win) -{ - Elm_Frame *fr; - - fr = ELM_NEW(Elm_Frame); - - _elm_widget_init(fr); - fr->clas = &_elm_frame_class; - fr->type = ELM_OBJ_FRAME; - - fr->del = _elm_frame_del; - - fr->size_alloc = _elm_frame_size_alloc; - fr->size_req = _elm_frame_size_req; - - fr->text_set = _elm_frame_text_set; - - fr->base = edje_object_add(win->evas); - _elm_theme_set(fr->base, "frame", "frame"); - fr->cb_add(fr, ELM_CB_CHILD_ADD, _elm_on_child_add, NULL); - fr->cb_add(fr, ELM_CB_CHILD_DEL, _elm_on_child_del, NULL); - _elm_widget_post_init(fr); - win->child_add(win, fr); - return fr; -} -*/ Added: trunk/TMP/st/elementary/src/lib/elm_layout.c Modified: trunk/TMP/st/elementary/src/lib/elm_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_scroller.c 2008-10-07 05:57:37 UTC (rev 36490) +++ trunk/TMP/st/elementary/src/lib/elm_scroller.c 2008-10-07 06:55:11 UTC (rev 36491) @@ -6,11 +6,12 @@ struct _Widget_Data { Evas_Object *scr; - Evas_Object *child; + Evas_Object *content; }; static void _del_hook(Evas_Object *obj); static void _sizing_eval(Evas_Object *obj); +static void _sub_del(void *data, Evas_Object *obj, void *event_info); static void _del_hook(Evas_Object *obj) @@ -26,9 +27,9 @@ Evas_Coord vw, vh, minw, minh, maxw, maxh; double xw, xy; - evas_object_size_hint_min_get(wd->child, &minw, &minh); - evas_object_size_hint_max_get(wd->child, &maxw, &maxh); - evas_object_size_hint_weight_get(wd->child, &xw, &xy); + evas_object_size_hint_min_get(wd->content, &minw, &minh); + evas_object_size_hint_max_get(wd->content, &maxw, &maxh); + evas_object_size_hint_weight_get(wd->content, &xw, &xy); elm_smart_scroller_child_viewport_size_get(wd->scr, &vw, &vh); if (xw > 0.0) { @@ -42,7 +43,7 @@ else if ((maxh > 0) && (vh > maxh)) vh = maxh; } else if (minh > 0) vh = minh; - evas_object_resize(wd->child, vw, vh); + evas_object_resize(wd->content, vw, vh); } static void @@ -52,6 +53,20 @@ } static void +_sub_del(void *data, Evas_Object *obj, void *event_info) +{ + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *sub = event_info; + if (sub == wd->content) + { + evas_object_event_callback_del + (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints); + wd->content = NULL; + _sizing_eval(obj); + } +} + +static void _resize(void *data, Evas *e, Evas_Object *obj, void *event_info) { _sizing_eval(data); @@ -77,20 +92,26 @@ edje_object_size_min_calc(wd->scr, &minw, &minh); evas_object_size_hint_min_set(obj, minw, minh); evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize, obj); + + evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); _sizing_eval(obj); return obj; } EAPI void -elm_scroller_child_set(Evas_Object *obj, Evas_Object *child) +elm_scroller_content_set(Evas_Object *obj, Evas_Object *content) { Widget_Data *wd = elm_widget_data_get(obj); - wd->child = child; - elm_smart_scroller_child_set(wd->scr, child); - evas_object_event_callback_add(child, EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _changed_size_hints, obj); - elm_widget_sub_object_add(obj, child); - // FIXME: track new sub obj... - _sizing_eval(obj); + if ((wd->content != content) && (wd->content)) + elm_widget_sub_object_del(obj, wd->content); + wd->content = content; + if (content) + { + elm_smart_scroller_child_set(wd->scr, content); + evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, + _changed_size_hints, obj); + elm_widget_sub_object_add(obj, content); + _sizing_eval(obj); + } } Modified: trunk/TMP/st/elementary/src/lib/elm_table.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_table.c 2008-10-07 05:57:37 UTC (rev 36490) +++ trunk/TMP/st/elementary/src/lib/elm_table.c 2008-10-07 06:55:11 UTC (rev 36491) @@ -10,6 +10,8 @@ static void _del_hook(Evas_Object *obj); static void _sizing_eval(Evas_Object *obj); +static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _sub_del(void *data, Evas_Object *obj, void *event_info); static void _del_hook(Evas_Object *obj) @@ -43,6 +45,16 @@ _sizing_eval(data); } +static void +_sub_del(void *data, Evas_Object *obj, void *event_info) +{ + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *sub = event_info; + evas_object_event_callback_del + (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints); + _sizing_eval(obj); +} + EAPI Evas_Object * elm_table_add(Evas_Object *parent) { @@ -61,6 +73,9 @@ evas_object_event_callback_add(wd->tbl, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); elm_widget_resize_object_set(obj, wd->tbl); + + evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); + return obj; } @@ -77,5 +92,4 @@ Widget_Data *wd = elm_widget_data_get(obj); _els_smart_table_pack(wd->tbl, subobj, x, y, w, h); elm_widget_sub_object_add(obj, subobj); - // FIXME: track new sub obj... } Modified: trunk/TMP/st/elementary/src/lib/elm_toggle.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_toggle.c 2008-10-07 05:57:37 UTC (rev 36490) +++ trunk/TMP/st/elementary/src/lib/elm_toggle.c 2008-10-07 06:55:11 UTC (rev 36491) @@ -6,6 +6,7 @@ struct _Widget_Data { Evas_Object *tgl; + Evas_Object *icon; Evas_Bool state; Evas_Bool *statep; }; @@ -13,6 +14,7 @@ static void _del_hook(Evas_Object *obj); static void _sizing_eval(Evas_Object *obj); static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _sub_del(void *data, Evas_Object *obj, void *event_info); static void _signal_toggle_off(void *data, Evas_Object *obj, const char *emission, const char *source); static void _signal_toggle_on(void *data, Evas_Object *obj, const char *emission, const char *source); @@ -38,11 +40,27 @@ _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(data); + if (obj != wd->icon) return; edje_object_part_swallow(wd->tgl, "elm.swallow.content", obj); _sizing_eval(data); } static void +_sub_del(void *data, Evas_Object *obj, void *event_info) +{ + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *sub = event_info; + if (sub == wd->icon) + { + edje_object_signal_emit(wd->tgl, "elm,state,icon,hidden", "elm"); + evas_object_event_callback_del + (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints); + wd->icon = NULL; + _sizing_eval(obj); + } +} + +static void _signal_toggle_off(void *data, Evas_Object *obj, const char *emission, const char *source) { Widget_Data *wd = elm_widget_data_get(data); @@ -78,6 +96,8 @@ edje_object_signal_callback_add(wd->tgl, "elm,action,toggle,on", "", _signal_toggle_on, obj); edje_object_signal_callback_add(wd->tgl, "elm,action,toggle,off", "", _signal_toggle_off, obj); elm_widget_resize_object_set(obj, wd->tgl); + + evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); _sizing_eval(obj); return obj; @@ -107,13 +127,18 @@ elm_toggle_icon_set(Evas_Object *obj, Evas_Object *icon) { Widget_Data *wd = elm_widget_data_get(obj); - edje_object_part_swallow(wd->tgl, "elm.swallow.content", icon); - edje_object_signal_emit(wd->tgl, "elm,state,icon,visible", "elm"); - elm_widget_sub_object_add(obj, icon); - evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _changed_size_hints, obj); - // FIXME: track new sub obj... - _sizing_eval(obj); + if ((wd->icon != icon) && (wd->icon)) + elm_widget_sub_object_del(obj, wd->icon); + wd->icon = icon; + if (icon) + { + edje_object_part_swallow(wd->tgl, "elm.swallow.content", icon); + edje_object_signal_emit(wd->tgl, "elm,state,icon,visible", "elm"); + elm_widget_sub_object_add(obj, icon); + evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, + _changed_size_hints, obj); + _sizing_eval(obj); + } } EAPI void Modified: trunk/TMP/st/elementary/src/lib/elm_widget.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_widget.c 2008-10-07 05:57:37 UTC (rev 36490) +++ trunk/TMP/st/elementary/src/lib/elm_widget.c 2008-10-07 06:55:11 UTC (rev 36491) @@ -146,6 +146,7 @@ sd->parent_obj = obj; } } + evas_object_smart_callback_call(obj, "sub-object-add", sobj); } EAPI void @@ -157,6 +158,7 @@ { if (elm_widget_can_focus_get(sobj)) sd->child_can_focus = 0; } + evas_object_smart_callback_call(obj, "sub-object-del", sobj); } EAPI void @@ -167,6 +169,7 @@ sd->resize_obj = sobj; evas_object_smart_member_add(sobj, obj); _smart_reconfigure(sd); + evas_object_smart_callback_call(obj, "sub-object-add", sobj); } EAPI void |
From: Enlightenment S. <no-...@en...> - 2008-10-08 08:52:31
|
Log: comments for stuff to do to make this hover stuff actually useful soon. Author: raster Date: 2008-10-08 01:48:09 -0700 (Wed, 08 Oct 2008) New Revision: 36518 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-08 08:15:20 UTC (rev 36517) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-08 08:48:09 UTC (rev 36518) @@ -511,17 +511,14 @@ elm_button_label_set(bt, "Top 1"); elm_box_pack_end(bx, bt); evas_object_show(bt); - bt = elm_button_add(win); elm_button_label_set(bt, "Top 2"); elm_box_pack_end(bx, bt); evas_object_show(bt); - bt = elm_button_add(win); elm_button_label_set(bt, "Top 3"); elm_box_pack_end(bx, bt); evas_object_show(bt); - evas_object_show(bx); elm_hover_content_set(hv, "top", bx); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-08 08:15:20 UTC (rev 36517) +++ trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-08 08:48:09 UTC (rev 36518) @@ -174,6 +174,8 @@ EAPI Evas_Object *elm_hover_add(Evas_Object *parent); EAPI void elm_hover_target_set(Evas_Object *obj, Evas_Object *target); EAPI void elm_hover_parent_set(Evas_Object *obj, Evas_Object *parent); + EAPI void elm_hover_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content); + /* smart callbacks elm_win objects will call: */ @@ -182,13 +184,17 @@ // * scroller could do with page up/down/left/right buttons and and idea of // a page size // * tab widget focusing (not useful for touchscreen tho...) +// * icon should optionally be able to collect events and call clicked +// callbacks +// * hover needs a way to animate show/hide (slide out slots) and have some +// graphics for around middle +// * hover needs to track move/resize and del of parent +// * hover needs to be able to use custom hover style +// * frame needs to be able to use custom frame style +// * all widgets need a way to use a custom style // // FIXME: immediate hitlist for widgets: -// HOVER: select a widget (any) and attach a hover to it - the over will hover -// on top of the hover target and accept child widgets. haver may -// optionally place something to cover the window (under the hover -// widget, above everything else) -// POPSEL: a buttont that when pressed uses a hover to display a h/v box or +// POPSEL: a button that when pressed uses a hover to display a h/v box or // a table of options surrounding the button with scroll butons at // the end and the ability to drag and scroll |
From: Enlightenment S. <no-...@en...> - 2008-10-08 15:21:21
|
Log: ok icon too in hover test. looks nice. :) Author: raster Date: 2008-10-08 08:21:14 -0700 (Wed, 08 Oct 2008) New Revision: 36529 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/elm_hover.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-08 15:09:00 UTC (rev 36528) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-08 15:21:14 UTC (rev 36529) @@ -473,7 +473,7 @@ static void my_bt_11(void *data, Evas_Object *obj, void *event_info) { - Evas_Object *win, *bg, *bx, *bt, *hv; + Evas_Object *win, *bg, *bx, *bt, *hv, *ic; char buf[PATH_MAX]; win = elm_win_add(NULL, "hover", ELM_WIN_BASIC); @@ -507,6 +507,12 @@ bx = elm_box_add(win); + 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); + elm_box_pack_end(bx, ic); + evas_object_show(ic); bt = elm_button_add(win); elm_button_label_set(bt, "Top 1"); elm_box_pack_end(bx, bt); Modified: trunk/TMP/st/elementary/src/lib/elm_hover.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_hover.c 2008-10-08 15:09:00 UTC (rev 36528) +++ trunk/TMP/st/elementary/src/lib/elm_hover.c 2008-10-08 15:21:14 UTC (rev 36529) @@ -28,6 +28,7 @@ _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + elm_hover_target_set(obj, NULL); elm_hover_parent_set(obj, NULL); while (wd->subs) { @@ -120,6 +121,13 @@ } static void +_target_del(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Widget_Data *wd = elm_widget_data_get(data); + wd->target = NULL; +} + +static void _signal_dismiss(void *data, Evas_Object *obj, const char *emission, const char *source) { Widget_Data *wd = elm_widget_data_get(data); @@ -143,7 +151,6 @@ _parent_show(void *data, Evas *e, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(data); - evas_object_show(wd->cov); } static void @@ -211,9 +218,17 @@ elm_hover_target_set(Evas_Object *obj, Evas_Object *target) { Widget_Data *wd = elm_widget_data_get(obj); + if (wd->target) + { + evas_object_event_callback_del(wd->target, EVAS_CALLBACK_DEL, _target_del); + } wd->target = target; - elm_widget_hover_object_set(target, obj); - _sizing_eval(obj); + if (wd->target) + { + evas_object_event_callback_add(wd->target, EVAS_CALLBACK_DEL, _target_del, obj); + elm_widget_hover_object_set(target, obj); + _sizing_eval(obj); + } } EAPI void |
From: Enlightenment S. <no-...@en...> - 2008-10-16 09:19:02
|
Log: use edje entry stuff more Author: raster Date: 2008-10-16 02:17:57 -0700 (Thu, 16 Oct 2008) New Revision: 36710 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h trunk/TMP/st/elementary/src/lib/elm_entry.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-16 09:17:44 UTC (rev 36709) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-16 09:17:57 UTC (rev 36710) @@ -633,21 +633,38 @@ my_entry_bt_1(void *data, Evas_Object *obj, void *event_info) { Evas_Object *en = data; + elm_entry_entry_set(en, ""); } static void my_entry_bt_2(void *data, Evas_Object *obj, void *event_info) { Evas_Object *en = data; - printf("TEXT:\n"); - printf("%s\n", - elm_entry_entry_get(en)); + const char *s = elm_entry_entry_get(en); + printf("ENTRY:\n"); + if (s) printf("%s\n", s); } static void +my_entry_bt_3(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *en = data; + const char *s = elm_entry_selection_get(en); + printf("SELECTION:\n"); + if (s) printf("%s\n", s); +} + +static void +my_entry_bt_4(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *en = data; + elm_entry_entry_insert(en, "Insert some <b>BOLD</> text"); +} + +static void my_bt_13(void *data, Evas_Object *obj, void *event_info) { - Evas_Object *win, *bg, *bx, *bt, *en; + Evas_Object *win, *bg, *bx, *bx2, *bt, *en; char buf[PATH_MAX]; win = elm_win_add(NULL, "entry", ELM_WIN_BASIC); @@ -664,30 +681,59 @@ elm_win_resize_object_add(win, bx); evas_object_show(bx); - bt = elm_button_add(win); - elm_button_label_set(bt, "Clear"); - evas_object_smart_callback_add(bt, "clicked", my_entry_bt_1, en); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - en = elm_entry_add(win); elm_entry_entry_set(en, "This is an entry widget in this window that<br>" - "uses markup <b>like this</b> for styling and<br>" - "formatting <em>like this</em>, as well as<br>" - "<a href=X><link>links in the text</link></a>, so enter text<br>" + "uses markup <b>like this</> for styling and<br>" + "formatting <em>like this</>, as well as<br>" + "<+a href=X><link>links in the text</></>, so enter text<br>" "in here to edit it."); evas_object_size_hint_weight_set(en, 1.0, 1.0); evas_object_size_hint_align_set(en, -1.0, -1.0); elm_box_pack_end(bx, en); evas_object_show(en); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, 1); + evas_object_size_hint_weight_set(bx2, 1.0, 0.0); + evas_object_size_hint_align_set(bx2, -1.0, -1.0); bt = elm_button_add(win); + elm_button_label_set(bt, "Clear"); + evas_object_smart_callback_add(bt, "clicked", my_entry_bt_1, en); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); elm_button_label_set(bt, "Print"); evas_object_smart_callback_add(bt, "clicked", my_entry_bt_2, en); - elm_box_pack_end(bx, bt); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); evas_object_show(bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "Selection"); + evas_object_smart_callback_add(bt, "clicked", my_entry_bt_3, en); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Insert"); + evas_object_smart_callback_add(bt, "clicked", my_entry_bt_4, en); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + // HACK! not exposed! (should expose some later?) elm_widget_focus_set(en, 1); evas_object_show(win); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-16 09:17:44 UTC (rev 36709) +++ trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-16 09:17:57 UTC (rev 36710) @@ -181,8 +181,12 @@ */ EAPI Evas_Object *elm_entry_add(Evas_Object *parent); - EAPI void elm_entry_entry_set(Evas_Object *obj, const char *entry); - EAPI const char *elm_entry_entry_get(Evas_Object *obj); + EAPI void elm_entry_entry_set(Evas_Object *obj, const char *entry); + EAPI const char *elm_entry_entry_get(Evas_Object *obj); + EAPI const char *elm_entry_selection_get(Evas_Object *obj); + EAPI void elm_entry_entry_insert(Evas_Object *obj, const char *entry); + /* smart callbacks called: + */ // FIXME: fixes to do // * current sizing tree inefficient Modified: trunk/TMP/st/elementary/src/lib/elm_entry.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_entry.c 2008-10-16 09:17:44 UTC (rev 36709) +++ trunk/TMP/st/elementary/src/lib/elm_entry.c 2008-10-16 09:17:57 UTC (rev 36710) @@ -10,6 +10,15 @@ static void _del_hook(Evas_Object *obj); static void _sizing_eval(Evas_Object *obj); +static void _on_focus_hook(void *data, Evas_Object *obj); +static void _signal_entry_changed(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _signal_selection_start(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _signal_selection_changed(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _signal_selection_cleared(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _signal_entry_paste_request(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _signal_entry_copy_notify(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _signal_entry_cut_notify(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _signal_cursor_changed(void *data, Evas_Object *obj, const char *emission, const char *source); static void _del_hook(Evas_Object *obj) @@ -36,6 +45,70 @@ evas_object_focus_set(wd->ent, 1); } +static void +_signal_entry_changed(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + evas_object_smart_callback_call(data, "changed", NULL); + _sizing_eval(data); +} + +static void +_signal_selection_start(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + evas_object_smart_callback_call(data, "selection,start", NULL); + // FIXME: x clipboard/copy & paste - do +} + +static void +_signal_selection_changed(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + evas_object_smart_callback_call(data, "selection,changed", NULL); + // FIXME: x clipboard/copy & paste - do +} + +static void +_signal_selection_cleared(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + evas_object_smart_callback_call(data, "selection,cleared", NULL); + // FIXME: x clipboard/copy & paste - do +} + +static void +_signal_entry_paste_request(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + // FIXME: x clipboard/copy and paste - request +} + +static void +_signal_entry_copy_notify(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + evas_object_smart_callback_call(data, "changed", NULL); + // FIXME: x clipboard/copy & paste - do +} + +static void +_signal_entry_cut_notify(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + evas_object_smart_callback_call(data, "changed", NULL); + // FIXME: x clipboard/copy & paste - do +} + +static void +_signal_cursor_changed(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + evas_object_smart_callback_call(data, "cursor,changed", NULL); + // FIXME: handle auto-scroll within parent (get cursor - if not visible + // jump so it is) +} + EAPI Evas_Object * elm_entry_add(Evas_Object *parent) { @@ -53,6 +126,14 @@ wd->ent = edje_object_add(e); _elm_theme_set(wd->ent, "entry", "base", "default"); + edje_object_signal_callback_add(wd->ent, "entry,changed", "elm.text", _signal_entry_changed, obj); + edje_object_signal_callback_add(wd->ent, "selection,start", "elm.text", _signal_selection_start, obj); + edje_object_signal_callback_add(wd->ent, "selection,changed", "elm.text", _signal_selection_changed, obj); + edje_object_signal_callback_add(wd->ent, "selection,cleared", "elm.text", _signal_selection_cleared, obj); + edje_object_signal_callback_add(wd->ent, "entry,paste,request", "elm.text", _signal_entry_paste_request, obj); + edje_object_signal_callback_add(wd->ent, "entry,copy,notify", "elm.text", _signal_entry_copy_notify, obj); + edje_object_signal_callback_add(wd->ent, "entry,cut,notify", "elm.text", _signal_entry_cut_notify, obj); + edje_object_signal_callback_add(wd->ent, "cursor,changed", "elm.text", _signal_cursor_changed, obj); elm_widget_resize_object_set(obj, wd->ent); return obj; } @@ -71,3 +152,19 @@ Widget_Data *wd = elm_widget_data_get(obj); return edje_object_part_text_get(wd->ent, "elm.text"); } + +EAPI const char * +elm_entry_selection_get(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + return edje_object_part_text_selection_get(wd->ent, "elm.text"); +} + +EAPI void +elm_entry_entry_insert(Evas_Object *obj, const char *entry) +{ + Widget_Data *wd = elm_widget_data_get(obj); + edje_object_part_text_insert(wd->ent, "elm.text", entry); + _sizing_eval(obj); +} + |
From: Enlightenment S. <no-...@en...> - 2008-10-17 14:51:30
|
Log: and some final touches on signals from entry widget Author: raster Date: 2008-10-17 07:51:17 -0700 (Fri, 17 Oct 2008) New Revision: 36755 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/elm_entry.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-17 14:40:54 UTC (rev 36754) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-17 14:51:17 UTC (rev 36755) @@ -731,7 +731,7 @@ elm_box_pack_end(bx, bx2); evas_object_show(bx2); - // HACK! not exposed! (should expose some later?) + // FIXME: HACK! not exposed! (should expose some later?) elm_widget_focus_set(en, 1); evas_object_show(win); @@ -763,6 +763,7 @@ elm_box_pack_end(bx, sc); en = elm_entry_add(win); + // FIXME: HACK! not exposed! evas_object_propagate_events_set(en, 0); elm_entry_entry_set(en, "This is an entry widget in this window that<br>" @@ -819,7 +820,7 @@ elm_box_pack_end(bx, bx2); evas_object_show(bx2); - // HACK! not exposed! (should expose some later?) + // FIXME: HACK! not exposed! (should expose some later?) elm_widget_focus_set(en, 1); evas_object_resize(win, 320, 300); Modified: trunk/TMP/st/elementary/src/lib/elm_entry.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_entry.c 2008-10-17 14:40:54 UTC (rev 36754) +++ trunk/TMP/st/elementary/src/lib/elm_entry.c 2008-10-17 14:51:17 UTC (rev 36755) @@ -130,7 +130,6 @@ Widget_Data *wd = elm_widget_data_get(data); Evas_Coord cx, cy, cw, ch; evas_object_smart_callback_call(data, "cursor,changed", NULL); - // FIXME: handle auto-scroll within parent (get cursor - if not visible // jump so it is) edje_object_part_text_cursor_geometry_get(wd->ent, "elm.text", &cx, &cy, &cw, &ch); @@ -149,7 +148,28 @@ _signal_anchor_up(void *data, Evas_Object *obj, const char *emission, const char *source) { Widget_Data *wd = elm_widget_data_get(data); + char *buf, *buf2, *p, *p2, *n; + int buflen; printf("UP %s\n", emission); + p = strchr(emission, ','); + if (p) + { + n = p + 1; + buflen = 200 + strlen(n); + buf = alloca(buflen); + p2 = p -1; + while (p2 >= emission) + { + if (*p2 == ',') break; + p2--; + } + p2++; + buf2 = alloca(5 + p - p2); + strncpy(buf2, p2, p - p2); + buf2[p - p2] = 0; + snprintf(buf, buflen, "anchor,%s,clicked,*s", buf2, n); + evas_object_smart_callback_call(data, buf, NULL); + } } static void |
From: Enlightenment S. <no-...@en...> - 2008-10-22 12:35:48
|
Log: and now focus works right! excellent. Author: raster Date: 2008-10-22 05:08:39 -0700 (Wed, 22 Oct 2008) New Revision: 36969 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/elc_notepad.c trunk/TMP/st/elementary/src/lib/elm_widget.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-22 12:04:16 UTC (rev 36968) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-22 12:08:39 UTC (rev 36969) @@ -731,9 +731,8 @@ elm_box_pack_end(bx, bx2); evas_object_show(bx2); - // FIXME: HACK! not exposed! (should expose some later?) - elm_widget_focus_set(en, 1); - + // FIXME: not exported + elm_widget_focus_set(win, 1); evas_object_show(win); } @@ -850,11 +849,10 @@ elm_box_pack_end(bx, bx2); evas_object_show(bx2); - // FIXME: HACK! not exposed! (should expose some later?) - elm_widget_focus_set(en, 1); - evas_object_resize(win, 320, 300); + // FIXME: not exported + elm_widget_focus_set(win, 1); evas_object_show(win); } @@ -948,11 +946,10 @@ elm_box_pack_end(bx, bx2); evas_object_show(bx2); - // FIXME: HACK! not exposed! (should expose some later?) - elm_widget_focus_set(np, 1); - evas_object_resize(win, 320, 300); + // FIXME: not exported + elm_widget_focus_set(win, 1); evas_object_show(win); } Modified: trunk/TMP/st/elementary/src/lib/elc_notepad.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elc_notepad.c 2008-10-22 12:04:16 UTC (rev 36968) +++ trunk/TMP/st/elementary/src/lib/elc_notepad.c 2008-10-22 12:08:39 UTC (rev 36969) @@ -46,7 +46,7 @@ _on_focus_hook(void *data, Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); - elm_widget_focus_set(wd->entry, 1); + elm_widget_focus_steal(wd->entry); } static char * Modified: trunk/TMP/st/elementary/src/lib/elm_widget.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_widget.c 2008-10-22 12:04:16 UTC (rev 36968) +++ trunk/TMP/st/elementary/src/lib/elm_widget.c 2008-10-22 12:08:39 UTC (rev 36969) @@ -62,18 +62,8 @@ { Smart_Data *sd = data; Evas_Object *op, *op2; - - op = elm_widget_parent_get(obj); - while (op) - { - op2 = elm_widget_parent_get(op); - if (!op2) break; - op = op2; - } - printf("focus off %p\n", op); - if (op) elm_widget_focused_object_clear(op); - printf("focus %p\n", sd->obj); - elm_widget_focus_set(sd->obj, 0); + + elm_widget_focus_steal(sd->obj); } /* externally accessible functions */ |
From: Enlightenment S. <no-...@en...> - 2008-10-22 12:47:26
|
Log: and final focus fixes. Author: raster Date: 2008-10-22 05:47:12 -0700 (Wed, 22 Oct 2008) New Revision: 36973 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/elc_notepad.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-22 12:42:27 UTC (rev 36972) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-22 12:47:12 UTC (rev 36973) @@ -894,18 +894,21 @@ elm_win_resize_object_add(win, bx); evas_object_show(bx); + printf("win = %p, bx = %p\n", win, bx); np = elm_notepad_add(win); elm_notepad_file_set(np, "note.txt", ELM_TEXT_FORMAT_PLAIN_UTF8); evas_object_size_hint_weight_set(np, 1.0, 1.0); evas_object_size_hint_align_set(np, -1.0, -1.0); elm_box_pack_end(bx, np); evas_object_show(np); + printf("np = %p\n", np); bx2 = elm_box_add(win); elm_box_horizontal_set(bx2, 1); elm_box_homogenous_set(bx2, 1); evas_object_size_hint_weight_set(bx2, 1.0, 0.0); evas_object_size_hint_align_set(bx2, -1.0, -1.0); + printf("bx2 = %p\n", bx2); bt = elm_button_add(win); ic = elm_icon_add(win); @@ -918,6 +921,7 @@ evas_object_size_hint_weight_set(bt, 1.0, 0.0); elm_box_pack_end(bx2, bt); evas_object_show(bt); + printf("bt = %p\n", bt); bt = elm_button_add(win); ic = elm_icon_add(win); @@ -930,6 +934,7 @@ evas_object_size_hint_weight_set(bt, 1.0, 0.0); elm_box_pack_end(bx2, bt); evas_object_show(bt); + printf("bt = %p\n", bt); bt = elm_button_add(win); ic = elm_icon_add(win); @@ -942,6 +947,7 @@ evas_object_size_hint_weight_set(bt, 1.0, 0.0); elm_box_pack_end(bx2, bt); evas_object_show(bt); + printf("bt = %p\n", bt); elm_box_pack_end(bx, bx2); evas_object_show(bx2); Modified: trunk/TMP/st/elementary/src/lib/elc_notepad.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elc_notepad.c 2008-10-22 12:42:27 UTC (rev 36972) +++ trunk/TMP/st/elementary/src/lib/elc_notepad.c 2008-10-22 12:47:12 UTC (rev 36973) @@ -356,7 +356,7 @@ elm_widget_on_focus_hook_set(obj, _on_focus_hook, NULL); elm_widget_data_set(obj, wd); elm_widget_del_hook_set(obj, _del_hook); - elm_widget_can_focus_set(obj, 0); + elm_widget_can_focus_set(obj, 1); wd->scroller = elm_scroller_add(parent); elm_widget_resize_object_set(obj, wd->scroller); |
From: Enlightenment S. <no-...@en...> - 2008-11-15 14:07:24
|
Log: notes++ Author: raster Date: 2008-11-15 06:07:15 -0800 (Sat, 15 Nov 2008) New Revision: 37664 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-11-15 14:04:34 UTC (rev 37663) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-11-15 14:07:15 UTC (rev 37664) @@ -767,8 +767,8 @@ en = elm_entry_add(win); elm_entry_single_line_set(en, 1); elm_entry_entry_set(en, "This is a single line"); - evas_object_size_hint_weight_set(en, 1.0, 1.0); - evas_object_size_hint_align_set(en, -1.0, -1.0); + evas_object_size_hint_weight_set(en, 1.0, 0.0); + evas_object_size_hint_align_set(en, -1.0, 0.0); elm_scroller_content_set(sc, en); evas_object_show(en); @@ -783,8 +783,8 @@ en = elm_entry_add(win); elm_entry_password_set(en, 1); elm_entry_entry_set(en, "Password here"); - evas_object_size_hint_weight_set(en, 1.0, 1.0); - evas_object_size_hint_align_set(en, -1.0, -1.0); + evas_object_size_hint_weight_set(en, 1.0, 0.0); + evas_object_size_hint_align_set(en, -1.0, 0.0); elm_scroller_content_set(sc, en); evas_object_show(en); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h 2008-11-15 14:04:34 UTC (rev 37663) +++ trunk/TMP/st/elementary/src/lib/Elementary.h 2008-11-15 14:07:15 UTC (rev 37664) @@ -313,4 +313,8 @@ // * tiled image + zoom widget (tiled map viewer) // * dialpad widget - need one with a phone dialpad // * scale property from e - watch for changes. also allow for env var option +// * on the fly theme changes - test +// * single line entry on scale change adds newlines +// * scale change for hover doesnt seem to do new size alloc nicely +// * click + drag on button in scrollvie leaves pressed glow #endif |
From: Enlightenment S. <no-...@en...> - 2008-12-19 04:26:27
|
Log: tests for hoversel (and photo) and toolbar and more complete toolbar. Author: raster Date: 2008-12-18 20:26:24 -0800 (Thu, 18 Dec 2008) New Revision: 38222 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elc_hoversel.c trunk/TMP/st/elementary/src/lib/elm_toolbar.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-12-19 02:41:06 UTC (rev 38221) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-12-19 04:26:24 UTC (rev 38222) @@ -1248,9 +1248,48 @@ } static void +tb_1(void *data, Evas_Object *obj, void *event_info) +{ + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/images/panel_01.jpg", PACKAGE_DATA_DIR); + elm_photo_file_set(data, buf); +} + +static void +tb_2(void *data, Evas_Object *obj, void *event_info) +{ + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", PACKAGE_DATA_DIR); + elm_photo_file_set(data, buf); +} + +static void +tb_3(void *data, Evas_Object *obj, void *event_info) +{ + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/images/wood_01.jpg", PACKAGE_DATA_DIR); + elm_photo_file_set(data, buf); +} + +static void +tb_4(void *data, Evas_Object *obj, void *event_info) +{ + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", PACKAGE_DATA_DIR); + elm_photo_file_set(data, buf); +} + +static void +tb_5(void *data, Evas_Object *obj, void *event_info) +{ + elm_photo_file_set(data, NULL); +} + +static void my_bt_18(void *data, Evas_Object *obj, void *event_info) { - Evas_Object *win, *bg, *bx, *tb, *ic; + Evas_Object *win, *bg, *bx, *tb, *ic, *ph; + Evas_Object *ph1, *ph2, *ph3, *ph4; char buf[PATH_MAX]; win = elm_win_add(NULL, "toolbar", ELM_WIN_BASIC); @@ -1270,41 +1309,181 @@ tb = elm_toolbar_add(win); evas_object_size_hint_weight_set(tb, 0.0, 0.0); evas_object_size_hint_align_set(tb, -1.0, 0.0); + + ph1 = elm_photo_add(win); + ph2 = elm_photo_add(win); + ph3 = elm_photo_add(win); + ph4 = elm_photo_add(win); 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_toolbar_item_add(tb, ic, "Hello", NULL, NULL); + elm_toolbar_item_add(tb, ic, "Hello", tb_1, ph1); 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_toolbar_item_add(tb, ic, "World", NULL, NULL); + elm_toolbar_item_add(tb, ic, "World", tb_2, ph1); 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_toolbar_item_add(tb, ic, "Here", NULL, NULL); + elm_toolbar_item_add(tb, ic, "Here", tb_3, ph4); 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_toolbar_item_add(tb, ic, "Comes", NULL, NULL); + elm_toolbar_item_add(tb, ic, "Comes", tb_4, ph4); 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_toolbar_item_add(tb, ic, "Elementary", NULL, NULL); + elm_toolbar_item_add(tb, ic, "Elementary", tb_5, ph4); elm_box_pack_end(bx, tb); evas_object_show(tb); + + tb = elm_table_add(win); +// elm_table_homogenous_set(tb, 1); + evas_object_size_hint_weight_set(tb, 0.0, 1.0); + evas_object_size_hint_align_set(tb, -1.0, -1.0); + ph = ph1; + elm_photo_size_set(ph, 40); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", PACKAGE_DATA_DIR); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, 1.0, 1.0); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 0, 0, 1, 1); + evas_object_show(ph); + + ph = ph2; + elm_photo_size_set(ph, 80); + evas_object_size_hint_weight_set(ph, 1.0, 1.0); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 1, 0, 1, 1); + evas_object_show(ph); + + ph = ph3; + elm_photo_size_set(ph, 20); + snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", PACKAGE_DATA_DIR); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, 1.0, 1.0); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 0, 1, 1, 1); + evas_object_show(ph); + + ph = ph4; + elm_photo_size_set(ph, 60); + snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", PACKAGE_DATA_DIR); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, 1.0, 1.0); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 1, 1, 1, 1); + evas_object_show(ph); + + elm_box_pack_end(bx, tb); + evas_object_show(tb); + evas_object_resize(win, 320, 300); evas_object_show(win); } static void +my_bt_19(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *bx, *bt, *ic; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "hoversel", ELM_WIN_BASIC); + elm_win_title_set(win, "Hoversel"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + evas_object_show(bx); + + bt = elm_hoversel_add(win); + elm_hoversel_hover_parent_set(bt, win); + elm_hoversel_label_set(bt, "Labels"); + elm_hoversel_item_add(bt, "Item 1", NULL, ELM_ICON_NONE, NULL, NULL); + elm_hoversel_item_add(bt, "Item 2", NULL, ELM_ICON_NONE, NULL, NULL); + elm_hoversel_item_add(bt, "Item 3", NULL, ELM_ICON_NONE, NULL, NULL); + elm_hoversel_item_add(bt, "Item 4", NULL, ELM_ICON_NONE, NULL, NULL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_size_hint_align_set(bt, 0.5, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_hoversel_add(win); + elm_hoversel_hover_parent_set(bt, win); + elm_hoversel_label_set(bt, "Some Icons"); + elm_hoversel_item_add(bt, "Item 1", NULL, ELM_ICON_NONE, NULL, NULL); + elm_hoversel_item_add(bt, "Item 2", NULL, ELM_ICON_NONE, NULL, NULL); + elm_hoversel_item_add(bt, "Item 3", "home", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 4", "close", ELM_ICON_STANDARD, NULL, NULL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_size_hint_align_set(bt, 0.5, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_hoversel_add(win); + elm_hoversel_hover_parent_set(bt, win); + elm_hoversel_label_set(bt, "All Icons"); + elm_hoversel_item_add(bt, "Item 1", "apps", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 2", "arrow_down", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 3", "home", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 4", "close", ELM_ICON_STANDARD, NULL, NULL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_size_hint_align_set(bt, 0.5, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_hoversel_add(win); + elm_hoversel_hover_parent_set(bt, win); + elm_hoversel_label_set(bt, "All Icons"); + elm_hoversel_item_add(bt, "Item 1", "apps", ELM_ICON_STANDARD, NULL, NULL); + snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", PACKAGE_DATA_DIR); + elm_hoversel_item_add(bt, "Item 2", buf, ELM_ICON_FILE, NULL, NULL); + elm_hoversel_item_add(bt, "Item 3", "home", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 4", "close", ELM_ICON_STANDARD, NULL, NULL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_size_hint_align_set(bt, 0.5, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_hoversel_add(win); + elm_hoversel_hover_parent_set(bt, win); + elm_hoversel_label_set(bt, "Icon + Label"); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", PACKAGE_DATA_DIR); + elm_icon_file_set(ic, buf, NULL); + elm_hoversel_icon_set(bt, ic); + evas_object_show(ic); + + elm_hoversel_item_add(bt, "Item 1", "apps", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 2", "arrow_down", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 3", "home", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 4", "close", ELM_ICON_STANDARD, NULL, NULL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_size_hint_align_set(bt, 0.5, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + evas_object_resize(win, 320, 300); + + evas_object_show(win); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *bx, *bt, *sc, *fr; @@ -1523,6 +1702,13 @@ elm_box_pack_end(bx, bt); evas_object_show(bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "Hoversel"); + evas_object_smart_callback_add(bt, "clicked", my_bt_19, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + /* set an initial window size */ evas_object_resize(win, 320, 520); /* show the window */ Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2008-12-19 02:41:06 UTC (rev 38221) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2008-12-19 04:26:24 UTC (rev 38222) @@ -380,6 +380,9 @@ 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); EAPI void elm_hoversel_item_del(Elm_Hoversel_Item *item); /* smart callbacks called: + * "clicked" - the user clicked the hoversel button and popped up the sel + * "selected" - an item in the hoversel list is selected + * "dismissed" - the hover is dismissed */ typedef struct _Elm_Toolbar_Item Elm_Toolbar_Item; @@ -389,6 +392,7 @@ EAPI void elm_toolbar_item_select(Elm_Toolbar_Item *item); EAPI void elm_toolbar_scrollable_set(Evas_Object *obj, Evas_Bool scrollable); /* smart callbacks called: + * "clicked" - when the user clicks on a toolbar item and becomes selected */ //////////////////////////////////////////////////////////////////////////// @@ -400,12 +404,11 @@ // * left/right arrow broken with password mode for entry + utf8 chars... // * entry signal "changed" not called when deleting // * bubble doesnt handle child size changes right +// * table doesnt do homogenous properly // //// (incomplete - medium priority) // * entry selection conflicts with finger scroll (make selection start/stop work on signals?) -// -// * add test for photo widget -// * add test for hoversel + // * disabled not supported // * tab widget focusing (not useful for touchscreen tho...) // * on the fly theme changes - test (should work) @@ -436,6 +439,10 @@ // * dialpad widget - need one with a phone dialpad // //// (improvements - low priority) +// * use evas's new box instead of a box smart +// * use evas's table instead of a table smart +// * use ecore_evas_object_associate for win widget +// * use stack for win widget // * somehow a pdf(ps) viewer widget that doesnt make it gpl (lgpl) // * emotion widget? // * ewebkit widget Modified: trunk/TMP/st/elementary/src/lib/elc_hoversel.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elc_hoversel.c 2008-12-19 02:41:06 UTC (rev 38221) +++ trunk/TMP/st/elementary/src/lib/elc_hoversel.c 2008-12-19 04:26:24 UTC (rev 38222) @@ -72,6 +72,7 @@ Item *it = data; Evas_Object *obj2 = it->obj; if (it->func) it->func(it->data, obj2, NULL); + evas_object_smart_callback_call(obj2, "selected", NULL); elm_hoversel_hover_end(obj2); } @@ -121,6 +122,7 @@ evas_object_show(bx); evas_object_show(wd->hover); + evas_object_smart_callback_call(data, "clicked", NULL); } static void @@ -185,6 +187,7 @@ Widget_Data *wd = elm_widget_data_get(obj); if (wd->hover) evas_object_del(wd->hover); wd->hover = NULL; + evas_object_smart_callback_call(obj, "dismissed", NULL); } EAPI Elm_Hoversel_Item * Modified: trunk/TMP/st/elementary/src/lib/elm_toolbar.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_toolbar.c 2008-12-19 02:41:06 UTC (rev 38221) +++ trunk/TMP/st/elementary/src/lib/elm_toolbar.c 2008-12-19 04:26:24 UTC (rev 38222) @@ -26,7 +26,6 @@ static void _del_hook(Evas_Object *obj); static void _theme_hook(Evas_Object *obj); static void _sizing_eval(Evas_Object *obj); -static void _mouse_up(void *data, Evas_Object *obj, void *event_info); static void _item_show(Item *it) @@ -40,6 +39,32 @@ } static void +_item_select(Item *it) +{ + Item *it2; + Widget_Data *wd = elm_widget_data_get(it->obj); + Evas_Object *obj2; + Eina_List *l; + if (it->selected) return; + for (l = wd->items; l; l = l->next) + { + it2 = l->data; + if (it2->selected) + { + it2->selected = 0; + edje_object_signal_emit(it2->base, "elm,state,unselected", "elm"); + break; + } + } + it->selected = 1; + edje_object_signal_emit(it->base, "elm,state,selected", "elm"); + _item_show(it); + obj2 = it->obj; + if (it->func) it->func(it->data, it->obj, NULL); + evas_object_smart_callback_call(obj2, "clicked", NULL); +} + +static void _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); @@ -49,7 +74,28 @@ static void _theme_hook(Evas_Object *obj) { - // FIXME: re-eval icon and all min sizes + Widget_Data *wd = elm_widget_data_get(obj); + Eina_List *l; + Item *it; + Evas_Coord mw, mh; + for (l = wd->items; l; l = l->next) + { + it = l->data; + if (it->selected) + edje_object_signal_emit(it->base, "elm,state,selected", "elm"); + _elm_theme_set(it->base, "toolbar", "item", "default"); + if (it->icon) + { + edje_extern_object_min_size_set(it->icon, + (double)wd->icon_size * _elm_config->scale, + (double)wd->icon_size * _elm_config->scale); + edje_object_part_swallow(it->base, "elm.swallow.icon", it->icon); + } + edje_object_part_text_set(it->base, "elm.text", it->label); + edje_object_size_min_calc(it->base, &mw, &mh); + evas_object_size_hint_min_set(it->base, mw, mh); + evas_object_size_hint_max_set(it->base, 9999, mh); + } _sizing_eval(obj); } @@ -80,12 +126,6 @@ } static void -_mouse_up(void *data, Evas_Object *obj, void *event_info) -{ - evas_object_smart_callback_call(data, "clicked", NULL); -} - -static void _resize(void *data, Evas *e, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(data); @@ -115,24 +155,7 @@ static void _select(void *data, Evas_Object *obj, const char *emission, const char *source) { - Item *it = data, *it2; - Widget_Data *wd = elm_widget_data_get(it->obj); - Eina_List *l; - if (it->selected) return; - for (l = wd->items; l; l = l->next) - { - it2 = l->data; - if (it2->selected) - { - it2->selected = 0; - edje_object_signal_emit(it2->base, "elm,state,unselected", "elm"); - break; - } - } - it->selected = 1; - edje_object_signal_emit(it->base, "elm,state,selected", "elm"); - _item_show(it); - if (it->func) it->func(it->data, it->obj, NULL); + _item_select(data); } EAPI Evas_Object * @@ -191,16 +214,16 @@ _elm_theme_set(it->base, "toolbar", "item", "default"); edje_object_signal_callback_add(it->base, "elm,action,click", "elm", _select, it); - if (icon) + if (it->icon) { - edje_extern_object_min_size_set(icon, + edje_extern_object_min_size_set(it->icon, (double)wd->icon_size * _elm_config->scale, (double)wd->icon_size * _elm_config->scale); - edje_object_part_swallow(it->base, "elm.swallow.icon", icon); - evas_object_show(icon); + edje_object_part_swallow(it->base, "elm.swallow.icon", it->icon); + evas_object_show(it->icon); elm_widget_sub_object_add(obj, it->icon); } - edje_object_part_text_set(it->base, "elm.text", label); + edje_object_part_text_set(it->base, "elm.text", it->label); edje_object_size_min_calc(it->base, &mw, &mh); evas_object_size_hint_weight_set(it->base, 0.0, 0.0); evas_object_size_hint_align_set(it->base, -1.0, -1.0); @@ -216,14 +239,21 @@ EAPI void elm_toolbar_item_del(Elm_Toolbar_Item *item) { - // FIXME: remove item + Item *it = (Item *)item; + Widget_Data *wd = elm_widget_data_get(it->obj); + Evas_Object *obj2 = it->obj; + wd->items = eina_list_remove(wd->items, it); + eina_stringshare_del(it->label); + if (it->icon) evas_object_del(it->icon); + evas_object_del(it->base); + free(it); + _theme_hook(obj2); } EAPI void elm_toolbar_item_select(Elm_Toolbar_Item *item) { - // FIXME select item - // Widget_Data *wd = elm_widget_data_get(obj); + _item_select(item); } EAPI void |
From: Enlightenment S. <no-...@en...> - 2009-01-09 07:35:58
|
Log: list is pretty functional now. Author: raster Date: 2009-01-08 23:35:52 -0800 (Thu, 08 Jan 2009) New Revision: 38509 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_list.c trunk/TMP/st/elementary/src/lib/elm_scroller.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-01-09 03:03:36 UTC (rev 38508) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-01-09 07:35:52 UTC (rev 38509) @@ -1593,6 +1593,7 @@ elm_win_resize_object_add(win, li); evas_object_size_hint_weight_set(li, 1.0, 1.0); elm_list_horizontal_mode_set(li, ELM_LIST_LIMIT); + elm_list_multi_select_set(li, 1); ic = elm_icon_add(win); snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-01-09 03:03:36 UTC (rev 38508) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-01-09 07:35:52 UTC (rev 38509) @@ -198,6 +198,7 @@ EAPI Evas_Object *elm_scroller_add(Evas_Object *parent); EAPI void elm_scroller_content_set(Evas_Object *obj, Evas_Object *child); EAPI void elm_scroller_content_min_limit(Evas_Object *obj, Evas_Bool w, Evas_Bool h); + EAPI void elm_scroller_region_show(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h); /* smart callbacks called: */ @@ -409,8 +410,26 @@ 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 *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data); + EAPI Elm_List_Item *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); + EAPI Elm_List_Item *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); + EAPI Elm_List_Item *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); + EAPI void elm_list_go(Evas_Object *obj); + EAPI void elm_list_multi_select_set(Evas_Object *obj, Evas_Bool multi); + EAPI void elm_list_horizontal_mode_set(Evas_Object *obj, Elementary_List_Mode mode); + EAPI const Eina_List *elm_list_items_get(Evas_Object *obj); + EAPI const Elm_List_Item *elm_list_selected_item_get(Evas_Object *obj); + EAPI const Eina_List *elm_list_selected_items_get(Evas_Object *obj); + EAPI void elm_list_item_selected_set(Elm_List_Item *item, Evas_Bool selected); + EAPI void elm_list_item_show(Elm_List_Item *item); + EAPI void elm_list_item_del(Elm_List_Item *item); + EAPI const void *elm_list_item_data_get(Elm_List_Item *item); + EAPI Evas_Object *elm_list_item_icon_get(Elm_List_Item *item); + EAPI Evas_Object *elm_list_item_end_get(Elm_List_Item *item); + /* smart callbacks called: * "clicked" - when the user double-clicked an item + * "selected" - when the user selected an item + * "unselected" - when the user selected an item */ //////////////////////////////////////////////////////////////////////////// Modified: trunk/TMP/st/elementary/src/lib/elm_list.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_list.c 2009-01-09 03:03:36 UTC (rev 38508) +++ trunk/TMP/st/elementary/src/lib/elm_list.c 2009-01-09 07:35:52 UTC (rev 38509) @@ -10,8 +10,9 @@ Eina_List *items; Eina_List *selected; Elementary_List_Mode mode; + Evas_Coord minw[2], minh[2]; Evas_Bool on_hold : 1; - Evas_Coord minw[2], minh[2]; + Evas_Bool multi : 1; }; struct _Item @@ -38,6 +39,20 @@ _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + while (wd->items) + { + Item *it = wd->items->data; + wd->items = eina_list_remove_list(wd->items, wd->items); + eina_stringshare_del(it->label); + if (!it->fixed) + { + if (it->icon) evas_object_del(it->icon); + if (it->end) evas_object_del(it->end); + } + if (it->base) evas_object_del(it->base); + free(it); + } + eina_list_free(wd->selected); free(wd); } @@ -76,6 +91,7 @@ static void _item_select(Item *it) { + Widget_Data *wd = elm_widget_data_get(it->obj); const char *selectraise; if (it->selected) return; edje_object_signal_emit(it->base, "elm,state,selected", "elm"); @@ -83,12 +99,15 @@ if ((selectraise) && (!strcmp(selectraise, "on"))) evas_object_raise(it->base); it->selected = 1; + wd->selected = eina_list_append(wd->selected, it); if (it->func) it->func((void *)it->data, it->obj, it); + evas_object_smart_callback_call(it->obj, "selected", it); } static void _item_unselect(Item *it) { + Widget_Data *wd = elm_widget_data_get(it->obj); const char *stacking, *selectraise; if (!it->selected) return; edje_object_signal_emit(it->base, "elm,state,unselected", "elm"); @@ -100,6 +119,8 @@ evas_object_lower(it->base); } it->selected = 0; + wd->selected = eina_list_remove(wd->selected, it); + evas_object_smart_callback_call(it->obj, "unselected", it); } static void @@ -116,12 +137,20 @@ wd->on_hold = 0; return; } - for (l = wd->items; l; l = l->next) + if (wd->multi) { - Item *it2 = l->data; - if ((it2 != it) && (it2->selected)) _item_unselect(it2); + if (!it->selected) _item_select(it); + else _item_unselect(it); } - if (!it->selected) _item_select(it); + else + { + for (l = wd->items; l; l = l->next) + { + Item *it2 = l->data; + if ((it2 != it) && (it2->selected)) _item_unselect(it2); + } + if (!it->selected) _item_select(it); + } } static Item * @@ -337,7 +366,7 @@ elm_list_multi_select_set(Evas_Object *obj, Evas_Bool multi) { Widget_Data *wd = elm_widget_data_get(obj); - // FIXME: implement + wd->multi = multi; } EAPI void @@ -352,21 +381,26 @@ elm_scroller_content_min_limit(wd->scroller, 0, 0); } +EAPI const Eina_List * +elm_list_items_get(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + return wd->items; +} + EAPI const Elm_List_Item * elm_list_selected_item_get(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); - // FIXME: implement + if (wd->selected) return wd->selected->data; return NULL; } EAPI const Eina_List * -elm_list_items_get(Evas_Object *obj) +elm_list_selected_items_get(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); - if (wd->selected) return wd->selected; - // FIXME: implement - return wd->items; + return wd->selected; } EAPI void @@ -375,25 +409,45 @@ 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) + if (selected) { - Item *it2 = l->data; - if ((it2 != it) && (it2->selected)) _item_unselect(it2); + if (!wd->multi) + { + Item *it2 = l->data; + if ((it2 != it) && (it2->selected)) _item_unselect(it2); + } + if (!it->selected) _item_select(it); } - _item_select(it); + else if (it->selected) + _item_unselect(it); } EAPI void elm_list_item_show(Elm_List_Item *item) { - // FIXME: implement + Item *it = (Item *)item; + Widget_Data *wd = elm_widget_data_get(it->obj); + Evas_Coord bx, by, bw, bh; + Evas_Coord x, y, w, h; + evas_object_geometry_get(wd->box, &bx, &by, &bw, &bh); + evas_object_geometry_get(it->base, &x, &y, &w, &h); + x -= bx; + y -= by; + elm_scroller_region_show(wd->scroller, x, y, w, h); } EAPI void elm_list_item_del(Elm_List_Item *item) { - // FIXME: implement + Item *it = (Item *)item; + Widget_Data *wd = elm_widget_data_get(it->obj); + if (it->selected) _item_unselect(it); + wd->items = eina_list_remove(wd->items, it); + eina_stringshare_del(it->label); + if (it->icon) evas_object_del(it->icon); + if (it->end) evas_object_del(it->end); + if (it->base) evas_object_del(it->base); + free(it); } EAPI const void * Modified: trunk/TMP/st/elementary/src/lib/elm_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_scroller.c 2009-01-09 03:03:36 UTC (rev 38508) +++ trunk/TMP/st/elementary/src/lib/elm_scroller.c 2009-01-09 07:35:52 UTC (rev 38509) @@ -70,7 +70,6 @@ edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr), &vmw, &vmh); if (wd->min_w) w = vmw + minw; if (wd->min_h) h = vmh + minh; - printf("%i : %i + %i\n",wd->min_w, vmw, minw); evas_object_size_hint_min_set(obj, w, h); } @@ -155,3 +154,10 @@ wd->min_h = h; _sizing_eval(obj); } + +EAPI void +elm_scroller_region_show(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) +{ + Widget_Data *wd = elm_widget_data_get(obj); + elm_smart_scroller_child_region_show(wd->scr, x, y, w, h); +} |
From: Enlightenment S. <no-...@en...> - 2009-01-09 13:00:27
|
Log: provide a #defined macro for the standard main() for elementary apps. Author: raster Date: 2009-01-09 03:34:55 -0800 (Fri, 09 Jan 2009) New Revision: 38510 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-01-09 07:35:52 UTC (rev 38509) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-01-09 11:34:55 UTC (rev 38510) @@ -2017,16 +2017,5 @@ /* exit code */ return 0; } - -int -main(int argc, char **argv) -{ - /* init Elementary (all Elementary calls begin with elm_ and all data - * types, enums and macros will be Elm_ and ELM_ etc.) */ - elm_init(argc, argv); - /* this must be called right after elm_init(). this function is used for - * fast-starting elementary apps by caching a pre-init and x connect etc. - * in elm_init(). the ONLY call allowed to be done before elm_main() is - * elm_init() and nothing else. */ - return elm_main(argc, argv); -} +/* all emeentary apps should use this. but it right after elm_main() */ +ELM_MAIN() Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-01-09 07:35:52 UTC (rev 38509) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-01-09 11:34:55 UTC (rev 38510) @@ -130,6 +130,8 @@ ELM_WIN_KEYBOARD_TERMINAL, ELM_WIN_KEYBOARD_PASSWORD } Elm_Win_Keyboard_Mode; + +#define ELM_MAIN() int main(int argc, char **argv) {elm_init(argc, argv); return elm_main(argc, argv);} /**************************************************************************/ /* General calls */ @@ -425,7 +427,6 @@ EAPI const void *elm_list_item_data_get(Elm_List_Item *item); EAPI Evas_Object *elm_list_item_icon_get(Elm_List_Item *item); EAPI Evas_Object *elm_list_item_end_get(Elm_List_Item *item); - /* smart callbacks called: * "clicked" - when the user double-clicked an item * "selected" - when the user selected an item |
From: Enlightenment S. <no-...@en...> - 2009-01-27 00:44:33
|
Log: export markup<->plain utf8 conversion calls and use them too. Author: raster Date: 2009-01-26 16:44:29 -0800 (Mon, 26 Jan 2009) New Revision: 38803 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elc_notepad.c trunk/TMP/st/elementary/src/lib/elm_entry.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-01-26 23:49:33 UTC (rev 38802) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-01-27 00:44:29 UTC (rev 38803) @@ -898,7 +898,7 @@ evas_object_show(bx); np = elm_notepad_add(win); - elm_notepad_file_set(np, "note.txt", ELM_TEXT_FORMAT_PLAIN_UTF8); + elm_notepad_file_set(np, "note.txt", ELM_TEXT_FORMAT_MARKUP_UTF8); evas_object_size_hint_weight_set(np, 1.0, 1.0); evas_object_size_hint_align_set(np, -1.0, -1.0); elm_box_pack_end(bx, np); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-01-26 23:49:33 UTC (rev 38802) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-01-27 00:44:29 UTC (rev 38803) @@ -306,6 +306,8 @@ EAPI void elm_entry_editable_set(Evas_Object *obj, Evas_Bool editable); EAPI void elm_entry_select_none(Evas_Object *obj); EAPI void elm_entry_select_all(Evas_Object *obj); + EAPI char *elm_entry_markup_to_utf8(const char *s); + EAPI char *elm_entry_utf8_to_markup(const char *s); /* smart callbacks called: * "changed" - the text content changed Modified: trunk/TMP/st/elementary/src/lib/elc_notepad.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elc_notepad.c 2009-01-26 23:49:33 UTC (rev 38802) +++ trunk/TMP/st/elementary/src/lib/elc_notepad.c 2009-01-27 00:44:29 UTC (rev 38803) @@ -71,7 +71,7 @@ } static char * -_load_markup_utf8(const char *file) +_load_file(const char *file) { FILE *f; size_t size; @@ -82,69 +82,26 @@ if (!f) return NULL; while (size = fread(buf, 1, sizeof(buf), f)) { - pos = 0; buf[size] = 0; - while (pos < size) - { - int ch; - char str[2]; - - ch = buf[pos]; - if (ch != '\n') - { - str[0] = ch; - str[1] = 0; - text = _buf_append(text, str, &len, &alloc); - } - pos++; - } + text = _buf_append(text, buf, &len, &alloc); } fclose(f); return text; } static char * -_load_plain_utf8(const char *file) +_load_plain(const char *file) { - FILE *f; - size_t size; - int alloc = 0, len = 0, pos; - char *text = NULL, buf[4096]; + char *text, *text2; - f = fopen(file, "r"); - if (!f) return NULL; - while (size = fread(buf, 1, sizeof(buf), f)) + text = _load_file(file); + if (text) { - pos = 0; - buf[size] = 0; - while (pos < size) - { - int ch, ppos; - - ppos = pos; - ch = evas_common_font_utf8_get_next(buf, &pos); - if (ch == '\n') - text = _buf_append(text, "<br>", &len, &alloc); - else - { - int stlen = 0; - const char *escape; - char str[16]; - - escape = evas_textblock_string_escape_get(buf + ppos, &stlen); - if (escape) - text = _buf_append(text, escape, &len, &alloc); - else - { - strncpy(str, buf + ppos, pos - ppos); - str[pos - ppos] = 0; - text = _buf_append(text, str, &len, &alloc); - } - } - } + text2 = elm_entry_utf8_to_markup(text); + free(text); + return text2; } - fclose(f); - return text; + return NULL; } static void @@ -161,10 +118,10 @@ switch (wd->format) { case ELM_TEXT_FORMAT_PLAIN_UTF8: - text = _load_plain_utf8(wd->file); + text = _load_plain(wd->file); break; case ELM_TEXT_FORMAT_MARKUP_UTF8: - text = _load_markup_utf8(wd->file); + text = _load_file(wd->file); break; default: elm_entry_entry_set(wd->entry, "Unknown Text Format"); @@ -196,112 +153,20 @@ return; } fputs(text, f); // FIXME: catch error - fputs("\n", f); // FIXME: catch error fclose(f); } static void _save_plain_utf8(const char *file, const char *text) { - FILE *f; - char *s, *p; - char *tag_start, *tag_end, *esc_start, *esc_end; - - if ((!text) || (text[0] == 0)) + char *text2; + + text2 = elm_entry_markup_to_utf8(text); + if (text2) { - ecore_file_unlink(file); - return; + _save_markup_utf8(file, text2); + free(text2); } - f = fopen(file, "w"); - if (!f) - { - // FIXME: report a write error - return; - } - tag_start = tag_end = esc_start = esc_end = NULL; - p = (char *)text; - s = p; - for (;;) - { - if ((*p == 0) || - (tag_end) || (esc_end) || - (tag_start) || (esc_start)) - { - if (tag_end) - { - char *ttag, *match; - - ttag = malloc(tag_end - tag_start); - if (ttag) - { - strncpy(ttag, tag_start + 1, tag_end - tag_start - 1); - ttag[tag_end - tag_start - 1] = 0; - if (!strcmp(ttag, "br")) fputs("\n", f); // FIXME: catch error - free(ttag); - } - tag_start = tag_end = NULL; - } - else if (esc_end) - { - char tesc[256]; - char *str; - - if ((esc_end - esc_start) < (sizeof(tesc) - 2)) - { - strncpy(tesc, esc_start, esc_end - esc_start + 1); - tesc[esc_end - esc_start + 1] = 0; - } - str = evas_textblock_escape_string_get(tesc); - if (str) fputs(str, f); // FIXME: catch error - esc_start = esc_end = NULL; - } - else if (*p == 0) - { - fwrite(s, p - s, 1, f); // FIXME: catch error - s = NULL; - } - if (*p == 0) - break; - } - if (*p == '<') - { - if (!esc_start) - { - tag_start = p; - tag_end = NULL; - fwrite(s, p - s, 1, f); // FIXME: catch error - s = NULL; - } - } - else if (*p == '>') - { - if (tag_start) - { - tag_end = p; - s = p + 1; - } - } - else if (*p == '&') - { - if (!tag_start) - { - esc_start = p; - esc_end = NULL; - fwrite(s, p - s, 1, f); // FIXME: catch error - s = NULL; - } - } - else if (*p == ';') - { - if (esc_start) - { - esc_end = p; - s = p + 1; - } - } - p++; - } - fclose(f); } static void Modified: trunk/TMP/st/elementary/src/lib/elm_entry.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_entry.c 2009-01-26 23:49:33 UTC (rev 38802) +++ trunk/TMP/st/elementary/src/lib/elm_entry.c 2009-01-27 00:44:29 UTC (rev 38803) @@ -791,3 +791,15 @@ wd->have_selection = 1; edje_object_part_text_select_all(wd->ent, "elm.text"); } + +EAPI char * +elm_entry_markup_to_utf8(const char *s) +{ + return _mkup_to_text(s); +} + +EAPI char * +elm_entry_utf8_to_markup(const char *s) +{ + return _text_to_mkup(s); +} |
From: Enlightenment S. <no-...@en...> - 2009-02-03 05:09:09
|
Log: allow for all widgets.objects to have different scaling factors. add tests for these add tests for inheriting scaling factor from parent fix test app to use list now instead of box+buttons (cleaner) Author: raster Date: 2009-02-02 21:09:03 -0800 (Mon, 02 Feb 2009) New Revision: 38909 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_bg.c trunk/TMP/st/elementary/src/lib/elm_bubble.c trunk/TMP/st/elementary/src/lib/elm_button.c trunk/TMP/st/elementary/src/lib/elm_carousel.c trunk/TMP/st/elementary/src/lib/elm_clock.c trunk/TMP/st/elementary/src/lib/elm_entry.c trunk/TMP/st/elementary/src/lib/elm_frame.c trunk/TMP/st/elementary/src/lib/elm_hover.c trunk/TMP/st/elementary/src/lib/elm_icon.c trunk/TMP/st/elementary/src/lib/elm_label.c trunk/TMP/st/elementary/src/lib/elm_layout.c trunk/TMP/st/elementary/src/lib/elm_main.c trunk/TMP/st/elementary/src/lib/elm_photo.c trunk/TMP/st/elementary/src/lib/elm_priv.h trunk/TMP/st/elementary/src/lib/elm_scroller.c trunk/TMP/st/elementary/src/lib/elm_toggle.c trunk/TMP/st/elementary/src/lib/elm_widget.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -733,8 +733,7 @@ elm_box_pack_end(bx, bx2); evas_object_show(bx2); - // FIXME: not exported - elm_widget_focus_set(win, 1); + elm_object_focus(win); evas_object_show(win); } @@ -854,8 +853,7 @@ evas_object_resize(win, 320, 300); - // FIXME: not exported - elm_widget_focus_set(win, 1); + elm_object_focus(win); evas_object_show(win); } @@ -951,8 +949,7 @@ evas_object_resize(win, 320, 300); - // FIXME: not exported - elm_widget_focus_set(win, 1); + elm_object_focus(win); evas_object_show(win); } @@ -1056,8 +1053,7 @@ evas_object_resize(win, 320, 300); - // FIXME: not exported - elm_widget_focus_set(win, 1); + elm_object_focus(win); evas_object_show(win); } @@ -1242,8 +1238,7 @@ evas_object_resize(win, 320, 300); - // FIXME: not exported - elm_widget_focus_set(win, 1); + elm_object_focus(win); evas_object_show(win); } @@ -1770,263 +1765,305 @@ } static void +my_bt_24(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *inwin, *lb; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "inwin", ELM_WIN_BASIC); + elm_win_title_set(win, "Inwin"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + inwin = elm_win_inwin_add(win); + evas_object_show(inwin); + + lb = elm_label_add(win); + elm_label_label_set(lb, + "This is an \"inwin\" - a window in a<br>" + "window. This is handy for quick popups<br>" + "you want centered, taking over the window<br>" + "until dismissed somehow. Unlike hovers they<br>" + "don't hover over their target."); + elm_win_inwin_content_set(inwin, lb); + evas_object_show(lb); + + evas_object_resize(win, 320, 240); + evas_object_show(win); +} + +static void +my_bt_25(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *inwin, *lb; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "inwin", ELM_WIN_BASIC); + elm_win_title_set(win, "Inwin"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + inwin = elm_win_inwin_add(win); + elm_win_inwin_style_set(inwin, "minimal_vertical"); + evas_object_show(inwin); + + lb = elm_label_add(win); + elm_label_label_set(lb, + "This is an \"inwin\" - a window in a<br>" + "window. This is handy for quick popups<br>" + "you want centered, taking over the window<br>" + "until dismissed somehow. Unlike hovers they<br>" + "don't hover over their target.<br>" + "<br>" + "This inwin style compacts itself vertically<br>" + "to the size of its contents minimum size."); + elm_win_inwin_content_set(inwin, lb); + evas_object_show(lb); + + evas_object_resize(win, 320, 240); + evas_object_show(win); +} + +static void +my_bt_26(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *bx, *bt; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "scaling", ELM_WIN_BASIC); + elm_win_title_set(win, "Scaling"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Scale: 0.5"); + elm_object_scale_set(bt, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Scale: 0.75"); + elm_object_scale_set(bt, 0.75); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Scale: 1.0"); + elm_object_scale_set(bt, 1.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Scale: 1.5"); + elm_object_scale_set(bt, 1.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Scale: 2.0"); + elm_object_scale_set(bt, 2.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Scale: 3.0"); + elm_object_scale_set(bt, 3.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + evas_object_resize(win, 320, 320); + evas_object_show(win); +} + +static void +my_bt_27(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *bx, *fr, *lb; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "scaling", ELM_WIN_BASIC); + elm_win_title_set(win, "Scaling"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + fr = elm_frame_add(win); + elm_object_scale_set(fr, 0.5); + elm_frame_label_set(fr, "Scale: 0.5"); + lb = elm_label_add(win); + elm_label_label_set(lb, + "Parent frame scale<br>" + "is 0.5. Child should<br>" + "inherit it."); + elm_frame_content_set(fr, lb); + evas_object_show(lb); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + fr = elm_frame_add(win); + elm_frame_label_set(fr, "Scale: 1.0"); + lb = elm_label_add(win); + elm_label_label_set(lb, + "Parent frame scale<br>" + "is 1.0. Child should<br>" + "inherit it."); + elm_frame_content_set(fr, lb); + evas_object_show(lb); + elm_object_scale_set(fr, 1.0); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + fr = elm_frame_add(win); + elm_frame_label_set(fr, "Scale: 2.0"); + lb = elm_label_add(win); + elm_label_label_set(lb, + "Parent frame scale<br>" + "is 2.0. Child should<br>" + "inherit it."); + elm_frame_content_set(fr, lb); + evas_object_show(lb); + elm_object_scale_set(fr, 2.0); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + evas_object_resize(win, 320, 320); + evas_object_show(win); +} + +static void my_win_main(void) { - Evas_Object *win, *bg, *bx0, *lb, *bx, *bt, *sc, *fr; + Evas_Object *win, *bg, *bx0, *lb, *li, *fr; - /* 1 create an elm window - it returns an evas object. this is a little - * special as the object lives in the canvas that is inside the window - * so what is returned is really inside the window, but as you manipulate - * the evas object returned - the window will respond. elm_win makes sure - * of that so you can blindly treat it like any other evas object - * pretty much, just as long as you know it has special significance */ - /* the first parameter is a "parent" window - eg for a dialog you want to - * have a main window it is related to, here it is NULL meaning there - * is no parent. "main" is the name of the window - used by the window - * manager for identifying the window uniquely amongst all the windows - * within this application (and all instances of the application). the - * type is a basic window (the final parameter) */ - win = elm_win_add(NULL, "main", ELM_WIN_BASIC); - /* set the title of the window - this is in the titlebar */ - elm_win_title_set(win, "Elementary Tests"); - - /* set a callback on the window when "delete-request" is emitted as - * a callback. when this happens my_win_del() is called and the - * data pointer (first param) is passed the final param here (in this - * case it is NULL). This is how you can pass specific things to a - * callback like objects or data layered on top */ - evas_object_smart_callback_add(win, "delete-request", my_win_del, NULL); - - /* add a background to our window. this just uses the standard theme set - * background. without a backgorund, you could make a window seem - * transparent with elm_win_alpha_set(win, 1); for example. if you have - * a compositor running this will make the window able to be - * semi-transparent and any space not filled by object/widget pixels will - * be transparent or translucent based on alpha. if you do not have a - * comnpositor running this should fall back to using shaped windows - * (which have a mask). both these features will be slow and rely on - * a lot more resources, so only use it if you need it. */ - bg = elm_bg_add(win); - /* set weight to 1.0 x 1.0 == expand in both x and y direction */ - evas_object_size_hint_weight_set(bg, 1.0, 1.0); - /* tell the window that this object is to be resized along with the window. - * also as a result this object will be one of several objects that - * controls the minimum/maximum size of the window */ - elm_win_resize_object_add(win, bg); - /* and show the background */ - evas_object_show(bg); - - /* add a box layout widget to the window */ - bx0 = elm_box_add(win); - /* allow base box (bx0) to expand in x and y */ - evas_object_size_hint_weight_set(bx0, 1.0, 1.0); - /* tell the window that the box affects window size and also will be - * resized when the window is */ - elm_win_resize_object_add(win, bx0); - evas_object_show(bx0); - - fr = elm_frame_add(win); - elm_frame_label_set(fr, "Information"); - elm_box_pack_end(bx0, fr); - evas_object_show(fr); - - lb = elm_label_add(win); - elm_label_label_set(lb, - "Please slect a test from the list below<br>" - "by clicking the test button to show the<br>" - "test window."); - elm_frame_content_set(fr, lb); - evas_object_show(lb); - - /* add a scroller object - anything inside is scrollable */ - sc = elm_scroller_add(win); - /* add scroller to main box */ - evas_object_size_hint_weight_set(sc, 1.0, 1.0); - evas_object_size_hint_align_set(sc, -1.0, -1.0); - elm_box_pack_end(bx0, sc); - evas_object_show(sc); - - /* add a box layout widget to the window */ - bx = elm_box_add(win); - /* set weight to 1.0 x 0.0 == expand in x and not in y) */ - evas_object_size_hint_weight_set(bx, 1.0, 0.0); - - /* set the box ad the content in the scrolled view*/ - elm_scroller_content_set(sc, bx); - /* show the box, scroller and main box */ - evas_object_show(bx); - - /* create a button */ - bt = elm_button_add(win); - /* set the button label */ - elm_button_label_set(bt, "Bg Plain"); - /* add a callback to be run when the button is clicked */ - evas_object_smart_callback_add(bt, "clicked", my_bt_1, NULL); - /* the button should fill any space it is given horizontally */ - evas_object_size_hint_align_set(bt, -1.0, 0.0); - /* put the button at the end of the box */ - elm_box_pack_end(bx, bt); - /* show the button */ - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Bg Image"); - evas_object_smart_callback_add(bt, "clicked", my_bt_2, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Icon Transparent"); - evas_object_smart_callback_add(bt, "clicked", my_bt_3, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Box Vert"); - evas_object_smart_callback_add(bt, "clicked", my_bt_4, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Box Horiz"); - evas_object_smart_callback_add(bt, "clicked", my_bt_5, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Buttons"); - evas_object_smart_callback_add(bt, "clicked", my_bt_6, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Toggles"); - evas_object_smart_callback_add(bt, "clicked", my_bt_7, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Table"); - evas_object_smart_callback_add(bt, "clicked", my_bt_8, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Clock"); - evas_object_smart_callback_add(bt, "clicked", my_bt_9, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Layout"); - evas_object_smart_callback_add(bt, "clicked", my_bt_10, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Hover"); - evas_object_smart_callback_add(bt, "clicked", my_bt_11, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Hover 2"); - evas_object_smart_callback_add(bt, "clicked", my_bt_12, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Entry"); - evas_object_smart_callback_add(bt, "clicked", my_bt_13, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Entry Scrolled"); - evas_object_smart_callback_add(bt, "clicked", my_bt_14, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Notepad"); - evas_object_smart_callback_add(bt, "clicked", my_bt_15, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Anchorview"); - evas_object_smart_callback_add(bt, "clicked", my_bt_16, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Anchorblock"); - evas_object_smart_callback_add(bt, "clicked", my_bt_17, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Toolbar"); - evas_object_smart_callback_add(bt, "clicked", my_bt_18, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Hoversel"); - evas_object_smart_callback_add(bt, "clicked", my_bt_19, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "List"); - evas_object_smart_callback_add(bt, "clicked", my_bt_20, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "List 2"); - evas_object_smart_callback_add(bt, "clicked", my_bt_21, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "List 3"); - evas_object_smart_callback_add(bt, "clicked", my_bt_22, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - bt = elm_button_add(win); - elm_button_label_set(bt, "Carousel"); - evas_object_smart_callback_add(bt, "clicked", my_bt_23, NULL); - evas_object_size_hint_align_set(bt, -1.0, 0.0); - elm_box_pack_end(bx, bt); - evas_object_show(bt); - - /* set an initial window size */ - evas_object_resize(win, 320, 520); - /* show the window */ - evas_object_show(win); + /* 1 create an elm window - it returns an evas object. this is a little + * special as the object lives in the canvas that is inside the window + * so what is returned is really inside the window, but as you manipulate + * the evas object returned - the window will respond. elm_win makes sure + * of that so you can blindly treat it like any other evas object + * pretty much, just as long as you know it has special significance */ + /* the first parameter is a "parent" window - eg for a dialog you want to + * have a main window it is related to, here it is NULL meaning there + * is no parent. "main" is the name of the window - used by the window + * manager for identifying the window uniquely amongst all the windows + * within this application (and all instances of the application). the + * type is a basic window (the final parameter) */ + win = elm_win_add(NULL, "main", ELM_WIN_BASIC); + /* set the title of the window - this is in the titlebar */ + elm_win_title_set(win, "Elementary Tests"); + + /* set a callback on the window when "delete-request" is emitted as + * a callback. when this happens my_win_del() is called and the + * data pointer (first param) is passed the final param here (in this + * case it is NULL). This is how you can pass specific things to a + * callback like objects or data layered on top */ + evas_object_smart_callback_add(win, "delete-request", my_win_del, NULL); + + /* add a background to our window. this just uses the standard theme set + * background. without a backgorund, you could make a window seem + * transparent with elm_win_alpha_set(win, 1); for example. if you have + * a compositor running this will make the window able to be + * semi-transparent and any space not filled by object/widget pixels will + * be transparent or translucent based on alpha. if you do not have a + * comnpositor running this should fall back to using shaped windows + * (which have a mask). both these features will be slow and rely on + * a lot more resources, so only use it if you need it. */ + bg = elm_bg_add(win); + /* set weight to 1.0 x 1.0 == expand in both x and y direction */ + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + /* tell the window that this object is to be resized along with the window. + * also as a result this object will be one of several objects that + * controls the minimum/maximum size of the window */ + elm_win_resize_object_add(win, bg); + /* and show the background */ + evas_object_show(bg); + + /* add a box layout widget to the window */ + bx0 = elm_box_add(win); + /* allow base box (bx0) to expand in x and y */ + evas_object_size_hint_weight_set(bx0, 1.0, 1.0); + /* tell the window that the box affects window size and also will be + * resized when the window is */ + elm_win_resize_object_add(win, bx0); + evas_object_show(bx0); + + fr = elm_frame_add(win); + elm_frame_label_set(fr, "Information"); + elm_box_pack_end(bx0, fr); + evas_object_show(fr); + + lb = elm_label_add(win); + elm_label_label_set(lb, + "Please slect a test from the list below<br>" + "by clicking the test button to show the<br>" + "test window."); + elm_frame_content_set(fr, lb); + evas_object_show(lb); + + li = elm_list_add(win); + evas_object_size_hint_weight_set(li, 1.0, 1.0); + evas_object_size_hint_align_set(li, -1.0, -1.0); + elm_box_pack_end(bx0, li); + evas_object_show(li); + + elm_list_item_append(li, "Bg Plain", NULL, NULL, my_bt_1, NULL); + elm_list_item_append(li, "Bg Image", NULL, NULL, my_bt_2, NULL); + elm_list_item_append(li, "Icon Transparent", NULL, NULL, my_bt_3, NULL); + elm_list_item_append(li, "Box Vert", NULL, NULL, my_bt_4, NULL); + elm_list_item_append(li, "Box Horiz", NULL, NULL, my_bt_5, NULL); + elm_list_item_append(li, "Buttons", NULL, NULL, my_bt_6, NULL); + elm_list_item_append(li, "Toggles", NULL, NULL, my_bt_7, NULL); + elm_list_item_append(li, "Table", NULL, NULL, my_bt_8, NULL); + elm_list_item_append(li, "Clock", NULL, NULL, my_bt_9, NULL); + elm_list_item_append(li, "Layout", NULL, NULL, my_bt_10, NULL); + elm_list_item_append(li, "Hover", NULL, NULL, my_bt_11, NULL); + elm_list_item_append(li, "Hover 2", NULL, NULL, my_bt_12, NULL); + elm_list_item_append(li, "Entry", NULL, NULL, my_bt_13, NULL); + elm_list_item_append(li, "Entry Scrolled", NULL, NULL, my_bt_14, NULL); + elm_list_item_append(li, "Notepad", NULL, NULL, my_bt_15, NULL); + elm_list_item_append(li, "Anchorview", NULL, NULL, my_bt_16, NULL); + elm_list_item_append(li, "Anchorblock", NULL, NULL, my_bt_17, NULL); + elm_list_item_append(li, "Toolbar", NULL, NULL, my_bt_18, NULL); + elm_list_item_append(li, "Hoversel", NULL, NULL, my_bt_19, NULL); + elm_list_item_append(li, "List", NULL, NULL, my_bt_20, NULL); + elm_list_item_append(li, "List 2", NULL, NULL, my_bt_21, NULL); + elm_list_item_append(li, "List 3", NULL, NULL, my_bt_22, NULL); + elm_list_item_append(li, "Carousel", NULL, NULL, my_bt_23, NULL); + elm_list_item_append(li, "Inwin", NULL, NULL, my_bt_24, NULL); + elm_list_item_append(li, "Inwin 2", NULL, NULL, my_bt_25, NULL); + elm_list_item_append(li, "Scaling", NULL, NULL, my_bt_26, NULL); + elm_list_item_append(li, "Scaling 2", NULL, NULL, my_bt_27, NULL); + + elm_list_go(li); + + /* set an initial window size */ + evas_object_resize(win, 320, 520); + /* show the window */ + evas_object_show(win); } /* this is your elementary main function - it MUSt be called IMMEDIATELY Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-03 05:09:03 UTC (rev 38909) @@ -140,6 +140,10 @@ EAPI void elm_run(void); EAPI void elm_exit(void); + EAPI void elm_object_scale_set(Evas_Object *obj, double scale); + EAPI double elm_object_scale_get(Evas_Object *obj); + EAPI void elm_object_focus(Evas_Object *obj); + EAPI Evas_Object *elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type); EAPI void elm_win_resize_object_add(Evas_Object *obj, Evas_Object *subobj); EAPI void elm_win_resize_object_del(Evas_Object *obj, Evas_Object *subobj); @@ -494,12 +498,16 @@ // * when entries are in a scroller and change size, the scroller shows scrollbars. fix. same for selecting. for 1 line entries in a scroller should only have scroll arrow indicators. // //// (more widgets/features - medium priority) +// * selective widget scaling +// * slider widget +// * <evas scale cache> +// * radio + group handling +// * checkbox (like toggle) +// * pager (for pushing/popping pages and going back and forward and flipping) +// * <edje copy & paste fixed> // * biglist widget (restricted format label + icon intended for massive lists) // * treeview widget (like biglist - but items can expand to sub-items) -// * radio widget + group handling -// * checkbox widget (like toggle) -// * page widget (for pushing/popping pages and going back and forward and flipping) -// * slider widget +// * <evas shared cache> // // * carousel selector widget // * separator widget (h/v) Modified: trunk/TMP/st/elementary/src/lib/elm_bg.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_bg.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_bg.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -26,6 +26,7 @@ { Widget_Data *wd = elm_widget_data_get(obj); _elm_theme_set(wd->img, "bg", "base", "default"); + _els_smart_icon_scale_set(wd->img, elm_widget_scale_get(obj) * _elm_config->scale); } static void Modified: trunk/TMP/st/elementary/src/lib/elm_bubble.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_bubble.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_bubble.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -32,6 +32,7 @@ _elm_theme_set(wd->bbl, "bubble", "base", "default"); edje_object_part_text_set(wd->bbl, "elm.text", wd->label); edje_object_part_text_set(wd->bbl, "elm.info", wd->info); + edje_object_scale_set(wd->bbl, elm_widget_scale_get(obj) * _elm_config->scale); _sizing_eval(obj); } Modified: trunk/TMP/st/elementary/src/lib/elm_button.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_button.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_button.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -47,6 +47,7 @@ edje_object_signal_emit(wd->btn, "elm,state,icon,hidden", "elm"); edje_object_part_text_set(wd->btn, "elm.text", wd->label); edje_object_message_signal_process(wd->btn); + edje_object_scale_set(wd->btn, elm_widget_scale_get(obj) * _elm_config->scale); _sizing_eval(obj); } Modified: trunk/TMP/st/elementary/src/lib/elm_carousel.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_carousel.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_carousel.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -85,6 +85,7 @@ if (it->selected) edje_object_signal_emit(it->base, "elm,state,selected", "elm"); _elm_theme_set(it->base, "carousel", "item", "default"); + edje_object_scale_set(it->base, elm_widget_scale_get(obj) * _elm_config->scale); if (it->icon) { edje_extern_object_min_size_set(it->icon, Modified: trunk/TMP/st/elementary/src/lib/elm_clock.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_clock.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_clock.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -47,6 +47,7 @@ _theme_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + int i; wd->cur.am_pm = !wd->cur.am_pm; /* hack - force update */ _time_update(obj); } @@ -204,6 +205,7 @@ _elm_theme_set(wd->clk, "clock", "base-am_pm", "default"); else _elm_theme_set(wd->clk, "clock", "base", "default"); + edje_object_scale_set(wd->clk, elm_widget_scale_get(obj) * _elm_config->scale); for (i = 0; i < 6; i++) { @@ -212,6 +214,7 @@ if ((!wd->seconds) && (i >= 4)) break; wd->digit[i] = edje_object_add(evas_object_evas_get(wd->clk)); _elm_theme_set(wd->digit[i], "clock", "flipdigit", "default"); + edje_object_scale_set(wd->digit[i], elm_widget_scale_get(obj) * _elm_config->scale); if (wd->edit) edje_object_signal_emit(wd->digit[i], "elm,state,edit,on", "elm"); edje_object_signal_callback_add(wd->digit[i], "elm,action,up", "", @@ -228,6 +231,7 @@ { wd->ampm = edje_object_add(evas_object_evas_get(wd->clk)); _elm_theme_set(wd->ampm, "clock", "flipampm", "default"); + edje_object_scale_set(wd->ampm, elm_widget_scale_get(obj) * _elm_config->scale); if (wd->edit) edje_object_signal_emit(wd->ampm, "elm,state,edit,on", "elm"); edje_object_signal_callback_add(wd->ampm, "elm,action,up", "", Modified: trunk/TMP/st/elementary/src/lib/elm_entry.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_entry.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_entry.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -61,6 +61,7 @@ _elm_theme_set(wd->ent, "entry", _getbase(obj), "default"); elm_entry_entry_set(obj, t); if (t) free(t); + edje_object_scale_set(wd->ent, elm_widget_scale_get(obj) * _elm_config->scale); _sizing_eval(obj); } Modified: trunk/TMP/st/elementary/src/lib/elm_frame.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_frame.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_frame.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -32,6 +32,7 @@ else _elm_theme_set(wd->frm, "frame", "base", "default"); if (wd->content) edje_object_part_swallow(wd->frm, "elm.swallow.content", wd->content); + edje_object_scale_set(wd->frm, elm_widget_scale_get(obj) * _elm_config->scale); _sizing_eval(obj); } Modified: trunk/TMP/st/elementary/src/lib/elm_hover.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_hover.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_hover.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -69,6 +69,7 @@ // FIXME: hover contents doesnt seem to propagate resizes properly if (wd->style) _elm_theme_set(wd->cov, "hover", "base", wd->style); else _elm_theme_set(wd->cov, "hover", "base", "default"); + edje_object_scale_set(wd->cov, elm_widget_scale_get(obj) * _elm_config->scale); _reval_content(obj); _sizing_eval(obj); if (evas_object_visible_get(wd->cov)) _hov_show_do(obj); @@ -99,7 +100,7 @@ for (l = wd->subs; l; l = l->next) { Subinfo *si = l->data; - edje_object_part_swallow(wd->hov, si->swallow, si->obj); + edje_object_part_swallow(wd->cov, si->swallow, si->obj); } } @@ -113,7 +114,7 @@ Subinfo *si = l->data; if (si->obj == obj) { - edje_object_part_swallow(wd->hov, si->swallow, si->obj); + edje_object_part_swallow(wd->cov, si->swallow, si->obj); break; } } Modified: trunk/TMP/st/elementary/src/lib/elm_icon.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_icon.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_icon.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -54,7 +54,7 @@ if (wd->no_scale) _els_smart_icon_scale_set(wd->img, 1.0); else { - _els_smart_icon_scale_set(wd->img, _elm_config->scale); + _els_smart_icon_scale_set(wd->img, elm_widget_scale_get(obj) * _elm_config->scale); _els_smart_icon_size_get(wd->img, &w, &h); } if (!wd->scale_down) Modified: trunk/TMP/st/elementary/src/lib/elm_label.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_label.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_label.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -27,6 +27,7 @@ Widget_Data *wd = elm_widget_data_get(obj); _elm_theme_set(wd->lbl, "label", "base", "default"); edje_object_part_text_set(wd->lbl, "elm.text", wd->label); + edje_object_scale_set(wd->lbl, elm_widget_scale_get(obj) * _elm_config->scale); _sizing_eval(obj); } Modified: trunk/TMP/st/elementary/src/lib/elm_layout.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_layout.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_layout.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -39,6 +39,8 @@ static void _theme_hook(Evas_Object *obj) { + Widget_Data *wd = elm_widget_data_get(obj); + edje_object_scale_set(wd->lay, elm_widget_scale_get(obj) * _elm_config->scale); _sizing_eval(obj); } Modified: trunk/TMP/st/elementary/src/lib/elm_main.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_main.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_main.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -294,3 +294,21 @@ { ecore_main_loop_quit(); } + +EAPI void +elm_object_scale_set(Evas_Object *obj, double scale) +{ + return elm_widget_scale_set(obj, scale); +} + +EAPI double +elm_object_scale_get(Evas_Object *obj) +{ + return elm_widget_scale_get(obj); +} + +EAPI void +elm_object_focus(Evas_Object *obj) +{ + elm_widget_focus_set(obj, 1); +} Modified: trunk/TMP/st/elementary/src/lib/elm_photo.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_photo.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_photo.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -25,6 +25,8 @@ static void _theme_hook(Evas_Object *obj) { + Widget_Data *wd = elm_widget_data_get(obj); + edje_object_scale_set(wd->frm, elm_widget_scale_get(obj) * _elm_config->scale); _sizing_eval(obj); } @@ -35,8 +37,8 @@ Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1; evas_object_size_hint_min_set(wd->img, - wd->size * _elm_config->scale, - wd->size * _elm_config->scale); + wd->size * elm_widget_scale_get(obj) * _elm_config->scale, + wd->size * elm_widget_scale_get(obj) * _elm_config->scale); edje_object_part_swallow(wd->frm, "elm.swallow.content", wd->img); edje_object_size_min_calc(wd->frm, &minw, &minh); maxw = minw; @@ -75,7 +77,7 @@ _els_smart_icon_scale_down_set(wd->img, 1); _els_smart_icon_smooth_scale_set(wd->img, 1); _els_smart_icon_fill_inside_set(wd->img, 0); - _els_smart_icon_scale_set(wd->img, _elm_config->scale); + _els_smart_icon_scale_set(wd->img, elm_widget_scale_get(obj) * _elm_config->scale); evas_object_event_callback_add(wd->img, EVAS_CALLBACK_MOUSE_UP, _mouse_up, obj); evas_object_repeat_events_set(wd->img, 1); Modified: trunk/TMP/st/elementary/src/lib/elm_priv.h =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_priv.h 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_priv.h 2009-02-03 05:09:03 UTC (rev 38909) @@ -92,7 +92,9 @@ EAPI void elm_widget_scroll_hold_push(Evas_Object *obj); EAPI void elm_widget_scroll_hold_pop(Evas_Object *obj); EAPI int elm_widget_scroll_hold_get(Evas_Object *obj); - +EAPI void elm_widget_scale_set(Evas_Object *obj, double scale); +EAPI double elm_widget_scale_get(Evas_Object *obj); + extern char *_elm_appname; extern Elm_Config *_elm_config; extern const char *_elm_data_dir; Modified: trunk/TMP/st/elementary/src/lib/elm_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_scroller.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_scroller.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -29,6 +29,7 @@ { Widget_Data *wd = elm_widget_data_get(obj); elm_smart_scroller_theme_set(wd->scr, "scroller", "base", "default"); + edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale); _sizing_eval(obj); } Modified: trunk/TMP/st/elementary/src/lib/elm_toggle.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_toggle.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_toggle.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -52,6 +52,7 @@ edje_object_part_text_set(wd->tgl, "elm.ontext", wd->ontext); edje_object_part_text_set(wd->tgl, "elm.offtext", wd->offtext); edje_object_message_signal_process(wd->tgl); + edje_object_scale_set(wd->tgl, elm_widget_scale_get(obj) * _elm_config->scale); _sizing_eval(obj); } Modified: trunk/TMP/st/elementary/src/lib/elm_widget.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_widget.c 2009-02-03 05:07:58 UTC (rev 38908) +++ trunk/TMP/st/elementary/src/lib/elm_widget.c 2009-02-03 05:09:03 UTC (rev 38909) @@ -2,8 +2,15 @@ #include "elm_priv.h" #define SMART_NAME "e_widget" -#define API_ENTRY Smart_Data *sd = evas_object_smart_data_get(obj); if ((!obj) || (!sd) || (evas_object_type_get(obj) && strcmp(evas_object_type_get(obj), SMART_NAME))) -#define INTERNAL_ENTRY Smart_Data *sd = evas_object_smart_data_get(obj); if (!sd) return; +#define API_ENTRY \ + Smart_Data *sd = evas_object_smart_data_get(obj); \ + if ((!obj) || (!sd) || \ + (evas_object_type_get(obj) && \ + strcmp(evas_object_type_get(obj), SMART_NAME))) +#define INTERNAL_ENTRY \ + Smart_Data *sd = evas_object_smart_data_get(obj); \ + if (!sd) return; + typedef struct _Smart_Data Smart_Data; struct _Smart_Data @@ -29,6 +36,7 @@ void *data; Evas_Coord rx, ry, rw, rh; int scroll_hold; + double scale; unsigned char can_focus : 1; unsigned char child_can_focus : 1; unsigned char focused : 1; @@ -180,6 +188,7 @@ elm_widget_sub_object_add(Evas_Object *obj, Evas_Object *sobj) { API_ENTRY return; + double scale, pscale = elm_widget_scale_get(sobj); sd->subobjs = eina_list_append(sd->subobjs, sobj); if (!sd->child_can_focus) { @@ -196,6 +205,8 @@ } evas_object_event_callback_add(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd); evas_object_smart_callback_call(obj, "sub-object-add", sobj); + scale = elm_widget_scale_get(sobj); + if (scale != pscale) elm_widget_theme(sobj); } EAPI void @@ -694,6 +705,26 @@ return sd->scroll_hold; } +EAPI void +elm_widget_scale_set(Evas_Object *obj, double scale) +{ + API_ENTRY return; + if (scale <= 0.0) scale = 0.0; + if (sd->scale != scale) + { + sd->scale = scale; + elm_widget_theme(obj); + } +} + +EAPI double +elm_widget_scale_get(Evas_Object *obj) +{ + API_ENTRY return 1.0; + if (sd->scale == 0.0) return elm_widget_scale_get(sd->parent_obj); + return sd->scale; +} + /* local subsystem functions */ static void _smart_reconfigure(Smart_Data *sd) |
From: Enlightenment S. <no-...@en...> - 2009-02-17 07:50:45
|
Log: more genlist testing - deletign items works. not perfect - but working... in small tests. Author: raster Date: 2009-02-16 23:50:35 -0800 (Mon, 16 Feb 2009) New Revision: 39056 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_genlist.c trunk/TMP/st/elementary/src/lib/elm_list.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-17 06:39:56 UTC (rev 39055) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-17 07:50:35 UTC (rev 39056) @@ -2077,6 +2077,12 @@ } static void +gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + printf("sel item data [%p] on genlist obj [%p], item pointer [%p]\n", data, obj, event_info); +} + +static void my_bt_29(void *data, Evas_Object *obj, void *event_info) { Evas_Object *win, *bg, *gl; @@ -2105,15 +2111,110 @@ for (i = 0; i < 10000; i++) { - gli = elm_genlist_item_append(gl, &itc1, (void *)i/* item data */, - NULL/* parent */, ELM_GENLIST_ITEM_NONE, - NULL/* func */, NULL/* func data */); + gli = elm_genlist_item_append(gl, &itc1, + (void *)i/* item data */, + NULL/* parent */, + ELM_GENLIST_ITEM_NONE, + gl_sel/* func */, + (void *)(i * 10)/* func data */); } evas_object_resize(win, 320, 320); evas_object_show(win); } static void +my_gl_add(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *gl = data; + Elm_Genlist_Item *gli; + static int i = 0; + + itc1.style = "default"; + itc1.func.label_get = gl_label_get; + itc1.func.icon_get = gl_icon_get; + itc1.func.state_get = gl_state_get; + itc1.func.del = gl_del; + + gli = elm_genlist_item_append(gl, &itc1, + (void *)i/* item data */, + NULL/* parent */, + ELM_GENLIST_ITEM_NONE, + gl_sel/* func */, + (void *)(i * 10)/* func data */); + i++; +} + +static void +my_gl_del(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *gl = data; + Elm_Genlist_Item *gli = elm_genlist_selected_item_get(gl); + if (!gli) + { + printf("no item selected\n"); + return; + } + elm_genlist_item_del(gli); +} + +static void +my_bt_30(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *gl, *bx, *bx2, *bt; + int i; + + win = elm_win_add(NULL, "genlist-2", ELM_WIN_BASIC); + elm_win_title_set(win, "Genlist 2"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + gl = elm_genlist_add(win); + evas_object_size_hint_align_set(gl, -1.0, -1.0); + evas_object_size_hint_weight_set(gl, 1.0, 1.0); + evas_object_show(gl); + + elm_box_pack_end(bx, gl); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, 1); + elm_box_homogenous_set(bx2, 1); + evas_object_size_hint_weight_set(bx2, 1.0, 0.0); + evas_object_size_hint_align_set(bx2, -1.0, -1.0); + + bt = elm_button_add(win); + elm_button_label_set(bt, "[+]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_add, gl); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "[-]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_del, gl); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 320); + evas_object_show(win); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *li, *fr; @@ -2217,6 +2318,7 @@ elm_list_item_append(li, "Scaling 2", NULL, NULL, my_bt_27, NULL); elm_list_item_append(li, "Slider", NULL, NULL, my_bt_28, NULL); elm_list_item_append(li, "Genlist", NULL, NULL, my_bt_29, NULL); + elm_list_item_append(li, "Genlist 2", NULL, NULL, my_bt_30, NULL); elm_list_go(li); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-17 06:39:56 UTC (rev 39055) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-17 07:50:35 UTC (rev 39056) @@ -515,13 +515,25 @@ }; EAPI Evas_Object *elm_genlist_add(Evas_Object *parent); - EAPI Elm_Genlist_Item * - elm_genlist_item_append(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, - const void *data, Elm_Genlist_Item *parent, - Elm_Genlist_Item_Flags flags, - void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data); + EAPI Elm_Genlist_Item *elm_genlist_item_append(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data); + EAPI const Elm_Genlist_Item *elm_genlist_selected_item_get(Evas_Object *obj); + EAPI const Eina_List *elm_genlist_selected_items_get(Evas_Object *obj); + EAPI const Elm_Genlist_Item *elm_genlist_first_item_get(Evas_Object *obj); + EAPI const Elm_Genlist_Item *elm_genlist_last_item_get(Evas_Object *obj); + EAPI const Elm_Genlist_Item *elm_genlist_item_next_get(Elm_Genlist_Item *item); + EAPI const Elm_Genlist_Item *elm_genlist_item_prev_get(Elm_Genlist_Item *item); + EAPI void elm_genlist_item_selected_set(Elm_Genlist_Item *item, Evas_Bool selected); + EAPI void elm_genlist_item_del(Elm_Genlist_Item *item); + EAPI const void *elm_genlist_item_data_get(Elm_Genlist_Item *item); + /* smart callbacks called: + * "clicked" - the user clicked the hoversel button and popped up the sel + * "selected" - an item in the hoversel list is selected + * "dismissed" - the hover is dismissed */ + + /* smart callbacks called: + */ #ifdef __cplusplus } Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-17 06:39:56 UTC (rev 39055) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-17 07:50:35 UTC (rev 39056) @@ -18,6 +18,9 @@ Ecore_Job *calc_job; Ecore_Idler *queue_idler; Eina_List *queue; + Eina_List *selected; + Evas_Bool on_hold : 1; + Evas_Bool multi : 1; Evas_Bool min_w : 1; Evas_Bool min_h : 1; }; @@ -60,7 +63,6 @@ Evas_Bool disabled : 1; Evas_Bool mincalcd : 1; Evas_Bool queued : 1; - }; struct _Pan { @@ -92,6 +94,11 @@ free(itb); } */ + // free wd->items + // free wd->blocks + if (wd->selected) eina_list_free(wd->selected); + if (wd->queue) eina_list_free(wd->queue); + if (wd->calc_job) ecore_job_del(wd->calc_job); evas_object_del(wd->pan_smart); wd->pan_smart = NULL; free(wd); @@ -103,6 +110,7 @@ Widget_Data *wd = elm_widget_data_get(obj); elm_smart_scroller_theme_set(wd->scr, "scroller", "base", "default"); edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale); + // FIXME: redo items _sizing_eval(obj); } @@ -154,23 +162,8 @@ { _sizing_eval(data); } -/* + static void -_sub_del(void *data, Evas_Object *obj, void *event_info) -{ - Widget_Data *wd = elm_widget_data_get(obj); - Evas_Object *sub = event_info; - if (sub == wd->content) - { - elm_widget_on_show_region_hook_set(wd->content, NULL, NULL); - evas_object_event_callback_del - (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints); - wd->content = NULL; - _sizing_eval(obj); - } -} -*/ -static void _resize(void *data, Evas *e, Evas_Object *obj, void *event_info) { _sizing_eval(data); @@ -212,6 +205,80 @@ } static void +_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info) +{ + Item *it = data; + Evas_Event_Mouse_Down *ev = event_info; + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) it->wd->on_hold = 1; + else it->wd->on_hold = 0; + if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK) + evas_object_smart_callback_call(it->wd->obj, "clicked", it); +} + +static void +_item_select(Item *it) +{ + const char *selectraise; + if (it->selected) return; + edje_object_signal_emit(it->base, "elm,state,selected", "elm"); + selectraise = edje_object_data_get(it->base, "selectraise"); + if ((selectraise) && (!strcmp(selectraise, "on"))) + evas_object_raise(it->base); + it->selected = 1; + it->wd->selected = eina_list_append(it->wd->selected, it); + if (it->func.func) it->func.func((void *)it->func.data, it->wd->obj, it); + evas_object_smart_callback_call(it->wd->obj, "selected", it); +} + +static void +_item_unselect(Item *it) +{ + const char *stacking, *selectraise; + if (!it->selected) return; + edje_object_signal_emit(it->base, "elm,state,unselected", "elm"); + stacking = edje_object_data_get(it->base, "stacking"); + selectraise = edje_object_data_get(it->base, "selectraise"); + if ((selectraise) && (!strcmp(selectraise, "on"))) + { + if ((stacking) && (!strcmp(stacking, "below"))) + evas_object_lower(it->base); + } + it->selected = 0; + it->wd->selected = eina_list_remove(it->wd->selected, it); + evas_object_smart_callback_call(it->wd->obj, "unselected", it); +} + +static void +_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info) +{ + Item *it = data; + Evas_Event_Mouse_Up *ev = event_info; + Eina_List *l; + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) it->wd->on_hold = 1; + else it->wd->on_hold = 0; + if (it->wd->on_hold) + { + it->wd->on_hold = 0; + return; + } + if (it->wd->multi) + { + if (!it->selected) _item_select(it); + else _item_unselect(it); + } + else + { + for (l = it->wd->selected; l;) + { + Item *it2 = l->data; + l = l->next; + if ((it2 != it) && (it2->selected)) _item_unselect(it2); + } + if (!it->selected) _item_select(it); + } +} + +static void _item_realize(Item *it, int in, int calc) { const char *stacking; @@ -234,11 +301,12 @@ if (!strcmp(stacking, "below")) evas_object_lower(it->base); else if (!strcmp(stacking, "above")) evas_object_raise(it->base); } -// FIXME: hook callbacks -// evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_DOWN, -// _mouse_down, it); -// evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_UP, -// _mouse_up, it); + evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_DOWN, + _mouse_down, it); + evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_UP, + _mouse_up, it); + if (it->selected) + edje_object_signal_emit(it->base, "elm,state,selected", "elm"); } if (it->itc->func.label_get) @@ -606,9 +674,7 @@ edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr), &minw, &minh); evas_object_size_hint_min_set(obj, minw, minh); evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize, obj); -/* - evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); - */ + _sizing_eval(obj); return obj; } @@ -634,6 +700,44 @@ } static void +_item_block_del(Item *it) +{ + Eina_Inlist *il; + + it->block->items = eina_list_remove(it->block->items, it); + it->block->count--; + it->block->changed = 1; + if (it->wd->calc_job) ecore_job_del(it->wd->calc_job); + it->wd->calc_job = ecore_job_add(_calc_job, it->wd); + if (it->block->count < 1) + { + // FIXME: free block + } + for (il = (Eina_Inlist *)(it->block); il; il = il->next) + { + Item_Block *itb = (Item_Block *)il; + _item_block_unrealize(itb); + } +} + +static void +_item_del(Item *it) +{ + if (it->selected) it->wd->selected = eina_list_remove(it->wd->selected, it); + if (it->itc->func.del) it->itc->func.del(it->data, it->wd->obj); + if (it->realized) _item_unrealize(it); + if (it->block) _item_block_del(it); + // FIXME: del it->subblocks + // FIXME: del it->subitems + if (it->queued) + { + it->wd->queue = eina_list_remove(it->wd->queue, it); + } + it->wd->items = eina_inlist_remove(it->wd->items, (Eina_Inlist *)it); + free(it); +} + +static void _item_block_add(Widget_Data *wd, Item *it, Item *itpar, Item *itrel, int before) { Item_Block *itb; @@ -780,6 +884,8 @@ EAPI void elm_genlist_multi_select_set(Evas_Object *obj, Evas_Bool multi) { + Widget_Data *wd = elm_widget_data_get(obj); + wd->multi = multi; } EAPI const Eina_List * @@ -790,21 +896,66 @@ EAPI const Elm_Genlist_Item * elm_genlist_selected_item_get(Evas_Object *obj) { + Widget_Data *wd = elm_widget_data_get(obj); + if (wd->selected) return wd->selected->data; + return NULL; } EAPI const Eina_List * elm_genlist_selected_items_get(Evas_Object *obj) { + Widget_Data *wd = elm_widget_data_get(obj); + return wd->selected; } -EAPI const Eina_List * -elm_genlist_item_items_get(Elm_Genlist_Item *item) +EAPI const Elm_Genlist_Item * +elm_genlist_first_item_get(Evas_Object *obj) { + Widget_Data *wd = elm_widget_data_get(obj); + return (Elm_Genlist_Item *)(wd->items); } +EAPI const Elm_Genlist_Item * +elm_genlist_last_item_get(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd->items) return NULL; + return (Elm_Genlist_Item*)(wd->items->last); +} + +EAPI const Elm_Genlist_Item * +elm_genlist_item_next_get(Elm_Genlist_Item *item) +{ + return ((Eina_Inlist *)item)->next; +} + +EAPI const Elm_Genlist_Item * +elm_genlist_item_prev_get(Elm_Genlist_Item *item) +{ + return ((Eina_Inlist *)item)->prev; +} + EAPI void elm_genlist_item_selected_set(Elm_Genlist_Item *item, Evas_Bool selected) { + Item *it = (Item *)item; + Widget_Data *wd = elm_widget_data_get(it->wd->obj); + Eina_List *l; + if (selected) + { + if (!wd->multi) + { + for (l = it->wd->selected; l;) + { + Item *it2 = l->data; + l = l->next; + if ((it2 != it) && (it2->selected)) _item_unselect(it2); + } + } + if (!it->selected) _item_select(it); + } + else if (it->selected) + _item_unselect(it); } EAPI void @@ -814,30 +965,32 @@ } EAPI void -elm_genlist_item_disabld_set(Elm_Genlist_Item *item, Evas_Bool disabld) +elm_genlist_item_disabled_set(Elm_Genlist_Item *item, Evas_Bool disabled) { + // call this to set the disabled flag and update } EAPI void elm_genlist_item_show(Elm_Genlist_Item *item) { + // call this to jump to item in scroll } EAPI void elm_genlist_item_del(Elm_Genlist_Item *item) { + Item *it = (Item *)item; + if (!it) return; + _item_del(it); } EAPI const void * elm_genlist_item_data_get(Elm_Genlist_Item *item) { + Item *it = (Item *)item; + return it->data; } -EAPI const Evas_Object * -elm_genlist_item_icon_get(Elm_Genlist_Item *item) -{ -} - EAPI void elm_genlist_item_update(Elm_Genlist_Item *item) { Modified: trunk/TMP/st/elementary/src/lib/elm_list.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_list.c 2009-02-17 06:39:56 UTC (rev 39055) +++ trunk/TMP/st/elementary/src/lib/elm_list.c 2009-02-17 07:50:35 UTC (rev 39056) @@ -180,9 +180,10 @@ } else { - for (l = wd->items; l; l = l->next) + for (l = wd->selected; l;) { Item *it2 = l->data; + l = l->next; if ((it2 != it) && (it2->selected)) _item_unselect(it2); } if (!it->selected) _item_select(it); @@ -468,8 +469,12 @@ { if (!wd->multi) { - Item *it2 = l->data; - if ((it2 != it) && (it2->selected)) _item_unselect(it2); + for (l = it->selected; l;) + { + Item *it2 = l->data; + l = l->next; + if ((it2 != it) && (it2->selected)) _item_unselect(it2); + } } if (!it->selected) _item_select(it); } |
From: Enlightenment S. <no-...@en...> - 2009-02-17 14:39:13
|
Log: more genlist work. Author: raster Date: 2009-02-17 06:39:08 -0800 (Tue, 17 Feb 2009) New Revision: 39059 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_genlist.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-17 14:18:14 UTC (rev 39058) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-17 14:39:08 UTC (rev 39059) @@ -2158,6 +2158,26 @@ } static void +my_gl_first(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *gl = data; + Elm_Genlist_Item *gli = elm_genlist_first_item_get(gl); + if (!gli) return; + elm_genlist_item_show(gli); + elm_genlist_item_selected_set(gli, 1); +} + +static void +my_gl_last(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *gl = data; + Elm_Genlist_Item *gli = elm_genlist_last_item_get(gl); + if (!gli) return; + elm_genlist_item_show(gli); + elm_genlist_item_selected_set(gli, 1); +} + +static void my_bt_30(void *data, Evas_Object *obj, void *event_info) { Evas_Object *win, *bg, *gl, *bx, *bx2, *bt; @@ -2192,6 +2212,22 @@ evas_object_size_hint_align_set(bx2, -1.0, -1.0); bt = elm_button_add(win); + elm_button_label_set(bt, "[/\\]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_first, gl); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "[\\/]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_last, gl); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); elm_button_label_set(bt, "[+]"); evas_object_smart_callback_add(bt, "clicked", my_gl_add, gl); evas_object_size_hint_align_set(bt, -1.0, -1.0); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-17 14:18:14 UTC (rev 39058) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-17 14:39:08 UTC (rev 39059) @@ -523,6 +523,7 @@ EAPI const Elm_Genlist_Item *elm_genlist_item_next_get(Elm_Genlist_Item *item); EAPI const Elm_Genlist_Item *elm_genlist_item_prev_get(Elm_Genlist_Item *item); EAPI void elm_genlist_item_selected_set(Elm_Genlist_Item *item, Evas_Bool selected); + EAPI void elm_genlist_item_show(Elm_Genlist_Item *item); EAPI void elm_genlist_item_del(Elm_Genlist_Item *item); EAPI const void *elm_genlist_item_data_get(Elm_Genlist_Item *item); Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-17 14:18:14 UTC (rev 39058) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-17 14:39:08 UTC (rev 39059) @@ -19,6 +19,7 @@ Ecore_Idler *queue_idler; Eina_List *queue; Eina_List *selected; + Item *show_item; Evas_Bool on_hold : 1; Evas_Bool multi : 1; Evas_Bool min_w : 1; @@ -63,6 +64,7 @@ Evas_Bool disabled : 1; Evas_Bool mincalcd : 1; Evas_Bool queued : 1; + Evas_Bool showme : 1; }; struct _Pan { @@ -76,26 +78,29 @@ static void _sizing_eval(Evas_Object *obj); static void _sub_del(void *data, Evas_Object *obj, void *event_info); +static void _item_unrealize(Item *it); + static Evas_Smart_Class _pan_sc = {NULL}; static void _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); -/* + while (wd->items) + { + Item *it = (Item *)(wd->items); + wd->items = eina_inlist_remove(wd->items, wd->items); + if (it->realized) _item_unrealize(it); + if (it->itc->func.del) it->itc->func.del(it->data, it->wd->obj); + free(it); + } while (wd->blocks) { - Item_Block *itb = wd->blocks; - while (itb->items) - { - Item *it = itb->items->data; - - } + Item_Block *itb = (Item_Block *)(wd->blocks); + wd->blocks = eina_inlist_remove(wd->blocks, wd->blocks); + if (itb->items) eina_list_free(itb->items); free(itb); } - */ - // free wd->items - // free wd->blocks if (wd->selected) eina_list_free(wd->selected); if (wd->queue) eina_list_free(wd->queue); if (wd->calc_job) ecore_job_del(wd->calc_job); @@ -392,15 +397,17 @@ it->realized = 0; } -static void +static int _item_block_recalc(Item_Block *itb, int in) { Eina_List *l; Evas_Coord minw = 0, minh = 0; - + int showme = 0; + for (l = itb->items; l; l = l->next) { Item *it = l->data; + showme |= it->showme; if (!itb->realized) { _item_realize(it, in, 1); @@ -417,6 +424,7 @@ itb->changed = 0; /* force an evas norender to garbage collect deleted objects */ evas_norender(evas_object_evas_get(itb->wd->obj)); + return showme; } static void @@ -483,8 +491,8 @@ for (bn = 0, in = 0, il = wd->blocks; il; il = il->next, bn++) { Item_Block *itb = (Item_Block *)il; - if (itb->changed) - _item_block_recalc(itb, in); + int showme; + if (itb->changed) showme = _item_block_recalc(itb, in); itb->y = y; itb->x = 0; itb->w = itb->minw; @@ -494,6 +502,12 @@ itb->h = itb->minh; y += itb->minh; in += itb->count; + if (showme) + { + wd->show_item->showme = 0; + elm_smart_scroller_child_region_show(wd->scr, wd->show_item->x, wd->show_item->y, wd->show_item->w, wd->show_item->h); + wd->show_item = NULL; + } } evas_object_geometry_get(wd->pan_smart, NULL, NULL, &ow, &oh); if (minw < ow) minw = ow; @@ -723,6 +737,7 @@ static void _item_del(Item *it) { + if (it->wd->show_item == it) it->wd->show_item = NULL; if (it->selected) it->wd->selected = eina_list_remove(it->wd->selected, it); if (it->itc->func.del) it->itc->func.del(it->data, it->wd->obj); if (it->realized) _item_unrealize(it); @@ -926,13 +941,13 @@ EAPI const Elm_Genlist_Item * elm_genlist_item_next_get(Elm_Genlist_Item *item) { - return ((Eina_Inlist *)item)->next; + return (Elm_Genlist_Item *)(((Eina_Inlist *)item)->next); } EAPI const Elm_Genlist_Item * elm_genlist_item_prev_get(Elm_Genlist_Item *item) { - return ((Eina_Inlist *)item)->prev; + return (Elm_Genlist_Item *)(((Eina_Inlist *)item)->prev); } EAPI void @@ -973,7 +988,19 @@ EAPI void elm_genlist_item_show(Elm_Genlist_Item *item) { - // call this to jump to item in scroll + Item *it = (Item *)item; + if ((it->queued) || (!it->mincalcd)) + { + it->wd->show_item = it; + it->showme = 1; + return; + } + if (it->wd->show_item) + { + it->wd->show_item->showme = 0; + it->wd->show_item = NULL; + } + elm_smart_scroller_child_region_show(it->wd->scr, it->x, it->y, it->w, it->h); } EAPI void |
From: Enlightenment S. <no-...@en...> - 2009-02-18 04:18:30
|
Log: fix up some dynamic add/del and showing code. Author: raster Date: 2009-02-17 20:18:25 -0800 (Tue, 17 Feb 2009) New Revision: 39072 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_genlist.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-18 01:07:43 UTC (rev 39071) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-18 04:18:25 UTC (rev 39072) @@ -2103,7 +2103,7 @@ evas_object_size_hint_weight_set(gl, 1.0, 1.0); evas_object_show(gl); - itc1.style = "default"; + itc1.item_style = "default"; itc1.func.label_get = gl_label_get; itc1.func.icon_get = gl_icon_get; itc1.func.state_get = gl_state_get; @@ -2129,7 +2129,7 @@ Elm_Genlist_Item *gli; static int i = 0; - itc1.style = "default"; + itc1.item_style = "default"; itc1.func.label_get = gl_label_get; itc1.func.icon_get = gl_icon_get; itc1.func.state_get = gl_state_get; Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-18 01:07:43 UTC (rev 39071) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-18 04:18:25 UTC (rev 39072) @@ -505,7 +505,7 @@ typedef struct _Elm_Genlist_Item Elm_Genlist_Item; struct _Elm_Genlist_Item_Class { - const char *style; + const char *item_style; struct { char *(*label_get) (const void *data, Evas_Object *obj, const char *part); Evas_Object *(*icon_get) (const void *data, Evas_Object *obj, const char *part); @@ -561,7 +561,7 @@ // //// (more widgets/features - medium priority) // * genlist widget (complex list widget - harder to use than normal simple list, but handles huge lists of items etc.) -// * tree feature fir genlist widget (like biglist - but items can expand to sub-items) +// * tree feature for genlist widget (like biglist - but items can expand to sub-items) // * radio + group handling // * checkbox (like toggle) // * pager (for pushing/popping pages and going back and forward and flipping) @@ -602,7 +602,7 @@ // * prepend or append theme files from code for an app to allow an app to augment the theme eithe rby forcibly overriding things with its own theme file (so it can ship some custom elements that always override user theme) and so it can also provide a final (even after default) fallback for "extended" styles of its own (but thus allowing themes to overried its extensions if they want) // * determine prefix of app dynamically and export calls to get prefix info // * load config from file -// * load config from x prpoerty +// * load config from x property // * handle finger size property and on-the-fly changes like scaling does // * somehow a pdf(ps) viewer widget that doesnt make it gpl (lgpl) // * emotion widget Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-18 01:07:43 UTC (rev 39071) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-18 04:18:25 UTC (rev 39072) @@ -294,9 +294,9 @@ evas_object_smart_member_add(it->base, it->wd->pan_smart); elm_widget_sub_object_add(it->wd->obj, it->base); if (in & 0x1) - snprintf(buf, sizeof(buf), "%s/%s", "item_odd", it->itc->style); + snprintf(buf, sizeof(buf), "%s/%s", "item_odd", it->itc->item_style); else - snprintf(buf, sizeof(buf), "%s/%s", "item", it->itc->style); + snprintf(buf, sizeof(buf), "%s/%s", "item", it->itc->item_style); _elm_theme_set(it->base, "genlist", buf, "default"); if (!calc) { @@ -369,8 +369,8 @@ elm_coords_finger_size_adjust(1, &mw, 1, &mh); edje_object_size_min_restricted_calc(it->base, &mw, &mh, mw, mh); elm_coords_finger_size_adjust(1, &mw, 1, &mh); - it->minw = mw; - it->minh = mh; + it->w = it->minw = mw; + it->h = it->minh = mh; it->mincalcd = 1; } if (!calc) evas_object_show(it->base); @@ -403,6 +403,7 @@ Eina_List *l; Evas_Coord minw = 0, minh = 0; int showme = 0; + Evas_Coord y = 0; for (l = itb->items; l; l = l->next) { @@ -418,6 +419,9 @@ minh += it->minh; if (minw < it->minw) minw = it->minw; in++; + it->x = 0; + it->y = y; + y += it->minw; } itb->minw = minw; itb->minh = minh; @@ -469,15 +473,16 @@ it->x = 0; it->y = y; it->w = itb->w; - it->h = it->minh; - evas_object_resize(it->base, it->w, it->h); - evas_object_move(it->base, - ox + itb->x + it->x - itb->wd->pan_x, - oy + itb->y + it->y - itb->wd->pan_y); - evas_object_show(it->base); + if (it->realized) + { + evas_object_resize(it->base, it->w, it->h); + evas_object_move(it->base, + ox + itb->x + it->x - itb->wd->pan_x, + oy + itb->y + it->y - itb->wd->pan_y); + evas_object_show(it->base); + } y += it->h; } - itb->realized = 1; } static void @@ -485,30 +490,68 @@ { Widget_Data *wd = data; Eina_Inlist *il; - Evas_Coord minw = 0, minh = 0, x = 0, y = 0, ow, oh; + Evas_Coord minw = -1, minh = 0, x = 0, y = 0, ow, oh; + Item_Block *chb = NULL; int bn, in; + int minw_change = 0; for (bn = 0, in = 0, il = wd->blocks; il; il = il->next, bn++) { Item_Block *itb = (Item_Block *)il; - int showme; - if (itb->changed) showme = _item_block_recalc(itb, in); + int showme = 0; + if (chb) + { + if (itb->realized) _item_block_unrealize(itb); + } + if (itb->changed) + { + if (itb->realized) _item_block_unrealize(itb); + showme = _item_block_recalc(itb, in); + printf("change block %i\n", bn); + chb = itb; + } itb->y = y; itb->x = 0; - itb->w = itb->minw; - itb->h = itb->minh; minh += itb->minh; - if (minw < itb->minw) minw = itb->minw; + if (minw == -1) minw = itb->minw; + else if (minw < itb->minw) + { + minw = itb->minw; + minw_change = 1; + } + itb->w = minw; itb->h = itb->minh; - y += itb->minh; + y += itb->h; in += itb->count; if (showme) { wd->show_item->showme = 0; - elm_smart_scroller_child_region_show(wd->scr, wd->show_item->x, wd->show_item->y, wd->show_item->w, wd->show_item->h); + elm_smart_scroller_child_region_show(wd->scr, + wd->show_item->x + wd->show_item->block->x, + wd->show_item->y + wd->show_item->block->y, + wd->show_item->block->w, + wd->show_item->h); wd->show_item = NULL; + showme = 0; } } + if (minw_change) + { + for (il = wd->blocks; il; il = il->next) + { + Item_Block *itb = (Item_Block *)il; + itb->minw = minw; + itb->w = itb->minw; + } + } + if ((chb) && (((Eina_Inlist *)(chb))->next)) + { + for (il = ((Eina_Inlist *)(chb))->next; il; il = il->next) + { + Item_Block *itb = (Item_Block *)il; + if (itb->realized) _item_block_unrealize(itb); + } + } evas_object_geometry_get(wd->pan_smart, NULL, NULL, &ow, &oh); if (minw < ow) minw = ow; if ((minw != wd->minw) || (minh != wd->minh)) @@ -717,20 +760,63 @@ _item_block_del(Item *it) { Eina_Inlist *il; + Item_Block *itb = it->block; - it->block->items = eina_list_remove(it->block->items, it); - it->block->count--; - it->block->changed = 1; + itb->items = eina_list_remove(itb->items, it); + itb->count--; + itb->changed = 1; if (it->wd->calc_job) ecore_job_del(it->wd->calc_job); it->wd->calc_job = ecore_job_add(_calc_job, it->wd); - if (it->block->count < 1) +// for (il = (Eina_Inlist *)(itb); il; il = il->next) +// { +// Item_Block *itb2 = (Item_Block *)il; +// _item_block_unrealize(itb2); +// } + if (itb->count < 1) { - // FIXME: free block + it->wd->blocks = eina_inlist_remove(it->wd->blocks, (Eina_Inlist *)itb); + free(itb); } - for (il = (Eina_Inlist *)(it->block); il; il = il->next) + else { - Item_Block *itb = (Item_Block *)il; - _item_block_unrealize(itb); + if (itb->count < 16) + { + Item_Block *itbp = (Item_Block *)(((Eina_Inlist *)(itb))->prev); + Item_Block *itbn = (Item_Block *)(((Eina_Inlist *)(itb))->next); + if ((itbp) && ((itbp->count + itb->count) < 48)) + { + printf("merge with prev\n"); + // merge prev + itb + while (itb->items) + { + Item *it2 = itb->items->data; + it2->block = itbp; + itbp->items = eina_list_append(itbp->items, it2); + itb->items = eina_list_remove_list(itb->items, itb->items); + itbp->count++; + itbp->changed = 1; + } + it->wd->blocks = eina_inlist_remove(it->wd->blocks, (Eina_Inlist *)itb); + free(itb); + } + else if ((itbn) && ((itbn->count + itb->count) < 48)) + { + printf("merge with next\n"); + // merge next + itb + while (itb->items) + { + Eina_List *last = eina_list_last(itb->items); + Item *it2 = last->data; + it2->block = itbn; + itb->items = eina_list_remove_list(itb->items, last); + itbn->items = eina_list_prepend(itbn->items, it2); + itbn->count++; + itbn->changed = 1; + } + it->wd->blocks = eina_inlist_remove(it->wd->blocks, (Eina_Inlist *)itb); + free(itb); + } + } } } @@ -878,6 +964,7 @@ Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) { + // fixme } EAPI Elm_Genlist_Item * @@ -886,6 +973,7 @@ Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) { + // fixme } EAPI Elm_Genlist_Item * @@ -894,6 +982,7 @@ Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) { + // fixme } EAPI void @@ -903,11 +992,6 @@ wd->multi = multi; } -EAPI const Eina_List * -elm_genlist_items_get(Evas_Object *obj) -{ -} - EAPI const Elm_Genlist_Item * elm_genlist_selected_item_get(Evas_Object *obj) { @@ -1000,7 +1084,14 @@ it->wd->show_item->showme = 0; it->wd->show_item = NULL; } - elm_smart_scroller_child_region_show(it->wd->scr, it->x, it->y, it->w, it->h); + printf("%i %i | %ix%i\n", + it->x + it->block->x, + it->y + it->block->y, + it->block->w, it->h); + elm_smart_scroller_child_region_show(it->wd->scr, + it->x + it->block->x, + it->y + it->block->y, + it->block->w, it->h); } EAPI void |
From: Enlightenment S. <no-...@en...> - 2009-02-18 04:27:53
|
Log: add clear call. fix free to have less leaks Author: raster Date: 2009-02-17 20:27:49 -0800 (Tue, 17 Feb 2009) New Revision: 39073 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_genlist.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-18 04:18:25 UTC (rev 39072) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-18 04:27:49 UTC (rev 39073) @@ -2123,6 +2123,13 @@ } static void +my_gl_clear(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *gl = data; + elm_genlist_clear(gl); +} + +static void my_gl_add(void *data, Evas_Object *obj, void *event_info) { Evas_Object *gl = data; @@ -2228,6 +2235,14 @@ evas_object_show(bt); bt = elm_button_add(win); + elm_button_label_set(bt, "[X]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_clear, gl); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); elm_button_label_set(bt, "[+]"); evas_object_smart_callback_add(bt, "clicked", my_gl_add, gl); evas_object_size_hint_align_set(bt, -1.0, -1.0); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-18 04:18:25 UTC (rev 39072) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-18 04:27:49 UTC (rev 39073) @@ -516,6 +516,7 @@ EAPI Evas_Object *elm_genlist_add(Evas_Object *parent); EAPI Elm_Genlist_Item *elm_genlist_item_append(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data); + EAPI void elm_genlist_clear(Evas_Object *obj); EAPI const Elm_Genlist_Item *elm_genlist_selected_item_get(Evas_Object *obj); EAPI const Eina_List *elm_genlist_selected_items_get(Evas_Object *obj); EAPI const Elm_Genlist_Item *elm_genlist_first_item_get(Evas_Object *obj); Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-18 04:18:25 UTC (rev 39072) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-18 04:27:49 UTC (rev 39073) @@ -86,24 +86,7 @@ _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); - while (wd->items) - { - Item *it = (Item *)(wd->items); - wd->items = eina_inlist_remove(wd->items, wd->items); - if (it->realized) _item_unrealize(it); - if (it->itc->func.del) it->itc->func.del(it->data, it->wd->obj); - free(it); - } - while (wd->blocks) - { - Item_Block *itb = (Item_Block *)(wd->blocks); - wd->blocks = eina_inlist_remove(wd->blocks, wd->blocks); - if (itb->items) eina_list_free(itb->items); - free(itb); - } - if (wd->selected) eina_list_free(wd->selected); - if (wd->queue) eina_list_free(wd->queue); - if (wd->calc_job) ecore_job_del(wd->calc_job); + elm_genlist_clear(obj); evas_object_del(wd->pan_smart); wd->pan_smart = NULL; free(wd); @@ -986,6 +969,53 @@ } EAPI void +elm_genlist_clear(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + while (wd->items) + { + Item *it = (Item *)(wd->items); + wd->items = eina_inlist_remove(wd->items, wd->items); + if (it->realized) _item_unrealize(it); + if (it->itc->func.del) it->itc->func.del(it->data, it->wd->obj); + free(it); + } + while (wd->blocks) + { + Item_Block *itb = (Item_Block *)(wd->blocks); + wd->blocks = eina_inlist_remove(wd->blocks, wd->blocks); + if (itb->items) eina_list_free(itb->items); + free(itb); + } + if (wd->calc_job) + { + ecore_job_del(wd->calc_job); + wd->calc_job = NULL; + } + if (wd->queue_idler) + { + ecore_idler_del(wd->queue_idler); + wd->queue_idler = NULL; + } + if (wd->queue) + { + eina_list_free(wd->queue); + wd->queue = NULL; + } + if (wd->selected) + { + eina_list_free(wd->selected); + wd->selected = NULL; + } + wd->show_item = NULL; + wd->pan_x = 0; + wd->pan_y = 0; + wd->minw = 0; + wd->minh = 0; + evas_object_smart_callback_call(wd->pan_smart, "changed", NULL); +} + +EAPI void elm_genlist_multi_select_set(Evas_Object *obj, Evas_Bool multi) { Widget_Data *wd = elm_widget_data_get(obj); |
From: Enlightenment S. <no-...@en...> - 2009-02-18 12:41:59
|
Log: insert and prepend calls work... at least in my tests. Author: raster Date: 2009-02-18 04:41:45 -0800 (Wed, 18 Feb 2009) New Revision: 39077 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_genlist.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-18 07:10:42 UTC (rev 39076) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-18 12:41:45 UTC (rev 39077) @@ -2203,6 +2203,7 @@ my_bt_30(void *data, Evas_Object *obj, void *event_info) { Evas_Object *win, *bg, *gl, *bx, *bx2, *bt; + Elm_Genlist_Item *gli[10]; int i; win = elm_win_add(NULL, "genlist-2", ELM_WIN_BASIC); @@ -2223,6 +2224,34 @@ evas_object_size_hint_align_set(gl, -1.0, -1.0); evas_object_size_hint_weight_set(gl, 1.0, 1.0); evas_object_show(gl); + + itc1.item_style = "default"; + itc1.func.label_get = gl_label_get; + itc1.func.icon_get = gl_icon_get; + itc1.func.state_get = gl_state_get; + itc1.func.del = gl_del; + + gli[0] = elm_genlist_item_append(gl, &itc1, + (void *)1001/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + (void *)1001/* func data */); + gli[1] = elm_genlist_item_append(gl, &itc1, + (void *)1002/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + (void *)1002/* func data */); + gli[2] = elm_genlist_item_append(gl, &itc1, + (void *)1003/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + (void *)1003/* func data */); + gli[3] = elm_genlist_item_prepend(gl, &itc1, + (void *)1004/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + (void *)1004/* func data */); + gli[4] = elm_genlist_item_prepend(gl, &itc1, + (void *)1005/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + (void *)1005/* func data */); + gli[5] = elm_genlist_item_insert_before(gl, &itc1, + (void *)1006/* item data */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + (void *)1006/* func data */); + gli[6] = elm_genlist_item_insert_after(gl, &itc1, + (void *)1007/* item data */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + (void *)1007/* func data */); elm_box_pack_end(bx, gl); evas_object_show(bx2); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-18 07:10:42 UTC (rev 39076) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-18 12:41:45 UTC (rev 39077) @@ -516,6 +516,9 @@ EAPI Evas_Object *elm_genlist_add(Evas_Object *parent); EAPI Elm_Genlist_Item *elm_genlist_item_append(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data); + EAPI Elm_Genlist_Item *elm_genlist_item_prepend(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data); + EAPI Elm_Genlist_Item *elm_genlist_item_insert_before(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *before, Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data); + EAPI Elm_Genlist_Item *elm_genlist_item_insert_after(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *after, Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data); EAPI void elm_genlist_clear(Evas_Object *obj); EAPI const Elm_Genlist_Item *elm_genlist_selected_item_get(Evas_Object *obj); EAPI const Eina_List *elm_genlist_selected_items_get(Evas_Object *obj); @@ -524,7 +527,9 @@ EAPI const Elm_Genlist_Item *elm_genlist_item_next_get(Elm_Genlist_Item *item); EAPI const Elm_Genlist_Item *elm_genlist_item_prev_get(Elm_Genlist_Item *item); EAPI void elm_genlist_item_selected_set(Elm_Genlist_Item *item, Evas_Bool selected); + EAPI Evas_Bool elm_genlist_item_selected_get(Elm_Genlist_Item *item); EAPI void elm_genlist_item_disabled_set(Elm_Genlist_Item *item, Evas_Bool disabled); + EAPI Evas_Bool elm_genlist_item_disabled_get(Elm_Genlist_Item *item); EAPI void elm_genlist_item_show(Elm_Genlist_Item *item); EAPI void elm_genlist_item_del(Elm_Genlist_Item *item); EAPI const void *elm_genlist_item_data_get(Elm_Genlist_Item *item); Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-18 07:10:42 UTC (rev 39076) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-18 12:41:45 UTC (rev 39077) @@ -820,8 +820,8 @@ _item_block_add(Widget_Data *wd, Item *it, Item *itpar, Item *itrel, int before) { Item_Block *itb; - - if (!itrel) /* new block */ + + if (!itrel) { newblock: itb = calloc(1, sizeof(Item_Block)); @@ -832,17 +832,29 @@ if (itrel) { if (!itrel->block) - printf("EEEK itrel has no block!\n"); + { + wd->blocks = eina_inlist_append(wd->blocks, (Eina_Inlist *)itb); + itb->items = eina_list_append(itb->items, it); + } else { if (before) - wd->blocks = eina_inlist_prepend_relative(wd->blocks, (Eina_Inlist *)itb, (Eina_Inlist *)(itrel->block)); + { + wd->blocks = eina_inlist_prepend_relative(wd->blocks, (Eina_Inlist *)itb, (Eina_Inlist *)(itrel->block)); + itb->items = eina_list_prepend_relative(itb->items, it, itrel); + } else - wd->blocks = eina_inlist_append_relative(wd->blocks, (Eina_Inlist *)itb, (Eina_Inlist *)(itrel->block)); + { + wd->blocks = eina_inlist_append_relative(wd->blocks, (Eina_Inlist *)itb, (Eina_Inlist *)(itrel->block)); + itb->items = eina_list_append_relative(itb->items, it, itrel); + } } } else - wd->blocks = eina_inlist_append(wd->blocks, (Eina_Inlist *)itb); + { + wd->blocks = eina_inlist_append(wd->blocks, (Eina_Inlist *)itb); + itb->items = eina_list_append(itb->items, it); + } } else { @@ -852,9 +864,12 @@ else { itb = itrel->block; - if (itb->count > 32) goto newblock; + if ((!itb) || (itb->count > 32)) goto newblock; + if (before) + itb->items = eina_list_prepend_relative(itb->items, it, itrel); + else + itb->items = eina_list_append_relative(itb->items, it, itrel); } - itb->items = eina_list_append(itb->items, it); itb->count++; itb->changed = 1; it->block = itb; @@ -922,7 +937,6 @@ void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) { Widget_Data *wd = elm_widget_data_get(obj); - Item *itpar; Item *it = _item_new(wd, itc, data, parent, flags, func, func_data); if (!it) return NULL; if (!it->parent) @@ -941,7 +955,17 @@ Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) { - // fixme - now + Widget_Data *wd = elm_widget_data_get(obj); + Item *it = _item_new(wd, itc, data, parent, flags, func, func_data); + if (!it) return NULL; + if (!it->parent) + wd->items = eina_inlist_prepend(wd->items, (Eina_Inlist *)it); + else + { + // FIXME: tree. not done yet + } + _item_queue(wd, it); + return (Elm_Genlist_Item *)it; } EAPI Elm_Genlist_Item * @@ -950,7 +974,17 @@ Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) { - // fixme - now + Widget_Data *wd = elm_widget_data_get(obj); + Item *it = _item_new(wd, itc, data, NULL, flags, func, func_data); + if (!it) return NULL; + if (!it->parent) + wd->items = eina_inlist_prepend_relative(wd->items, (Eina_Inlist *)it, (Eina_Inlist *)before); + else + { + // FIXME: tree. not done yet + } + _item_queue(wd, it); + return (Elm_Genlist_Item *)it; } EAPI Elm_Genlist_Item * @@ -959,7 +993,17 @@ Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) { - // fixme - now + Widget_Data *wd = elm_widget_data_get(obj); + Item *it = _item_new(wd, itc, data, NULL, flags, func, func_data); + if (!it) return NULL; + if (!it->parent) + wd->items = eina_inlist_append_relative(wd->items, (Eina_Inlist *)it, (Eina_Inlist *)after); + else + { + // FIXME: tree. not done yet + } + _item_queue(wd, it); + return (Elm_Genlist_Item *)it; } EAPI void |
From: Enlightenment S. <no-...@en...> - 2009-02-18 13:43:00
|
Log: make scroller stay in the exact pixel pos when resizign - unless at the end. Author: raster Date: 2009-02-18 05:42:56 -0800 (Wed, 18 Feb 2009) New Revision: 39080 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_genlist.c trunk/TMP/st/elementary/src/lib/els_scroller.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-18 13:13:10 UTC (rev 39079) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-18 13:42:56 UTC (rev 39080) @@ -2109,7 +2109,7 @@ itc1.func.state_get = gl_state_get; itc1.func.del = gl_del; - for (i = 0; i < 10000; i++) + for (i = 0; i < 100000; i++) { gli = elm_genlist_item_append(gl, &itc1, (void *)i/* item data */, @@ -2176,6 +2176,7 @@ } elm_genlist_item_disabled_set(gli, 1); elm_genlist_item_selected_set(gli, 0); + elm_genlist_item_update(gli); } Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-18 13:13:10 UTC (rev 39079) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-18 13:42:56 UTC (rev 39080) @@ -514,25 +514,26 @@ } func; }; - EAPI Evas_Object *elm_genlist_add(Evas_Object *parent); + EAPI Evas_Object *elm_genlist_add(Evas_Object *parent); EAPI Elm_Genlist_Item *elm_genlist_item_append(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data); EAPI Elm_Genlist_Item *elm_genlist_item_prepend(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data); EAPI Elm_Genlist_Item *elm_genlist_item_insert_before(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *before, Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data); EAPI Elm_Genlist_Item *elm_genlist_item_insert_after(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *after, Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data); - EAPI void elm_genlist_clear(Evas_Object *obj); + EAPI void elm_genlist_clear(Evas_Object *obj); EAPI const Elm_Genlist_Item *elm_genlist_selected_item_get(Evas_Object *obj); - EAPI const Eina_List *elm_genlist_selected_items_get(Evas_Object *obj); + EAPI const Eina_List *elm_genlist_selected_items_get(Evas_Object *obj); EAPI const Elm_Genlist_Item *elm_genlist_first_item_get(Evas_Object *obj); EAPI const Elm_Genlist_Item *elm_genlist_last_item_get(Evas_Object *obj); EAPI const Elm_Genlist_Item *elm_genlist_item_next_get(Elm_Genlist_Item *item); EAPI const Elm_Genlist_Item *elm_genlist_item_prev_get(Elm_Genlist_Item *item); - EAPI void elm_genlist_item_selected_set(Elm_Genlist_Item *item, Evas_Bool selected); - EAPI Evas_Bool elm_genlist_item_selected_get(Elm_Genlist_Item *item); - EAPI void elm_genlist_item_disabled_set(Elm_Genlist_Item *item, Evas_Bool disabled); - EAPI Evas_Bool elm_genlist_item_disabled_get(Elm_Genlist_Item *item); - EAPI void elm_genlist_item_show(Elm_Genlist_Item *item); - EAPI void elm_genlist_item_del(Elm_Genlist_Item *item); - EAPI const void *elm_genlist_item_data_get(Elm_Genlist_Item *item); + EAPI void elm_genlist_item_selected_set(Elm_Genlist_Item *item, Evas_Bool selected); + EAPI Evas_Bool elm_genlist_item_selected_get(Elm_Genlist_Item *item); + EAPI void elm_genlist_item_disabled_set(Elm_Genlist_Item *item, Evas_Bool disabled); + EAPI Evas_Bool elm_genlist_item_disabled_get(Elm_Genlist_Item *item); + EAPI void elm_genlist_item_show(Elm_Genlist_Item *item); + EAPI void elm_genlist_item_del(Elm_Genlist_Item *item); + EAPI const void *elm_genlist_item_data_get(Elm_Genlist_Item *item); + EAPI void elm_genlist_item_update(Elm_Genlist_Item *item); /* smart callbacks called: * "clicked" - the user clicked the hoversel button and popped up the sel Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-18 13:13:10 UTC (rev 39079) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-18 13:42:56 UTC (rev 39080) @@ -1222,5 +1222,10 @@ EAPI void elm_genlist_item_update(Elm_Genlist_Item *item) { - // fixme - now do call all the class get funcs again - re realize if realized. + Item *it = (Item *)item; + if (!it->block) return; + it->mincalcd = 0; + it->block->changed = 1; + if (it->wd->calc_job) ecore_job_del(it->wd->calc_job); + it->wd->calc_job = ecore_job_add(_calc_job, it->wd); } Modified: trunk/TMP/st/elementary/src/lib/els_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/els_scroller.c 2009-02-18 13:13:10 UTC (rev 39079) +++ trunk/TMP/st/elementary/src/lib/els_scroller.c 2009-02-18 13:42:56 UTC (rev 39080) @@ -915,9 +915,11 @@ edje_object_part_drag_page_set(sd->edje_obj, "elm.dragable.vbar", 0.0, -((double)sd->page.y * ((double)vh / (double)h)) / 100.0); sd->pan_func.get(sd->pan_obj, &px, &py); + if (vx != mx) x = px; + if (vy != my) y = py; sd->pan_func.set(sd->pan_obj, x, y); - if ((px != 0) || (py != 0)) - edje_object_signal_emit(sd->edje_obj, "elm,action,scroll", "elm"); +// if ((px != 0) || (py != 0)) +// edje_object_signal_emit(sd->edje_obj, "elm,action,scroll", "elm"); } else { |
From: Enlightenment S. <no-...@en...> - 2009-02-19 06:29:12
|
Log: and back to 10k test, and only insert 8 items from the queue at a time. Author: raster Date: 2009-02-18 22:29:07 -0800 (Wed, 18 Feb 2009) New Revision: 39089 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/elm_genlist.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-19 06:02:56 UTC (rev 39088) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-19 06:29:07 UTC (rev 39089) @@ -2109,7 +2109,7 @@ itc1.func.state_get = gl_state_get; itc1.func.del = gl_del; - for (i = 0; i < 100000; i++) + for (i = 0; i < 10000; i++) { gli = elm_genlist_item_append(gl, &itc1, (void *)i/* item data */, Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-19 06:02:56 UTC (rev 39088) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-19 06:29:07 UTC (rev 39089) @@ -927,7 +927,7 @@ Widget_Data *wd = data; int n; - for (n = 0; (wd->queue) && (n < 32); n++) + for (n = 0; (wd->queue) && (n < 8); n++) { Item *it; |
From: Enlightenment S. <no-...@en...> - 2009-02-20 01:07:31
|
Log: a specific test for update and multiple/different icons etc. Author: raster Date: 2009-02-19 17:07:21 -0800 (Thu, 19 Feb 2009) New Revision: 39108 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-19 22:25:07 UTC (rev 39107) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-20 01:07:21 UTC (rev 39108) @@ -2055,16 +2055,9 @@ Evas_Object *gl_icon_get(const void *data, Evas_Object *obj, const char *part) { char buf[PATH_MAX]; -#if 1 Evas_Object *ic = elm_icon_add(obj); snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); elm_icon_file_set(ic, buf, NULL); -#else - Evas_Object *ic = evas_object_image_filled_add(evas_object_evas_get(obj)); - snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); - evas_object_image_file_set(ic, buf, NULL); -#endif - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); return ic; } @@ -2318,7 +2311,153 @@ evas_object_show(win); } +typedef struct _Testitem +{ + Elm_Genlist_Item *item; + int mode; +} Testitem; +static Elm_Genlist_Item_Class itc2; +char *gl2_label_get(const void *data, Evas_Object *obj, const char *part) +{ + Testitem *tit = data; + char buf[256]; + snprintf(buf, sizeof(buf), "Item mode %i", tit->mode); + return strdup(buf); +} +Evas_Object *gl2_icon_get(const void *data, Evas_Object *obj, const char *part) +{ + Testitem *tit = data; + char buf[PATH_MAX]; + Evas_Object *ic = elm_icon_add(obj); + if (!strcmp(part, "elm.swallow.icon")) + { + if ((tit->mode & 0x3) == 0) + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + else if ((tit->mode & 0x3) == 1) + snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR); + else if ((tit->mode & 0x3) == 2) + snprintf(buf, sizeof(buf), "%s/images/panel_01.jpg", PACKAGE_DATA_DIR); + else if ((tit->mode & 0x3) == 3) + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", PACKAGE_DATA_DIR); + elm_icon_file_set(ic, buf, NULL); + } + else if (!strcmp(part, "elm.swallow.end")) + { + if ((tit->mode & 0x3) == 0) + snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", PACKAGE_DATA_DIR); + else if ((tit->mode & 0x3) == 1) + snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", PACKAGE_DATA_DIR); + else if ((tit->mode & 0x3) == 2) + snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", PACKAGE_DATA_DIR); + else if ((tit->mode & 0x3) == 3) + snprintf(buf, sizeof(buf), "%s/images/sky_04.jpg", PACKAGE_DATA_DIR); + elm_icon_file_set(ic, buf, NULL); + } + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + return ic; +} +Evas_Bool gl2_state_get(const void *data, Evas_Object *obj, const char *part) +{ + return 0; +} +void gl2_del(const void *data, Evas_Object *obj) +{ +} + static void +my_gl_update(void *data, Evas_Object *obj, void *event_info) +{ + Testitem *tit = data; + tit->mode++; + elm_genlist_item_update(tit->item); +} + +static void +my_bt_31(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *gl, *bx, *bx2, *bt; + static Testitem tit[3]; + int i; + + win = elm_win_add(NULL, "genlist-2", ELM_WIN_BASIC); + elm_win_title_set(win, "Genlist 2"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + gl = elm_genlist_add(win); + evas_object_size_hint_align_set(gl, -1.0, -1.0); + evas_object_size_hint_weight_set(gl, 1.0, 1.0); + evas_object_show(gl); + + itc2.item_style = "default"; + itc2.func.label_get = gl2_label_get; + itc2.func.icon_get = gl2_icon_get; + itc2.func.state_get = gl2_state_get; + itc2.func.del = gl2_del; + + tit[0].mode = 0; + tit[0].item = elm_genlist_item_append(gl, &itc2, + &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + NULL/* func data */); + tit[1].mode = 1; + tit[1].item = elm_genlist_item_append(gl, &itc2, + &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + NULL/* func data */); + tit[2].mode = 2; + tit[2].item = elm_genlist_item_append(gl, &itc2, + &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + NULL/* func data */); + + elm_box_pack_end(bx, gl); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, 1); + elm_box_homogenous_set(bx2, 1); + evas_object_size_hint_weight_set(bx2, 1.0, 0.0); + evas_object_size_hint_align_set(bx2, -1.0, -1.0); + + bt = elm_button_add(win); + elm_button_label_set(bt, "[1]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0])); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "[2]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1])); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "[3]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2])); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 320); + evas_object_show(win); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *li, *fr; @@ -2423,6 +2562,7 @@ elm_list_item_append(li, "Slider", NULL, NULL, my_bt_28, NULL); elm_list_item_append(li, "Genlist", NULL, NULL, my_bt_29, NULL); elm_list_item_append(li, "Genlist 2", NULL, NULL, my_bt_30, NULL); + elm_list_item_append(li, "Genlist 3", NULL, NULL, my_bt_31, NULL); elm_list_go(li); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-19 22:25:07 UTC (rev 39107) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-20 01:07:21 UTC (rev 39108) @@ -568,7 +568,6 @@ // * when entries are in a scroller and change size, the scroller shows scrollbars. fix. same for selecting. for 1 line entries in a scroller should only have scroll arrow indicators. // //// (more widgets/features - medium priority) -// * genlist widget (complex list widget - harder to use than normal simple list, but handles huge lists of items etc.) // * tree feature for genlist widget (like biglist - but items can expand to sub-items) // * radio + group handling // * checkbox (like toggle) |
From: Enlightenment S. <no-...@en...> - 2009-02-25 00:42:04
|
Log: fix next/prev bug. Author: raster Date: 2009-02-24 16:41:57 -0800 (Tue, 24 Feb 2009) New Revision: 39186 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/elm_genlist.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-24 22:46:45 UTC (rev 39185) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-25 00:41:57 UTC (rev 39186) @@ -2172,6 +2172,20 @@ elm_genlist_item_update(gli); } +static void +my_gl_update_all(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *gl = data; + int i = 0; + Elm_Genlist_Item *it = elm_genlist_first_item_get(gl); + while (it) + { + elm_genlist_item_update(it); + printf("%i\n", i); + i++; + it = elm_genlist_item_next_get(it); + } +} static void my_gl_first(void *data, Evas_Object *obj, void *event_info) @@ -2257,7 +2271,7 @@ evas_object_size_hint_align_set(bx2, -1.0, -1.0); bt = elm_button_add(win); - elm_button_label_set(bt, "[/\\]"); + elm_button_label_set(bt, "/\\"); evas_object_smart_callback_add(bt, "clicked", my_gl_first, gl); evas_object_size_hint_align_set(bt, -1.0, -1.0); evas_object_size_hint_weight_set(bt, 1.0, 0.0); @@ -2265,7 +2279,7 @@ evas_object_show(bt); bt = elm_button_add(win); - elm_button_label_set(bt, "[\\/]"); + elm_button_label_set(bt, "\\/"); evas_object_smart_callback_add(bt, "clicked", my_gl_last, gl); evas_object_size_hint_align_set(bt, -1.0, -1.0); evas_object_size_hint_weight_set(bt, 1.0, 0.0); @@ -2273,7 +2287,7 @@ evas_object_show(bt); bt = elm_button_add(win); - elm_button_label_set(bt, "[X]"); + elm_button_label_set(bt, "X"); evas_object_smart_callback_add(bt, "clicked", my_gl_clear, gl); evas_object_size_hint_align_set(bt, -1.0, -1.0); evas_object_size_hint_weight_set(bt, 1.0, 0.0); @@ -2281,7 +2295,7 @@ evas_object_show(bt); bt = elm_button_add(win); - elm_button_label_set(bt, "[.]"); + elm_button_label_set(bt, "#"); evas_object_smart_callback_add(bt, "clicked", my_gl_disable, gl); evas_object_size_hint_align_set(bt, -1.0, -1.0); evas_object_size_hint_weight_set(bt, 1.0, 0.0); @@ -2289,7 +2303,15 @@ evas_object_show(bt); bt = elm_button_add(win); - elm_button_label_set(bt, "[+]"); + elm_button_label_set(bt, "U"); + evas_object_smart_callback_add(bt, "clicked", my_gl_update_all, gl); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "+"); evas_object_smart_callback_add(bt, "clicked", my_gl_add, gl); evas_object_size_hint_align_set(bt, -1.0, -1.0); evas_object_size_hint_weight_set(bt, 1.0, 0.0); @@ -2297,7 +2319,7 @@ evas_object_show(bt); bt = elm_button_add(win); - elm_button_label_set(bt, "[-]"); + elm_button_label_set(bt, "-"); evas_object_smart_callback_add(bt, "clicked", my_gl_del, gl); evas_object_size_hint_align_set(bt, -1.0, -1.0); evas_object_size_hint_weight_set(bt, 1.0, 0.0); Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-24 22:46:45 UTC (rev 39185) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-25 00:41:57 UTC (rev 39186) @@ -1185,7 +1185,7 @@ while (it) { it = (Item *)(((Eina_Inlist *)it)->next); - if (!it->delete_me) break; + if ((it) && (!it->delete_me)) break; } return (Elm_Genlist_Item *)it; } @@ -1197,7 +1197,7 @@ while (it) { it = (Item *)(((Eina_Inlist *)it)->prev); - if (!it->delete_me) break; + if ((it) && (!it->delete_me)) break; } return (Elm_Genlist_Item *)it; } |
From: Enlightenment S. <no-...@en...> - 2009-02-26 06:20:52
|
Log: change argv[0] to match quicklanch process name. much better for debugging! Author: raster Date: 2009-02-25 22:20:41 -0800 (Wed, 25 Feb 2009) New Revision: 39235 Modified: trunk/TMP/st/elementary/src/bin/quicklaunch.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_main.c Modified: trunk/TMP/st/elementary/src/bin/quicklaunch.c =================================================================== --- trunk/TMP/st/elementary/src/bin/quicklaunch.c 2009-02-26 06:13:31 UTC (rev 39234) +++ trunk/TMP/st/elementary/src/bin/quicklaunch.c 2009-02-26 06:20:41 UTC (rev 39235) @@ -10,12 +10,69 @@ #include <sys/stat.h> #include <fcntl.h> #include <signal.h> +#include <sys/wait.h> static double restart_time = 0.0; #define LENGTH_OF_SOCKADDR_UN(s) (strlen((s)->sun_path) + (size_t)(((struct sockaddr_un *)NULL)->sun_path)) +static struct sigaction old_sigint; +static struct sigaction old_sigterm; +static struct sigaction old_sigquit; +static struct sigaction old_sigalrm; +static struct sigaction old_sigusr1; +static struct sigaction old_sigusr2; +static struct sigaction old_sighup; +static struct sigaction old_sigchld; +static struct sigaction old_sigsegv; +static struct sigaction old_sigill; +static struct sigaction old_sigfpe; +static struct sigaction old_sigbus; +static struct sigaction old_sigabrt; + static void +post_fork(void *data) +{ + sigaction(SIGINT, &old_sigint, NULL); + sigaction(SIGTERM, &old_sigterm, NULL); + sigaction(SIGQUIT, &old_sigquit, NULL); + sigaction(SIGALRM, &old_sigalrm, NULL); + sigaction(SIGUSR1, &old_sigusr1, NULL); + sigaction(SIGUSR2, &old_sigusr2, NULL); + sigaction(SIGHUP, &old_sighup, NULL); + sigaction(SIGCHLD, &old_sigchld, NULL); + sigaction(SIGSEGV, &old_sigsegv, NULL); + sigaction(SIGILL, &old_sigill, NULL); + sigaction(SIGFPE, &old_sigfpe, NULL); + sigaction(SIGBUS, &old_sigbus, NULL); + sigaction(SIGABRT, &old_sigabrt, NULL); +} + +static void +child_handler(int x, siginfo_t *info, void *data) +{ + int status; + pid_t pid; + + while ((pid = waitpid(-1, &status, WNOHANG)) > 0); +} + +static void +crash_handler(int x, siginfo_t *info, void *data) +{ + double t; + + EINA_ERROR_PERR("elementary_quicklaunch: crash detected. restarting.\n"); + t = ecore_time_get(); + if ((t - restart_time) <= 2.0) + { + EINA_ERROR_PERR("elementary_quicklaunch: crash too fast - less than 2 seconds. abort restart\n"); + exit(-1); + } + ecore_app_restart(); +} + +static void handle_run(int fd, unsigned long bytes) { unsigned char *buf = NULL; @@ -36,32 +93,10 @@ for (i = 0; i < argc; i++) argv[i] = buf + (unsigned long)argv[i]; cwd = argv[argc - 1] + strlen(argv[argc - 1]) + 1; elm_quicklaunch_prepare(argc, argv); - elm_quicklaunch_fork(argc, argv, cwd); + elm_quicklaunch_fork(argc, argv, cwd, post_fork, NULL); elm_quicklaunch_cleanup(); } -static void -child_handler(int n) -{ - int status; - wait(&status); -} - -EAPI void -crash_handler(int x, siginfo_t *info, void *data) -{ - double t; - - EINA_ERROR_PERR("elementary_quicklaunch: crash detected. restarting.\n"); - t = ecore_time_get(); - if ((t - restart_time) <= 2.0) - { - EINA_ERROR_PERR("elementary_quicklaunch: crash too fast - less than 2 seconds. abort restart\n"); - exit(-1); - } - ecore_app_restart(); -} - int main(int argc, char **argv) { @@ -117,41 +152,98 @@ exit(-1); } elm_quicklaunch_init(argc, argv); - signal(SIGINT, SIG_DFL); - signal(SIGTERM, SIG_DFL); - signal(SIGQUIT, SIG_DFL); - signal(SIGALRM, SIG_DFL); - signal(SIGUSR1, SIG_DFL); - signal(SIGUSR2, SIG_DFL); - signal(SIGHUP, SIG_DFL); - signal(SIGCHLD, child_handler); + restart_time = ecore_time_get(); - restart_time = ecore_time_get(); + action.sa_handler = SIG_DFL; + action.sa_restorer = NULL; + action.sa_sigaction = NULL; + action.sa_flags = SA_RESTART | SA_SIGINFO; + sigemptyset(&action.sa_mask); + sigaction(SIGINT, &action, &old_sigint); + action.sa_handler = SIG_DFL; + action.sa_restorer = NULL; + action.sa_sigaction = NULL; + action.sa_flags = SA_RESTART | SA_SIGINFO; + sigemptyset(&action.sa_mask); + sigaction(SIGTERM, &action, &old_sigterm); + + action.sa_handler = SIG_DFL; + action.sa_restorer = NULL; + action.sa_sigaction = NULL; + action.sa_flags = SA_RESTART | SA_SIGINFO; + sigemptyset(&action.sa_mask); + sigaction(SIGQUIT, &action, &old_sigquit); + + action.sa_handler = SIG_DFL; + action.sa_restorer = NULL; + action.sa_sigaction = NULL; + action.sa_flags = SA_RESTART | SA_SIGINFO; + sigemptyset(&action.sa_mask); + sigaction(SIGALRM, &action, &old_sigalrm); + + action.sa_handler = SIG_DFL; + action.sa_restorer = NULL; + action.sa_sigaction = NULL; + action.sa_flags = SA_RESTART | SA_SIGINFO; + sigemptyset(&action.sa_mask); + sigaction(SIGUSR1, &action, &old_sigusr1); + + action.sa_handler = SIG_DFL; + action.sa_restorer = NULL; + action.sa_sigaction = NULL; + action.sa_flags = SA_RESTART | SA_SIGINFO; + sigemptyset(&action.sa_mask); + sigaction(SIGUSR2, &action, &old_sigusr2); + + action.sa_handler = SIG_DFL; + action.sa_restorer = NULL; + action.sa_sigaction = NULL; + action.sa_flags = SA_RESTART | SA_SIGINFO; + sigemptyset(&action.sa_mask); + sigaction(SIGHUP, &action, &old_sighup); + + action.sa_handler = NULL; + action.sa_restorer = NULL; + action.sa_sigaction = child_handler; + action.sa_flags = SA_RESTART | SA_SIGINFO; + sigemptyset(&action.sa_mask); + sigaction(SIGCHLD, &action, &old_sigchld); + + action.sa_handler = NULL; + action.sa_restorer = NULL; action.sa_sigaction = crash_handler; action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; sigemptyset(&action.sa_mask); - sigaction(SIGSEGV, &action, NULL); + sigaction(SIGSEGV, &action, &old_sigsegv); + action.sa_handler = NULL; + action.sa_restorer = NULL; action.sa_sigaction = crash_handler; action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; sigemptyset(&action.sa_mask); - sigaction(SIGILL, &action, NULL); + sigaction(SIGILL, &action, &old_sigill); + action.sa_handler = NULL; + action.sa_restorer = NULL; action.sa_sigaction = crash_handler; action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; sigemptyset(&action.sa_mask); - sigaction(SIGFPE, &action, NULL); + sigaction(SIGFPE, &action, &old_sigfpe); + action.sa_handler = NULL; + action.sa_restorer = NULL; action.sa_sigaction = crash_handler; action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; sigemptyset(&action.sa_mask); - sigaction(SIGBUS, &action, NULL); + sigaction(SIGBUS, &action, &old_sigbus); + action.sa_handler = NULL; + action.sa_restorer = NULL; action.sa_sigaction = crash_handler; action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; sigemptyset(&action.sa_mask); - sigaction(SIGABRT, &action, NULL); + sigaction(SIGABRT, &action, &old_sigabrt); for (;;) { @@ -169,6 +261,7 @@ char line[4096]; read(fd, &bytes, sizeof(unsigned long)); + ecore_app_args_set(argc, (const char **)argv); handle_run(fd, bytes); } elm_quicklaunch_sub_shutdown(); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-26 06:13:31 UTC (rev 39234) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-26 06:20:41 UTC (rev 39235) @@ -155,7 +155,7 @@ EAPI void elm_quicklaunch_shutdown(void); EAPI void elm_quicklaunch_seed(void); EAPI Evas_Bool elm_quicklaunch_prepare(int argc, char **argv); - EAPI Evas_Bool elm_quicklaunch_fork(int argc, char **argv, char *cwd); + EAPI Evas_Bool elm_quicklaunch_fork(int argc, char **argv, char *cwd, void (postfork_func) (void *data), void *postfork_data); EAPI void elm_quicklaunch_cleanup(void); EAPI int elm_quicklaunch_fallback(int argc, char **argv); EAPI char *elm_quicklaunch_exe_path_get(const char *exe); Modified: trunk/TMP/st/elementary/src/lib/elm_main.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_main.c 2009-02-26 06:13:31 UTC (rev 39234) +++ trunk/TMP/st/elementary/src/lib/elm_main.c 2009-02-26 06:20:41 UTC (rev 39235) @@ -278,28 +278,6 @@ (double)_elm_config->finger_size * _elm_config->scale; if (elm_finger_size) _elm_config->finger_size = atoi(elm_finger_size); - - /* FIXME: implement quickstart below */ - /* if !quickstart return - * else - * set up fast-start-fifo (in $ELM_FAST_START_FIFO) - * sit on blocking read - * read 2 bytes == length of data in bytes including nulls - * read N bytes (must be < (page_size - 2)) - * format: exename\0exepath\0[arg1\0][arg2\0][...] - * dlopen exepath - * dlsym elm_main in exe - * if (elm_main ! exists) - * ecore_exe exename - * else - * fork() - * [child] - * call exit(elm_main()); - * [parent] - * close x fd the nasty way (with close()) - * ecore_x_shutdown() - * ecore_x_init() etc. etc. loop back to blocking on fifo read - */ } EAPI void @@ -326,7 +304,6 @@ ECORE_X_EVENT_MASK_WINDOW_PROPERTY); _elm_event_property_change = ecore_event_handler_add (ECORE_X_EVENT_WINDOW_PROPERTY, _elm_window_property_change, NULL); - /* FIXME if quickstart this happens in child */ if (ecore_x_window_prop_card32_get(ecore_x_window_root_first_get(), _elm_atom_enlightenment_scale, &val, 1) > 0) @@ -465,8 +442,30 @@ return 1; } +static void +save_env(void) +{ + int i, size; + extern char **environ; + char **oldenv, **p; + + oldenv = environ; + + for (i = 0, size = 0; environ[i] != NULL; i++) + size += strlen(environ[i]) + 1; + + p = malloc((i + 1) * sizeof(char *)); + if (!p) return; + + environ = p; + + for (i = 0; oldenv[i] != NULL; i++) + environ[i] = strdup(oldenv[i]); + environ[i] = NULL; +} + EAPI Evas_Bool -elm_quicklaunch_fork(int argc, char **argv, char *cwd) +elm_quicklaunch_fork(int argc, char **argv, char *cwd, void (postfork_func) (void *data), void *postfork_data) { pid_t child; int ret; @@ -503,9 +502,25 @@ perror("could not fork"); return 0; } + if (postfork_func) postfork_func(postfork_data); + setsid(); if (chdir(cwd) != 0) perror("could not chdir"); + // FIXME: this is very linux specific. it changes argv[0] of the process + // so ps etc. report what you'd expect. for other unixes and os's this + // may just not work + save_env(); + if (real_argv) + { + char *lastarg, *p; + + ecore_app_args_get(&real_argc, &real_argv); + lastarg = real_argv[real_argc - 1] + strlen(real_argv[real_argc - 1]); + for (p = real_argv[0]; p < lastarg; p++) *p = 0; + strcpy(real_argv[0], argv[0]); + } + ecore_app_args_set(argc, (const char **)argv); ret = qr_main(argc, argv); exit(ret); } |
From: Enlightenment S. <no-...@en...> - 2009-02-26 08:25:28
|
Log: demo changed callback of check and using it in genlist item Author: raster Date: 2009-02-26 00:25:22 -0800 (Thu, 26 Feb 2009) New Revision: 39242 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-26 07:46:57 UTC (rev 39241) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-26 08:25:22 UTC (rev 39242) @@ -2337,6 +2337,7 @@ { Elm_Genlist_Item *item; int mode; + int onoff; } Testitem; static Elm_Genlist_Item_Class itc2; char *gl2_label_get(const void *data, Evas_Object *obj, const char *part) @@ -2479,6 +2480,14 @@ evas_object_show(win); } +static void +my_gl_item_check_changed(void *data, Evas_Object *obj, void *event_info) +{ + Testitem *tit = data; + tit->onoff = elm_check_state_get(obj); + printf("item %p onoff = %i\n", tit, tit->onoff); +} + static Elm_Genlist_Item_Class itc3; char *gl3_label_get(const void *data, Evas_Object *obj, const char *part) { @@ -2514,6 +2523,8 @@ { Evas_Object *ck; ck = elm_check_add(obj); + elm_check_state_set(ck, tit->onoff); + evas_object_smart_callback_add(ck, "changed", my_gl_item_check_changed, data); evas_object_show(ck); return ck; } Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-26 07:46:57 UTC (rev 39241) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-26 08:25:22 UTC (rev 39242) @@ -605,6 +605,10 @@ /* smart callbacks called: * "changed" - the user toggled the state */ + + EAPI Evas_Object *elm_pager_add(Evas_Object *parent); + /* smart callbacks called: + */ #ifdef __cplusplus } |
From: Enlightenment S. <no-...@en...> - 2009-04-23 04:10:54
|
Log: use style generic call in test and fix up freeing of style string. Author: raster Date: 2009-04-22 21:10:43 -0700 (Wed, 22 Apr 2009) New Revision: 40320 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/elm_widget.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-04-23 04:07:59 UTC (rev 40319) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-04-23 04:10:43 UTC (rev 40320) @@ -569,7 +569,7 @@ evas_object_show(bx); hv = elm_hover_add(win); - elm_hover_style_set(hv, "popout"); + elm_object_style_set(hv, "popout"); bt = elm_button_add(win); elm_button_label_set(bt, "Button"); @@ -1815,7 +1815,7 @@ evas_object_show(bg); inwin = elm_win_inwin_add(win); - elm_win_inwin_style_set(inwin, "minimal_vertical"); + elm_object_style_set(inwin, "minimal_vertical"); evas_object_show(inwin); lb = elm_label_add(win); Modified: trunk/TMP/st/elementary/src/lib/elm_widget.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_widget.c 2009-04-23 04:07:59 UTC (rev 40319) +++ trunk/TMP/st/elementary/src/lib/elm_widget.c 2009-04-23 04:10:43 UTC (rev 40320) @@ -74,6 +74,7 @@ { sd->subobjs = eina_list_remove(sd->subobjs, obj); } + if (sd->style) eina_stringshare_del(sd->style); evas_object_smart_callback_call(sd->obj, "sub-object-del", obj); } @@ -774,16 +775,15 @@ const char *old; API_ENTRY return; old = sd->style; - eina_stringshare_del(sd->style); sd->style = eina_stringshare_add(style); - if (old != sd->style) - elm_widget_theme(obj); + if (old) eina_stringshare_del(old); + if (old != sd->style) elm_widget_theme(obj); } EAPI const char * elm_widget_style_get(const Evas_Object *obj) { - API_ENTRY return "default"; + API_ENTRY return ""; if (sd->style) return sd->style; return "default"; } |