/*
    Copyright (C) 2008,2009 INdT - Instituto Nokia de Tecnologia
    Copyright (C) 2009,2010 ProFUSION embedded systems
    Copyright (C) 2009,2010 Samsung Electronics

    This file is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This file is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.
*/

group {
    name: "webkit/widget/slider/vertical";

    min: 11 0; /* if > 0, this is the minimum size that will be allocated.
                * If wants to draw on top, just overflow usign edje's rel1/rel2
                */
    max: 11 999999;

    images {
        image: "widget/slider/slider_v.png" COMP;
        image: "widget/slider/slider_knob_v.png" COMP;
        image: "widget/slider/slider_knob_press_v.png" COMP;
        image: "widget/slider/slider_fill_v.png" COMP;
    }

    script {
       public isEnabled;
       public isPressed;
       public isChecked;
       public isFocused;
       public isHovered;

       public show() {

           if (get_int(isEnabled) == 1) {
               set_state(PART:"img.knob", "default", 0.0);
               if (get_int(isFocused) == 1) {
                   set_state(PART:"img.knob", "pressed", 0.0);
                   if (get_int(isPressed) == 1)
                       set_state(PART:"img.knob", "pressed", 0.0);
                   }
               else if (get_int(isHovered) == 1) {
                   set_state(PART:"img.knob", "pressed", 0.0);
                   if (get_int(isPressed) == 1)
                       set_state(PART:"img.knob", "pressed", 0.0);
               }
           }
           else
               set_state(PART:"img.knob", "default", 0.0);
       }

       public message(Msg_Type:type, id, ...) {
           if ((id == 0) && (type == MSG_FLOAT_SET)) {
               new Float:vy, Float:sy;

               vy = getfarg(2);
               sy = getfarg(3);

               if (vy >= 0.0) {
                   set_drag_size(PART:"img.knob", 1.0, sy);
                   set_drag(PART:"img.knob", 0.0, vy);
                   run_program(PROGRAM:"show");
               } else
                   run_program(PROGRAM:"hide");
           }
       }

       public update_drag_pos() {
           new Float:x, Float:y;
           get_drag(PART:"img.knob", x, y);
           send_message(MSG_FLOAT, 1, y);
       }
    }

    parts {
         part {
            name: "rect.base";
            type: RECT;
            description {
               min: 11 29;
               max: 11 999999;
               state: "default" 0.0;
               color: 255 255 255 0;
            }
         }
         part {
            name: "rect.clipper";
            type: RECT;
            description {
               state: "default" 0.0;
               color: 255 255 255 255;
            }
            description {
               state: "hidden" 0.0;
               color: 255 255 255 128;
            }
         }

         part {
            name: "img.slider";
            type: IMAGE;
            mouse_events: 0;
            clip_to: "rect.clipper";
            description {
               state: "default" 0.0;
               min: 5 29;
               max: 5 999999;
               rel1.to: "rect.base";
               rel2.to: "rect.base";
               image {
                  normal: "widget/slider/slider_v.png";
                  border: 0 0 5 5;
               }
           }
         }

         part {
            name: "img.slider_fill";
            type: IMAGE;
            mouse_events: 0;
            clip_to: "rect.clipper";
            description {
               state: "default" 0.0;
               min: 5 29;
               max: 5 999999;
               rel1.to: "img.knob";
               rel2.to: "rect.base";
               align: 0.5 0.5;
               image {
                  normal: "widget/slider/slider_fill_v.png";
                  border: 0 0 5 5;
               }
           }
         }

         part {
            name: "img.knob";
            type: IMAGE;
            mouse_events: 1;
            clip_to: "rect.clipper";
            dragable {
                x: 0 0 0;
                y: 1 1 1;
                confine: "rect.base";
            }
            description {
               state: "default" 0.0;
               min: 11 29;
               align: 0.5 0.5;
               image {
                  normal: "widget/slider/slider_knob_v.png";
                  border: 0 0 6 6;
               }
            }
            description {
               state: "pressed" 0.0;
               inherit: "default" 0.0;
               image.normal: "widget/slider/slider_knob_press_v.png";
            }
         }
    }
    programs {
        program {
           name: "load";
           signal: "load";
           action: STATE_SET "hidden" 0.0;
           target: "rect.clipper";
        }
        program {
           name: "hide";
           action: STATE_SET "hidden" 0.0;
           transition: ACCELERATE 0.5;
           target: "rect.clipper";
        }

        program {
           name: "show";
           action: STATE_SET "default" 0.0;
           target: "rect.clipper";
        }

        program {
           name: "dragged";
           signal: "drag";
           source: "img.knob";
           script {
              update_drag_pos();
           }
        }

        program {
           name: "enabled";
           signal: "enabled";
           script {
              set_int(isEnabled, 1);
              show();
           }
        }
        program {
           name: "pressed";
           signal: "pressed";
           script {
              set_int(isPressed, 1);
              show();
           }
        }
        program {
           name: "checked";
           signal: "checked";
           script {
              set_int(isChecked, 1);
              show();
           }
        }
        program {
           name: "focused";
           signal: "focused";
           script {
              set_int(isFocused, 1);
              show();
           }
        }
         program {
           name: "hovered";
           signal: "hovered";
           script {
              set_int(isHovered, 1);
              show();
           }
        }
        program {
            name: "reset";
            signal: "reset";
            script {
               set_int(isEnabled, 0);
               set_int(isPressed, 0);
               set_int(isChecked, 0);
               set_int(isFocused, 0);
               set_int(isHovered, 0);
               show();
            }
        }
    }
}

group {
    name: "webkit/widget/slider/horizontal";

    min: 0 11; /* if > 0, this is the minimum size that will be allocated.
                * If wants to draw on top, just overflow usign edje's rel1/rel2
                */
    max: 999999 11;

    images {
        image: "widget/slider/slider_h.png" COMP;
        image: "widget/slider/slider_knob_h.png" COMP;
        image: "widget/slider/slider_knob_press_h.png" COMP;
        image: "widget/slider/slider_fill_h.png" COMP;
    }

    script {
       public isEnabled;
       public isPressed;
       public isChecked;
       public isFocused;
       public isHovered;

       public show() {

           if (get_int(isEnabled) == 1) {
               set_state(PART:"img.knob", "default", 0.0);
               if (get_int(isFocused) == 1) {
                   set_state(PART:"img.knob", "pressed", 0.0);
                   if (get_int(isPressed) == 1)
                       set_state(PART:"img.knob", "pressed", 0.0);
                   }
               else if (get_int(isHovered) == 1) {
                   set_state(PART:"img.knob", "pressed", 0.0);
                   if (get_int(isPressed) == 1)
                       set_state(PART:"img.knob", "pressed", 0.0);
               }
           }
           else
               set_state(PART:"img.knob", "default", 0.0);
       }

       public message(Msg_Type:type, id, ...) {
           if ((id == 0) && (type == MSG_FLOAT_SET)) {
               new Float:vx, Float:sx;

               vx = getfarg(2);
               sx = getfarg(3);

               if (vx >= 0.0) {
                   set_drag_size(PART:"img.knob", sx, 1.0);
                   set_drag(PART:"img.knob", vx, 0.0);
                   run_program(PROGRAM:"show");
               } else
                   run_program(PROGRAM:"hide");
           }
       }

       public update_drag_pos() {
           new Float:x, Float:y;
           get_drag(PART:"img.knob", x, y);
           send_message(MSG_FLOAT, 1, x);
       }
    }

    parts {
         part {
            name: "rect.base";
            type: RECT;
            description {
               state: "default" 0.0;
               min: 29 11;
               max: 999999 11;
               color: 255 255 255 0;
            }
         }
         part {
            name: "rect.clipper";
            type: RECT;
            description {
               state: "default" 0.0;
               color: 255 255 255 255;
            }
            description {
               state: "hidden" 0.0;
               color: 255 255 255 128;
            }
         }

         part {
            name: "img.slider";
            type: IMAGE;
            mouse_events: 0;
            clip_to: "rect.clipper";
            description {
               state: "default" 0.0;
               min: 29 5;
               max: 999999 5;
               rel1.to: "rect.base";
               rel2.to: "rect.base";
               align: 0.5 0.5;
               image {
                  normal: "widget/slider/slider_h.png";
                  border: 5 5 0 0;
               }
           }
         }

         part {
            name: "img.slider_fill";
            type: IMAGE;
            mouse_events: 0;
            clip_to: "rect.clipper";
            description {
               state: "default" 0.0;
               min: 29 5;
               max: 999999 5;
               rel1.to: "rect.base";
               rel2.to: "img.knob";
               align: 0.5 0.5;
               image {
                  normal: "widget/slider/slider_fill_h.png";
                  border: 5 5 0 0;
               }
           }
         }

         part {
            name: "img.knob";
            type: IMAGE;
            mouse_events: 1;
            clip_to: "rect.clipper";
            dragable {
                x: 1 1 0;
                y: 0 0 0;
                confine: "rect.base";
            }
            description {
               state: "default" 0.0;
               min: 29 11;
               align: 0.5 0.5;
               image {
                  normal: "widget/slider/slider_knob_h.png";
                  border: 6 6 0 0;
               }
            }
            description {
               state: "pressed" 0.0;
               inherit: "default" 0.0;
               image.normal: "widget/slider/slider_knob_press_h.png";
            }
         }
    }
    programs {
        program {
           name: "load";
           signal: "load";
           action: STATE_SET "hidden" 0.0;
           target: "rect.clipper";
        }
        program {
           name: "hide";
           action: STATE_SET "hidden" 0.0;
           transition: ACCELERATE 0.5;
           target: "rect.clipper";
        }

        program {
           name: "show";
           action: STATE_SET "default" 0.0;
           target: "rect.clipper";
        }

        program {
           name: "dragged";
           signal: "drag";
           source: "img.knob";
           script {
              update_drag_pos();
           }
        }

        program {
           name: "enabled";
           signal: "enabled";
           script {
              set_int(isEnabled, 1);
              show();
           }
        }
        program {
           name: "pressed";
           signal: "pressed";
           script {
              set_int(isPressed, 1);
              show();
           }
        }
        program {
           name: "checked";
           signal: "checked";
           script {
              set_int(isChecked, 1);
              show();
           }
        }
        program {
           name: "focused";
           signal: "focused";
           script {
              set_int(isFocused, 1);
              show();
           }
        }
         program {
           name: "hovered";
           signal: "hovered";
           script {
              set_int(isHovered, 1);
              show();
           }
        }
        program {
            name: "reset";
            signal: "reset";
            script {
               set_int(isEnabled, 0);
               set_int(isPressed, 0);
               set_int(isChecked, 0);
               set_int(isFocused, 0);
               set_int(isHovered, 0);
               show();
            }
        }
    }
}