group { name: "elm/naviframe/item/basic/default";
   images.image: "vgrad_med_dark.png" COMP;
   images.image: "bevel_out.png" COMP;
   images.image: "shine.png" COMP;
   images.image: "shadow_vert.png" COMP;
   parts {
      // this set of limits and bottoms is evil - but it's a nasty construct
      // allowing EITHER the title and subtitle texts OR the prev/next button
      // swallows to control the lower bounds of the naviframe title, depending
      // on which is taller
#define BOTTOMMAX() \
      part { name: "limit0"; type: SPACER; \
         description { state: "default" 0.0; \
            rel1.to_y: "title3"; \
            rel1.relative: 0.0 1.0; \
            rel2.to_y: "elm.swallow.next_btn"; \
            rel2.offset: -1 0; \
            align: 0.5 1.0; \
            fixed: 0 1; \
            limit: HEIGHT; \
         } \
      } \
      part { name: "limit1"; type: SPACER; \
         description { state: "default" 0.0; \
            rel1.to_y: "elm.swallow.next_btn"; \
            rel1.relative: 0.0 1.0; \
            rel2.to_y: "title3"; \
            rel2.offset: -1 0; \
            align: 0.5 1.0; \
            fixed: 0 1; \
            limit: HEIGHT; \
         } \
      } \
      part { name: "bottom0"; type: SPACER; \
         description { state: "default" 0.0; \
            rel1.to_y: "limit1"; \
            rel1.relative: 0.0 1.0; \
            rel2.to_y: "limit0"; \
            rel2.offset: -1 0; \
            align: 0.5 1.0; \
            fixed: 0 1; \
            limit: HEIGHT; \
         } \
         description { state: "other" 0.0; \
            inherit: "default" 0.0; \
            rel1.to_y: "limit0"; \
            rel2.to_y: "limit1"; \
         } \
      } \
      program { name: "pbot0"; \
         signal: "limit,height,zero"; source: "bottom0"; \
         script { \
            new st[31], Float:vl; \
            get_state(PART:"bottom0", st, 30, vl); \
            if (st[0] == 'd') set_state(PART:"bottom0", "other", 1.0); \
            else set_state(PART:"bottom0", "default", 1.0); \
         } \
      } \
      part { name: "limit2"; type: SPACER; \
         description { state: "default" 0.0; \
            rel1.to_y: "title3"; \
            rel1.relative: 0.0 1.0; \
            rel2.to_y: "elm.swallow.prev_btn"; \
            rel2.offset: -1 0; \
            align: 0.5 1.0; \
            fixed: 0 1; \
            limit: HEIGHT; \
         } \
      } \
      part { name: "limit3"; type: SPACER; \
         description { state: "default" 0.0; \
            rel1.to_y: "elm.swallow.prev_btn"; \
            rel1.relative: 0.0 1.0; \
            rel2.to_y: "title3"; \
            rel2.offset: -1 0; \
            align: 0.5 1.0; \
            fixed: 0 1; \
            limit: HEIGHT; \
         } \
      } \
      part { name: "bottom1"; type: SPACER; \
         description { state: "default" 0.0; \
            rel1.to_y: "limit3"; \
            rel1.relative: 0.0 1.0; \
            rel2.to_y: "limit2"; \
            rel2.offset: -1 0; \
            align: 0.5 1.0; \
            fixed: 0 1; \
            limit: HEIGHT; \
         } \
         description { state: "other" 0.0; \
            inherit: "default" 0.0; \
            rel1.to_y: "limit2"; \
            rel2.to_y: "limit3"; \
         } \
      } \
      program { name: "pbot1"; \
         signal: "limit,height,zero"; source: "bottom1"; \
         script { \
            new st[31], Float:vl; \
            get_state(PART:"bottom1", st, 30, vl); \
            if (st[0] == 'd') set_state(PART:"bottom1", "other", 1.0); \
            else set_state(PART:"bottom1", "default", 1.0); \
         } \
      } \
      part { name: "bottom"; type: SPACER; \
         description { state: "default" 0.0; \
            rel1.to_y: "bottom1"; \
            rel1.offset: 0 -1; \
            rel1.relative: 0.0 1.0; \
            rel2.to_y: "bottom0"; \
            align: 0.5 1.0; \
            fixed: 0 1; \
            limit: HEIGHT; \
         } \
         description { state: "other" 0.0; \
            inherit: "default" 0.0; \
            rel1.to_y: "bottom0"; \
            rel2.to_y: "bottom1"; \
         } \
      } \
      program { name: "pbot"; \
         signal: "limit,height,zero"; source: "bottom"; \
         script { \
            new st[31], Float:vl; \
            get_state(PART:"bottom", st, 30, vl); \
            if (st[0] == 'd') set_state(PART:"bottom", "other", 1.0); \
            else set_state(PART:"bottom", "default", 1.0); \
         } \
      }
      BOTTOMMAX()
      
      part { name: "title1"; type: TEXT;
         scale: 1;
         description { state: "default" 0.0;
            rel1.relative: 0.0 0.0;
            rel1.offset: 0 2;
            rel2.relative: 1.0 0.0;
            rel2.offset: -1 2;
            align: 0.5 0.0;
            color: FN_COL_DEFAULT_SOFT_SHADOW;
            text { font: FN; size: 8;
               text: "X";
               text_class: "title_bar_sub";
               align: 0.5 0.0;
               min: 0 1;
            }
            fixed: 0 1;
            visible: 0;
         }
      }
      part { name: "title2"; type: TEXT;
         scale: 1;
         effect: SOFT_SHADOW BOTTOM;
         description { state: "default" 0.0;
            color_class: "border_title_active";
            rel1.to_y: "title1";
            rel1.relative: 0.0 1.0;
            rel1.offset: 0 -1;
            rel2.to_y: "title1";
            rel2.offset: -1 -1;
            align: 0.5 0.0;
            color: FN_COL_DEFAULT_SOFT_SHADOW;
            text { font: FNBD; size: 10;
               text: "X";
               text_class: "title_bar";
               align: 0.5 0.0;
               min: 0 1;
            }
            fixed: 0 1;
            visible: 0;
         }
      }
      part { name: "title3"; type: TEXT;
         scale: 1;
         description { state: "default" 0.0;
            rel1.to_y: "title2";
            rel1.relative: 0.0 1.0;
            rel1.offset: 0 -3;
            rel2.to_y: "title2";
            rel2.offset: -1 -3;
            align: 0.5 0.0;
            color: FN_COL_DEFAULT_SOFT_SHADOW;
            text { font: FN; size: 8;
               text: "X";
               text_class: "title_bar_sub";
               align: 0.5 0.0;
               min: 0 1;
            }
            fixed: 0 1;
            visible: 0;
         }
      }
      
      
      part { name: "clip"; type: RECT;
         description { state: "default" 0.0;
         }
      }
      part { name: "base"; type: SPACER;
         description { state: "default" 0.0;
         }
         description { state: "prev" 0.0;
            inherit: "default" 0.0;
            rel1.relative: -1.0 0.0;
            rel2.relative: 0.0 1.0;
         }
         description { state: "next" 0.0;
            inherit: "default" 0.0;
            rel1.relative: 1.0 0.0;
            rel2.relative: 2.0 1.0;
         }
      }
      part { name: "elm.swallow.content"; type: SWALLOW;
         clip_to: "clip";
         description { state: "default" 0.0;
            rel1.to: "top";
            rel1.relative: 0.0 1.0;
            rel2.to: "base";
         }
         description { state: "title-hidden" 0.0;
            inherit: "default" 0.0;
            rel1.to: "base";
            rel1.relative: 0.0 0.0;
         }
      }
      part { name: "shadow"; mouse_events: 0;
         clip_to: "clip";
         description { state: "default" 0.0;
            image.normal: "shadow_vert.png";
            rel1.to: "top";
            rel1.relative: 0.0 1.0;
            rel2.to: "top";
            rel2.offset: -1 0;
            fill.smooth: 0;
            min: 0 20;
            align: 0.5 0.0;
            fixed: 1 1;
         }
         description { state: "title-hidden" 0.0;
            inherit: "default" 0.0;
            color: 255 255 255 0;
            visible: 0;
         }
      }
      part { name: "tophide0"; type: SPACER;
         description { state: "default" 0.0;
            rel1.to: "base";
            rel2.to_x: "base";
            rel2.to_y: "bottom";
         }
      }
      part { name: "tophide1"; type: SPACER;
         description { state: "default" 0.0;
            rel1.to: "tophide0";
            rel1.relative: 0.0 -1.0;
            rel2.to: "tophide0";
         }
      }
      part { name: "top";
         clip_to: "clip";
         description { state: "default" 0.0;
            color_class: "border_top";
            image.normal: "vgrad_med_dark.png";
            rel1.to: "base";
            rel2.to_x: "base";
            rel2.to_y: "bottom";
            fill.smooth: 0;
            TILED_HORIZ(120)
         }
         description { state: "title-hidden" 0.0;
            inherit: "default" 0.0;
            rel1.to: "tophide1";
            rel2.to: "base";
            rel2.relative: 1.0 0.0;
         }
      }
      part { name: "access.title"; type: RECT; repeat_events: 1;
         clip_to: "clip";
         description { state: "default" 0.0;
            fixed: 1 1;
            color: 0 0 0 0;
            rel1.to: "top";
            rel2.to: "top";
         }
      }
      part { name: "bevel"; mouse_events: 0;
         clip_to: "clip";
         description { state: "default" 0.0;
            image.normal: "bevel_out.png";
            image.border: 1 1 1 1;
            image.middle: 0;
            rel1.to: "top";
            rel2.to: "top";
            fill.smooth: 0;
         }
      }
      part { name: "elm.text.title"; type: TEXT; mouse_events: 0;
         scale: 1;
         effect: SOFT_SHADOW BOTTOM;
         clip_to: "elements_clip";
         description { state: "default" 0.0;
            color_class: "border_title_active_sub";
            rel1.to_x: "base";
            rel1.to_y: "top";
            rel1.relative: 0.0 0.5;
            rel2.offset: 0 -1;
            rel2.to_x: "base";
            rel2.to_y: "top";
            rel2.relative: 1.0 0.5;
            align: 0.5 0.5;
            color: FN_COL_DEFAULT_SOFT_SHADOW;
            text { font: FNBD; size: 10;
               text_class: "title_bar";
               align: 0.5 0.5;
               min: 0 1;
            }
            fixed: 0 1;
         }
         description { state: "hidden" 0.0;
            inherit: "default" 0.0;
            visible: 0;
         }
      }
      part { name: "elm.text.subtitle"; type: TEXT; mouse_events: 0;
         scale: 1;
         effect: SHADOW BOTTOM;
         clip_to: "elements_clip";
         description { state: "default" 0.0;
            rel1.to_x: "base";
            rel1.to_y: "elm.text.title";
            rel1.relative: 0.0 1.0;
            rel1.offset: 0 -3;
            rel2.to_x: "base";
            rel2.to_y: "elm.text.title";
            rel2.offset: -1 -3;
            align: 0.5 0.0;
            color: FN_COL_DEFAULT;
            text { font: FN; size: 8;
               text_class: "title_bar_sub";
               align: 0.5 0.0;
               min: 0 1;
            }
            fixed: 0 1;
         }
         description { state: "hidden" 0.0;
            inherit: "default" 0.0;
            visible: 0;
         }
      }
      part { name: "buttons_clip"; type: RECT;
         clip_to: "elements_clip";
         description { state: "default" 0.0;
            rel1.to: "base";
            rel2.to: "base";
         }
         description { state: "title-hidden" 0.0;
            inherit: "default" 0.0;
            visible: 0;
         }
      }
      part { name: "elm.swallow.next_btn"; type: SWALLOW;
         scale: 1;
         clip_to: "buttons_clip";
         description { state: "default" 0.0;
            rel1.to_x: "base";
//            rel1.to_y: "top";
            rel1.relative: 1.0 0.0;
            rel1.offset: -3 2;
            rel2.to_x: "base";
            rel2.to_y: "title3";
            rel2.offset: -3 -1;
            align: 1.0 0.5;
            min: 26 26;
            max: 1 1;
            fixed: 1 1;
         }
         description { state: "hidden" 0.0;
            inherit: "default" 0.0;
            visible: 0;
         }
      }
      part { name: "elm.swallow.prev_btn"; type: SWALLOW;
         scale: 1;
         clip_to: "buttons_clip";
         description { state: "default" 0.0;
            rel1.to_x: "base";
//            rel1.to_y: "top";
            rel1.offset: 2 2;
            rel2.relative: 0.0 1.0;
            rel2.offset: 2 -1;
            rel2.to_x: "base";
            rel2.to_y: "title3";
            align: 0.0 0.5;
            min: 26 26;
            max: 1 1;
            fixed: 1 1;
         }
         description { state: "hidden" 0.0;
            inherit: "default" 0.0;
            visible: 0;
         }
      }
      part { name: "elm.swallow.icon"; type: SWALLOW;
         clip_to: "elements_clip";
         description { state: "default" 0.0;
            rel1.to_x: "elm.swallow.prev_btn";
            rel1.to_y: "top";
            rel1.relative: 1.0 0.0;
            rel1.offset: 2 2;
            rel2.to_x: "elm.swallow.prev_btn";
            rel2.to_y: "top";
            rel2.offset: 2 -3;
            aspect: 1.0 1.0; aspect_preference: VERTICAL;
            align: 0.0 0.5;
         }
         description { state: "hidden" 0.0;
            inherit: "default" 0.0;
            rel1.to_x: "top";
            rel1.relative: 0.0 0.0;
            rel2.to_x: "top";
            rel2.offset: -3 -3;
           align: 0.5 0.5;
         }
      }
      part { name: "shine"; mouse_events: 0;
         clip_to: "elements_clip";
         description { state: "default" 0.0;
            image.normal: "shine.png";
            rel1.offset: 0 -2;
            rel1.to: "top";
            rel2.relative: 1.0 0.0;
            rel2.offset: -1 2;
            rel2.to: "top";
            FIXED_SIZE(69, 5)
         }
      }
      part { name: "elements_clip"; type: RECT;
         clip_to: "clip";
         description { state: "default" 0.0;
            rel1.to: "base";
            rel2.to: "base";
         }
         description { state: "hidden" 0.0;
            inherit: "default" 0.0;
            color: 255 255 255 0;
            visible: 0;
         }
         description { state: "next" 0.0;
            inherit: "hidden" 0.0;
         }
         description { state: "prev" 0.0;
            inherit: "hidden" 0.0;
         }
      }
   }
   programs {
      program {
         signal: "elm,state,title,show"; source: "elm";
         action: STATE_SET "default" 0.0;
         target: "top";
         target: "shadow";
         target: "elm.swallow.content";
         target: "buttons_clip";
      }
      program {
         signal: "elm,action,title,show"; source: "elm";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.5;
         target: "top";
         target: "shadow";
         target: "elm.swallow.content";
         after: "titleshow2";
      }
      program { name: "titleshow2";
         action: STATE_SET "default" 0.0;
         target: "buttons_clip";
         after: "title_transition_finished";
      }
      program {
         signal: "elm,state,title,hide"; source: "elm";
         action: STATE_SET "title-hidden" 0.0;
         target: "buttons_clip";
         target: "top";
         target: "shadow";
         target: "elm.swallow.content";
      }
      program {
         signal: "elm,action,title,hide"; source: "elm";
         action: STATE_SET "title-hidden" 0.0;
         target: "buttons_clip";
         after: "titlehide2";
      }
      program { name: "titlehide2";
         action: STATE_SET "title-hidden" 0.0;
         transition: DECEL 0.5;
         target: "top";
         target: "shadow";
         target: "elm.swallow.content";
         after: "title_transition_finished";
      }
      program { name: "title_transition_finished";
         action: SIGNAL_EMIT "elm,action,title,transition,finished" "elm";
      }
      program {
         signal: "elm,state,prev_btn,show"; source: "elm";
         action: STATE_SET "default" 0.0;
         target: "elm.swallow.prev_btn";
      }
      program {
         signal: "elm,state,prev_btn,hide"; source: "elm";
         action: STATE_SET "hidden" 0.0;
         target: "elm.swallow.prev_btn";
      }
      program {
         signal: "elm,state,next_btn,show"; source: "elm";
         action: STATE_SET "default" 0.0;
         target: "elm.swallow.next_btn";
      }
      program {
         signal: "elm,state,next_btn,hide"; source: "elm";
         action: STATE_SET "hidden" 0.0;
         target: "elm.swallow.next_btn";
      }
      program {
         signal: "mouse,clicked,1"; source: "top";
         action: SIGNAL_EMIT "elm,action,title,clicked" "elm";
      }
      program {
         signal: "elm,state,title_label,show"; source: "elm";
         action: STATE_SET "default" 0.0;
         target: "elm.swallow.icon";
         target: "elm.text.title";
         target: "elm.text.subtitle";
      }
      program {
         signal: "elm,state,title_label,hide"; source: "elm";
         action: STATE_SET "hidden" 0.0;
         target: "elm.swallow.icon";
         target: "elm.text.title";
         target: "elm.text.subtitle";
      }
      program {
         signal: "elm,state,visible"; source: "elm";
         action: STATE_SET "default" 0.0;
         target: "elm.swallow.content";
         target: "elements_clip";
      }
      
      /* current page is being pushed: [previous]<----[current] */
      program {
         signal: "elm,state,cur,pushed"; source: "elm";
         action: STATE_SET "default" 0.0;
         target: "base";
         target: "elements_clip";
         after: "pushed2";
      }
      program { name: "pushed2";
         action: STATE_SET "prev" 0.0;
         transition: DECEL 0.5;
         target: "base";
         target: "elements_clip";
         after: "pushed3";
      }
      program { name: "pushed3";
         action: SIGNAL_EMIT "elm,action,pushed,finished" "elm";
      }

      /* current page is being popped: [current]---->[next] */
      program {
         signal: "elm,state,cur,popped"; source: "elm";
         action: STATE_SET "default" 0.0;
         target: "base";
         target: "elements_clip";
         after: "popped2";
      }
      program { name: "popped2";
         action: STATE_SET "next" 0.0;
         transition: DECEL 0.5;
         target: "base";
         target: "elements_clip";
         after: "popped3";
      }
      program { name: "popped3";
         action: SIGNAL_EMIT "elm,action,popped,finished" "elm";
      }

      /* new page is being pushed: [current]<----[next] */
      program {
         signal: "elm,state,new,pushed"; source: "elm";
         action: STATE_SET "next" 0.0;
         target: "base";
         target: "elements_clip";
         after: "pushedb2";
      }
      program { name: "pushedb2";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.5;
         target: "base";
         target: "elements_clip";
         after: "pushedb3";
      }
      program { name: "pushedb3";
         action: SIGNAL_EMIT "elm,action,show,finished" "elm";
      }

      /* previous page is being pushed: [previous]---->[current] */
      program {
         signal: "elm,state,prev,popped"; source: "elm";
         action: STATE_SET "prev" 0.0;
         target: "base";
         target: "elements_clip";
         after: "poppedb2";
      }
      program { name: "poppedb2";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.5;
         target: "base";
         target: "elements_clip";
         after: "poppedb3";
      }
      program { name: "poppedb3";
         action: SIGNAL_EMIT "elm,action,show,finished" "elm";
      }
   }
}

group { name: "elm/naviframe/item/overlap/default";
   inherit: "elm/naviframe/item/basic/default";
   alias: "elm/naviframe/item/overlap/pager";
   parts {
      // this is a hack around an edje_cc inherit bug - group doesnt seem
      // to inherit properly with limits etc.
      BOTTOMMAX()
      
      part { name: "elm.swallow.content";
         description { state: "default" 0.0;
            rel1.to: "base";
            rel1.relative: 0.0 0.0;
         }
      }
      part { name: "top";
         description { state: "default" 0.0;
            color: 255 255 255 224;
         }
         description { state: "title-hidden" 0.0;
            color: 255 255 255 224;
         }
      }
   }
   programs {
      /* current page is being pushed: [previous]<----[current] */
      program {
         signal: "elm,state,cur,pushed"; source: "elm";
         action: SIGNAL_EMIT "elm,action,pushed,finished" "elm";
      }

      /* current page is being popped: [current]---->[next] */
      program {
         signal: "elm,state,cur,popped"; source: "elm";
         action: SIGNAL_EMIT "elm,action,popped,finished" "elm";
      }

      /* new page is being pushed: [current]<----[next] */
      program {
         signal: "elm,state,new,pushed"; source: "elm";
         action: SIGNAL_EMIT "elm,action,show,finished" "elm";
      }

      /* previous page is being pushed: [previous]---->[current] */
      program {
         signal: "elm,state,prev,popped"; source: "elm";
         action: SIGNAL_EMIT "elm,action,show,finished" "elm";
      }
   }
}
#undef BOTTOMMAX
