/*
    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/combo";

    images {
        image: "widget/combo/combo_normal.png" COMP;
        image: "widget/combo/combo_normal_button.png" COMP;
        image: "widget/combo/combo_hover.png" COMP;
        image: "widget/combo/combo_hover_button.png" COMP;
        image: "widget/combo/combo_focus.png" COMP;
        image: "widget/combo/combo_focus_button.png" COMP;
        image: "widget/combo/combo_press.png" COMP;
        image: "widget/combo/combo_press_button.png" COMP;
        image: "widget/combo/icon.png" COMP;
    }

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

        public show() {
            if (get_int(isEnabled) == 1) {
                set_state(PART:"combo", "default", 0.0);
                set_state(PART:"combo_button", "default", 0.0);
                set_state(PART:"combo_button_icon", "default", 0.0);
                if (get_int(isFocused) == 1) {
                    set_state(PART:"combo", "focused", 0.0);
                    set_state(PART:"combo_button", "focused", 0.0);
                    if (get_int(isPressed) == 1) {
                        set_state(PART:"combo", "pressed", 0.0);
                        set_state(PART:"combo_button", "pressed", 0.0);
                    }
                }
                else if (get_int(isHovered) == 1) {
                    set_state(PART:"combo", "hovered", 0.0);
                    set_state(PART:"combo_button", "hovered", 0.0);
                    if (get_int(isPressed) == 1) {
                        set_state(PART:"combo", "pressed", 0.0);
                        set_state(PART:"combo_button", "pressed", 0.0);
                    }
                }
            }
            else {
                set_state(PART:"combo", "disabled", 0.0);
                set_state(PART:"combo_button", "disabled", 0.0);
                set_state(PART:"combo_button_icon", "disabled", 0.0);
            }
        }
    }

    parts {
        part {
            name: "clipper";
            type: RECT;
            description {
                min: 35 27;
                state: "default" 0.0;
            }
        }

        part {
            name: "combo_clipper";
            type: RECT;
            clip_to: "clipper";
            description {
                state: "default" 0.0;
                rel1.to: "clipper";
                rel2 {
                    to: "clipper"; 
                    offset: -32 -1;
                }
            }
        }

        part {
            name: "combo";
            type: IMAGE;
            clip_to: "combo_clipper";
            description {
                state: "default" 0.0;
                min: 36 20;
                image {
                    normal: "widget/combo/combo_normal.png";
                    border: 15 0 8 11;
                }
            }
            description {
               state: "disabled" 0.0;
               inherit: "default" 0.0;
               color: 255 255 255 150;
            }
            description {
               state: "hovered" 0.0;
               inherit: "default" 0.0;
               image {
                  normal: "widget/combo/combo_hover.png";
                  border: 15 0 8 11;
               }
            }
            description {
               state: "focused" 0.0;
               inherit: "default" 0.0;
               image {
                  normal: "widget/combo/combo_focus.png";
                  border: 15 0 8 11;
               }
            }
            description {
               state: "pressed" 0.0;
               inherit: "default" 0.0;
               image {
                  normal: "widget/combo/combo_press.png";
                  border: 15 0 8 11;
               }
            }
        }

        part {
            name: "bt_combo_clipper";
            type: RECT;
            clip_to: "clipper";
            description {
                state: "default" 0.0;
                rel1 {
                    to: "combo_clipper";
                    relative: 1.0 0.0;
                }
                rel2 {
                    to: "clipper"; 
                    relative: 1.0 1.0;
                }
            }
        }

        part {
            name: "combo_button";
            type: IMAGE;
            clip_to: "bt_combo_clipper";
            description {
                state: "default" 0.0;
                min: 18 20; // 3 + 5 + image width (10), 5 + 5 + image height (10)
                rel1.to: "bt_combo_clipper";
                image {
                     normal: "widget/combo/combo_normal_button.png";
                     border: 1 15 8 10;
               }
            }
            description {
                state: "disabled" 0.0;
                inherit: "default" 0.0;
                color: 255 255 255 150;
                rel1.to: "bt_combo_clipper";
            }
            description {
                state: "hovered" 0.0;
                inherit: "default" 0.0;
                rel1.to: "bt_combo_clipper";
                image {
                    normal: "widget/combo/combo_hover_button.png";
                    border: 1 15 8 10;
                }
            }
            description {
                state: "focused" 0.0;
                inherit: "default" 0.0;
                rel1.to: "bt_combo_clipper";
                image {
                    normal: "widget/combo/combo_focus_button.png";
                    border: 1 15 8 10;
                }
            }
            description {
                state: "pressed" 0.0;
                inherit: "default" 0.0;
                rel1.to: "bt_combo_clipper";
                image {
                    normal: "widget/combo/combo_press_button.png";
                    border: 1 15 8 10;
                }
            }
        }


        part {
            name: "combo_button_icon";
            type: IMAGE;
            clip_to: "bt_combo_clipper";
            description {
                state: "default" 0.0;
                min: 12 10;
                max: 12 10;
                color: 255 255 255 150;
                rel1 {
                    to: "bt_combo_clipper";
                    relative: 0.5 0.5;
                    offset: 0 1;
                }
                rel2 {
                    to: "bt_combo_clipper";
                    relative: 0.5 0.5;
                }
                fixed: 1 1;
                image {
                     normal: "widget/combo/icon.png";
                     border: 5 5 0 0;
               }
            }
            description {
                state: "disabled" 0.0;
                inherit: "default" 0.0;
                color: 255 255 255 50;
                image {
                     normal: "widget/combo/icon.png";
                     border: 5 5 0 0;
               }
            }
        }

        part {
            name: "text_confinement";
            type: RECT;
            description {
               state: "default" 0.0;
               color: 0 0 0 0;
               rel1 {
                  to: "combo_clipper";
                  offset: 15 10;
               }
               rel2 {
                  to: "combo_clipper";
                  offset: -11 -11;
               }
            }
         }
    }

    programs {
        program {
            name: "enabled";
            signal: "enabled";
            script {
                set_int(isEnabled, 1);
                show();
            }
        }
        program {
            name: "pressed";
            signal: "pressed";
            script {
               set_int(isPressed, 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();
            }
        }
    }
}
