naviframe improvements:

- fixed theme to look less like an arse:
    - overlap theme is translucent
    - naviframe title visibility toggle is now animated
    - item pop/push animation now applies to title area as well
    - icon without title label is now centered (see Naviframe 2 test)
    - title label and subtitle are now centered among the free space, should not overlap buttons anymore.
    - title will use a font-size range, trying to not overlap buttons anymore.
    - title will use ellipsis, trying to not overlap buttons anymore.
    - prev/next buttons do not have a fixed min/max size anymore
 - emit signals elm,state,title_label,show and elm,state,title_label,hide
 - by default the previous button label is the title of the previous page

however by using a regular elm_button with an icon and long label
exposes a bug with button theme. And there is a conceptual issue: if
the previous button label is too big, it will look horrible. We should
have a maximum size that, if reached, should have ellipsis. This
should be a different elm_button style, with
elm/button/base/naviframe/back_btn/default being an alias to it.



SVN revision: 74403
This commit is contained in:
Gustavo Sverzut Barbieri 2012-07-25 21:08:53 +00:00
parent 8f730decf1
commit 51e2c4e18b
6 changed files with 874 additions and 425 deletions

View File

@ -332,7 +332,8 @@ pointer_glint_12.png \
pointer_glow.png \
pointer.png \
map_circle.png \
map_scale.png
map_scale.png \
naviframe-base.jpg
default.edj: Makefile $(EXTRA_DIST)
$(EDJE_CC) $(EDJE_FLAGS) \

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

File diff suppressed because it is too large Load Diff

View File

@ -176,6 +176,7 @@ void test_glview_simple(void *data, Evas_Object *obj, void *event_info);
void test_glview(void *data, Evas_Object *obj, void *event_info);
void test_3d(void *data, Evas_Object *obj, void *event_info);
void test_naviframe(void *data, Evas_Object *obj, void *event_info);
void test_naviframe2(void *data, Evas_Object *obj, void *event_info);
void test_naviframe_complex(void *data, Evas_Object *obj, void *event_info);
//void test_factory(void *data, Evas_Object *obj, void *event_info);
void test_datetime(void *data, Evas_Object *obj, void *event_info);
@ -664,6 +665,7 @@ add_tests:
//------------------------------//
ADD_TEST(NULL, "Naviframe", "Naviframe", test_naviframe);
ADD_TEST(NULL, "Naviframe", "Naviframe 2", test_naviframe2);
ADD_TEST(NULL, "Naviframe", "Naviframe: Complex", test_naviframe_complex);
//------------------------------//

View File

@ -167,15 +167,10 @@ _page4(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
void
_page3(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Evas_Object *bt, *bt2, *ic, *content, *nf = data;
Evas_Object *bt2, *ic, *content, *nf = data;
char buf[PATH_MAX];
Elm_Object_Item *it;
bt = elm_button_add(nf);
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
BUTTON_TEXT_SET(bt, "Prev");
evas_object_smart_callback_add(bt, "clicked", _navi_pop, nf);
bt2 = elm_button_add(nf);
evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
BUTTON_TEXT_SET(bt2, "Next");
@ -185,7 +180,7 @@ _page3(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
it = elm_naviframe_item_push(nf,
"Page 3",
bt,
NULL,
bt2,
content,
NULL);
@ -214,7 +209,8 @@ _page2(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
content = _content_new(nf, img2);
it = elm_naviframe_item_push(nf, "Page 2", NULL, bt, content, NULL);
it = elm_naviframe_item_push(nf, "Page 2 - Long Title Here",
NULL, bt, content, NULL);
elm_object_item_part_text_set(it, "subtitle", "Here is sub-title part!");
}
@ -247,4 +243,39 @@ test_naviframe(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_i
evas_object_resize(win, 400, 600);
evas_object_show(win);
}
void
test_naviframe2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Evas_Object *win, *nf, *sc, *btn, *ico, *content;
Elm_Object_Item *it;
win = elm_win_util_standard_add("naviframe", "Naviframe");
elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
elm_win_autodel_set(win, EINA_TRUE);
nf = elm_naviframe_add(win);
evas_object_size_hint_weight_set(nf, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, nf);
evas_object_show(nf);
sc = elm_segment_control_add(nf);
elm_segment_control_item_add(sc, NULL, "Show All");
elm_segment_control_item_add(sc, NULL, "Just Filtered");
btn = elm_button_add(nf);
ico = elm_icon_add(btn);
elm_icon_standard_set(ico, "refresh");
elm_layout_content_set(btn, "icon", ico);
content = _content_new(nf, img1);
it = elm_naviframe_item_push(nf, NULL, NULL, btn, content, NULL);
evas_object_data_set(nf, "page1", it);
elm_object_item_part_content_set(it, "icon", sc);
evas_object_resize(win, 400, 600);
evas_object_show(win);
}
#endif

View File

@ -191,6 +191,11 @@ _item_content_signals_emit(Elm_Naviframe_Item *it)
edje_object_signal_emit(VIEW(it), "elm,state,icon,show", "elm");
else
edje_object_signal_emit(VIEW(it), "elm,state,icon,hide", "elm");
if ((it->title_label) && (it->title_label[0]))
edje_object_signal_emit(VIEW(it), "elm,state,title_label,show", "elm");
else
edje_object_signal_emit(VIEW(it), "elm,state,title_label,hide", "elm");
}
/* FIXME: we need to handle the case when this function is called
@ -261,10 +266,18 @@ _item_text_set_hook(Elm_Object_Item *it,
Elm_Naviframe_Item *nit = (Elm_Naviframe_Item *)it;
char buf[1024];
if (!part || !strcmp(part, "default"))
if ((!part) || (!strcmp(part, "default")) ||
(!strcmp(part, "elm.text.title")))
{
eina_stringshare_replace(&nit->title_label, label);
snprintf(buf, sizeof(buf), "elm.text.title");
if ((label) && (label[0]))
edje_object_signal_emit(VIEW(it), "elm,state,title_label,show",
"elm");
else
edje_object_signal_emit(VIEW(it), "elm,state,title_label,hide",
"elm");
}
else if (!strcmp("subtitle", part))
snprintf(buf, sizeof(buf), "elm.text.subtitle");
@ -811,6 +824,7 @@ _on_item_size_hints_changed(void *data,
static Elm_Naviframe_Item *
_item_new(Evas_Object *obj,
const Elm_Naviframe_Item *prev_it,
const char *title_label,
Evas_Object *prev_btn,
Evas_Object *next_btn,
@ -856,18 +870,18 @@ _item_new(Evas_Object *obj,
_item_text_set_hook((Elm_Object_Item *)it, "elm.text.title", title_label);
//title buttons
if ((!prev_btn) && sd->auto_pushed && sd->stack)
if ((!prev_btn) && sd->auto_pushed && prev_it)
{
Elm_Naviframe_Item *previt = EINA_INLIST_CONTAINER_GET
(sd->stack->last, Elm_Naviframe_Item);
const char *prev_title = previt->title_label;
const char *prev_title = prev_it->title_label;
prev_btn = _back_btn_new(obj, prev_title);
_item_title_prev_btn_set(it, prev_btn);
}
else
_item_title_prev_btn_set(it, prev_btn);
_item_title_next_btn_set(it, next_btn);
if (prev_btn)
_item_content_set_hook((Elm_Object_Item *)it, PREV_BTN_PART, prev_btn);
if (next_btn)
_item_content_set_hook((Elm_Object_Item *)it, NEXT_BTN_PART, next_btn);
_item_content_set(it, content);
it->title_visible = EINA_TRUE;
@ -989,13 +1003,14 @@ elm_naviframe_item_push(Evas_Object *obj,
ELM_NAVIFRAME_DATA_GET(obj, sd);
it = _item_new(obj, title_label, prev_btn, next_btn, content, item_style);
prev_it = (Elm_Naviframe_Item *)elm_naviframe_top_item_get(obj);
it = _item_new(obj, prev_it,
title_label, prev_btn, next_btn, content, item_style);
if (!it) return NULL;
evas_object_show(VIEW(it));
elm_widget_resize_object_set(obj, VIEW(it));
prev_it = (Elm_Naviframe_Item *)elm_naviframe_top_item_get(obj);
if (prev_it)
{
/* re-add as smart member */
@ -1040,13 +1055,22 @@ elm_naviframe_item_insert_before(Evas_Object *obj,
Evas_Object *content,
const char *item_style)
{
Elm_Naviframe_Item *it;
Elm_Naviframe_Item *it, *prev_it;
ELM_NAVIFRAME_CHECK(obj) NULL;
ELM_NAVIFRAME_ITEM_CHECK_OR_RETURN(before, NULL);
ELM_NAVIFRAME_DATA_GET(obj, sd);
it = _item_new(obj, title_label, prev_btn, next_btn, content, item_style);
prev_it = NULL;
if (before)
{
it = (Elm_Naviframe_Item *)before;
prev_it = EINA_INLIST_CONTAINER_GET(EINA_INLIST_GET(it)->prev,
Elm_Naviframe_Item);
}
it = _item_new(obj, prev_it,
title_label, prev_btn, next_btn, content, item_style);
if (!it) return NULL;
sd->stack = eina_inlist_prepend_relative
@ -1073,7 +1097,8 @@ elm_naviframe_item_insert_after(Evas_Object *obj,
ELM_NAVIFRAME_ITEM_CHECK_OR_RETURN(after, NULL);
ELM_NAVIFRAME_DATA_GET(obj, sd);
it = _item_new(obj, title_label, prev_btn, next_btn, content, item_style);
it = _item_new(obj, (Elm_Naviframe_Item *)after,
title_label, prev_btn, next_btn, content, item_style);
if (!it) return NULL;
/* let's share that whole logic, if it goes to the top */