#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(); } } } } }