#define MSG_COLOR 1
#define MSG_TEXT 2

collections {
   group {
      name: "example_group";

      parts {
         part {
            name: "part_right";
            type: RECT;
            clip_to: "part_right_clipper";
            description {
               min: 50 50;
               max: 50 50;
               state: "default" 0.0;
               color: 0 0 255 255; /* blue */
               rel1.relative: 1.0 0.5;
               rel1.offset: -49 0;
               rel2.relative: 1.0 0.5;
            }
         }

         part {
            name: "part_left";
            type: RECT;
            description {
               color_class: "cc";
               min: 50 50;
               max: 50 50;
               state: "default" 0.0;
               rel1.relative: 0.0 0.5;
               rel2.relative: 0.0 0.5;
               rel2.offset: 50 -1;
            }
         }

         part {
            name: "text";
            type: TEXT;
            description {
               min: 150 50;
               max: 150 50;
               fixed: 1 1;
               color: 0 0 0 255;
               state: "default" 0.0;
               rel1.relative: 0.5 0.5;
               rel2.relative: 0.5 0.5;
               text {
                  font:     "Sans";
                  size:     20;
                  min:      1 1;
                  align:    0.5 0.5;
               }
            }
         }

         part {
            name: "part_right_clipper";
            type: RECT;
            repeat_events: 1;

            description {
               min: 50 50;
               max: 50 50;

               state: "default" 0.0;
               rel1.relative: 1.0 0.5;
               rel1.offset: -49 0;
               rel2.relative: 1.0 0.5;
            }

            description {
               state: "hidden" 0.0;
               inherit: "default" 0.0;
               visible: 0;
            }
         }
      }

      script {
        public global_str0;
        public global_str1;
        public global_str2;
        public str_idx;

        public set_text_string() {
           new tmp[1024];
           new idx;
           idx = get_int(str_idx);

           if (idx == 0)
              get_str(global_str0, tmp, 1024);
           else if (idx == 1)
              get_str(global_str1, tmp, 1024);
           else if (idx == 2)
              get_str(global_str2, tmp, 1024);
              else return;

           set_text(PART:"text", tmp);
           send_message(MSG_STRING, MSG_TEXT, tmp);
        }

        public message(Msg_Type:type, id, ...) {
           if ((type == MSG_INT_SET) && (id == MSG_COLOR)) {
               new r, g, b, a;

               r = getarg(2);
               g = getarg(3);
               b = getarg(4);
               a = getarg(5);

               set_color_class("cc", r, g, b, a);
           }
        }
      }

      programs {
         program {
            name: "bootstrap";
            signal: "load";
            source: "";
            script {
               set_str(global_str0, "String one");
               set_str(global_str1, "String two");
               set_str(global_str2, "String three");
               set_int(str_idx, 0);
               set_text_string();
            }
         }

         program { /* custom signal */
            name: "part_right,hovered";
            signal: "mouse,move";
            source: "part_right";
            action: SIGNAL_EMIT "mouse,over" "part_right";
         }

         program { /* hide right rectangle */
            name: "part_right,hide";
            signal: "part_right,hide";
            source: "";
            action: STATE_SET "hidden" 0.0;
            target: "part_right_clipper";
         }

         program {
            name: "part_right,show";
            signal: "part_right,show";
            source: "";
            action: STATE_SET "default" 0.0;
            target: "part_right_clipper";
         }

         program { /* change text part's string value */
            name: "text,change";
            signal: "mouse,clicked,1";
            source: "part_left";
            script {
               new idx;
               idx = get_int(str_idx);
               idx = idx + 1;

               if (idx > 2)
                  set_int(str_idx, 0);
               else
                  set_int(str_idx, idx);

               set_text_string();
            }
         }
      }
   }
}
