collections {
   /* those 2 groups are used as custom icons for the buttons */
   group { name: "icon_green";
      parts {
         part { name: "icon_green";
            type: RECT;
            description { state: "default" 0.0;
               color: 0 255 0 255;
               aspect: 1 1;
               aspect_preference: VERTICAL;
            }
         }
      }
   }
   group { name: "icon_red";
      parts {
         part { name: "icon_red";
            type: RECT;
            description { state: "default" 0.0;
               color: 255 0 0 255;
               aspect: 1 1;
               aspect_preference: VERTICAL;
            }
         }
      }
   }

   group { name: "main";
      /* set a min window size */
      min: 250 250;
      
      /* tell edje that we are going to use elementary external parts */
      externals {
         external: "elm";
      }
      
      /* define global variables */
      script {
         public counter, toggle1, toggle2, toggle3, toggle4;
      }
      
      parts {
         part { name: "bg";
            type: RECT;
            description { state: "default" 0.0;
               color: 255 255 255 255;
            }
         }

         part { name: "title";
            type: TEXT;
            effect: SOFT_SHADOW;
            description { state: "default" 0.0;
               color: 255 255 255 255;
               color3: 70 70 70 70;
               text {
                  text: "Elementary buttons";
                  font: "Sans";
                  size: 16;
                  align: 0.5 0.0;
               }
            }
         }

         /* bottom label used for reporting */
         part { name: "label";
            type: TEXT;
            description { state: "default" 0.0;
               color: 0 0 0 255;
               text {
                  text: "try every buttons";
                  font: "Sans";
                  size: 12;
                  align: 0.5 1.0;
               }
            }
         }

         /* EXTERNAL elementary button with a label */
         part { name: "bt1";
            type: EXTERNAL;
            source: "elm/button";
            description { state: "default" 0;
               rel1 {
                  offset: 5 35;
               }
               rel2 {
                  relative: 1.0 0.0;
                  offset: -6 60;
               }
               params {
                  string: "label" "Label only";
               }
            }
         }

         /* EXTERNAL elementary button with label + standard icon */
         part { name: "bt2";
            type: EXTERNAL;
            source: "elm/button";
            description { state: "default" 0;
               rel1 {
                  to: "bt1";
                  relative: 0.0 1.0;
                  offset: 0 5;
               }
               rel2 {
                  to: "bt1";
                  relative: 1.0 2.0;
                  offset: -1 5;
               }
               params {
                  string: "label" "Label + standard icon";
                  string: "icon" "home";
               }
            }
         }

         /* EXTERNAL elementary button with a label and a custom icon */
         part { name: "bt3";
            type: EXTERNAL;
            source: "elm/button";
            description { state: "default" 0;
               rel1 {
                  to: "bt2";
                  relative: 0.0 1.0;
                  offset: 0 5;
               }
               rel2 {
                  to: "bt2";
                  relative: 1.0 2.0;
                  offset: -1 5;
               }
               params {
                  string: "label" "Label + custom icon";
                  string: "icon" "icon_green";
               }
            }
         }

         /* EXTERNAL elementary button with just a standard icon */
         part { name: "bt4";
            type: EXTERNAL;
            source: "elm/button";
            description { state: "default" 0;
               rel1 {
                  to: "bt3";
                  relative: 0.0 1.0;
                  offset: 0 5;
               }
               rel2 {
                  to: "bt3";
                  relative: 0.5 2.0;
                  offset: -6 5;
               }
               params {
                  string: "icon" "folder";
               }
            }
         }

         /* EXTERNAL elementary button with just a custom icon */
         part { name: "bt5";
            type: EXTERNAL;
            source: "elm/button";
            description { state: "default" 0;
               rel1 {
                  to: "bt3";
                  relative: 0.5 1.0;
                  offset: 5 5;
               }
               rel2 {
                  to: "bt3";
                  relative: 1.0 2.0;
                  offset: 0 5;
               }
               params {
                  string: "icon" "icon_green";
               }
            }
         }
      }

      programs {
         /* bt1 clicked, change it's label and count the clicks */
         program { name: "bt1_click";
            signal: "clicked";
            source: "bt1";
            script {
               new buf[32];
               /* increment the global counter*/
               set_int(counter, get_int(counter) + 1);
               /* set the button label */
               snprintf(buf, sizeof(buf), "Clicked %d times", get_int(counter));
               external_param_set_str(PART:"bt1", "label", buf);
               /* set the bottom label */
               set_text(PART:"label", "button 1 clicked: set label");
            }
         }

         /* bt2 clicked, toggle it's standard icon */
         program { name: "bt2_click";
            signal: "clicked";
            source: "bt2";
            script {
               if (get_int(toggle1) == 0) {
                  external_param_set_str(PART:"bt2", "icon", "home");
                  set_int(toggle1, 1);
               }
               else {
                  external_param_set_str(PART:"bt2", "icon", "folder");
                  set_int(toggle1, 0);
               }
               set_text(PART:"label", "button 2 clicked: toggle icon");
            }
         }

         /* bt3 clicked, toggle it's custom icon */
         program { name: "bt3_click";
            signal: "clicked";
            source: "bt3";
            script {
               if (get_int(toggle2) == 0) {
                  external_param_set_str(PART:"bt3", "icon", "icon_red");
                  set_int(toggle2, 1);
               }
               else {
                  external_param_set_str(PART:"bt3", "icon", "icon_green");
                  set_int(toggle2, 0);
               }
               set_text(PART:"label", "button 3 clicked: toggle icon");
            }
         }

         /* bt4 clicked, toggle it's icon */
         program { name: "bt4_click";
            signal: "clicked";
            source: "bt4";
            script {
               if (get_int(toggle3) == 0) {
                  external_param_set_str(PART:"bt4", "icon", "home");
                  set_int(toggle3, 1);
               }
               else {
                  external_param_set_str(PART:"bt4", "icon", "folder");
                  set_int(toggle3, 0);
               }
               set_text(PART:"label", "button 4 clicked: toggle icon");
            }
         }

         /* bt5 clicked, toggle it's icon */
         program { name: "bt5_click";
            signal: "clicked";
            source: "bt5";
            script {
               if (get_int(toggle4) == 0) {
                  external_param_set_str(PART:"bt5", "icon", "icon_red");
                  set_int(toggle4, 1);
               }
               else {
                  external_param_set_str(PART:"bt5", "icon", "icon_green");
                  set_int(toggle4, 0);
               }
               set_text(PART:"label", "button 5 clicked: toggle icon");
            }
         }
      }
   }
}
