From: Prince Kr Dubey Date: Tue, 17 May 2011 05:35:09 +0000 (+0530) Subject: Merge Conflict resolved.[SegmentControl] SVN code merged. elm_label support deprecate... X-Git-Tag: REL_I9200_20110603-1~50 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=680740b6ae8cc995fa02a2747a6da63aac784c7b;p=framework%2Fuifw%2Felementary.git Merge Conflict resolved.[SegmentControl] SVN code merged. elm_label support deprecated. Theme is also modified so merging now. Change-Id: Ic7103cbca32bc331cbf026fdd30b17932104ce63 --- diff --git a/data/objects/test.edc b/data/objects/test.edc index 3bb0d79..e219a41 100644 --- a/data/objects/test.edc +++ b/data/objects/test.edc @@ -619,6 +619,8 @@ collections { scale: 1; //allow scaling description { state: "default" 0.0; + visible: 0; + min: 480 400; color: 0 0 0 0; } } @@ -627,116 +629,170 @@ collections { scale: 1; //allow scaling description { state: "default" 0.0; + visible: 0; min : 250 30; //minimum size for gap filler fixed: 0 1; - rel1 { relative: 0 0; } - rel2 { relative: 1 0; } + rel1 { + relative: 0.0 0.0; + } + rel2 { + relative: 1.0 0.0; + } color: 0 0 0 0; align: 0 0; } } - part { name: "segment"; + part { name: "segment1"; type: SWALLOW; scale: 1; description { state: "default" 0.0; fixed: 1 1; - min: 360 50; - max: 360 50; - rel1 { relative: 0 1.0; to_y: "top_padding"; } - align: 0.5 0; + rel1 { + relative: 0.0 1.0; + to_x: "bg"; + to_y: "top_padding"; + } + rel2 { + relative: 1.0 0.25; + to: "bg"; + } + align: 0.5 0.0; } } - part { name: "btn1_bottom_padding"; + part { name: "segment1_bottom_padding"; type: RECT; scale: 1; description { state: "default" 0.0; - min : 250 30; - max : 250 30; + visible: 0; + min : 250 10; + max : 250 10; fixed: 1 1; align: 0.5 0; - rel1 { relative: 0 1.0; to_y: "segment"; } - rel2 { relative: 1 1.0; to_y: "segment"; } + rel1 { + relative: 0 1.0; + to_y: "segment1"; + } + rel2 { + relative: 1 1.0; + to_y: "segment1"; + } color: 0 255 0 0; } } - part { name: "add"; + part { name: "segment2"; type: SWALLOW; scale: 1; description { state: "default" 0.0; fixed: 1 1; - align: 0.5 0; - min: 250 50; - max: 250 50; - rel1 { relative: 0 1.0; to_y: "btn1_bottom_padding"; } - align: 0.5 0; + rel1 { + relative: 0.1 1.0; + to_x: "bg"; + to_y: "segment1_bottom_padding"; + } + rel2 { + relative: 0.9 160/400; + to: "bg"; + } + align: 0.5 0.0; } } - part { name: "btn2_bottom_padding"; + part { name: "segment2_bottom_padding"; type: RECT; scale: 1; description { state: "default" 0.0; - min : 250 50; - max : 250 50; + visible: 0; + min : 250 10; + max : 250 10; fixed: 1 1; align: 0.5 0; - rel1 { relative: 0 1.0; to_y: "add"; } - rel2 { relative: 1 1.0; to_y: "add"; } - color: 0 0 0 0; - } + rel1 { + relative: 0 1.0; + to_y: "segment2"; + } + rel2 { + relative: 1 1.0; + to_y: "segment2"; + } + } } - part { name: "del"; + part { name: "segment3"; type: SWALLOW; scale: 1; description { state: "default" 0.0; fixed: 1 1; - min: 250 50; - max: 250 50; - align: 0.5 0; - rel1 { relative: 0 1.0; to_y: "btn2_bottom_padding"; } - align: 0.5 0; + rel1 { + relative: 0.2 1.0; + to_x: "bg"; + to_y: "segment2_bottom_padding"; + } + rel2 { + relative: 0.8 0.6; + to: "bg"; + } + align: 0.5 0.0; } } - part { name: "btn3_bottom_padding"; + part { name: "segment3_bottom_padding"; type: RECT; scale: 1; description { state: "default" 0.0; - min : 250 50; - max : 250 50; + visible: 0; + min : 250 10; + max : 250 10; fixed: 1 1; align: 0.5 0; - rel1 { relative: 0 1.0; to_y: "del"; } - rel2 { relative: 1 1.0; to_y: "del"; } - color: 0 0 0 0; + rel1 { + relative: 0 1.0; + to_y: "segment3"; + } + rel2 { + relative: 1 1.0; + to_y: "segment3"; + } } } - part { name: "insert"; + part { name: "segment4"; type: SWALLOW; scale: 1; description { - fixed: 1 1; - min: 250 50; - max: 250 50; state: "default" 0.0; - rel1 { relative: 0 1.0; to_y: "btn3_bottom_padding"; } - align: 0.5 0; + fixed: 1 1; + rel1 { + relative: 0.3 1.0; + to_x: "bg"; + to_y: "segment3_bottom_padding"; + } + rel2 { + relative: 0.7 340/400; + to: "bg"; + } + align: 0.5 0.0; } } - part { name: "btn_bottom_padding"; + part { name: "btn1_bottom_padding"; type: RECT; scale: 1; description { state: "default" 0.0; - min : 0 30; - rel1 { relative: 0 1.0; to_y: "insert"; } - rel2 { relative: 1 1.0;} - color: 0 0 0 0; - align: 0.5 1; + visible: 0; + min : 250 100; + max : 250 100; + fixed: 1 1; + align: 0.5 0; + rel1 { + relative: 0 1.0; + to_y: "segment4"; + } + rel2 { + relative: 1 1.0; + to_y: "segment4"; + } } } } diff --git a/data/themes/default.edc b/data/themes/default.edc index 71833eb..86c0f1f 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -9,727 +9,7 @@ externals.external: "elm"; collections { -/////////////////////////////////////////////////////////////////////////////// - group { name: "elm/segment_control/base/default"; - parts { - part { name: "bg"; - type: RECT; - mouse_events: 0; - scale: 1; - description { - state: "default" 0.0; - color: 0 0 0 0; - min: 100 40; - } - } - } - } - group { name: "elm/segment_control/item/default"; - data.item: "label.wrap.part" "label.bg"; - images { - image: "seg_single_pressed.png" COMP; - image: "seg_single_selected.png" COMP; - image: "seg_single_normal.png" COMP; - - image: "seg_left_pressed.png" COMP; - image: "seg_left_selected.png" COMP; - image: "seg_left_normal.png" COMP; - - image: "seg_middle_pressed.png" COMP; - image: "seg_middle_selected.png" COMP; - image: "seg_middle_normal.png" COMP; - image: "seg_right_pressed.png" COMP; - image: "seg_right_selected.png" COMP; - image: "seg_right_normal.png" COMP; - } - parts { - part { name: "segment"; - mouse_events: 1; - scale: 1; - description { state: "default" 0.0; - min: 1 1; - visible: 0; - image { - normal: "seg_single_normal.png"; - border: 7 7 7 7; - border_scale: 1; - middle: 1; - } - } - description { state: "default_single" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_single_normal.png"; - border: 7 7 7 7; - } - } - description { state: "default_left" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_left_normal.png"; - border: 6 1 7 7; - } - } - description { state: "default_right" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_right_normal.png"; - border: 1 6 7 7; - } - } - description { state: "default_middle" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_middle_normal.png"; - border: 2 2 2 2; - } - } - description { state: "pressed_single" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_single_pressed.png"; - border: 7 7 7 7; - } - } - description { state: "pressed_left" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_left_pressed.png"; - border: 6 1 7 7; - } - } - description { state: "pressed_right" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_right_pressed.png"; - border: 1 6 7 7; - } - } - description { state: "pressed_middle" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_middle_pressed.png"; - border: 1 1 2 2; - } - } - description { state: "selected_single" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_single_selected.png"; - border: 7 7 7 7; - } - } - description { state: "selected_left" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_left_selected.png"; - border: 6 3 7 7; - } - } - description { state: "selected_right" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_right_selected.png"; - border: 3 6 7 7; - } - } - description { state: "selected_middle" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_middle_selected.png"; - border: 3 3 3 3; - } - } - } - part { name: "padding_left"; - type: RECT; - scale: 1; - mouse_events: 0; - description { state: "default" 0.0; - align: 0.0 0.0; - rel1.relative: 0.0 0.0; - rel2.relative: 0.0 1.0; - min: 2 2; - max: 2 2; - fixed: 1 0; - color: 0 0 0 0; - } - } - part { name: "padding_right"; - type: RECT; - scale: 1; - mouse_events: 0; - description { state: "default" 0.0; - align: 1.0 0.0; - rel1.relative: 1.0 0.0; - rel2.relative: 1.0 1.0; - min: 2 2; - max: 2 2; - fixed: 1 0; - color: 0 0 0 0; - } - } - part { name: "padding_top"; - type: RECT; - scale: 1; - mouse_events: 0; - description { state: "default" 0.0; - align: 0.0 0.0; - rel1.relative: 0.0 0.0; - rel2.relative: 1.0 0.0; - min: 2 2; - max: 2 2; - fixed: 0 1; - color: 0 0 0 0; - } - } - part { name: "padding_bottom"; - type: RECT; - scale: 1; - mouse_events: 0; - description { state: "default" 0.0; - align: 1.0 1.0; - rel1.relative: 0.0 1.0; - rel2.relative: 1.0 1.0; - min: 2 2; - max: 2 2; - fixed: 0 1; - color: 0 0 0 0; - } - } - part { name: "icon.bg"; - type: RECT; - scale: 1; - mouse_events: 0; - description { state: "default" 0.0; - visible: 1; - fixed: 1 0; - rel1 {relative: 1.0 1.0; to_x: "padding_left"; to_y: "padding_top"; } - rel2 {relative: 1.0 1.0; to: "elm.swallow.icon"; } - align: 0.0 0.5; - color: 0 0 0 0; - } - } - part { name: "padding_icon_text"; - type: RECT; - scale: 1; - mouse_events: 0; - description { state: "default" 0.0; //when only icon or no icon is there - align: 0.0 0.0; - rel1 { relative: 1.0 0.0; to: "icon.bg"; } - rel2 { relative: 1.0 1.0; to: "icon.bg"; } - fixed: 1 0; - min: 0 0; - color: 0 0 0 0; - } - description { state: "icononly" 0.0; - inherit: "default" 0.0; - } - description { state: "visible" 0.0; //when icon is visible - align: 0.0 0.0; - rel1 { relative: 1.0 0.0; to: "icon.bg"; } - rel2 { relative: 1.0 1.0; to: "icon.bg"; } - fixed: 1 0; - min: 2 0; - color: 0 0 0 0; - } - } - part { name: "elm.swallow.icon"; - type: SWALLOW; - scale: 1; - description { state: "default" 0.0; - visible: 0; - align: 0.0 0.5; - rel1 {relative: 1.0 1.0; to_x: "padding_left"; to_y: "padding_top"; } - rel2 {relative: 0.0 0.0; to_y: "padding_bottom"; } - fixed: 1 0; - aspect: 1.0 1.0; - aspect_preference: BOTH; - } - description { state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - rel2 {relative: 0.3 0.0; to_y: "padding_bottom"; } - } - description { state: "icononly" 0.0;; - inherit: "default" 0.0; - visible: 1; - rel2 {relative: 0.0 0.0; to_x: "padding_right"; to_y: "padding_bottom"; } - align: 0.5 0.5; - } - } - part { name: "label.bg"; - repeat_events: 1; - scale: 1; - description { state: "default" 0.0; - rel1 { relative: 1.0 1.0; to_x: "padding_icon_text"; to_y: "padding_top"; } - rel2 { relative: 0.0 0.0; to_x: "padding_right"; to_y: "padding_bottom"; } - } - } - part { name: "elm.swallow.label"; - type: SWALLOW; - mouse_events: 0; - scale: 1; - clip_to: "label.bg"; - description { state: "default" 0.0; - visible: 0; - fixed: 1 1; - min: 1 1; - align: 0.0 0.5; - rel1 { relative: 1.0 1.0; to_x: "padding_icon_text";} - rel2 { relative: 0.0 0.0; to_x: "padding_right";} - } - description { state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - part { name: "disabler"; - repeat_events: 0; - scale: 1; - description { state: "default" 0.0; - visible: 0; - fixed: 1 1; - min: 1 1; - align: 0.0 0.5; - rel1 { relative: 0.0 0.0; to: "segment";} - rel2 { relative: 1.0 1.0; to: "segment";} - color: 255 255 255 150; - } - description { state: "disabled_single" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_single_normal.png"; - border: 7 7 7 7; - } - } - description { state: "disabled_left" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_left_normal.png"; - border: 6 1 7 7; - } - } - description { state: "disabled_right" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_right_normal.png"; - border: 1 6 7 7; - } - } - description { state: "disabled_middle" 0.0; - inherit: "default" 0.0; - visible: 1; - image { - normal: "seg_middle_normal.png"; - border: 2 2 2 2; - } - } - } - } - programs { - script { - public seg_type; // 1-Single, 2-Left, 3-Middle, 4-Right. - public seg_state; // 1-Normal/Default, 2-Pressed, 3-Selected. - public seg_status;// 0-Enabled/Default, 1-Disabled - - public update_state() { - new type, state, disabled; - type = get_int(seg_type); - state = get_int(seg_state); - disabled = get_int(seg_status); - - if( state ==1 ) - { - if(type == 1) - set_state(PART:"segment", "default_single", 0.0); - else if(type == 2) - set_state(PART:"segment", "default_left", 0.0); - else if(type == 3) - set_state(PART:"segment", "default_middle", 0.0); - else if(type == 4) - set_state(PART:"segment", "default_right", 0.0); - } - else if( state == 2 ) - { - if(type == 1) - set_state(PART:"segment", "pressed_single", 0.0); - else if(type == 2) - set_state(PART:"segment", "pressed_left", 0.0); - else if(type == 3) - set_state(PART:"segment", "pressed_middle", 0.0); - else if(type == 4) - set_state(PART:"segment", "pressed_right", 0.0); - } - else if( state == 3 ) - { - if(type == 1) - set_state(PART:"segment", "selected_single", 0.0); - else if(type == 2) - set_state(PART:"segment", "selected_left", 0.0); - else if(type == 3) - set_state(PART:"segment", "selected_middle", 0.0); - else if(type == 4) - set_state(PART:"segment", "selected_right", 0.0); - } - if( disabled == 1 ) - { - if(type == 1) - set_state(PART:"disabler", "disabled_single", 0.0); - else if(type == 2) - set_state(PART:"disabler", "disabled_left", 0.0); - else if(type == 3) - set_state(PART:"disabler", "disabled_middle", 0.0); - else if(type == 4) - set_state(PART:"disabler", "disabled_right", 0.0); - } - } - } - program { - name: "segment_type_s"; - signal: "elm,type,segment,single"; - source: "elm"; - script { - set_int(seg_type, 1); - update_state(); - } - } - program { - name: "segment_type_l"; - signal: "elm,type,segment,left"; - source: "elm"; - script { - set_int(seg_type, 2); - update_state(); - } - } - program { - name: "segment_type_m"; - signal: "elm,type,segment,middle"; - source: "elm"; - script { - set_int(seg_type, 3); - update_state(); - } - } - program { - name: "segment_type_r"; - signal: "elm,type,segment,right"; - source: "elm"; - script { - set_int(seg_type, 4); - update_state(); - } - } - program { - name: "normal_segment"; - signal: "elm,state,segment,normal"; - source: "elm"; - script { - set_int(seg_state, 1); - update_state(); - } - } - program { - name: "pressed_segment"; - signal: "elm,state,segment,pressed"; - source: "elm"; - script { - set_int(seg_state, 2); - update_state(); - } - } - program { - name: "selected_segment"; - signal: "elm,state,segment,selected"; - source: "elm"; - script { - set_int(seg_state, 3 ); - update_state(); - } - } - program { name: "disable_segment"; - signal: "elm,state,disabled"; - source: "elm"; - script { - set_int(seg_status, 1); - update_state(); - } - } - program { name: "enable_segment"; - signal: "elm,state,enabled"; - source: "elm"; - script { - set_int(seg_status, 0); - update_state(); - } - } - program { name: "text_show"; - signal: "elm,state,text,visible"; - source: "elm"; - script { - new st[31]; - new Float:vl; - get_state(PART:"elm.swallow.icon", st, 30, vl); - if (!strcmp(st, "icononly")) - { - set_state(PART:"elm.swallow.icon", "visible", 0.0); - set_state(PART:"padding_icon_text", "visible", 0.0); - } - set_state(PART:"elm.swallow.label", "visible", 0.0); - } - } - program { name: "text_hide"; - signal: "elm,state,text,hidden"; - source: "elm"; - script { - new st[31]; - new Float:vl; - get_state(PART:"elm.swallow.icon", st, 30, vl); - if (!strcmp(st, "visible")) - { - set_state(PART:"elm.swallow.icon", "icononly", 0.0); - set_state(PART:"padding_icon_text", "icononly", 0.0); - } - set_state(PART:"elm.swallow.label", "default", 0.0); - } - } - program { name: "icon_show"; - signal: "elm,state,icon,visible"; - source: "elm"; - script { - new st[31]; - new Float:vl; - get_state(PART:"elm.swallow.label", st, 30, vl); - if (!strcmp(st, "normal")) - { - set_state(PART:"elm.swallow.icon", "visible", 0.0); - set_state(PART:"padding_icon_text", "visible", 0.0); - } - else - { - set_state(PART:"elm.swallow.icon", "icononly", 0.0); - set_state(PART:"padding_icon_text", "icononly", 0.0); - } - } - } - program { name: "icon_hide"; - signal: "elm,state,icon,hidden"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "elm.swallow.icon"; - } - } - } - group { name: "elm/label/base/segment_normal"; - data.item: "default_font_size" "24"; - data.item: "min_font_size" "16"; - data.item: "max_font_size" "24"; - styles { - style { name: "seg_text_style_normal"; - base: "font=Sans font_size=16 style=shadow \ - shadow_color=#2924224d \ - align=center \ - color=#ffffffff wrap=char"; - tag: "br" "\n"; - tag: "hilight" "+ font=Sans:style=Bold"; - tag: "tab" "\t"; - } - style { name: "seg_text_style_selected"; - base: "font=Sans:style=Bold font_size=16 style=shadow \ - shadow_color=#aaaaaa4d \ - align=center \ - color=#111111ff wrap=char"; - tag: "br" "\n"; - tag: "hilight" "+ font=Sans:style=Bold"; - tag: "b" "+ font=Sans:style=Bold"; - tag: "tab" "\t"; - } - style { name: "seg_text_style_disabled"; - base: "font=SLP:style=Medium font_size=24 style=shadow \ - shadow_color=#2924224d \ - align=center color=#2924224d \ - wrap=char"; - tag: "br" "\n"; - tag: "hilight" "+ font=SLP:style=Bold"; - tag: "b" "+ font=SLP:style=Bold"; - tag: "tab" "\t"; - } - } - parts { - part { name: "label.swallow.background"; - type: SWALLOW; - description { state: "default" 0.0; - visible: 1; - rel1.relative, 0.0 0.0; - rel2.relative, 1.0 1.0; - } - } - part { name: "label.text.clip"; - type: RECT; - description { state: "default" 0.0; - visible: 1; - rel1 { relative: 0 0; to: "label.swallow.background"; } - rel2 { relative: 1 1; to: "label.swallow.background"; } - } - } - part { name: "elm.text"; - type: TEXTBLOCK; - effect: SHADOW; - mouse_events: 0; - scale: 1; - clip_to: "label.text.clip"; - description { state: "default" 0.0; - rel1.relative, 0.0 0.0; - rel2.relative, 1.0 1.0; - align: 0.0 0.5; - text { - style: "seg_text_style_normal"; - align: 0.0 0.5; - min: 1 0; - } - } - } - } - } - - group { name: "elm/label/base/segment_pressed"; - data.item: "default_font_size" "24"; - data.item: "min_font_size" "16"; - data.item: "max_font_size" "24"; - parts { - part { name: "label.swallow.background"; - type: SWALLOW; - description { state: "default" 0.0; - visible: 1; - rel1.relative, 0.0 0.0; - rel2.relative, 1.0 1.0; - } - } - part { name: "label.text.clip"; - type: RECT; - description { state: "default" 0.0; - visible: 1; - rel1 { relative: 0 0; to: "label.swallow.background"; } - rel2 { relative: 1 1; to: "label.swallow.background"; } - } - } - part { name: "elm.text"; - type: TEXTBLOCK; - effect: SHADOW; - mouse_events: 0; - scale: 1; - clip_to: "label.text.clip"; - description { state: "default" 0.0; - rel1.relative, 0.0 0.0; - rel2.relative, 1.0 1.0; - align: 0.0 0.5; - text { - style: "seg_text_style_selected"; - align: 0.0 0.5; - min: 1 0; - } - } - } - } -} - - group { name: "elm/label/base/segment_selected"; - data.item: "default_font_size" "24"; - data.item: "min_font_size" "16"; - data.item: "max_font_size" "24"; - parts { - part { name: "label.swallow.background"; - type: SWALLOW; - description { state: "default" 0.0; - visible: 1; - rel1.relative, 0.0 0.0; - rel2.relative, 1.0 1.0; - } - } - part { name: "label.text.clip"; - type: RECT; - description { state: "default" 0.0; - visible: 1; - rel1 { relative: 0 0; to: "label.swallow.background"; } - rel2 { relative: 1 1; to: "label.swallow.background"; } - } - } - part { name: "elm.text"; - type: TEXTBLOCK; - effect: SHADOW; - mouse_events: 0; - scale: 1; - clip_to: "label.text.clip"; - description { state: "default" 0.0; - rel1.relative, 0.0 0.0; - rel2.relative, 1.0 1.0; - align: 0.0 0.5; - text { - style: "seg_text_style_selected"; - align: 0.0 0.5; - min: 1 0; - } - } - } - } - } - group { name: "elm/label/base/segment_disabled"; - data.item: "default_font_size" "24"; - data.item: "min_font_size" "16"; - data.item: "max_font_size" "24"; - parts { - part { name: "label.swallow.background"; - type: SWALLOW; - description { state: "default" 0.0; - visible: 1; - rel1.relative, 0.0 0.0; - rel2.relative, 1.0 1.0; - } - } - part { name: "label.text.clip"; - type: RECT; - description { state: "default" 0.0; - visible: 1; - rel1 { relative: 0 0; to: "label.swallow.background"; } - rel2 { relative: 1 1; to: "label.swallow.background"; } - } - } - part { name: "elm.text"; - type: TEXTBLOCK; - effect: SHADOW; - mouse_events: 0; - scale: 1; - clip_to: "label.text.clip"; - description { state: "default" 0.0; - rel1.relative, 0.0 0.0; - rel2.relative, 1.0 1.0; - align: 0.0 0.5; - text { - style: "seg_text_style_disabled"; - align: 0.0 0.5; - min: 1 0; - } - } - } - } - } /////////////////////////////////////////////////////////////////////////////// group { name: "elm/focus_highlight/top/default"; images { @@ -36477,121 +35757,439 @@ collections { offset: 0 -1; } rel2 { - to_y: "elm.swallow.filename"; + to_y: "elm.swallow.filename"; + relative: 1.0 0.0; + offset: -1 -1; + } + } + } + part { name: "elm.swallow.filename"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.5 1.0; + fixed: 1 1; + rel1 { + to_y: "elm.swallow.ok"; + relative: 0.0 0.0; + offset: 0 -1; + } + rel2 { + to_y: "elm.swallow.ok"; + relative: 1.0 0.0; + offset: -1 -1; + } + } + } + part { name: "elm.swallow.cancel"; + type: SWALLOW; + description { state: "default" 0.0; + align: 1.0 1.0; + fixed: 1 1; + rel1 { + to: "elm.swallow.ok"; + relative: 0.0 0.0; + offset: -3 0; + } + rel2 { + to: "elm.swallow.ok"; + relative: 0.0 1.0; + offset: -3 -1; + } + } + } + part { name: "elm.swallow.ok"; + type: SWALLOW; + description { state: "default" 0.0; + align: 1.0 1.0; + fixed: 1 1; + rel1 { + relative: 1.0 1.0; + offset: -1 -1; + } + } + } + } + } + + group { name: "elm/fileselector_entry/base/default"; + parts { + part { name: "elm.swallow.entry"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.0 0.0; + min: 50 10; + rel2 { to_x: "elm.swallow.button"; + relative: 0.0 1.0; + offset: -1 -1; + } + } + } + part { name: "elm.swallow.button"; + type: SWALLOW; + description { state: "default" 0.0; + align: 1.0 0.0; + min: 10 10; + fixed: 1 1; + rel1 { + relative: 1.0 0.0; + offset: -21 0; + } + } + } + } + } + +//////////////////////////////////////////////////////////////////////// +// Standard layouts to be used // +//////////////////////////////////////////////////////////////////////// + /* application with toolbar and main content area */ + group { name: "elm/layout/application/toolbar-content"; + parts { + part { name: "elm.swallow.content"; + type: SWALLOW; + description { state: "default" 0.0; + rel1 { to_y: "elm.external.toolbar"; + relative: 0.0 1.0; + offset: -1 1; + } + } + } + + part { name: "elm.external.toolbar"; + type: EXTERNAL; + source: "elm/toolbar"; + description { state: "default" 0.0; + align: 0.5 0.0; + fixed: 0 1; + rel2 { + relative: 1.0 0.0; + offset: -1 47; + } + } + } + } + } + + /* application with toolbar and main content area with a back button and title area */ + group { name: "elm/layout/application/toolbar-content-back"; + parts { + part { name: "elm.swallow.content"; + type: SWALLOW; + description { state: "default" 0.0; + rel1 { to_y: "title_clipper"; + relative: 0.0 1.0; + offset: -1 1; + } + } + } + + part { name: "elm.external.toolbar"; + type: EXTERNAL; + source: "elm/toolbar"; + description { state: "default" 0.0; + fixed: 0 1; + align: 0.5 0.0; + rel2 { + relative: 1.0 0.0; + offset: -1 47; + } + } + } + part { name: "title_clipper"; + type: RECT; + description { state: "default" 0.0; + visible: 1; + rel1 { + to_y: "back"; + } + rel2 { + to_y: "back"; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + rel2 { + relative: 1.0 0.0; + } + } + } + part { name: "back_clipper"; + type: RECT; + clip_to: "title_clipper"; + description { state: "default" 0.0; + visible: 1; + } + description { state: "hidden" 0.0; + visible: 0; + } + } + part { name: "back"; + type: EXTERNAL; + source: "elm/button"; + clip_to: "back_clipper"; + description { state: "default" 0.0; + align: 0.0 0.0; + fixed: 1 1; + rel1 { to_y: "elm.external.toolbar"; + relative: 0.0 1.0; + offset: 0 1; + } + rel2 { to_y: "elm.external.toolbar"; + relative: 0.0 1.0; + offset: 50 32; + } + params.string: "label" "Back"; + } + } + programs { + program { + signal: "clicked"; + source: "back"; + action: SIGNAL_EMIT "elm,action,back" ""; + } + program { + signal: "elm,back,hide"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "back_clipper"; + } + program { + signal: "elm,back,show"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "back_clipper"; + } + program { + signal: "elm,title,hide"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + transition: LINEAR 0.1; + target: "title_clipper"; + } + program { + signal: "elm,title,show"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "title_clipper"; + } + } + + part { name: "elm.swallow.end"; + type: SWALLOW; + description { state: "default" 0.0; + align: 1.0 0.0; + fixed: 1 1; + rel1 { to_y: "elm.external.toolbar"; + relative: 1.0 1.0; + offset: -2 1; + } + rel2 { to_y: "elm.external.toolbar"; + relative: 1.0 1.0; + offset: -1 32; + } + } + } + + part { name: "elm.text.title"; + type: TEXT; + effect: SOFT_SHADOW; + scale: 1; + description { state: "default" 0.0; + rel1 { to_y: "elm.external.toolbar"; + to_x: "back"; + relative: 1.0 1.0; + offset: 2 1; + } + rel2 { to_y: "back"; + to_x: "elm.swallow.end"; + relative: 0.0 1.0; + offset: -3 -1; + } + text { + font: "Sans:style=Bold"; + size: 12; + } + } + } + } + } + + /* application with toolbar and main content area with a back and next buttons and title area */ + group { name: "elm/layout/application/toolbar-content-back-next"; + parts { + part { name: "elm.swallow.content"; + type: SWALLOW; + description { state: "default" 0.0; + rel1 { to_y: "title_clipper"; + relative: 0.0 1.0; + offset: -1 1; + } + } + } + + part { name: "elm.external.toolbar"; + type: EXTERNAL; + source: "elm/toolbar"; + description { state: "default" 0.0; + fixed: 0 1; + align: 0.5 0.0; + rel2 { relative: 1.0 0.0; - offset: -1 -1; + offset: -1 47; } } } - part { name: "elm.swallow.filename"; - type: SWALLOW; + part { name: "title_clipper"; + type: RECT; description { state: "default" 0.0; - align: 0.5 1.0; - fixed: 1 1; + visible: 1; rel1 { - to_y: "elm.swallow.ok"; - relative: 0.0 0.0; - offset: 0 -1; + to_y: "back"; } rel2 { - to_y: "elm.swallow.ok"; + to_y: "back"; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + rel2 { relative: 1.0 0.0; - offset: -1 -1; } } } - part { name: "elm.swallow.cancel"; - type: SWALLOW; + part { name: "back"; + type: EXTERNAL; + source: "elm/button"; + clip_to: "back_clipper"; description { state: "default" 0.0; - align: 1.0 1.0; + align: 0.0 0.0; fixed: 1 1; - rel1 { - to: "elm.swallow.ok"; - relative: 0.0 0.0; - offset: -3 0; + rel1 { to_y: "elm.external.toolbar"; + relative: 0.0 1.0; + offset: 0 1; } - rel2 { - to: "elm.swallow.ok"; + rel2 { to_y: "elm.external.toolbar"; relative: 0.0 1.0; - offset: -3 -1; + offset: 50 32; } + params.string: "label" "Back"; } } - part { name: "elm.swallow.ok"; - type: SWALLOW; + part { name: "back_clipper"; + type: RECT; + clip_to: "title_clipper"; description { state: "default" 0.0; - align: 1.0 1.0; - fixed: 1 1; - rel1 { - relative: 1.0 1.0; - offset: -1 -1; - } + visible: 1; } - } - } - } - - group { name: "elm/fileselector_entry/base/default"; - parts { - part { name: "elm.swallow.entry"; - type: SWALLOW; - description { state: "default" 0.0; - align: 0.0 0.0; - min: 50 10; - rel2 { to_x: "elm.swallow.button"; - relative: 0.0 1.0; - offset: -1 -1; - } + description { state: "hidden" 0.0; + visible: 0; } } - part { name: "elm.swallow.button"; - type: SWALLOW; + part { name: "next"; + type: EXTERNAL; + source: "elm/button"; + clip_to: "next_clipper"; description { state: "default" 0.0; align: 1.0 0.0; - min: 10 10; fixed: 1 1; - rel1 { - relative: 1.0 0.0; - offset: -21 0; + rel1 { to_y: "elm.external.toolbar"; + relative: 1.0 1.0; + offset: -2 1; + } + rel2 { to_y: "elm.external.toolbar"; + relative: 1.0 1.0; + offset: -1 32; } + params.string: "label" "Next"; + } + } + part { name: "next_clipper"; + type: RECT; + clip_to: "title_clipper"; + description { state: "default" 0.0; + visible: 1; + } + description { state: "hidden" 0.0; + visible: 0; } } - } - } - -//////////////////////////////////////////////////////////////////////// -// Standard layouts to be used // -//////////////////////////////////////////////////////////////////////// - /* application with toolbar and main content area */ - group { name: "elm/layout/application/toolbar-content"; - parts { - part { name: "elm.swallow.content"; - type: SWALLOW; + programs { + program { + signal: "clicked"; + source: "back"; + action: SIGNAL_EMIT "elm,action,back" ""; + } + program { + signal: "elm,title,hide"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + transition: LINEAR 0.1; + target: "title_clipper"; + } + program { + signal: "elm,title,show"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "title_clipper"; + } + program { + signal: "elm,back,hide"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "back_clipper"; + } + program { + signal: "elm,back,show"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "back_clipper"; + } + program { + signal: "clicked"; + source: "next"; + action: SIGNAL_EMIT "elm,action,next" ""; + } + program { + signal: "elm,next,hide"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "next_clipper"; + } + program { + signal: "elm,next,show"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "next_clipper"; + } + } + part { name: "elm.text.title"; + type: TEXT; + effect: SOFT_SHADOW; + scale: 1; + clip_to: "title_clipper"; description { state: "default" 0.0; rel1 { to_y: "elm.external.toolbar"; + to_x: "back"; + relative: 1.0 1.0; + offset: 2 1; + } + rel2 { to_y: "back"; + to_x: "next"; relative: 0.0 1.0; - offset: -1 1; + offset: -3 -1; } - } - } - - part { name: "elm.external.toolbar"; - type: EXTERNAL; - source: "elm/toolbar"; - description { state: "default" 0.0; - align: 0.5 0.0; - fixed: 0 1; - rel2 { - relative: 1.0 0.0; - offset: -1 47; + text { + font: "Sans:style=Bold"; + size: 12; } } } } } - - /* application with toolbar and main content area with a back button and title area */ - group { name: "elm/layout/application/toolbar-content-back"; + /* application with a main content area with a back button and title area */ + group { name: "elm/layout/application/content-back"; parts { part { name: "elm.swallow.content"; type: SWALLOW; @@ -36602,19 +36200,6 @@ collections { } } } - - part { name: "elm.external.toolbar"; - type: EXTERNAL; - source: "elm/toolbar"; - description { state: "default" 0.0; - fixed: 0 1; - align: 0.5 0.0; - rel2 { - relative: 1.0 0.0; - offset: -1 47; - } - } - } part { name: "title_clipper"; type: RECT; description { state: "default" 0.0; @@ -36651,12 +36236,12 @@ collections { description { state: "default" 0.0; align: 0.0 0.0; fixed: 1 1; - rel1 { to_y: "elm.external.toolbar"; - relative: 0.0 1.0; + rel1 { + relative: 0.0 0.0; offset: 0 1; } - rel2 { to_y: "elm.external.toolbar"; - relative: 0.0 1.0; + rel2 { + relative: 0.0 0.0; offset: 50 32; } params.string: "label" "Back"; @@ -36700,11 +36285,11 @@ collections { description { state: "default" 0.0; align: 1.0 0.0; fixed: 1 1; - rel1 { to_y: "elm.external.toolbar"; - relative: 1.0 1.0; + rel1 { + relative: 1.0 0.0; offset: -2 1; } - rel2 { to_y: "elm.external.toolbar"; + rel2 { relative: 1.0 1.0; offset: -1 32; } @@ -36716,9 +36301,9 @@ collections { effect: SOFT_SHADOW; scale: 1; description { state: "default" 0.0; - rel1 { to_y: "elm.external.toolbar"; + rel1 { to_x: "back"; - relative: 1.0 1.0; + relative: 1.0 0.0; offset: 2 1; } rel2 { to_y: "back"; @@ -36735,8 +36320,8 @@ collections { } } - /* application with toolbar and main content area with a back and next buttons and title area */ - group { name: "elm/layout/application/toolbar-content-back-next"; + /* application with a main content area with a back and next buttons and title area */ + group { name: "elm/layout/application/content-back-next"; parts { part { name: "elm.swallow.content"; type: SWALLOW; @@ -36748,18 +36333,6 @@ collections { } } - part { name: "elm.external.toolbar"; - type: EXTERNAL; - source: "elm/toolbar"; - description { state: "default" 0.0; - fixed: 0 1; - align: 0.5 0.0; - rel2 { - relative: 1.0 0.0; - offset: -1 47; - } - } - } part { name: "title_clipper"; type: RECT; description { state: "default" 0.0; @@ -36786,12 +36359,12 @@ collections { description { state: "default" 0.0; align: 0.0 0.0; fixed: 1 1; - rel1 { to_y: "elm.external.toolbar"; - relative: 0.0 1.0; + rel1 { + relative: 0.0 0.0; offset: 0 1; } - rel2 { to_y: "elm.external.toolbar"; - relative: 0.0 1.0; + rel2 { + relative: 0.0 0.0; offset: 50 32; } params.string: "label" "Back"; @@ -36814,12 +36387,12 @@ collections { description { state: "default" 0.0; align: 1.0 0.0; fixed: 1 1; - rel1 { to_y: "elm.external.toolbar"; - relative: 1.0 1.0; + rel1 { + relative: 1.0 0.0; offset: -2 1; } - rel2 { to_y: "elm.external.toolbar"; - relative: 1.0 1.0; + rel2 { + relative: 1.0 0.0; offset: -1 32; } params.string: "label" "Next"; @@ -36890,9 +36463,9 @@ collections { scale: 1; clip_to: "title_clipper"; description { state: "default" 0.0; - rel1 { to_y: "elm.external.toolbar"; + rel1 { to_x: "back"; - relative: 1.0 1.0; + relative: 1.0 0.0; offset: 2 1; } rel2 { to_y: "back"; @@ -36908,355 +36481,661 @@ collections { } } } - /* application with a main content area with a back button and title area */ - group { name: "elm/layout/application/content-back"; + + /* application with toolbar and main content area as a vertical box */ + group { name: "elm/layout/application/toolbar-vbox"; parts { - part { name: "elm.swallow.content"; - type: SWALLOW; + part { name: "elm.box.content"; + type: BOX; description { state: "default" 0.0; - rel1 { to_y: "title_clipper"; + rel1 { to_y: "elm.external.toolbar"; + relative: 0.0 1.0; + offset: -1 1; + } + box.layout: "vertical"; + } + } + + part { name: "elm.external.toolbar"; + type: EXTERNAL; + source: "elm/toolbar"; + description { state: "default" 0.0; + align: 0.5 0.0; + fixed: 0 1; + rel2 { + relative: 1.0 0.0; + offset: -1 47; + } + } + } + } + } + + /* application with toolbar and main content area as a table */ + group { name: "elm/layout/application/toolbar-table"; + parts { + part { name: "elm.table.content"; + type: TABLE; + description { state: "default" 0.0; + rel1 { to_y: "elm.external.toolbar"; relative: 0.0 1.0; offset: -1 1; } } } - part { name: "title_clipper"; + + part { name: "elm.external.toolbar"; + type: EXTERNAL; + source: "elm/toolbar"; + description { state: "default" 0.0; + align: 0.5 0.0; + fixed: 0 1; + rel2 { + relative: 1.0 0.0; + offset: -1 47; + } + } + } + } + } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "elm/segment_control/base/default"; +#define SEGMENT_TYPE_SINGLE 1 +#define SEGMENT_TYPE_LEFT 2 +#define SEGMENT_TYPE_MIDDLE 3 +#define SEGMENT_TYPE_RIGHT 4 +#define SEGMENT_STATE_NORMAL 1 +#define SEGMENT_STATE_PRESSED 2 +#define SEGMENT_STATE_SELECTED 3 +#define SEGMENT_STATUS_ENABLED 0 +#define SEGMENT_STATUS_DISABLED 1 + parts { + part { name: "bg"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + min: 100 40; + } + } + } + } + group { name: "elm/segment_control/item/default"; + images { + image: "seg_single_pressed.png" COMP; + image: "seg_single_selected.png" COMP; + image: "seg_single_normal.png" COMP; + + image: "seg_left_pressed.png" COMP; + image: "seg_left_selected.png" COMP; + image: "seg_left_normal.png" COMP; + + image: "seg_middle_pressed.png" COMP; + image: "seg_middle_selected.png" COMP; + image: "seg_middle_normal.png" COMP; + + image: "seg_right_pressed.png" COMP; + image: "seg_right_selected.png" COMP; + image: "seg_right_normal.png" COMP; + } + parts { + part { name: "segment"; + mouse_events: 1; + scale: 1; + description { state: "default" 0.0; + min: 1 1; + visible: 0; + image { + normal: "seg_single_normal.png"; + border: 7 7 7 7; + border_scale: 1; + middle: 1; + } + } + description { state: "default_single" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_single_normal.png"; + border: 7 7 7 7; + } + } + description { state: "default_left" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_left_normal.png"; + border: 6 1 7 7; + } + } + description { state: "default_right" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_right_normal.png"; + border: 1 6 7 7; + } + } + description { state: "default_middle" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_middle_normal.png"; + border: 2 2 2 2; + } + } + description { state: "pressed_single" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_single_pressed.png"; + border: 7 7 7 7; + } + } + description { state: "pressed_left" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_left_pressed.png"; + border: 6 1 7 7; + } + } + description { state: "pressed_right" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_right_pressed.png"; + border: 1 6 7 7; + } + } + description { state: "pressed_middle" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_middle_pressed.png"; + border: 1 1 2 2; + } + } + description { state: "selected_single" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_single_selected.png"; + border: 7 7 7 7; + } + } + description { state: "selected_left" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_left_selected.png"; + border: 6 3 7 7; + } + } + description { state: "selected_right" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_right_selected.png"; + border: 3 6 7 7; + } + } + description { state: "selected_middle" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_middle_selected.png"; + border: 3 3 3 3; + } + } + } + part { name: "padding_left"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 0.0 1.0; + min: 2 2; + max: 2 2; + fixed: 1 0; + color: 0 0 0 0; + } + } + part { name: "padding_right"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + align: 1.0 0.0; + rel1.relative: 1.0 0.0; + rel2.relative: 1.0 1.0; + min: 2 2; + max: 2 2; + fixed: 1 0; + color: 0 0 0 0; + } + } + part { name: "padding_top"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 0.0; + min: 2 2; + max: 2 2; + fixed: 0 1; + color: 0 0 0 0; + } + } + part { name: "padding_bottom"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + align: 1.0 1.0; + rel1.relative: 0.0 1.0; + rel2.relative: 1.0 1.0; + min: 2 2; + max: 2 2; + fixed: 0 1; + color: 0 0 0 0; + } + } + part { name: "icon.bg"; type: RECT; + scale: 1; + mouse_events: 0; description { state: "default" 0.0; visible: 1; + fixed: 1 0; rel1 { - to_y: "back"; - } - rel2 { - to_y: "back"; + to_x: "padding_left"; + to_y: "padding_top"; + relative: 1.0 1.0; } - } - description { state: "hidden" 0.0; - inherit: "default" 0.0; - visible: 0; rel2 { - relative: 1.0 0.0; + to: "elm.swallow.icon"; + relative: 1.0 1.0; } + align: 0.0 0.5; + color: 0 0 0 0; } } - part { name: "back_clipper"; + part { name: "padding_icon_text"; type: RECT; - clip_to: "title_clipper"; - description { state: "default" 0.0; - visible: 1; - } - description { state: "hidden" 0.0; - visible: 0; - } - } - part { name: "back"; - type: EXTERNAL; - source: "elm/button"; - clip_to: "back_clipper"; - description { state: "default" 0.0; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; //when only icon or no icon is there align: 0.0 0.0; - fixed: 1 1; rel1 { - relative: 0.0 0.0; - offset: 0 1; + to: "icon.bg"; + relative: 1.0 0.0; } rel2 { - relative: 0.0 0.0; - offset: 50 32; + to: "icon.bg"; + relative: 1.0 1.0; } - params.string: "label" "Back"; - } - } - programs { - program { - signal: "clicked"; - source: "back"; - action: SIGNAL_EMIT "elm,action,back" ""; - } - program { - signal: "elm,back,hide"; - source: "elm"; - action: STATE_SET "hidden" 0.0; - target: "back_clipper"; - } - program { - signal: "elm,back,show"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "back_clipper"; + fixed: 1 0; + min: 0 0; + color: 0 0 0 0; } - program { - signal: "elm,title,hide"; - source: "elm"; - action: STATE_SET "hidden" 0.0; - transition: LINEAR 0.1; - target: "title_clipper"; + description { state: "icononly" 0.0; + inherit: "default" 0.0; } - program { - signal: "elm,title,show"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "title_clipper"; + description { state: "visible" 0.0; //when icon is visible + inherit: "default" 0.0; + min: 2 0; } } - - part { name: "elm.swallow.end"; + part { name: "elm.swallow.icon"; type: SWALLOW; - description { state: "default" 0.0; - align: 1.0 0.0; - fixed: 1 1; - rel1 { - relative: 1.0 0.0; - offset: -2 1; - } - rel2 { - relative: 1.0 1.0; - offset: -1 32; - } - } - } - - part { name: "elm.text.title"; - type: TEXT; - effect: SOFT_SHADOW; scale: 1; description { state: "default" 0.0; + visible: 0; + align: 0.0 0.5; rel1 { - to_x: "back"; - relative: 1.0 0.0; - offset: 2 1; - } - rel2 { to_y: "back"; - to_x: "elm.swallow.end"; - relative: 0.0 1.0; - offset: -3 -1; - } - text { - font: "Sans:style=Bold"; - size: 12; + to_x: "padding_left"; + to_y: "padding_top"; + relative: 1.0 1.0; } - } - } - } - } - - /* application with a main content area with a back and next buttons and title area */ - group { name: "elm/layout/application/content-back-next"; - parts { - part { name: "elm.swallow.content"; - type: SWALLOW; - description { state: "default" 0.0; - rel1 { to_y: "title_clipper"; - relative: 0.0 1.0; - offset: -1 1; + rel2 { + to_y: "padding_bottom"; + relative: 0.0 0.0; } + fixed: 1 0; + aspect: 1.0 1.0; + aspect_preference: BOTH; } - } - - part { name: "title_clipper"; - type: RECT; - description { state: "default" 0.0; + description { state: "visible" 0.0; + inherit: "default" 0.0; visible: 1; - rel1 { - to_y: "back"; - } rel2 { - to_y: "back"; + to_y: "padding_bottom"; + relative: 0.3 0.0; } } - description { state: "hidden" 0.0; + description { state: "icononly" 0.0; inherit: "default" 0.0; - visible: 0; + visible: 1; rel2 { - relative: 1.0 0.0; + to_x: "padding_right"; + to_y: "padding_bottom"; + relative: 0.0 0.0; } + align: 0.5 0.5; } } - part { name: "back"; - type: EXTERNAL; - source: "elm/button"; - clip_to: "back_clipper"; - description { state: "default" 0.0; - align: 0.0 0.0; + part { name: "elm.text"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + visible: 0; fixed: 1 1; + min: 1 1; rel1 { - relative: 0.0 0.0; - offset: 0 1; + to_x: "padding_icon_text"; + relative: 1.0 1.0; } rel2 { + to_x: "padding_right"; relative: 0.0 0.0; - offset: 50 32; } - params.string: "label" "Back"; + color: 224 224 224 255; + color3: 0 0 0 64; + text { + font: "Sans"; + ellipsis: 0.0; + fit: 1 1; + size: 24; + size_range: 8 36; + min: 0 1; + } } - } - part { name: "back_clipper"; - type: RECT; - clip_to: "title_clipper"; - description { state: "default" 0.0; + description { state: "normal" 0.0; + inherit: "default" 0.0; visible: 1; } - description { state: "hidden" 0.0; - visible: 0; + description { state: "pressed" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 0 0 0 255; + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 50 50 50 255; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 200 200 200 255; } } - part { name: "next"; - type: EXTERNAL; - source: "elm/button"; - clip_to: "next_clipper"; + part { name: "disabler"; + repeat_events: 0; + scale: 1; description { state: "default" 0.0; - align: 1.0 0.0; + visible: 0; fixed: 1 1; - rel1 { - relative: 1.0 0.0; - offset: -2 1; + min: 1 1; + align: 0.0 0.5; + rel1 { relative: 0.0 0.0; to: "segment";} + rel2 { relative: 1.0 1.0; to: "segment";} + color: 255 255 255 150; + } + description { state: "disabled_single" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_single_normal.png"; + border: 7 7 7 7; } - rel2 { - relative: 1.0 0.0; - offset: -1 32; + } + description { state: "disabled_left" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_left_normal.png"; + border: 6 1 7 7; } - params.string: "label" "Next"; - } - } - part { name: "next_clipper"; - type: RECT; - clip_to: "title_clipper"; - description { state: "default" 0.0; + } + description { state: "disabled_right" 0.0; + inherit: "default" 0.0; visible: 1; + image { + normal: "seg_right_normal.png"; + border: 1 6 7 7; + } } - description { state: "hidden" 0.0; - visible: 0; + description { state: "disabled_middle" 0.0; + inherit: "default" 0.0; + visible: 1; + image { + normal: "seg_middle_normal.png"; + border: 2 2 2 2; + } } } - programs { - program { - signal: "clicked"; - source: "back"; - action: SIGNAL_EMIT "elm,action,back" ""; + } + programs { + script { + public seg_type; // Single, Left, Middle, Right. + public seg_state; // Normal/Default, Pressed, Selected. + public seg_status;// Enabled/Default, Disabled + + public update_state() { + new type, state, disabled; + type = get_int(seg_type); + state = get_int(seg_state); + disabled = get_int(seg_status); + + if(state == SEGMENT_STATE_NORMAL) + { + if(type == SEGMENT_TYPE_SINGLE) + set_state(PART:"segment", "default_single", 0.0); + else if(type == SEGMENT_TYPE_LEFT) + set_state(PART:"segment", "default_left", 0.0); + else if(type == SEGMENT_TYPE_MIDDLE) + set_state(PART:"segment", "default_middle", 0.0); + else if(type == SEGMENT_TYPE_RIGHT) + set_state(PART:"segment", "default_right", 0.0); + set_state(PART:"elm.text", "normal", 0.0); + } + else if(state == SEGMENT_STATE_PRESSED) + { + if(type == SEGMENT_TYPE_SINGLE) + set_state(PART:"segment", "pressed_single", 0.0); + else if(type == SEGMENT_TYPE_LEFT) + set_state(PART:"segment", "pressed_left", 0.0); + else if(type == SEGMENT_TYPE_MIDDLE) + set_state(PART:"segment", "pressed_middle", 0.0); + else if(type == SEGMENT_TYPE_RIGHT) + set_state(PART:"segment", "pressed_right", 0.0); + set_state(PART:"elm.text", "pressed", 0.0); + } + else if(state == SEGMENT_STATE_SELECTED) + { + if(type == SEGMENT_TYPE_SINGLE) + set_state(PART:"segment", "selected_single", 0.0); + else if(type == SEGMENT_TYPE_LEFT) + set_state(PART:"segment", "selected_left", 0.0); + else if(type == SEGMENT_TYPE_MIDDLE) + set_state(PART:"segment", "selected_middle", 0.0); + else if(type == SEGMENT_TYPE_RIGHT) + set_state(PART:"segment", "selected_right", 0.0); + set_state(PART:"elm.text", "selected", 0.0); + } + if(disabled == SEGMENT_STATUS_DISABLED) + { + if(type == SEGMENT_TYPE_SINGLE) + set_state(PART:"disabler", "disabled_single", 0.0); + else if(type == SEGMENT_TYPE_LEFT) + set_state(PART:"disabler", "disabled_left", 0.0); + else if(type == SEGMENT_TYPE_MIDDLE) + set_state(PART:"disabler", "disabled_middle", 0.0); + else if(type == SEGMENT_TYPE_RIGHT) + set_state(PART:"disabler", "disabled_right", 0.0); + set_state(PART:"elm.text", "disabled", 0.0); + } } - program { - signal: "elm,title,hide"; - source: "elm"; - action: STATE_SET "hidden" 0.0; - transition: LINEAR 0.1; - target: "title_clipper"; + } + program { + name: "segment_type_s"; + signal: "elm,type,segment,single"; + source: "elm"; + script { + set_int(seg_type, SEGMENT_TYPE_SINGLE); + update_state(); } - program { - signal: "elm,title,show"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "title_clipper"; + } + program { + name: "segment_type_l"; + signal: "elm,type,segment,left"; + source: "elm"; + script { + set_int(seg_type, SEGMENT_TYPE_LEFT); + update_state(); } - program { - signal: "elm,back,hide"; - source: "elm"; - action: STATE_SET "hidden" 0.0; - target: "back_clipper"; + } + program { + name: "segment_type_m"; + signal: "elm,type,segment,middle"; + source: "elm"; + script { + set_int(seg_type, SEGMENT_TYPE_MIDDLE); + update_state(); } - program { - signal: "elm,back,show"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "back_clipper"; + } + program { + name: "segment_type_r"; + signal: "elm,type,segment,right"; + source: "elm"; + script { + set_int(seg_type, SEGMENT_TYPE_RIGHT); + update_state(); } - program { - signal: "clicked"; - source: "next"; - action: SIGNAL_EMIT "elm,action,next" ""; + } + program { + name: "normal_segment"; + signal: "elm,state,segment,normal"; + source: "elm"; + script { + set_int(seg_state, SEGMENT_STATE_NORMAL); + update_state(); } - program { - signal: "elm,next,hide"; - source: "elm"; - action: STATE_SET "hidden" 0.0; - target: "next_clipper"; + } + program { + name: "pressed_segment"; + signal: "elm,state,segment,pressed"; + source: "elm"; + script { + set_int(seg_state, SEGMENT_STATE_PRESSED); + update_state(); } - program { - signal: "elm,next,show"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "next_clipper"; + } + program { + name: "selected_segment"; + signal: "elm,state,segment,selected"; + source: "elm"; + script { + set_int(seg_state, SEGMENT_STATE_SELECTED); + update_state(); } } - part { name: "elm.text.title"; - type: TEXT; - effect: SOFT_SHADOW; - scale: 1; - clip_to: "title_clipper"; - description { state: "default" 0.0; - rel1 { - to_x: "back"; - relative: 1.0 0.0; - offset: 2 1; - } - rel2 { to_y: "back"; - to_x: "next"; - relative: 0.0 1.0; - offset: -3 -1; - } - text { - font: "Sans:style=Bold"; - size: 12; - } + program { name: "disable_segment"; + signal: "elm,state,disabled"; + source: "elm"; + script { + set_int(seg_status, SEGMENT_STATUS_DISABLED); + update_state(); } } - } - } - - /* application with toolbar and main content area as a vertical box */ - group { name: "elm/layout/application/toolbar-vbox"; - parts { - part { name: "elm.box.content"; - type: BOX; - description { state: "default" 0.0; - rel1 { to_y: "elm.external.toolbar"; - relative: 0.0 1.0; - offset: -1 1; - } - box.layout: "vertical"; + program { name: "enable_segment"; + signal: "elm,state,enabled"; + source: "elm"; + script { + set_int(seg_status, SEGMENT_STATUS_ENABLED); + update_state(); } } - - part { name: "elm.external.toolbar"; - type: EXTERNAL; - source: "elm/toolbar"; - description { state: "default" 0.0; - align: 0.5 0.0; - fixed: 0 1; - rel2 { - relative: 1.0 0.0; - offset: -1 47; - } + program { name: "text_show"; + signal: "elm,state,text,visible"; + source: "elm"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.swallow.icon", st, 30, vl); + if (!strcmp(st, "icononly")) + { + set_state(PART:"elm.swallow.icon", "visible", 0.0); + set_state(PART:"padding_icon_text", "visible", 0.0); + } + get_state(PART:"elm.text", st, 30, vl); + if (!strcmp(st, "selected")) + set_state(PART:"elm.text", "selected", 0.0); + else + set_state(PART:"elm.text", "normal", 0.0); } } - } - } - - /* application with toolbar and main content area as a table */ - group { name: "elm/layout/application/toolbar-table"; - parts { - part { name: "elm.table.content"; - type: TABLE; - description { state: "default" 0.0; - rel1 { to_y: "elm.external.toolbar"; - relative: 0.0 1.0; - offset: -1 1; - } + program { name: "text_hide"; + signal: "elm,state,text,hidden"; + source: "elm"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.swallow.icon", st, 30, vl); + if (!strcmp(st, "visible")) + { + set_state(PART:"elm.swallow.icon", "icononly", 0.0); + set_state(PART:"padding_icon_text", "icononly", 0.0); + } + set_state(PART:"elm.text", "default", 0.0); } } - - part { name: "elm.external.toolbar"; - type: EXTERNAL; - source: "elm/toolbar"; - description { state: "default" 0.0; - align: 0.5 0.0; - fixed: 0 1; - rel2 { - relative: 1.0 0.0; - offset: -1 47; - } + program { name: "icon_show"; + signal: "elm,state,icon,visible"; + source: "elm"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.text", st, 30, vl); + if ((!strcmp(st, "normal")) || (!strcmp(st, "selected"))) + { + set_state(PART:"elm.swallow.icon", "visible", 0.0); + set_state(PART:"padding_icon_text", "visible", 0.0); + } + else + { + set_state(PART:"elm.swallow.icon", "icononly", 0.0); + set_state(PART:"padding_icon_text", "icononly", 0.0); + } } } + program { name: "icon_hide"; + signal: "elm,state,icon,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.icon"; + } } +#undef SEGMENT_TYPE_SINGLE +#undef SEGMENT_TYPE_LEFT +#undef SEGMENT_TYPE_MIDDLE +#undef SEGMENT_TYPE_RIGHT +#undef SEGMENT_STATE_NORMAL +#undef SEGMENT_STATE_PRESSED +#undef SEGMENT_STATE_SELECTED +#undef SEGMENT_STATUS_ENABLED +#undef SEGMENT_STATUS_DISABLED } /* a simple title layout, with a label and two icons */ diff --git a/data/themes/seg_left_pressed.png b/data/themes/seg_left_pressed.png index 120cc39..347c607 100644 Binary files a/data/themes/seg_left_pressed.png and b/data/themes/seg_left_pressed.png differ diff --git a/data/themes/seg_left_selected.png b/data/themes/seg_left_selected.png index 0abb452..c2e1546 100644 Binary files a/data/themes/seg_left_selected.png and b/data/themes/seg_left_selected.png differ diff --git a/data/themes/seg_middle_normal.png b/data/themes/seg_middle_normal.png index d0fa761..4bd183a 100644 Binary files a/data/themes/seg_middle_normal.png and b/data/themes/seg_middle_normal.png differ diff --git a/data/themes/seg_middle_pressed.png b/data/themes/seg_middle_pressed.png index bb7c821..79fbe0f 100644 Binary files a/data/themes/seg_middle_pressed.png and b/data/themes/seg_middle_pressed.png differ diff --git a/data/themes/seg_right_normal.png b/data/themes/seg_right_normal.png index a5391d4..3d719f8 100644 Binary files a/data/themes/seg_right_normal.png and b/data/themes/seg_right_normal.png differ diff --git a/data/themes/seg_right_pressed.png b/data/themes/seg_right_pressed.png index 9ae9c26..e93ae20 100644 Binary files a/data/themes/seg_right_pressed.png and b/data/themes/seg_right_pressed.png differ diff --git a/data/themes/seg_right_selected.png b/data/themes/seg_right_selected.png index 3c420fe..6037721 100644 Binary files a/data/themes/seg_right_selected.png and b/data/themes/seg_right_selected.png differ diff --git a/data/themes/seg_single_normal.png b/data/themes/seg_single_normal.png index f952454..e619e27 100644 Binary files a/data/themes/seg_single_normal.png and b/data/themes/seg_single_normal.png differ diff --git a/data/themes/seg_single_pressed.png b/data/themes/seg_single_pressed.png index bdda5ac..ff90a24 100644 Binary files a/data/themes/seg_single_pressed.png and b/data/themes/seg_single_pressed.png differ diff --git a/src/bin/test.c b/src/bin/test.c index 78577ee..1b8e2b3 100644 --- a/src/bin/test.c +++ b/src/bin/test.c @@ -120,6 +120,7 @@ void test_diskselector(void *data, Evas_Object *obj, void *event_info); void test_colorselector(void *data, Evas_Object *obj, void *event_info); void test_ctxpopup(void *data, Evas_Object *obj, void *event_info); void test_bubble(void *data, Evas_Object *obj, void *event_info); +void test_segment_control(void *data, Evas_Object *obj, void *event_info); void test_store(void *data, Evas_Object *obj, void *event_info); struct elm_test @@ -373,6 +374,7 @@ my_win_main(char *autorun) ADD_TEST("Color Selector", test_colorselector); ADD_TEST("Ctxpopup", test_ctxpopup); ADD_TEST("Bubble", test_bubble); + ADD_TEST("Segment Control", test_segment_control); ADD_TEST("Store", test_store); #undef ADD_TEST diff --git a/src/bin/test_segment_control.c b/src/bin/test_segment_control.c index 0afed9a..4a45fb8 100644 --- a/src/bin/test_segment_control.c +++ b/src/bin/test_segment_control.c @@ -4,66 +4,21 @@ #endif #ifndef ELM_LIB_QUICKLAUNCH -static Evas_Object* btn1 = NULL; -static Evas_Object* btn2 = NULL; -static Evas_Object* btn3 = NULL; - - -static void -_cb1( void* data, Evas_Object* obj, void* event_info) -{ - Elm_Segment_Item *it1 = elm_segment_control_item_selected_get( data ); - elm_segment_control_item_del(it1); - return; -} - - -static void -_cb3( void* data, Evas_Object* obj, void* event_info) -{ - Elm_Segment_Item *it1; - char buf[PATH_MAX]; - Evas_Object *ic1 = elm_icon_add(obj); - snprintf(buf, sizeof(buf), "%s/images/icon_00.png", PACKAGE_DATA_DIR); - elm_icon_file_set(ic1, buf, NULL); - evas_object_size_hint_aspect_set(ic1, EVAS_ASPECT_CONTROL_BOTH, 1, 1); - - - it1 = elm_segment_control_item_insert_at(data, ic1, "Inserted Item", 0); - elm_segment_control_item_label_set(it1, "Inserted Item"); - return; -} - -static void -_cb2( void* data, Evas_Object* obj, void* event_info) -{ - Elm_Segment_Item *it1; - char buf[PATH_MAX]; - Evas_Object *ic1; - - it1 = elm_segment_control_item_add(data, NULL, "Added Item"); - - ic1 = elm_icon_add(obj); - snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR); - elm_icon_file_set(ic1, buf, NULL); - evas_object_size_hint_aspect_set(ic1, EVAS_ASPECT_CONTROL_BOTH, 1, 1); - elm_segment_control_item_icon_set(it1, ic1); - - return; -} - void test_segment_control(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { - Evas_Object *win, *bg, *bx, *ic, *ic1; - Elm_Segment_Item *it1, *it2, *it3; - + Evas_Object *win, *bg, *ic, *ic1, *ic2, *ic3, *ic4, *ic5; + Elm_Segment_Item *it1, *it2, *it3, *it4, *it5; Evas_Object * in_layout; - Evas_Object *segment; + Evas_Object *segment1, *segment2, *segment3, *segment4; char buf[PATH_MAX]; char buf1[PATH_MAX]; char buf2[PATH_MAX]; + char buf3[PATH_MAX]; + char buf4[PATH_MAX]; + char buf5[PATH_MAX]; + char buf6[PATH_MAX]; win = elm_win_add(NULL, "segmentcontrol", ELM_WIN_BASIC); elm_win_title_set(win, "Segment Control"); @@ -74,12 +29,8 @@ test_segment_control(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *e evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(bg); - bx = elm_box_add(win); - evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(win, bx); - evas_object_show(bx); - in_layout = elm_layout_add( win ); + elm_win_resize_object_add(win, in_layout); snprintf(buf, sizeof(buf), "%s/objects/test.edj", PACKAGE_DATA_DIR); elm_layout_file_set(in_layout, buf, "segment_test"); evas_object_size_hint_weight_set(in_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -90,45 +41,65 @@ test_segment_control(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *e evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); ic1 = elm_icon_add(in_layout); - snprintf(buf2, sizeof(buf2), "%s/images/icon_00.png", PACKAGE_DATA_DIR); + snprintf(buf2, sizeof(buf2), "%s/images/logo.png", PACKAGE_DATA_DIR); elm_icon_file_set(ic1, buf2, NULL); evas_object_size_hint_aspect_set(ic1, EVAS_ASPECT_CONTROL_BOTH, 1, 1); - segment = elm_segment_control_add(win); - - it1 = elm_segment_control_item_add(segment, NULL, "Only Text"); - it2 = elm_segment_control_item_add(segment, ic, NULL); + segment1 = elm_segment_control_add(win); + it1 = elm_segment_control_item_add(segment1, NULL, "Only Text"); + it2 = elm_segment_control_item_add(segment1, ic, NULL); elm_segment_control_item_selected_set(it2, EINA_TRUE); - it3 = elm_segment_control_item_add(segment, ic1, "Text_Icon_test"); - - elm_object_disabled_set(segment, EINA_TRUE); - btn1 = elm_button_add(win); + it3 = elm_segment_control_item_add(segment1, ic1, "Text_Icon_test"); + it4 = elm_segment_control_item_add(segment1, NULL, "Seg4"); + it5 = elm_segment_control_item_add(segment1, NULL, "Seg5"); - elm_button_label_set(btn1, "Delete"); - evas_object_show(btn1); - - btn2 = elm_button_add(win); - elm_button_label_set(btn2, "Add"); - evas_object_show(btn2); + segment2 = elm_segment_control_add(win); + it1 = elm_segment_control_item_add(segment2, NULL, "SegmentItem"); + it2 = elm_segment_control_item_add(segment2, NULL, "SegmentItem"); + elm_segment_control_item_selected_set(it2, EINA_TRUE); + it3 = elm_segment_control_item_add(segment2, NULL, "SegmentControlItem"); + it4 = elm_segment_control_item_add(segment2, NULL, "SegmentItem"); + + ic2 = elm_icon_add(in_layout); + snprintf(buf3, sizeof(buf3), "%s/images/logo.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic2, buf3, NULL); + evas_object_size_hint_aspect_set(ic2, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + + ic3 = elm_icon_add(in_layout); + snprintf(buf4, sizeof(buf4), "%s/images/logo.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic3, buf4, NULL); + evas_object_size_hint_aspect_set(ic3, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + + ic4 = elm_icon_add(in_layout); + snprintf(buf5, sizeof(buf5), "%s/images/logo.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic4, buf5, NULL); + evas_object_size_hint_aspect_set(ic4, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + + segment3 = elm_segment_control_add(win); + it1 = elm_segment_control_item_add(segment3, ic2, NULL); + it2 = elm_segment_control_item_add(segment3, ic3, NULL); + elm_segment_control_item_selected_set(it2, EINA_TRUE); + it3 = elm_segment_control_item_add(segment3, ic4, NULL); - btn3 = elm_button_add(win); - elm_button_label_set(btn3, "Insert"); - evas_object_show(btn3); + ic5 = elm_icon_add(in_layout); + snprintf(buf6, sizeof(buf6), "%s/images/logo.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic5, buf6, NULL); + evas_object_size_hint_aspect_set(ic5, EVAS_ASPECT_CONTROL_BOTH, 1, 1); - evas_object_smart_callback_add( btn1, "clicked", _cb1, segment); - evas_object_smart_callback_add( btn2, "clicked", _cb2, segment); - evas_object_smart_callback_add( btn3, "clicked", _cb3, segment); + segment4 = elm_segment_control_add(win); + it1 = elm_segment_control_item_add(segment4, NULL, "Disabled"); + it2 = elm_segment_control_item_add(segment4, ic5, "Disabled"); + elm_segment_control_item_selected_set(it2, EINA_TRUE); + it3 = elm_segment_control_item_add(segment4, NULL, "Disabled"); + elm_object_disabled_set(segment4, EINA_TRUE); - evas_object_show(segment); - elm_layout_content_set(in_layout, "segment", segment); - elm_layout_content_set(in_layout, "add", btn2); - elm_layout_content_set(in_layout, "del", btn1); - elm_layout_content_set(in_layout, "insert", btn3); + elm_layout_content_set(in_layout, "segment1", segment1); + elm_layout_content_set(in_layout, "segment2", segment2); + elm_layout_content_set(in_layout, "segment3", segment3); + elm_layout_content_set(in_layout, "segment4", segment4); - elm_box_pack_end(bx, in_layout); evas_object_show(in_layout); evas_object_show(win); } #endif - diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in index fc5b925..c39c77a 100644 --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -2064,24 +2064,6 @@ extern "C" { * "changed" - when the radio status is changed */ - /* SegmentControl */ - typedef struct _Elm_Segment_Item Elm_Segment_Item; - EAPI Evas_Object *elm_segment_control_add(Evas_Object *parent) EINA_ARG_NONNULL(1); - EAPI Elm_Segment_Item *elm_segment_control_item_add(Evas_Object *obj, Evas_Object *icon, const char *label) EINA_ARG_NONNULL(1); - EAPI Elm_Segment_Item *elm_segment_control_item_insert_at(Evas_Object *obj, Evas_Object *icon, const char *label, int index) EINA_ARG_NONNULL(1); - EAPI void elm_segment_control_item_del(Elm_Segment_Item *it) EINA_ARG_NONNULL(1); - EAPI void elm_segment_control_item_del_at(Evas_Object *obj, int index) EINA_ARG_NONNULL(1); - EAPI int elm_segment_control_item_count_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); - EAPI Elm_Segment_Item *elm_segment_control_item_get(const Evas_Object *obj, int index) EINA_ARG_NONNULL(1); - EAPI const char *elm_segment_control_item_label_get(Evas_Object *obj, int index) EINA_ARG_NONNULL(1); - EAPI void elm_segment_control_item_label_set(Elm_Segment_Item* it, const char* label) EINA_ARG_NONNULL(1); - EAPI Evas_Object *elm_segment_control_item_icon_get(const Evas_Object *obj, int index) EINA_ARG_NONNULL(1); - EAPI void elm_segment_control_item_icon_set(Elm_Segment_Item *it, Evas_Object *icon) EINA_ARG_NONNULL(1); - EAPI int elm_segment_control_item_index_get(const Elm_Segment_Item *it) EINA_ARG_NONNULL(1); - EAPI Evas_Object *elm_segment_control_item_object_get(const Elm_Segment_Item *it) EINA_ARG_NONNULL(1); - EAPI Elm_Segment_Item *elm_segment_control_item_selected_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); - EAPI void elm_segment_control_item_selected_set(Elm_Segment_Item *it, Eina_Bool select) EINA_ARG_NONNULL(1); - EAPI Evas_Object *elm_page_control_add(Evas_Object *parent); EAPI void elm_page_control_page_count_set(Evas_Object *obj, unsigned int page_count); EAPI void elm_page_control_page_id_set(Evas_Object *obj, unsigned int page_id); @@ -3449,6 +3431,28 @@ extern "C" { EAPI const Elm_Store *elm_store_item_store_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1); EAPI const Elm_Genlist_Item *elm_store_item_genlist_item_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1); + /* SegmentControl */ + typedef struct _Elm_Segment_Item Elm_Segment_Item; + EAPI Evas_Object *elm_segment_control_add(Evas_Object *parent) EINA_ARG_NONNULL(1); + EAPI Elm_Segment_Item *elm_segment_control_item_add(Evas_Object *obj, Evas_Object *icon, const char *label) EINA_ARG_NONNULL(1); + EAPI Elm_Segment_Item *elm_segment_control_item_insert_at(Evas_Object *obj, Evas_Object *icon, const char *label, int index) EINA_ARG_NONNULL(1); + EAPI void elm_segment_control_item_del(Elm_Segment_Item *it) EINA_ARG_NONNULL(1); + EAPI void elm_segment_control_item_del_at(Evas_Object *obj, int index) EINA_ARG_NONNULL(1); + EAPI int elm_segment_control_item_count_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); + EAPI Elm_Segment_Item *elm_segment_control_item_get(const Evas_Object *obj, int index) EINA_ARG_NONNULL(1); + EAPI const char *elm_segment_control_item_label_get(Evas_Object *obj, int index) EINA_ARG_NONNULL(1); + EAPI void elm_segment_control_item_label_set(Elm_Segment_Item* it, const char* label) EINA_ARG_NONNULL(1); + EAPI Evas_Object *elm_segment_control_item_icon_get(const Evas_Object *obj, int index) EINA_ARG_NONNULL(1); + EAPI void elm_segment_control_item_icon_set(Elm_Segment_Item *it, Evas_Object *icon) EINA_ARG_NONNULL(1); + EAPI int elm_segment_control_item_index_get(const Elm_Segment_Item *it) EINA_ARG_NONNULL(1); + EAPI Evas_Object *elm_segment_control_item_object_get(const Elm_Segment_Item *it) EINA_ARG_NONNULL(1); + EAPI Elm_Segment_Item *elm_segment_control_item_selected_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); + EAPI void elm_segment_control_item_selected_set(Elm_Segment_Item *it, Eina_Bool select) EINA_ARG_NONNULL(1); + /* smart callbacks called: + * "changed" -when the user clicks on a segment item which is not previously + * selected and get selected. The event_info parameter is the + * segment item index. + */ #ifdef __cplusplus } diff --git a/src/lib/elm_segment_control.c b/src/lib/elm_segment_control.c index c4173b4..c13c86d 100644 --- a/src/lib/elm_segment_control.c +++ b/src/lib/elm_segment_control.c @@ -3,11 +3,20 @@ /** * @defgroup SegmentControl SegmentControl - * @ingroup Elementary * - * SegmentControl Widget is a horizontal control made of multiple segments, each segment item - * functioning similar to discrete two state button. A segmented control affords a compact means to group together a number of controls. - * Only one Segment item can be at selected state. A segmented control item can display combination of Text and any Evas_Object like layout or other widget. + * SegmentControl Widget is a horizontal control made of multiple segment items, + * each segment item functioning similar to discrete two state button. A segment + * control groups the the items together and provides compact single button with + * multiple equal size segments. Segment item size is determined by base widget + * size and the number of items added. + * Only one Segment item can be at selected state. A segment item can display + * combination of Text and any Evas_Object like Images or other widget. + * + * Signals that you can add callbacks for are: + * + * "changed" -when the user clicks on a segment item which is not previously + * selected and get selected. The event_info parameter is the + * segment item index. */ typedef struct _Widget_Data Widget_Data; @@ -25,7 +34,7 @@ struct _Elm_Segment_Item { Elm_Widget_Item base; Evas_Object *icon; - Evas_Object *label; + const char *label; int seg_index; }; @@ -38,16 +47,24 @@ static void _item_free(Elm_Segment_Item *it); static void _segment_off(Elm_Segment_Item *it); static void _segment_on(Elm_Segment_Item *it); static void _position_items(Widget_Data *wd); -static void _on_move_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, - void *event_info __UNUSED__); -static void _mouse_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, - void *event_info __UNUSED__); -static void _mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, - void *event_info __UNUSED__); +static void _on_move_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj + __UNUSED__, void *event_info __UNUSED__); +static void _mouse_up(void *data, Evas *e __UNUSED__, Evas_Object *obj + __UNUSED__, void *event_info __UNUSED__); +static void _mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj + __UNUSED__, void *event_info __UNUSED__); static void _swallow_item_objects(Elm_Segment_Item *it); static void _update_list(Widget_Data *wd); static Elm_Segment_Item * _item_find(const Evas_Object *obj, int index); -static Elm_Segment_Item* _item_new(Evas_Object *obj, Evas_Object *icon, const char *label ); +static Elm_Segment_Item* _item_new(Evas_Object *obj, Evas_Object *icon, + const char *label); + +static const char SIG_CHANGED[] = "changed"; + +static const Evas_Smart_Cb_Description _signals[] = { + {SIG_CHANGED, ""}, + {NULL, NULL} +}; static void _sizing_eval(Evas_Object *obj) @@ -59,9 +76,9 @@ _sizing_eval(Evas_Object *obj) wd = elm_widget_data_get(obj); if (!wd) return; - elm_coords_finger_size_adjust(1, &minw, 1, &minh); + elm_coords_finger_size_adjust(wd->item_count, &minw, 1, &minh); edje_object_size_min_restricted_calc(wd->base, &minw, &minh, minw, minh); - elm_coords_finger_size_adjust(1, &minw, 1, &minh); + elm_coords_finger_size_adjust(wd->item_count, &minw, 1, &minh); evas_object_size_hint_min_get(obj, &w, &h); if (w > minw) minw = w; @@ -87,23 +104,32 @@ static void _theme_hook(Evas_Object *obj) { Eina_List *l; + Eina_Bool rtl; Elm_Segment_Item *it; Widget_Data *wd; wd = elm_widget_data_get(obj); if (!wd) return; - _elm_theme_object_set(obj, wd->base, "segment_control", "base", elm_widget_style_get(obj)); - edje_object_scale_set(wd->base, elm_widget_scale_get(wd->base) *_elm_config->scale); + _elm_widget_mirrored_reload(obj); + rtl = elm_widget_mirrored_get(obj); + edje_object_mirrored_set(wd->base, rtl); + + _elm_theme_object_set(obj, wd->base, "segment_control", "base", + elm_widget_style_get(obj)); + edje_object_scale_set(wd->base, elm_widget_scale_get(wd->base) + *_elm_config->scale); EINA_LIST_FOREACH(wd->seg_items, l, it) { - _elm_theme_object_set(obj, it->base.view, "segment_control", "item", elm_widget_style_get(obj)); - edje_object_scale_set(it->base.view, elm_widget_scale_get(it->base.view) *_elm_config->scale); + _elm_theme_object_set(obj, it->base.view, "segment_control", + "item", elm_widget_style_get(obj)); + edje_object_scale_set(it->base.view, elm_widget_scale_get(it->base.view) + *_elm_config->scale); + edje_object_mirrored_set(it->base.view, rtl); } _update_list(wd); - _sizing_eval(obj); } static void @@ -116,6 +142,9 @@ _disable_hook(Evas_Object *obj) _update_list(wd); } +// TODO: Elm_widget elm_widget_focus_list_next_get supports only Elm_widget list, +// Not the Elm_Widget_item. Focus switching with in widget not supported until +// it is supported in elm_widget #if 0 static void * _elm_list_data_get(const Eina_List *list) @@ -128,16 +157,16 @@ _elm_list_data_get(const Eina_List *list) return it->base.view; } -/* TODO Can focus stay on Evas_Object which is not a elm_widget ?? */ static Eina_Bool -_focus_next_hook(const Evas_Object *obj, Elm_Focus_Direction dir, Evas_Object **next) +_focus_next_hook(const Evas_Object *obj, Elm_Focus_Direction dir, + Evas_Object **next) { static int count=0; Widget_Data *; const Eina_List *items; void *(*list_data_get) (const Eina_List *list); - wd = elm_widget_data_get(obj) + wd = elm_widget_data_get(obj); if ((!wd)) return EINA_FALSE; /* Focus chain */ @@ -164,13 +193,13 @@ _item_free(Elm_Segment_Item *it) wd = elm_widget_item_data_get(it); if (!wd) return; - if(wd->selected_item == it) wd->selected_item = NULL; - if(wd->seg_items) wd->seg_items = eina_list_remove(wd->seg_items, it); + if (wd->selected_item == it) wd->selected_item = NULL; + if (wd->seg_items) wd->seg_items = eina_list_remove(wd->seg_items, it); elm_widget_item_pre_notify_del(it); if (it->icon) evas_object_del(it->icon); - if (it->label) evas_object_del(it->label); + if (it->label) eina_stringshare_del(it->label); elm_widget_item_del(it); } @@ -179,7 +208,6 @@ static void _segment_off(Elm_Segment_Item *it) { Widget_Data *wd; - char buf[4096]; if (!it) return; @@ -187,11 +215,6 @@ _segment_off(Elm_Segment_Item *it) if (!wd) return; edje_object_signal_emit(it->base.view, "elm,state,segment,normal", "elm"); - if (it->label) - { - snprintf(buf, sizeof(buf), "%s/segment_normal", elm_widget_style_get(wd->obj)); - elm_object_style_set(it->label, buf); - } if (wd->selected_item == it) wd->selected_item = NULL; } @@ -200,7 +223,6 @@ static void _segment_on(Elm_Segment_Item *it) { Widget_Data *wd; - char buf[4096]; if (!it) return; @@ -211,14 +233,9 @@ _segment_on(Elm_Segment_Item *it) if (wd->selected_item) _segment_off(wd->selected_item); edje_object_signal_emit(it->base.view, "elm,state,segment,selected", "elm"); - if (it->label) - { - snprintf(buf, sizeof(buf), "%s/segment_selected", elm_widget_style_get(wd->obj)); - elm_object_style_set(it->label, buf); - } wd->selected_item = it; - evas_object_smart_callback_call(wd->obj, "changed", (void*) it->seg_index); + evas_object_smart_callback_call(wd->obj, SIG_CHANGED, (void*) it->seg_index); } static void @@ -226,21 +243,31 @@ _position_items(Widget_Data *wd) { Eina_List *l; Elm_Segment_Item *it; - int bx, by, bw, bh, position; + Eina_Bool rtl; + int bx, by, bw, bh, pos; wd->item_count = eina_list_count(wd->seg_items); if (wd->item_count <= 0) return; evas_object_geometry_get(wd->base, &bx, &by, &bw, &bh); wd->item_width = bw / wd->item_count; + rtl = elm_widget_mirrored_get(wd->obj); + + if (rtl) + pos = bx + bw - wd->item_width; + else + pos = bx; - position = bx; EINA_LIST_FOREACH(wd->seg_items, l, it) { - evas_object_move(it->base.view, bx, by ); - evas_object_resize(it->base.view, wd->item_width, bh ); - bx += wd->item_width; + evas_object_move(it->base.view, pos, by); + evas_object_resize(it->base.view, wd->item_width, bh); + if (rtl) + pos -= wd->item_width; + else + pos += wd->item_width; } + _sizing_eval(wd->obj); } static void @@ -248,26 +275,12 @@ _on_move_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { Widget_Data *wd; - Evas_Coord law = 0, lah = 0; - Eina_List *l; - Elm_Segment_Item *it = NULL; - const char *lbl_area; wd = elm_widget_data_get(data); if (!wd) return; _position_items(wd); - EINA_LIST_FOREACH(wd->seg_items, l, it) - { - lbl_area = edje_object_data_get(it->base.view, "label.wrap.part"); - if (it->label && lbl_area) - { - edje_object_part_geometry_get(it->base.view, lbl_area, NULL, NULL, &law, &lah); - elm_label_wrap_width_set(it->label, law); - elm_label_wrap_height_set(it->label, lah); - } - } } static void @@ -278,7 +291,6 @@ _mouse_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, Elm_Segment_Item *it; Evas_Event_Mouse_Up *ev; Evas_Coord x, y, w, h; - char buf[4096]; it = data; if (!it) return; @@ -293,17 +305,11 @@ _mouse_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, ev = event_info; evas_object_geometry_get(it->base.view, &x, &y, &w, &h); - if((ev->output.x > x) && (ev->output.x < (x+w)) && (ev->output.y > y) && (ev->output.y < (y+h))) + if ((ev->output.x >= x) && (ev->output.x <= (x + w)) && (ev->output.y >= y) + && (ev->output.y <= (y + h))) _segment_on(it); else - { - edje_object_signal_emit(it->base.view, "elm,state,segment,normal", "elm"); - if (it->label) - { - snprintf(buf, sizeof(buf), "%s/segment_normal", elm_widget_style_get(wd->obj)); - elm_object_style_set(it->label, buf); - } - } + edje_object_signal_emit(it->base.view, "elm,state,segment,normal", "elm"); } static void @@ -312,7 +318,6 @@ _mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, { Widget_Data *wd; Elm_Segment_Item *it; - char buf[4096]; it = data; if (!it) return; @@ -325,19 +330,11 @@ _mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, if (it == wd->selected_item) return; edje_object_signal_emit(it->base.view, "elm,state,segment,pressed", "elm"); - if (it->label) - { - snprintf(buf, sizeof(buf), "%s/segment_pressed", elm_widget_style_get(wd->obj)); - elm_object_style_set(it->label, buf); - } } static void _swallow_item_objects(Elm_Segment_Item *it) { - Evas_Coord law = 0, lah = 0; - const char *lbl_area; - if (!it) return; if (it->icon) @@ -349,29 +346,19 @@ _swallow_item_objects(Elm_Segment_Item *it) edje_object_signal_emit(it->base.view, "elm,state,icon,hidden", "elm"); if (it->label) - { - edje_object_part_swallow(it->base.view, "elm.swallow.label", it->label); - edje_object_signal_emit(it->base.view, "elm,state,text,visible", "elm"); - - lbl_area = edje_object_data_get(it->base.view, "label.wrap.part"); - if (lbl_area) - { - edje_object_part_geometry_get(it->base.view, lbl_area, NULL, NULL, &law, &lah ); - elm_label_wrap_width_set(it->label, law); - elm_label_wrap_height_set(it->label, lah); - } - } + edje_object_signal_emit(it->base.view, "elm,state,text,visible", "elm"); else edje_object_signal_emit(it->base.view, "elm,state,text,hidden", "elm"); + edje_object_message_signal_process(it->base.view); } static void _update_list(Widget_Data *wd) { Eina_List *l; - Elm_Segment_Item *it = NULL; + Elm_Segment_Item *it; + Eina_Bool rtl; int index = 0; - char buf[4096]; _position_items(wd); @@ -381,73 +368,64 @@ _update_list(Widget_Data *wd) it->seg_index = 0; //Set the segment type - edje_object_signal_emit(it->base.view, "elm,type,segment,single", "elm"); + edje_object_signal_emit(it->base.view, + "elm,type,segment,single", "elm"); //Set the segment state if (wd->selected_item == it) - { - edje_object_signal_emit(it->base.view, "elm,state,segment,selected", "elm"); - if (it->label) - { - snprintf(buf, sizeof(buf), "%s/segment_selected", elm_widget_style_get(wd->obj)); - elm_object_style_set(it->label, buf); - } - } + edje_object_signal_emit(it->base.view, + "elm,state,segment,selected", "elm"); else - edje_object_signal_emit(it->base.view, "elm,state,segment,normal", "elm"); + edje_object_signal_emit(it->base.view, + "elm,state,segment,normal", "elm"); if (elm_widget_disabled_get(wd->obj)) - { - edje_object_signal_emit(it->base.view, "elm,state,disabled", "elm"); - if (it->label) - { - snprintf(buf, sizeof(buf), "%s/segment_disabled", elm_widget_style_get(wd->obj)); - elm_object_style_set(it->label, buf); - } - } + edje_object_signal_emit(it->base.view, "elm,state,disabled", "elm"); _swallow_item_objects(it); - return; } + rtl = elm_widget_mirrored_get(wd->obj); EINA_LIST_FOREACH(wd->seg_items, l, it) { it->seg_index = index; //Set the segment type - if(index == 0) - edje_object_signal_emit(it->base.view, "elm,type,segment,left", "elm"); - else if(index == wd->item_count-1) - edje_object_signal_emit(it->base.view, "elm,type,segment,right", "elm"); + if (index == 0) + { + if (rtl) + edje_object_signal_emit(it->base.view, + "elm,type,segment,right", "elm"); + else + edje_object_signal_emit(it->base.view, + "elm,type,segment,left", "elm"); + } + else if (index == (wd->item_count - 1)) + { + if (rtl) + edje_object_signal_emit(it->base.view, + "elm,type,segment,left", "elm"); + else + edje_object_signal_emit(it->base.view, + "elm,type,segment,right", "elm"); + } else - edje_object_signal_emit(it->base.view, "elm,type,segment,middle", "elm"); + edje_object_signal_emit(it->base.view, + "elm,type,segment,middle", "elm"); //Set the segment state if (wd->selected_item == it) - { - edje_object_signal_emit(it->base.view, "elm,state,segment,selected", "elm"); - if (it->label) - { - snprintf(buf, sizeof(buf), "%s/segment_selected", elm_widget_style_get(wd->obj)); - elm_object_style_set(it->label, buf); - } - } + edje_object_signal_emit(it->base.view, + "elm,state,segment,selected", "elm"); else - edje_object_signal_emit(it->base.view, "elm,state,segment,normal", "elm"); + edje_object_signal_emit(it->base.view, + "elm,state,segment,normal", "elm"); if (elm_widget_disabled_get(wd->obj)) - { - edje_object_signal_emit(it->base.view, "elm,state,disabled", "elm"); - if (it->label) - { - snprintf(buf, sizeof(buf), "%s/segment_disabled", elm_widget_style_get(wd->obj)); - elm_object_style_set(it->label, buf); - } - } + edje_object_signal_emit(it->base.view, "elm,state,disabled", "elm"); _swallow_item_objects(it); - index++; } } @@ -466,11 +444,10 @@ _item_find(const Evas_Object *obj, int index) } static Elm_Segment_Item* -_item_new(Evas_Object *obj, Evas_Object *icon, const char *label ) +_item_new(Evas_Object *obj, Evas_Object *icon, const char *label) { Elm_Segment_Item *it; Widget_Data *wd; - char buf[4096]; wd = elm_widget_data_get(obj); if (!wd) return NULL; @@ -480,26 +457,30 @@ _item_new(Evas_Object *obj, Evas_Object *icon, const char *label ) elm_widget_item_data_set(it, wd); it->base.view = edje_object_add(evas_object_evas_get(obj)); - edje_object_scale_set(it->base.view, elm_widget_scale_get(it->base.view) *_elm_config->scale); + edje_object_scale_set(it->base.view, elm_widget_scale_get(it->base.view) + *_elm_config->scale); evas_object_smart_member_add(it->base.view, obj); elm_widget_sub_object_add(obj, it->base.view); - _elm_theme_object_set(obj, it->base.view, "segment_control", "item", elm_object_style_get(obj)); + _elm_theme_object_set(obj, it->base.view, "segment_control", "item", + elm_object_style_get(obj)); + edje_object_mirrored_set(it->base.view, + elm_widget_mirrored_get(it->base.widget)); if (label) - { - it->label = elm_label_add(obj); - elm_widget_sub_object_add(it->base.view, it->label); - snprintf(buf, sizeof(buf), "%s/segment_normal", elm_widget_style_get(obj)); - elm_object_style_set(it->label, buf); - elm_label_label_set(it->label, label); - elm_label_ellipsis_set(it->label, EINA_TRUE); - evas_object_show(it->label); - } + eina_stringshare_replace(&it->label, label); + if (it->label) + edje_object_signal_emit(it->base.view, "elm,state,text,visible", "elm"); + else + edje_object_signal_emit(it->base.view, "elm,state,text,hidden", "elm"); + edje_object_message_signal_process(it->base.view); + edje_object_part_text_set(it->base.view, "elm.text", label); it->icon = icon; if (it->icon) elm_widget_sub_object_add(it->base.view, it->icon); - evas_object_event_callback_add(it->base.view, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down, it); - evas_object_event_callback_add(it->base.view, EVAS_CALLBACK_MOUSE_UP, _mouse_up, it); + evas_object_event_callback_add(it->base.view, EVAS_CALLBACK_MOUSE_DOWN, + _mouse_down, it); + evas_object_event_callback_add(it->base.view, EVAS_CALLBACK_MOUSE_UP, + _mouse_up, it); evas_object_show(it->base.view); return it; @@ -510,7 +491,7 @@ _item_new(Evas_Object *obj, Evas_Object *icon, const char *label ) * @param [in] parent The parent object * @return The new object or NULL if it cannot be created * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI Evas_Object * elm_segment_control_add(Evas_Object *parent) @@ -519,12 +500,8 @@ elm_segment_control_add(Evas_Object *parent) Evas *e; Widget_Data *wd; - EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL); + ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL); - wd = ELM_NEW(Widget_Data); - e = evas_object_evas_get(parent); - if (!e) return NULL; - obj = elm_widget_add(e); ELM_SET_WIDTYPE(widtype, "segment_control"); elm_widget_type_set(obj, "segment_control"); elm_widget_sub_object_add(parent, obj); @@ -533,21 +510,25 @@ elm_segment_control_add(Evas_Object *parent) elm_widget_theme_hook_set(obj, _theme_hook); elm_widget_disable_hook_set(obj, _disable_hook); + // TODO: Focus switch support to Elm_widget_Item not supported yet. #if 0 - /* TODO Can focus stay on Evas_Object which is not a elm_widget ?? */ elm_widget_focus_next_hook_set(obj, _focus_next_hook); #endif wd->obj = obj; wd->base = edje_object_add(e); - edje_object_scale_set(wd->base, elm_widget_scale_get(wd->base) *_elm_config->scale); + edje_object_scale_set(wd->base, elm_widget_scale_get(wd->base) + *_elm_config->scale); _elm_theme_object_set(obj, wd->base, "segment_control", "base", "default"); elm_widget_resize_object_set(obj, wd->base); - evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _on_move_resize, obj); - evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _on_move_resize, obj); - _sizing_eval(obj); + evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, + _on_move_resize, obj); + evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, + _on_move_resize, obj); + + evas_object_smart_callbacks_descriptions_set(obj, _signals); return obj; } @@ -556,10 +537,11 @@ elm_segment_control_add(Evas_Object *parent) * Add new segment item to SegmentControl. * @param [in] obj The SegmentControl object * @param [in] icon Any Objects like icon, Label, layout etc - * @param [in] label The label for added segment item. Note that, NULL is different from empty string "". + * @param [in] label The label for added segment item. + * Note that, NULL is different from empty string "". * @return The new segment item or NULL if it cannot be created * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI Elm_Segment_Item * elm_segment_control_item_add(Evas_Object *obj, Evas_Object *icon, @@ -585,12 +567,13 @@ elm_segment_control_item_add(Evas_Object *obj, Evas_Object *icon, * Insert a new segment item to SegmentControl. * @param [in] obj The SegmentControl object * @param [in] icon Any Objects like icon, Label, layout etc - * @param [in] label The label for added segment item. Note that, NULL is different from empty string "". + * @param [in] label The label for added segment item. + * Note that, NULL is different from empty string "". * @param [in] index Segment item location. Value should be between 0 and - * Existing total item count( @see elm_segment_control_item_count_get() ) + * Existing total item count( @see elm_segment_control_item_count_get() ) * @return The new segment item or NULL if it cannot be created * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI Elm_Segment_Item * elm_segment_control_item_insert_at(Evas_Object *obj, Evas_Object *icon, @@ -622,7 +605,7 @@ elm_segment_control_item_insert_at(Evas_Object *obj, Evas_Object *icon, * @param [in] obj The SegmentControl object * @param [in] it The segment item to be deleted * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI void elm_segment_control_item_del(Elm_Segment_Item *it) @@ -631,7 +614,7 @@ elm_segment_control_item_del(Elm_Segment_Item *it) Widget_Data *wd; wd = elm_widget_item_data_get(it); - if(!wd) return; + if (!wd) return; _item_free(it); _update_list(wd); @@ -640,9 +623,9 @@ elm_segment_control_item_del(Elm_Segment_Item *it) /** * Delete a segment item of given index from SegmentControl * @param [in] obj The SegmentControl object - * @param [in] index The position at which segment item to be deleted + * @param [in] index The position at which segment item to be deleted. * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI void elm_segment_control_item_del_at(Evas_Object *obj, int index) @@ -666,7 +649,7 @@ elm_segment_control_item_del_at(Evas_Object *obj, int index) * @param [in] index The index of the segment item * @return The label of the segment item * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI const char* elm_segment_control_item_label_get(Evas_Object *obj, int index) @@ -675,7 +658,7 @@ elm_segment_control_item_label_get(Evas_Object *obj, int index) Elm_Segment_Item *it; it = _item_find(obj, index); - if (it && it->label) return elm_label_label_get(it->label); + if (it) return it->label; return NULL; } @@ -685,47 +668,25 @@ elm_segment_control_item_label_get(Evas_Object *obj, int index) * @param [in] it The SegmentControl Item * @param [in] label New label text. * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI void elm_segment_control_item_label_set(Elm_Segment_Item* it, const char* label) { ELM_WIDGET_ITEM_WIDTYPE_CHECK_OR_RETURN(it); Widget_Data *wd; - char buf[4096]; wd = elm_widget_item_data_get(it); if (!wd) return; - if (!label && !it->label) return; //No label, return - if (label && !it->label) // Create Label Object - { - it->label = elm_label_add(it->base.view); - elm_widget_sub_object_add(it->base.view, it->label); - elm_label_label_set(it->label, label); - elm_label_ellipsis_set(it->label, EINA_TRUE); - evas_object_show(it->label); - - if(wd->selected_item == it ) - { - snprintf(buf, sizeof(buf), "%s/segment_selected", elm_widget_style_get(wd->obj)); - elm_object_style_set(it->label, buf); - } - else - { - snprintf(buf, sizeof(buf), "%s/segment_normal", elm_widget_style_get(wd->obj)); - elm_object_style_set(it->label, buf); - } - } - else if (!label && it->label) // Delete Label Object - { - evas_object_del(it->label); - it->label = NULL; - } - else // Update the text - elm_label_label_set(it->label, label); - - _swallow_item_objects( it ); + eina_stringshare_replace(&it->label, label); + if (it->label) + edje_object_signal_emit(it->base.view, "elm,state,text,visible", "elm"); + else + edje_object_signal_emit(it->base.view, "elm,state,text,hidden", "elm"); + edje_object_message_signal_process(it->base.view); + //label can be NULL also. + edje_object_part_text_set(it->base.view, "elm.text", it->label); } /** @@ -734,7 +695,7 @@ elm_segment_control_item_label_set(Elm_Segment_Item* it, const char* label) * @param [in] index The index of the segment item * @return The icon object. * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI Evas_Object * elm_segment_control_item_icon_get(const Evas_Object *obj, int index) @@ -753,7 +714,7 @@ elm_segment_control_item_icon_get(const Evas_Object *obj, int index) * @param [in] it The SegmentControl Item * @param [in] icon Objects like Layout, Icon, Label etc... * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI void elm_segment_control_item_icon_set(Elm_Segment_Item *it, Evas_Object *icon) @@ -769,8 +730,14 @@ elm_segment_control_item_icon_set(Elm_Segment_Item *it, Evas_Object *icon) } it->icon = icon; - if (it->icon) elm_widget_sub_object_add(it->base.view, it->icon); - _swallow_item_objects( it ); + if (it->icon) + { + elm_widget_sub_object_add(it->base.view, it->icon); + edje_object_part_swallow(it->base.view, "elm.swallow.icon", it->icon); + edje_object_signal_emit(it->base.view, "elm,state,icon,visible", "elm"); + } + else + edje_object_signal_emit(it->base.view, "elm,state,icon,hidden", "elm"); } /** @@ -778,7 +745,7 @@ elm_segment_control_item_icon_set(Elm_Segment_Item *it, Evas_Object *icon) * @param [in] obj The SegmentControl object * @return Segment items count. * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI int elm_segment_control_item_count_get(const Evas_Object *obj) @@ -797,7 +764,7 @@ elm_segment_control_item_count_get(const Evas_Object *obj) * @param [in] it The Segment item * @return obj The base object of the segment item. * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI Evas_Object* elm_segment_control_item_object_get(const Elm_Segment_Item *it) @@ -812,7 +779,7 @@ elm_segment_control_item_object_get(const Elm_Segment_Item *it) * @param [in] obj The SegmentControl object * @return Selected Segment Item. NULL if none of segment item is selected. * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI Elm_Segment_Item* elm_segment_control_item_selected_get(const Evas_Object *obj) @@ -829,9 +796,10 @@ elm_segment_control_item_selected_get(const Evas_Object *obj) /** * Select/unselect a particular segment item of SegmentControl * @param [in] it The Segment item that is to be selected or unselected. - * @param [in] select Passing EINA_TRUE will select the segment item and EINA_FALSE will unselect. + * @param [in] select Passing EINA_TRUE will select the segment item and + * EINA_FALSE will unselect. * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI void elm_segment_control_item_selected_set(Elm_Segment_Item *it, Eina_Bool select) @@ -844,12 +812,13 @@ elm_segment_control_item_selected_set(Elm_Segment_Item *it, Eina_Bool select) if (it == wd->selected_item) { - if (select) return; //already in selected selected state. + //already in selected state. + if (select) return; //unselect case _segment_off(it); } - else + else if (select) _segment_on(it); return; @@ -861,7 +830,7 @@ elm_segment_control_item_selected_set(Elm_Segment_Item *it, Eina_Bool select) * @param [in] index The index of the segment item. * @return The Segment item. * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI Elm_Segment_Item * elm_segment_control_item_get(const Evas_Object *obj, int index) @@ -879,7 +848,7 @@ elm_segment_control_item_get(const Evas_Object *obj, int index) * @param [in] it The Segment Item. * @return Segment Item index. * - * @ingroup SegmentControl SegmentControl + * @ingroup SegmentControl */ EAPI int elm_segment_control_item_index_get(const Elm_Segment_Item *it)