diff --git a/legacy/elementary/data/themes/Makefile.am b/legacy/elementary/data/themes/Makefile.am index 5ed645eb59..89d2ad213a 100644 --- a/legacy/elementary/data/themes/Makefile.am +++ b/legacy/elementary/data/themes/Makefile.am @@ -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) \ diff --git a/legacy/elementary/data/themes/naviframe-base.jpg b/legacy/elementary/data/themes/naviframe-base.jpg new file mode 100644 index 0000000000..e7ecd2117b Binary files /dev/null and b/legacy/elementary/data/themes/naviframe-base.jpg differ diff --git a/legacy/elementary/data/themes/widgets/naviframe.edc b/legacy/elementary/data/themes/widgets/naviframe.edc index 08677008e0..24fa301256 100644 --- a/legacy/elementary/data/themes/widgets/naviframe.edc +++ b/legacy/elementary/data/themes/widgets/naviframe.edc @@ -8,6 +8,63 @@ group { name: "elm/naviframe/base/default"; } } group { name: "elm/naviframe/item/basic/default"; + + images { + image: "naviframe-base.jpg" COMP; + } + + script { + public notitle = 0; + public noprev = 0; + public nonext = 0; + + public set_notitle(val) { + if (get_int(notitle) == val) return; + + set_int(notitle, val); + if (val) + set_state(PART:"elm.swallow.icon", "no-title", 0.0); + else + set_state(PART:"elm.swallow.icon", "default", 0.0); + } + + public apply_area() { + new np = get_int(noprev); + new nn = get_int(nonext); + + if ((!np) && (!nn)) + set_state(PART:"elements_area", "default", 0.0); + else if ((np) && (nn)) + set_state(PART:"elements_area", "full", 0.0); + else if (np) + set_state(PART:"elements_area", "no-prev", 0.0); + else if (nn) + set_state(PART:"elements_area", "no-next", 0.0); + } + + public set_noprev(val) { + if (get_int(noprev) == val) return; + + set_int(noprev, val); + if (val) + set_state(PART:"elm.swallow.prev_btn", "hidden", 0.0); + else + set_state(PART:"elm.swallow.prev_btn", "default", 0.0); + apply_area(); + } + + public set_nonext(val) { + if (get_int(nonext) == val) return; + + set_int(nonext, val); + if (val) + set_state(PART:"elm.swallow.next_btn", "hidden", 0.0); + else + set_state(PART:"elm.swallow.next_btn", "default", 0.0); + apply_area(); + } + } + parts { part { name: "title_clip"; type: RECT; @@ -20,26 +77,17 @@ group { name: "elm/naviframe/item/basic/default"; } description { state: "hide" 0.0; inherit: "default" 0.0; - min: 0 0; - max: 0 0; - fixed: 1 1; + align: 0.0 1.0; } } part { name: "content_clip"; type: RECT; mouse_events: 0; description { state: "default" 0.0; - rel1.to_y: "title_clip"; - rel1.relative: 0 1; - } - } - part { name: "content_base"; - type: RECT; - clip_to: "content_clip"; - description { state: "default" 0.0; - rel1 { to: "elm.swallow.content"; } - rel2 { to: "elm.swallow.content"; } - color: 225 225 225 255; + rel1 { + to_y: "title_clip"; + relative: 0.0 1.0; + } } } part { name: "elm.swallow.content"; @@ -48,370 +96,198 @@ group { name: "elm/naviframe/item/basic/default"; clip_to: "content_clip"; description { state: "default" 0.0; align: 0.0 0.0; - rel1.relative: 0.0 1.0; - rel1.to_y: "title_clip"; - rel2.relative: 1.0 1.0; + rel1.to: "content_clip"; + rel2.to: "content_clip"; } - description { state: "left" 0.0; + description { state: "previous" 0.0; inherit: "default" 0.0; - rel1.relative: -1.0 1.0; - rel2.relative: 0.0 1.0; + rel1.relative: -1.0 0.0; + rel2.relative: 0.0 1.0; } - description { state: "right" 0.0; + description { state: "next" 0.0; inherit: "default" 0.0; - rel1.relative: 1.0 1.0; - rel2.relative: 2.0 1.0; + rel1.relative: 1.0 0.0; + rel2.relative: 2.0 1.0; + } + } + part { name: "elements_clip"; + type: RECT; + description { state: "default" 0.0; + rel1.to: "title_clip"; + rel2.to: "title_clip"; + } + description { state: "previous" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + visible: 0; + rel1.relative: -1.0 0.0; + rel2.relative: 0.0 1.0; + } + description { state: "next" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + visible: 0; + rel1.relative: 1.0 0.0; + rel2.relative: 2.0 1.0; } } part { name: "title_base"; - type: RECT; + type: IMAGE; description { state: "default" 0.0; - rel1 { to: "title_clip"; } - rel2 { to: "title_clip"; } - color: 225 225 225 255; - } - } - part { name: "title_separator"; - type: RECT; - clip_to: "title_clip"; - description { state: "default" 0.0; - min: 0 5; - align: 0.5 1; - fixed: 0 1; - rel1 { to: "title_clip"; relative: 0 1; } - rel2 { to: "title_clip"; } - color: 150 150 150 255; - } - } - part { name: "elm.swallow.prev_btn"; - type: SWALLOW; - scale: 1; - clip_to: "title_clip"; - description { state: "default" 0.0; - min: 80 40; - max: 80 40; - align: 0 0; - fixed: 1 1; - rel1.offset: 5 5; - rel1.to: "title_base"; - rel2.offset: -1 -6; - rel2.to: "title_base"; - } - } - part { name: "elm.swallow.next_btn"; - type: SWALLOW; - scale: 1; - clip_to: "title_clip"; - description { state: "default" 0.0; - min: 80 40; - max: 80 40; - align: 1 0; - fixed: 1 1; - rel1.offset: 0 5; - rel1.to: "title_base"; - rel2.offset: -6 -6; - rel2.to: "title_base"; - } - } - part { name: "elm.swallow.icon"; - type: SWALLOW; - scale: 1; - clip_to: "title_clip"; - description { state: "default" 0.0; - min: 40 40; - max: 40 40; - fixed: 1 1; - align: 1 0.5; - rel1.to: "elm.text.title"; - rel1.relative: 0 0; - rel2.to: "elm.text.title"; - rel2.relative: 0 1; - } - } - part { name: "elm.text.title"; - type: TEXT; - scale: 1; - repeat_events: 1; - clip_to: "title_clip"; - description { state: "default" 0.0; - text { font: "Sans:style=Bold"; - size: 12; - min: 0 0; - max: 1 0; - align: 0.5 0.5; + rel1.to: "elements_clip"; + rel2.to: "elements_clip"; + image { + normal: "naviframe-base.jpg"; + border: 0 0 0 2; + middle: SOLID; } - color: 0 0 0 255; - align: 0.5 0.5; - rel1.to: "title_base"; - rel2.to: "title_base"; } } - part { name: "elm.text.subtitle"; - type: TEXT; - scale: 1; - repeat_events: 1; - clip_to: "title_clip"; - description { state: "default" 0.0; - text { font: "Sans,Edje-Vera"; - size: 10; - min: 0 0; - max: 1 0; - align: 0.5 1; - } - rel1.to_y: "elm.text.title"; - rel1.relative: 0 1; - rel1.to: "title_base"; - rel1.offset: 0 -3; - rel2.to: "title_base"; - rel2.offset: -1 -4; - color: 50 50 50 255; - align: 0.5 0; - } - } - } - programs { - program { name: "content_new_pusehd"; - signal: "elm,state,new,pushed,internal"; - source: ""; - action: STATE_SET "default" 0.0; - transition: DECELERATE 0.5; - target: "elm.swallow.content"; - after: "show_finished"; - } - program { name: "content_cur_pusehd"; - signal: "elm,state,cur,pushed,internal"; - source: ""; - action: STATE_SET "left" 0.0; - target: "elm.swallow.content"; - transition: DECELERATE 0.5; - after: "pushed_finished"; - } - program { name: "content_prev_popped"; - signal: "elm,state,prev,popped,internal"; - source: ""; - action: STATE_SET "default" 0.0; - target: "elm.swallow.content"; - transition: DECELERATE 0.5; - after: "show_finished"; - } - program { name: "content_cur_popped"; - signal: "elm,state,cur,popped,internal"; - source: ""; - action: STATE_SET "right" 0.0; - target: "elm.swallow.content"; - transition: DECELERATE 0.5; - after: "popped_finished"; - } - program { name: "cur_pushed"; - signal: "elm,state,cur,pushed"; - source: "elm"; - script { - set_state(PART:"elm.swallow.content", "default", 0.0); - emit("elm,state,cur,pushed,internal", ""); - } - } - program { name: "new_pushed"; - signal: "elm,state,new,pushed"; - source: "elm"; - script { - set_state(PART:"elm.swallow.content", "right", 0.0); - emit("elm,state,new,pushed,internal", ""); - } - } - program { name: "prev_popped"; - signal: "elm,state,prev,popped"; - source: "elm"; - script { - set_state(PART:"elm.swallow.content", "left", 0.0); - emit("elm,state,prev,popped,internal", ""); - } - } - program { name: "cur_popped"; - signal: "elm,state,cur,popped"; - source: "elm"; - script { - set_state(PART:"elm.swallow.content", "default", 0.0); - emit("elm,state,cur,popped,internal", ""); - } - } - program { name: "visible"; - signal: "elm,state,visible"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "elm.swallow.content"; - } - program { name: "title_show"; - signal: "elm,state,title,show"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "title_clip"; - } - program { name: "title_hide"; - signal: "elm,state,title,hide"; - source: "elm"; - action: STATE_SET "hide" 0.0; - target: "title_clip"; - } - program { - name: "title_clicked"; - signal: "mouse,clicked,1"; - source: "title_base"; - action: SIGNAL_EMIT "elm,action,title,clicked" ""; - } - program { name: "show_finished"; - action: SIGNAL_EMIT "elm,action,show,finished" ""; - } - program { name: "pushed_finished"; - action: SIGNAL_EMIT "elm,action,pushed,finished" ""; - } - program { name: "popped_finished"; - action: SIGNAL_EMIT "elm,action,popped,finished" ""; - } - } -} -group { name: "elm/naviframe/item/overlap/default"; - parts { - part { name: "title_clip"; - type: RECT; - description { state: "default" 0.0; - min: 1 55; - align: 0.0 0.0; - fixed: 0 1; - rel1 { relative: 0.0 0.0; } - rel2 { relative: 1.0 0.0; } - } - description { state: "hide" 0.0; - inherit: "default" 0.0; - min: 0 0; - max: 0 0; - fixed: 1 1; - } - } - part { name: "content_clip"; + + part { name: "elements_area"; type: RECT; mouse_events: 0; description { state: "default" 0.0; - rel1.to_y: "title_clip"; - rel1.relative: 0 1; - color: 255 255 255 255; - visible: 1; - } - description { state: "left" 0.0; - inherit: "default" 0.0; - } - description { state: "right" 0.0; - inherit: "default" 0.0; color: 0 0 0 0; + fixed: 1 1; + rel1 { + to_y: "title_clip"; + to_x: "elm.swallow.prev_btn"; + relative: 1.0 0.0; + offset: 10 0; + } + rel2 { + to: "title_clip"; + to_x: "elm.swallow.next_btn"; + relative: 0.0 1.0; + offset: -11 -1; + } } - } - part { name: "content_base"; - type: RECT; - clip_to: "content_clip"; - description { state: "default" 0.0; - rel1 { to: "elm.swallow.content"; } - rel2 { to: "elm.swallow.content"; } - } - } - part { name: "elm.swallow.content"; - type: SWALLOW; - scale: 1; - clip_to: "content_clip"; - description { state: "default" 0.0; - align: 0.0 0.0; - rel1.relative: 0.0 1.0; - rel1.to_y: "title_clip"; - rel2.relative: 1.0 1.0; - } - description { state: "left" 0.0; + description { state: "full" 0.0; inherit: "default" 0.0; + rel1 { + to: "title_clip"; + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + to: "title_clip"; + relative: 1.0 1.0; + offset: -1 -1; + } } - description { state: "right" 0.0; + description { state: "no-prev" 0.0; inherit: "default" 0.0; - rel1.relative: 1.0 1.0; - rel2.relative: 2.0 1.0; + rel1 { + to: "title_clip"; + relative: 0.0 0.0; + offset: 0 0; + } } - } - part { name: "title_base"; - type: RECT; - description { state: "default" 0.0; - rel1 { to: "title_clip"; } - rel2 { to: "title_clip"; } - color: 225 225 225 255; - } - } - part { name: "title_separator"; - type: RECT; - clip_to: "title_clip"; - description { state: "default" 0.0; - min: 0 5; - align: 0.5 1; - fixed: 0 1; - rel1 { to: "title_clip"; relative: 0 1; } - rel2 { to: "title_clip"; } - color: 150 150 150 255; + description { state: "no-next" 0.0; + inherit: "default" 0.0; + rel2 { + to: "title_clip"; + relative: 1.0 1.0; + offset: -1 -1; + } } } part { name: "elm.swallow.prev_btn"; type: SWALLOW; scale: 1; - clip_to: "title_clip"; + clip_to: "elements_clip"; description { state: "default" 0.0; - min: 80 40; - max: 80 40; - align: 0 0; + min: 40 40; + max: 100 40; + align: 0.0 0.5; fixed: 1 1; - rel1.offset: 5 5; - rel1.to: "title_base"; - rel2.offset: -1 -6; - rel2.to: "title_base"; + rel1 { + to: "elements_clip"; + offset: 5 5; + } + rel2 { + to: "elements_clip"; + relative: 0.0 1.0; + offset: 5 -5; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; } } part { name: "elm.swallow.next_btn"; type: SWALLOW; scale: 1; - clip_to: "title_clip"; + clip_to: "elements_clip"; description { state: "default" 0.0; - min: 80 40; - max: 80 40; - align: 1 0; + min: 40 40; + max: 100 40; + align: 1.0 0.5; fixed: 1 1; - rel1.offset: 0 5; - rel1.to: "title_base"; - rel2.offset: -6 -6; - rel2.to: "title_base"; + rel1 { + to: "elements_clip"; + relative: 1.0 0.0; + offset: -5 5; + } + rel2 { + to: "elements_clip"; + offset: -5 -5; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; } } part { name: "elm.swallow.icon"; type: SWALLOW; scale: 1; - clip_to: "title_clip"; + clip_to: "elements_clip"; description { state: "default" 0.0; min: 40 40; max: 40 40; fixed: 1 1; - align: 1 0.5; + align: 1.0 0.5; rel1.to: "elm.text.title"; rel1.relative: 0 0; rel2.to: "elm.text.title"; rel2.relative: 0 1; } + description { state: "no-title" 0.0; + inherit: "default"; + align: 0.5 0.5; + max: 99999 40; + rel1 { + to: "elements_area"; + relative: 0.0 0.0; + } + rel2 { + to: "elements_area"; + relative: 1.0 1.0; + } + } } part { name: "elm.text.title"; type: TEXT; scale: 1; repeat_events: 1; - clip_to: "title_clip"; + clip_to: "elements_clip"; description { state: "default" 0.0; text { font: "Sans:style=Bold"; size: 12; + size_range: 9 14; + fit: 1 1; min: 0 0; max: 1 0; align: 0.5 0.5; + ellipsis: 0.0; } color: 0 0 0 255; align: 0.5 0.5; - rel1.to: "title_base"; - rel2.to: "title_base"; + rel1.to: "elements_area"; + rel2.to: "elements_area"; } } part { name: "elm.text.subtitle"; @@ -426,101 +302,34 @@ group { name: "elm/naviframe/item/overlap/default"; max: 1 0; align: 0.5 1; } - rel1.to_y: "elm.text.title"; - rel1.relative: 0 1; - rel1.to: "title_base"; - rel1.offset: 0 -3; - rel2.to: "title_base"; - rel2.offset: -1 -4; + rel1 { + to_y: "elm.text.title"; + to_x: "elements_area"; + relative: 0.0 1.0; + offset: 0 -3; + } + rel2 { + to: "elements_area"; + offset: -1 -4; + } color: 50 50 50 255; - align: 0.5 0; + align: 0.5 0.0; } } } programs { - program { name: "content_new_pusehd"; - signal: "elm,state,new,pushed,internal"; - source: ""; - action: STATE_SET "default" 0.0; - transition: DECELERATE 0.5; - target: "elm.swallow.content"; - target: "content_clip"; - after: "show_finished"; - } - program { name: "content_cur_pusehd"; - signal: "elm,state,cur,pushed,internal"; - source: ""; - action: STATE_SET "left" 0.0; - target: "elm.swallow.content"; - target: "content_clip"; - transition: DECELERATE 0.5; - after: "pushed_finished"; - } - program { name: "content_prev_popped"; - signal: "elm,state,prev,popped,internal"; - source: ""; - action: STATE_SET "default" 0.0; - target: "elm.swallow.content"; - target: "content_clip"; - transition: DECELERATE 0.5; - after: "show_finished"; - } - program { name: "content_cur_popped"; - signal: "elm,state,cur,popped,internal"; - source: ""; - action: STATE_SET "right" 0.0; - target: "elm.swallow.content"; - target: "content_clip"; - transition: DECELERATE 0.5; - after: "popped_finished"; - } - program { name: "cur_pushed"; - signal: "elm,state,cur,pushed"; - source: "elm"; - script { - set_state(PART:"elm.swallow.content", "default", 0.0); - set_state(PART:"content_clip", "default", 0.0); - emit("elm,state,cur,pushed,internal", ""); - } - } - program { name: "new_pushed"; - signal: "elm,state,new,pushed"; - source: "elm"; - script { - set_state(PART:"elm.swallow.content", "right", 0.0); - set_state(PART:"content_clip", "right", 0.0); - emit("elm,state,new,pushed,internal", ""); - } - } - program { name: "prev_popped"; - signal: "elm,state,prev,popped"; - source: "elm"; - script { - set_state(PART:"elm.swallow.content", "left", 0.0); - set_state(PART:"content_clip", "left", 0.0); - emit("elm,state,prev,popped,internal", ""); - } - } - program { name: "cur_popped"; - signal: "elm,state,cur,popped"; - source: "elm"; - script { - set_state(PART:"elm.swallow.content", "default", 0.0); - set_state(PART:"content_clip", "default", 0.0); - emit("elm,state,cur,popped,internal", ""); - } - } program { name: "visible"; signal: "elm,state,visible"; source: "elm"; action: STATE_SET "default" 0.0; target: "elm.swallow.content"; - target: "content_clip"; + target: "elements_clip"; } program { name: "title_show"; signal: "elm,state,title,show"; source: "elm"; action: STATE_SET "default" 0.0; + transition: DECELERATE 0.5; target: "title_clip"; } program { name: "title_hide"; @@ -528,21 +337,602 @@ group { name: "elm/naviframe/item/overlap/default"; source: "elm"; action: STATE_SET "hide" 0.0; target: "title_clip"; + transition: DECELERATE 0.5; } - program { - name: "title_clicked"; + program { name: "title_clicked"; signal: "mouse,clicked,1"; source: "title_base"; action: SIGNAL_EMIT "elm,action,title,clicked" ""; } - program { name: "show_finished"; - action: SIGNAL_EMIT "elm,action,show,finished" ""; + + program { + signal: "elm,state,title_label,show"; + source: "elm"; + script { + set_notitle(0); + } } - program { name: "pushed_finished"; + program { + signal: "elm,state,title_label,hide"; + source: "elm"; + script { + set_notitle(1); + } + } + + program { + signal: "elm,state,prev_btn,show"; + source: "elm"; + script { + set_noprev(0); + } + } + program { + signal: "elm,state,prev_btn,hide"; + source: "elm"; + script { + set_noprev(1); + } + } + program { + signal: "elm,state,next_btn,show"; + source: "elm"; + script { + set_nonext(0); + } + } + program { + signal: "elm,state,next_btn,hide"; + source: "elm"; + script { + set_nonext(1); + } + } + + /* current page is being pushed: [previous]<----[current] */ + program { name: "cur_pushed_phase1"; + signal: "elm,state,cur,pushed"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + after: "cur_pushed_phase2"; + } + program { name: "cur_pushed_phase2"; + action: STATE_SET "previous" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + transition: DECELERATE 0.5; + after: "cur_pushed_phase3"; + } + program { name: "cur_pushed_phase3"; action: SIGNAL_EMIT "elm,action,pushed,finished" ""; } - program { name: "popped_finished"; + + /* current page is being popped: [current]---->[next] */ + program { name: "cur_popped_phase1"; + signal: "elm,state,cur,popped"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + after: "cur_popped_phase2"; + } + program { name: "cur_popped_phase2"; + action: STATE_SET "next" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + transition: DECELERATE 0.5; + after: "cur_popped_phase3"; + } + program { name: "cur_popped_phase3"; action: SIGNAL_EMIT "elm,action,popped,finished" ""; } + + /* new page is being pushed: [current]<----[next] */ + program { name: "new_pushed_phase1"; + signal: "elm,state,new,pushed"; + source: "elm"; + action: STATE_SET "next" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + after: "new_pushed_phase2"; + } + program { name: "new_pushed_phase2"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + transition: DECELERATE 0.5; + after: "new_pushed_phase3"; + } + program { name: "new_pushed_phase3"; + action: SIGNAL_EMIT "elm,action,show,finished" ""; + } + + /* previous page is being pushed: [previous]---->[current] */ + program { name: "prev_popped_phase1"; + signal: "elm,state,prev,popped"; + source: "elm"; + action: STATE_SET "previous" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + after: "prev_popped_phase2"; + } + program { name: "prev_popped_phase2"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + transition: DECELERATE 0.5; + after: "prev_popped_phase3"; + } + program { name: "prev_popped_phase3"; + action: SIGNAL_EMIT "elm,action,show,finished" ""; + } + } +} + + +/* same as elm/naviframe/base/default except: + * - title_base is translucent + * - contents follows below title + */ +group { name: "elm/naviframe/item/overlap/default"; + + images { + image: "naviframe-base.jpg" COMP; + } + + script { + public notitle = 0; + public noprev = 0; + public nonext = 0; + + public set_notitle(val) { + if (get_int(notitle) == val) return; + + set_int(notitle, val); + if (val) + set_state(PART:"elm.swallow.icon", "no-title", 0.0); + else + set_state(PART:"elm.swallow.icon", "default", 0.0); + } + + public apply_area() { + new np = get_int(noprev); + new nn = get_int(nonext); + + if ((!np) && (!nn)) + set_state(PART:"elements_area", "default", 0.0); + else if ((np) && (nn)) + set_state(PART:"elements_area", "full", 0.0); + else if (np) + set_state(PART:"elements_area", "no-prev", 0.0); + else if (nn) + set_state(PART:"elements_area", "no-next", 0.0); + } + + public set_noprev(val) { + if (get_int(noprev) == val) return; + + set_int(noprev, val); + if (val) + set_state(PART:"elm.swallow.prev_btn", "hidden", 0.0); + else + set_state(PART:"elm.swallow.prev_btn", "default", 0.0); + apply_area(); + } + + public set_nonext(val) { + if (get_int(nonext) == val) return; + + set_int(nonext, val); + if (val) + set_state(PART:"elm.swallow.next_btn", "hidden", 0.0); + else + set_state(PART:"elm.swallow.next_btn", "default", 0.0); + apply_area(); + } + } + + parts { + part { name: "title_clip"; + type: RECT; + description { state: "default" 0.0; + min: 1 55; + align: 0.0 0.0; + fixed: 0 1; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 0.0; } + } + description { state: "hide" 0.0; + inherit: "default" 0.0; + align: 0.0 1.0; + } + } + part { name: "content_clip"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + scale: 1; + clip_to: "content_clip"; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1.to: "content_clip"; + rel2.to: "content_clip"; + } + description { state: "previous" 0.0; + inherit: "default" 0.0; + rel1.relative: -1.0 0.0; + rel2.relative: 0.0 1.0; + } + description { state: "next" 0.0; + inherit: "default" 0.0; + rel1.relative: 1.0 0.0; + rel2.relative: 2.0 1.0; + } + } + part { name: "elements_clip"; + type: RECT; + description { state: "default" 0.0; + rel1.to: "title_clip"; + rel2.to: "title_clip"; + } + description { state: "previous" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + visible: 0; + rel1.relative: -1.0 0.0; + rel2.relative: 0.0 1.0; + } + description { state: "next" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + visible: 0; + rel1.relative: 1.0 0.0; + rel2.relative: 2.0 1.0; + } + } + part { name: "title_base"; + type: IMAGE; + description { state: "default" 0.0; + rel1.to: "elements_clip"; + rel2.to: "elements_clip"; + color: 255 255 255 128; + image { + normal: "naviframe-base.jpg"; + border: 0 0 0 2; + middle: SOLID; + } + } + } + + part { name: "elements_area"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 0 0 0 0; + fixed: 1 1; + rel1 { + to_y: "title_clip"; + to_x: "elm.swallow.prev_btn"; + relative: 1.0 0.0; + offset: 10 0; + } + rel2 { + to: "title_clip"; + to_x: "elm.swallow.next_btn"; + relative: 0.0 1.0; + offset: -11 -1; + } + } + description { state: "full" 0.0; + inherit: "default" 0.0; + rel1 { + to: "title_clip"; + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + to: "title_clip"; + relative: 1.0 1.0; + offset: -1 -1; + } + } + description { state: "no-prev" 0.0; + inherit: "default" 0.0; + rel1 { + to: "title_clip"; + relative: 0.0 0.0; + offset: 0 0; + } + } + description { state: "no-next" 0.0; + inherit: "default" 0.0; + rel2 { + to: "title_clip"; + relative: 1.0 1.0; + offset: -1 -1; + } + } + } + part { name: "elm.swallow.prev_btn"; + type: SWALLOW; + scale: 1; + clip_to: "elements_clip"; + description { state: "default" 0.0; + min: 40 40; + max: 100 40; + align: 0.0 0.5; + fixed: 1 1; + rel1 { + to: "elements_clip"; + offset: 5 5; + } + rel2 { + to: "elements_clip"; + relative: 0.0 1.0; + offset: 5 -5; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "elm.swallow.next_btn"; + type: SWALLOW; + scale: 1; + clip_to: "elements_clip"; + description { state: "default" 0.0; + min: 40 40; + max: 100 40; + align: 1.0 0.5; + fixed: 1 1; + rel1 { + to: "elements_clip"; + relative: 1.0 0.0; + offset: -5 5; + } + rel2 { + to: "elements_clip"; + offset: -5 -5; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "elm.swallow.icon"; + type: SWALLOW; + scale: 1; + clip_to: "elements_clip"; + description { state: "default" 0.0; + min: 40 40; + max: 40 40; + fixed: 1 1; + align: 1.0 0.5; + rel1.to: "elm.text.title"; + rel1.relative: 0 0; + rel2.to: "elm.text.title"; + rel2.relative: 0 1; + } + description { state: "no-title" 0.0; + inherit: "default"; + align: 0.5 0.5; + max: 99999 40; + rel1 { + to: "elements_area"; + relative: 0.0 0.0; + } + rel2 { + to: "elements_area"; + relative: 1.0 1.0; + } + } + } + part { name: "elm.text.title"; + type: TEXT; + scale: 1; + repeat_events: 1; + clip_to: "elements_clip"; + description { state: "default" 0.0; + text { font: "Sans:style=Bold"; + size: 12; + size_range: 9 14; + fit: 1 1; + min: 0 0; + max: 1 0; + align: 0.5 0.5; + ellipsis: 0.0; + } + color: 0 0 0 255; + align: 0.5 0.5; + rel1.to: "elements_area"; + rel2.to: "elements_area"; + } + } + part { name: "elm.text.subtitle"; + type: TEXT; + scale: 1; + repeat_events: 1; + clip_to: "title_clip"; + description { state: "default" 0.0; + text { font: "Sans,Edje-Vera"; + size: 10; + min: 0 0; + max: 1 0; + align: 0.5 1; + } + rel1 { + to_y: "elm.text.title"; + to_x: "elements_area"; + relative: 0.0 1.0; + offset: 0 -3; + } + rel2 { + to: "elements_area"; + offset: -1 -4; + } + color: 50 50 50 255; + align: 0.5 0.0; + } + } + } + programs { + program { name: "visible"; + signal: "elm,state,visible"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + } + program { name: "title_show"; + signal: "elm,state,title,show"; + source: "elm"; + action: STATE_SET "default" 0.0; + transition: DECELERATE 0.5; + target: "title_clip"; + } + program { name: "title_hide"; + signal: "elm,state,title,hide"; + source: "elm"; + action: STATE_SET "hide" 0.0; + target: "title_clip"; + transition: DECELERATE 0.5; + } + program { name: "title_clicked"; + signal: "mouse,clicked,1"; + source: "title_base"; + action: SIGNAL_EMIT "elm,action,title,clicked" ""; + } + + program { + signal: "elm,state,title_label,show"; + source: "elm"; + script { + set_notitle(0); + } + } + program { + signal: "elm,state,title_label,hide"; + source: "elm"; + script { + set_notitle(1); + } + } + + program { + signal: "elm,state,prev_btn,show"; + source: "elm"; + script { + set_noprev(0); + } + } + program { + signal: "elm,state,prev_btn,hide"; + source: "elm"; + script { + set_noprev(1); + } + } + program { + signal: "elm,state,next_btn,show"; + source: "elm"; + script { + set_nonext(0); + } + } + program { + signal: "elm,state,next_btn,hide"; + source: "elm"; + script { + set_nonext(1); + } + } + + /* current page is being pushed: [previous]<----[current] */ + program { name: "cur_pushed_phase1"; + signal: "elm,state,cur,pushed"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + after: "cur_pushed_phase2"; + } + program { name: "cur_pushed_phase2"; + action: STATE_SET "previous" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + transition: DECELERATE 0.5; + after: "cur_pushed_phase3"; + } + program { name: "cur_pushed_phase3"; + action: SIGNAL_EMIT "elm,action,pushed,finished" ""; + } + + /* current page is being popped: [current]---->[next] */ + program { name: "cur_popped_phase1"; + signal: "elm,state,cur,popped"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + after: "cur_popped_phase2"; + } + program { name: "cur_popped_phase2"; + action: STATE_SET "next" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + transition: DECELERATE 0.5; + after: "cur_popped_phase3"; + } + program { name: "cur_popped_phase3"; + action: SIGNAL_EMIT "elm,action,popped,finished" ""; + } + + /* new page is being pushed: [current]<----[next] */ + program { name: "new_pushed_phase1"; + signal: "elm,state,new,pushed"; + source: "elm"; + action: STATE_SET "next" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + after: "new_pushed_phase2"; + } + program { name: "new_pushed_phase2"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + transition: DECELERATE 0.5; + after: "new_pushed_phase3"; + } + program { name: "new_pushed_phase3"; + action: SIGNAL_EMIT "elm,action,show,finished" ""; + } + + /* previous page is being pushed: [previous]---->[current] */ + program { name: "prev_popped_phase1"; + signal: "elm,state,prev,popped"; + source: "elm"; + action: STATE_SET "previous" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + after: "prev_popped_phase2"; + } + program { name: "prev_popped_phase2"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + target: "elements_clip"; + transition: DECELERATE 0.5; + after: "prev_popped_phase3"; + } + program { name: "prev_popped_phase3"; + action: SIGNAL_EMIT "elm,action,show,finished" ""; + } } } diff --git a/legacy/elementary/src/bin/test.c b/legacy/elementary/src/bin/test.c index 4a18cb4c62..1005abe59c 100644 --- a/legacy/elementary/src/bin/test.c +++ b/legacy/elementary/src/bin/test.c @@ -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); //------------------------------// diff --git a/legacy/elementary/src/bin/test_naviframe.c b/legacy/elementary/src/bin/test_naviframe.c index 661a342625..841e212481 100644 --- a/legacy/elementary/src/bin/test_naviframe.c +++ b/legacy/elementary/src/bin/test_naviframe.c @@ -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 diff --git a/legacy/elementary/src/lib/elc_naviframe.c b/legacy/elementary/src/lib/elc_naviframe.c index 5f6355ccd0..3d8ff7c267 100644 --- a/legacy/elementary/src/lib/elc_naviframe.c +++ b/legacy/elementary/src/lib/elc_naviframe.c @@ -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 */