Section 1
//cancel_btn_14 (cnc_fla.cancel_btn_14)
package cnc_fla {
import flash.display.*;
import flash.events.*;
public dynamic class cancel_btn_14 extends MovieClip {
public function cancel_btn_14(){
super();
addFrameScript(0, frame1);
}
public function onReleased(e:MouseEvent):void{
gotoAndStop(2);
}
public function onPressed(e:MouseEvent):void{
gotoAndStop(3);
}
function frame1(){
stop();
addEventListener(MouseEvent.MOUSE_OVER, onRolled);
addEventListener(MouseEvent.MOUSE_OUT, onRolledOut);
addEventListener(MouseEvent.MOUSE_DOWN, onPressed);
addEventListener(MouseEvent.MOUSE_UP, onReleased);
}
public function onRolled(e:MouseEvent):void{
gotoAndStop(2);
}
public function onRolledOut(e:MouseEvent):void{
gotoAndStop(1);
}
}
}//package cnc_fla
Section 2
//ok_btn_15 (cnc_fla.ok_btn_15)
package cnc_fla {
import flash.display.*;
import flash.events.*;
public dynamic class ok_btn_15 extends MovieClip {
public function ok_btn_15(){
super();
addFrameScript(0, frame1);
}
public function onReleased(e:MouseEvent):void{
gotoAndStop(2);
}
public function onPressed(e:MouseEvent):void{
gotoAndStop(3);
}
function frame1(){
stop();
addEventListener(MouseEvent.MOUSE_OVER, onRolled);
addEventListener(MouseEvent.MOUSE_OUT, onRolledOut);
addEventListener(MouseEvent.MOUSE_DOWN, onPressed);
addEventListener(MouseEvent.MOUSE_UP, onReleased);
}
public function onRolled(e:MouseEvent):void{
gotoAndStop(2);
}
public function onRolledOut(e:MouseEvent):void{
gotoAndStop(1);
}
}
}//package cnc_fla
Section 3
//windowTab_21 (cnc_fla.windowTab_21)
package cnc_fla {
import flash.display.*;
import flash.text.*;
public dynamic class windowTab_21 extends MovieClip {
public var label:TextField;
public function windowTab_21(){
super();
}
}
}//package cnc_fla
Section 4
//BitString (com.adobe.images.BitString)
package com.adobe.images {
public class BitString {
public var val:int;// = 0
public var len:int;// = 0
public function BitString(){
len = 0;
val = 0;
super();
}
}
}//package com.adobe.images
Section 5
//JPGEncoder (com.adobe.images.JPGEncoder)
package com.adobe.images {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
public class JPGEncoder {
private var fdtbl_UV:Array;
private var std_ac_chrominance_values:Array;
private var std_dc_chrominance_nrcodes:Array;
private var std_dc_chrominance_values:Array;
private var ZigZag:Array;
private var YDC_HT:Array;
private var bytenew:int;// = 0
private var fdtbl_Y:Array;
private var YAC_HT:Array;
private var std_ac_chrominance_nrcodes:Array;
private var DU:Array;
private var std_ac_luminance_values:Array;
private var UVTable:Array;
private var UDU:Array;
private var YDU:Array;
private var byteout:ByteArray;
private var UVAC_HT:Array;
private var UVDC_HT:Array;
private var bytepos:int;// = 7
private var VDU:Array;
private var std_ac_luminance_nrcodes:Array;
private var std_dc_luminance_values:Array;
private var YTable:Array;
private var std_dc_luminance_nrcodes:Array;
private var bitcode:Array;
private var category:Array;
public function JPGEncoder(quality:Number=50){
var sf:int;
ZigZag = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63];
YTable = new Array(64);
UVTable = new Array(64);
fdtbl_Y = new Array(64);
fdtbl_UV = new Array(64);
std_dc_luminance_nrcodes = [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0];
std_dc_luminance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
std_ac_luminance_nrcodes = [0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125];
std_ac_luminance_values = [1, 2, 3, 0, 4, 17, 5, 18, 33, 49, 65, 6, 19, 81, 97, 7, 34, 113, 20, 50, 129, 145, 161, 8, 35, 66, 177, 193, 21, 82, 209, 240, 36, 51, 98, 114, 130, 9, 10, 22, 23, 24, 25, 26, 37, 38, 39, 40, 41, 42, 52, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250];
std_dc_chrominance_nrcodes = [0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0];
std_dc_chrominance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
std_ac_chrominance_nrcodes = [0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119];
std_ac_chrominance_values = [0, 1, 2, 3, 17, 4, 5, 33, 49, 6, 18, 65, 81, 7, 97, 113, 19, 34, 50, 129, 8, 20, 66, 145, 161, 177, 193, 9, 35, 51, 82, 240, 21, 98, 114, 209, 10, 22, 36, 52, 225, 37, 241, 23, 24, 25, 26, 38, 39, 40, 41, 42, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 130, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 226, 227, 228, 229, 230, 231, 232, 233, 234, 242, 243, 244, 245, 246, 247, 248, 249, 250];
bitcode = new Array(0xFFFF);
category = new Array(0xFFFF);
bytenew = 0;
bytepos = 7;
DU = new Array(64);
YDU = new Array(64);
UDU = new Array(64);
VDU = new Array(64);
super();
if (quality <= 0){
quality = 1;
};
if (quality > 100){
quality = 100;
};
sf = 0;
if (quality < 50){
sf = int((5000 / quality));
} else {
sf = int((200 - (quality * 2)));
};
initHuffmanTbl();
initCategoryNumber();
initQuantTables(sf);
}
private function RGB2YUV(img:BitmapData, xpos:int, ypos:int):void{
var pos:int;
var y:int;
var x:int;
var P:uint;
var R:Number;
var G:Number;
var B:Number;
pos = 0;
y = 0;
while (y < 8) {
x = 0;
while (x < 8) {
P = img.getPixel32((xpos + x), (ypos + y));
R = Number(((P >> 16) & 0xFF));
G = Number(((P >> 8) & 0xFF));
B = Number((P & 0xFF));
YDU[pos] = ((((0.299 * R) + (0.587 * G)) + (0.114 * B)) - 128);
UDU[pos] = (((-0.16874 * R) + (-0.33126 * G)) + (0.5 * B));
VDU[pos] = (((0.5 * R) + (-0.41869 * G)) + (-0.08131 * B));
pos++;
x++;
};
y++;
};
}
private function writeWord(value:int):void{
writeByte(((value >> 8) & 0xFF));
writeByte((value & 0xFF));
}
private function writeByte(value:int):void{
byteout.writeByte(value);
}
private function writeDHT():void{
var i:int;
writeWord(65476);
writeWord(418);
writeByte(0);
i = 0;
while (i < 16) {
writeByte(std_dc_luminance_nrcodes[(i + 1)]);
i++;
};
i = 0;
while (i <= 11) {
writeByte(std_dc_luminance_values[i]);
i++;
};
writeByte(16);
i = 0;
while (i < 16) {
writeByte(std_ac_luminance_nrcodes[(i + 1)]);
i++;
};
i = 0;
while (i <= 161) {
writeByte(std_ac_luminance_values[i]);
i++;
};
writeByte(1);
i = 0;
while (i < 16) {
writeByte(std_dc_chrominance_nrcodes[(i + 1)]);
i++;
};
i = 0;
while (i <= 11) {
writeByte(std_dc_chrominance_values[i]);
i++;
};
writeByte(17);
i = 0;
while (i < 16) {
writeByte(std_ac_chrominance_nrcodes[(i + 1)]);
i++;
};
i = 0;
while (i <= 161) {
writeByte(std_ac_chrominance_values[i]);
i++;
};
}
private function writeBits(bs:BitString):void{
var value:int;
var posval:int;
value = bs.val;
posval = (bs.len - 1);
while (posval >= 0) {
if ((value & uint((1 << posval)))){
bytenew = (bytenew | uint((1 << bytepos)));
};
posval--;
bytepos--;
if (bytepos < 0){
if (bytenew == 0xFF){
writeByte(0xFF);
writeByte(0);
} else {
writeByte(bytenew);
};
bytepos = 7;
bytenew = 0;
};
};
}
private function initHuffmanTbl():void{
YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes, std_dc_luminance_values);
UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes, std_dc_chrominance_values);
YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes, std_ac_luminance_values);
UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes, std_ac_chrominance_values);
}
public function encode(image:BitmapData):ByteArray{
var DCY:Number;
var DCU:Number;
var DCV:Number;
var ypos:int;
var xpos:int;
var fillbits:BitString;
byteout = new ByteArray();
bytenew = 0;
bytepos = 7;
writeWord(65496);
writeAPP0();
writeDQT();
writeSOF0(image.width, image.height);
writeDHT();
writeSOS();
DCY = 0;
DCU = 0;
DCV = 0;
bytenew = 0;
bytepos = 7;
ypos = 0;
while (ypos < image.height) {
xpos = 0;
while (xpos < image.width) {
RGB2YUV(image, xpos, ypos);
DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);
DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);
DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);
xpos = (xpos + 8);
};
ypos = (ypos + 8);
};
if (bytepos >= 0){
fillbits = new BitString();
fillbits.len = (bytepos + 1);
fillbits.val = ((1 << (bytepos + 1)) - 1);
writeBits(fillbits);
};
writeWord(65497);
return (byteout);
}
private function initCategoryNumber():void{
var nrlower:int;
var nrupper:int;
var nr:int;
var cat:int;
nrlower = 1;
nrupper = 2;
cat = 1;
while (cat <= 15) {
nr = nrlower;
while (nr < nrupper) {
category[(32767 + nr)] = cat;
bitcode[(32767 + nr)] = new BitString();
bitcode[(32767 + nr)].len = cat;
bitcode[(32767 + nr)].val = nr;
nr++;
};
nr = -((nrupper - 1));
while (nr <= -(nrlower)) {
category[(32767 + nr)] = cat;
bitcode[(32767 + nr)] = new BitString();
bitcode[(32767 + nr)].len = cat;
bitcode[(32767 + nr)].val = ((nrupper - 1) + nr);
nr++;
};
nrlower = (nrlower << 1);
nrupper = (nrupper << 1);
cat++;
};
}
private function writeDQT():void{
var i:int;
writeWord(65499);
writeWord(132);
writeByte(0);
i = 0;
while (i < 64) {
writeByte(YTable[i]);
i++;
};
writeByte(1);
i = 0;
while (i < 64) {
writeByte(UVTable[i]);
i++;
};
}
private function writeAPP0():void{
writeWord(65504);
writeWord(16);
writeByte(74);
writeByte(70);
writeByte(73);
writeByte(70);
writeByte(0);
writeByte(1);
writeByte(1);
writeByte(0);
writeWord(1);
writeWord(1);
writeByte(0);
writeByte(0);
}
private function writeSOS():void{
writeWord(65498);
writeWord(12);
writeByte(3);
writeByte(1);
writeByte(0);
writeByte(2);
writeByte(17);
writeByte(3);
writeByte(17);
writeByte(0);
writeByte(63);
writeByte(0);
}
private function processDU(CDU:Array, fdtbl:Array, DC:Number, HTDC:Array, HTAC:Array):Number{
var EOB:BitString;
var M16zeroes:BitString;
var i:int;
var DU_DCT:Array;
var Diff:int;
var end0pos:int;
var startpos:int;
var nrzeroes:int;
var nrmarker:int;
EOB = HTAC[0];
M16zeroes = HTAC[240];
DU_DCT = fDCTQuant(CDU, fdtbl);
i = 0;
while (i < 64) {
DU[ZigZag[i]] = DU_DCT[i];
i++;
};
Diff = (DU[0] - DC);
DC = DU[0];
if (Diff == 0){
writeBits(HTDC[0]);
} else {
writeBits(HTDC[category[(32767 + Diff)]]);
writeBits(bitcode[(32767 + Diff)]);
};
end0pos = 63;
while ((((end0pos > 0)) && ((DU[end0pos] == 0)))) {
end0pos--;
};
if (end0pos == 0){
writeBits(EOB);
return (DC);
};
i = 1;
while (i <= end0pos) {
startpos = i;
while ((((DU[i] == 0)) && ((i <= end0pos)))) {
i++;
};
nrzeroes = (i - startpos);
if (nrzeroes >= 16){
nrmarker = 1;
while (nrmarker <= (nrzeroes / 16)) {
writeBits(M16zeroes);
nrmarker++;
};
nrzeroes = int((nrzeroes & 15));
};
writeBits(HTAC[((nrzeroes * 16) + category[(32767 + DU[i])])]);
writeBits(bitcode[(32767 + DU[i])]);
i++;
};
if (end0pos != 63){
writeBits(EOB);
};
return (DC);
}
private function initQuantTables(sf:int):void{
var i:int;
var t:Number;
var YQT:Array;
var UVQT:Array;
var aasf:Array;
var row:int;
var col:int;
YQT = [16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99];
i = 0;
while (i < 64) {
t = Math.floor((((YQT[i] * sf) + 50) / 100));
if (t < 1){
t = 1;
} else {
if (t > 0xFF){
t = 0xFF;
};
};
YTable[ZigZag[i]] = t;
i++;
};
UVQT = [17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99];
i = 0;
while (i < 64) {
t = Math.floor((((UVQT[i] * sf) + 50) / 100));
if (t < 1){
t = 1;
} else {
if (t > 0xFF){
t = 0xFF;
};
};
UVTable[ZigZag[i]] = t;
i++;
};
aasf = [1, 1.387039845, 1.306562965, 1.175875602, 1, 0.785694958, 0.5411961, 0.275899379];
i = 0;
row = 0;
while (row < 8) {
col = 0;
while (col < 8) {
fdtbl_Y[i] = (1 / (((YTable[ZigZag[i]] * aasf[row]) * aasf[col]) * 8));
fdtbl_UV[i] = (1 / (((UVTable[ZigZag[i]] * aasf[row]) * aasf[col]) * 8));
i++;
col++;
};
row++;
};
}
private function writeSOF0(width:int, height:int):void{
writeWord(65472);
writeWord(17);
writeByte(8);
writeWord(height);
writeWord(width);
writeByte(3);
writeByte(1);
writeByte(17);
writeByte(0);
writeByte(2);
writeByte(17);
writeByte(1);
writeByte(3);
writeByte(17);
writeByte(1);
}
private function computeHuffmanTbl(nrcodes:Array, std_table:Array):Array{
var codevalue:int;
var pos_in_table:int;
var HT:Array;
var k:int;
var j:int;
codevalue = 0;
pos_in_table = 0;
HT = new Array();
k = 1;
while (k <= 16) {
j = 1;
while (j <= nrcodes[k]) {
HT[std_table[pos_in_table]] = new BitString();
HT[std_table[pos_in_table]].val = codevalue;
HT[std_table[pos_in_table]].len = k;
pos_in_table++;
codevalue++;
j++;
};
codevalue = (codevalue * 2);
k++;
};
return (HT);
}
private function fDCTQuant(data:Array, fdtbl:Array):Array{
var tmp0:Number;
var tmp1:Number;
var tmp2:Number;
var tmp3:Number;
var tmp4:Number;
var tmp5:Number;
var tmp6:Number;
var tmp7:Number;
var tmp10:Number;
var tmp11:Number;
var tmp12:Number;
var tmp13:Number;
var z1:Number;
var z2:Number;
var z3:Number;
var z4:Number;
var z5:Number;
var z11:Number;
var z13:Number;
var i:int;
var dataOff:int;
dataOff = 0;
i = 0;
while (i < 8) {
tmp0 = (data[(dataOff + 0)] + data[(dataOff + 7)]);
tmp7 = (data[(dataOff + 0)] - data[(dataOff + 7)]);
tmp1 = (data[(dataOff + 1)] + data[(dataOff + 6)]);
tmp6 = (data[(dataOff + 1)] - data[(dataOff + 6)]);
tmp2 = (data[(dataOff + 2)] + data[(dataOff + 5)]);
tmp5 = (data[(dataOff + 2)] - data[(dataOff + 5)]);
tmp3 = (data[(dataOff + 3)] + data[(dataOff + 4)]);
tmp4 = (data[(dataOff + 3)] - data[(dataOff + 4)]);
tmp10 = (tmp0 + tmp3);
tmp13 = (tmp0 - tmp3);
tmp11 = (tmp1 + tmp2);
tmp12 = (tmp1 - tmp2);
data[(dataOff + 0)] = (tmp10 + tmp11);
data[(dataOff + 4)] = (tmp10 - tmp11);
z1 = ((tmp12 + tmp13) * 0.707106781);
data[(dataOff + 2)] = (tmp13 + z1);
data[(dataOff + 6)] = (tmp13 - z1);
tmp10 = (tmp4 + tmp5);
tmp11 = (tmp5 + tmp6);
tmp12 = (tmp6 + tmp7);
z5 = ((tmp10 - tmp12) * 0.382683433);
z2 = ((0.5411961 * tmp10) + z5);
z4 = ((1.306562965 * tmp12) + z5);
z3 = (tmp11 * 0.707106781);
z11 = (tmp7 + z3);
z13 = (tmp7 - z3);
data[(dataOff + 5)] = (z13 + z2);
data[(dataOff + 3)] = (z13 - z2);
data[(dataOff + 1)] = (z11 + z4);
data[(dataOff + 7)] = (z11 - z4);
dataOff = (dataOff + 8);
i++;
};
dataOff = 0;
i = 0;
while (i < 8) {
tmp0 = (data[(dataOff + 0)] + data[(dataOff + 56)]);
tmp7 = (data[(dataOff + 0)] - data[(dataOff + 56)]);
tmp1 = (data[(dataOff + 8)] + data[(dataOff + 48)]);
tmp6 = (data[(dataOff + 8)] - data[(dataOff + 48)]);
tmp2 = (data[(dataOff + 16)] + data[(dataOff + 40)]);
tmp5 = (data[(dataOff + 16)] - data[(dataOff + 40)]);
tmp3 = (data[(dataOff + 24)] + data[(dataOff + 32)]);
tmp4 = (data[(dataOff + 24)] - data[(dataOff + 32)]);
tmp10 = (tmp0 + tmp3);
tmp13 = (tmp0 - tmp3);
tmp11 = (tmp1 + tmp2);
tmp12 = (tmp1 - tmp2);
data[(dataOff + 0)] = (tmp10 + tmp11);
data[(dataOff + 32)] = (tmp10 - tmp11);
z1 = ((tmp12 + tmp13) * 0.707106781);
data[(dataOff + 16)] = (tmp13 + z1);
data[(dataOff + 48)] = (tmp13 - z1);
tmp10 = (tmp4 + tmp5);
tmp11 = (tmp5 + tmp6);
tmp12 = (tmp6 + tmp7);
z5 = ((tmp10 - tmp12) * 0.382683433);
z2 = ((0.5411961 * tmp10) + z5);
z4 = ((1.306562965 * tmp12) + z5);
z3 = (tmp11 * 0.707106781);
z11 = (tmp7 + z3);
z13 = (tmp7 - z3);
data[(dataOff + 40)] = (z13 + z2);
data[(dataOff + 24)] = (z13 - z2);
data[(dataOff + 8)] = (z11 + z4);
data[(dataOff + 56)] = (z11 - z4);
dataOff++;
i++;
};
i = 0;
while (i < 64) {
data[i] = Math.round((data[i] * fdtbl[i]));
i++;
};
return (data);
}
}
}//package com.adobe.images
Section 6
//PNGEncoder (com.adobe.images.PNGEncoder)
package com.adobe.images {
import flash.display.*;
import flash.utils.*;
public class PNGEncoder {
private static var crcTableComputed:Boolean = false;
private static var crcTable:Array;
public function PNGEncoder(){
super();
}
private static function writeChunk(png:ByteArray, type:uint, data:ByteArray):void{
var len:uint;
var p:uint;
var e:uint;
var i:int;
var c:uint;
var n:uint;
var k:uint;
if (!crcTableComputed){
crcTableComputed = true;
crcTable = [];
n = 0;
while (n < 0x0100) {
c = n;
k = 0;
while (k < 8) {
if ((c & 1)){
c = uint((uint(3988292384) ^ uint((c >>> 1))));
} else {
c = uint((c >>> 1));
};
k++;
};
crcTable[n] = c;
n++;
};
};
len = 0;
if (data != null){
len = data.length;
};
png.writeUnsignedInt(len);
p = png.position;
png.writeUnsignedInt(type);
if (data != null){
png.writeBytes(data);
};
e = png.position;
png.position = p;
c = 4294967295;
i = 0;
while (i < (e - p)) {
c = uint((crcTable[((c ^ png.readUnsignedByte()) & uint(0xFF))] ^ uint((c >>> 8))));
i++;
};
c = uint((c ^ uint(4294967295)));
png.position = e;
png.writeUnsignedInt(c);
}
public static function encode(img:BitmapData):ByteArray{
var png:ByteArray;
var IHDR:ByteArray;
var IDAT:ByteArray;
var i:int;
var p:uint;
var j:int;
png = new ByteArray();
png.writeUnsignedInt(2303741511);
png.writeUnsignedInt(218765834);
IHDR = new ByteArray();
IHDR.writeInt(img.width);
IHDR.writeInt(img.height);
IHDR.writeUnsignedInt(134610944);
IHDR.writeByte(0);
writeChunk(png, 1229472850, IHDR);
IDAT = new ByteArray();
i = 0;
while (i < img.height) {
IDAT.writeByte(0);
if (!img.transparent){
j = 0;
while (j < img.width) {
p = img.getPixel(j, i);
IDAT.writeUnsignedInt(uint((((p & 0xFFFFFF) << 8) | 0xFF)));
j++;
};
} else {
j = 0;
while (j < img.width) {
p = img.getPixel32(j, i);
IDAT.writeUnsignedInt(uint((((p & 0xFFFFFF) << 8) | (p >>> 24))));
j++;
};
};
i++;
};
IDAT.compress();
writeChunk(png, 1229209940, IDAT);
writeChunk(png, 1229278788, null);
return (png);
}
}
}//package com.adobe.images
Section 7
//JSON (com.adobe.serialization.json.JSON)
package com.adobe.serialization.json {
public class JSON {
public function JSON(){
super();
}
public static function decode(s:String){
var decoder:JSONDecoder;
decoder = new JSONDecoder(s);
return (decoder.getValue());
}
public static function encode(o:Object):String{
var encoder:JSONEncoder;
encoder = new JSONEncoder(o);
return (encoder.getString());
}
}
}//package com.adobe.serialization.json
Section 8
//JSONDecoder (com.adobe.serialization.json.JSONDecoder)
package com.adobe.serialization.json {
public class JSONDecoder {
private var value;
private var tokenizer:JSONTokenizer;
private var token:JSONToken;
public function JSONDecoder(s:String){
super();
tokenizer = new JSONTokenizer(s);
nextToken();
value = parseValue();
}
private function nextToken():JSONToken{
return ((token = tokenizer.getNextToken()));
}
private function parseObject():Object{
var o:Object;
var key:String;
o = new Object();
nextToken();
if (token.type == JSONTokenType.RIGHT_BRACE){
return (o);
};
while (true) {
if (token.type == JSONTokenType.STRING){
key = String(token.value);
nextToken();
if (token.type == JSONTokenType.COLON){
nextToken();
o[key] = parseValue();
nextToken();
if (token.type == JSONTokenType.RIGHT_BRACE){
return (o);
};
if (token.type == JSONTokenType.COMMA){
nextToken();
} else {
tokenizer.parseError(("Expecting } or , but found " + token.value));
};
} else {
tokenizer.parseError(("Expecting : but found " + token.value));
};
} else {
tokenizer.parseError(("Expecting string but found " + token.value));
};
};
return (null);
}
private function parseArray():Array{
var a:Array;
a = new Array();
nextToken();
if (token.type == JSONTokenType.RIGHT_BRACKET){
return (a);
};
while (true) {
a.push(parseValue());
nextToken();
if (token.type == JSONTokenType.RIGHT_BRACKET){
return (a);
};
if (token.type == JSONTokenType.COMMA){
nextToken();
} else {
tokenizer.parseError(("Expecting ] or , but found " + token.value));
};
};
return (null);
}
public function getValue(){
return (value);
}
private function parseValue():Object{
if (token == null){
tokenizer.parseError("Unexpected end of input");
};
switch (token.type){
case JSONTokenType.LEFT_BRACE:
return (parseObject());
case JSONTokenType.LEFT_BRACKET:
return (parseArray());
case JSONTokenType.STRING:
case JSONTokenType.NUMBER:
case JSONTokenType.TRUE:
case JSONTokenType.FALSE:
case JSONTokenType.NULL:
return (token.value);
default:
tokenizer.parseError(("Unexpected " + token.value));
};
return (null);
}
}
}//package com.adobe.serialization.json
Section 9
//JSONEncoder (com.adobe.serialization.json.JSONEncoder)
package com.adobe.serialization.json {
import flash.utils.*;
public class JSONEncoder {
private var jsonString:String;
public function JSONEncoder(value){
super();
jsonString = convertToString(value);
}
private function arrayToString(a:Array):String{
var s:String;
var i:int;
s = "";
i = 0;
while (i < a.length) {
if (s.length > 0){
s = (s + ",");
};
s = (s + convertToString(a[i]));
i++;
};
return ((("[" + s) + "]"));
}
private function convertToString(value):String{
if ((value is String)){
return (escapeString((value as String)));
};
if ((value is Number)){
return ((isFinite((value as Number))) ? value.toString() : "null");
} else {
if ((value is Boolean)){
return ((value) ? "true" : "false");
} else {
if ((value is Array)){
return (arrayToString((value as Array)));
};
if ((((value is Object)) && (!((value == null))))){
return (objectToString(value));
};
};
};
return ("null");
}
private function escapeString(str:String):String{
var s:String;
var ch:String;
var len:Number;
var i:int;
var hexCode:String;
var zeroPad:String;
s = "";
len = str.length;
i = 0;
while (i < len) {
ch = str.charAt(i);
switch (ch){
case "\"":
s = (s + "\\\"");
break;
case "\\":
s = (s + "\\\\");
break;
case "\b":
s = (s + "\\b");
break;
case "\f":
s = (s + "\\f");
break;
case "\n":
s = (s + "\\n");
break;
case "\r":
s = (s + "\\r");
break;
case "\t":
s = (s + "\\t");
break;
default:
if (ch < " "){
hexCode = ch.charCodeAt(0).toString(16);
zeroPad = ((hexCode.length == 2)) ? "00" : "000";
s = (s + (("\\u" + zeroPad) + hexCode));
} else {
s = (s + ch);
};
};
i++;
};
return ((("\"" + s) + "\""));
}
private function objectToString(o:Object):String{
var s:String;
var classInfo:XML;
var value:Object;
var key:String;
var v:XML;
var o = o;
s = "";
classInfo = describeType(o);
if (classInfo.@name.toString() == "Object"){
for (key in o) {
value = o[key];
if ((value is Function)){
} else {
if (s.length > 0){
s = (s + ",");
};
s = (s + ((escapeString(key) + ":") + convertToString(value)));
};
};
} else {
for each (v in classInfo..*.(((name() == "variable")) || ((name() == "accessor")))) {
if (s.length > 0){
s = (s + ",");
};
s = (s + ((escapeString(v.@name.toString()) + ":") + convertToString(o[v.@name])));
};
};
return ((("{" + s) + "}"));
}
public function getString():String{
return (jsonString);
}
}
}//package com.adobe.serialization.json
Section 10
//JSONParseError (com.adobe.serialization.json.JSONParseError)
package com.adobe.serialization.json {
public class JSONParseError extends Error {
private var _text:String;
private var _location:int;
public function JSONParseError(message:String="", location:int=0, text:String=""){
super(message);
name = "JSONParseError";
_location = location;
_text = text;
}
public function get text():String{
return (_text);
}
public function get location():int{
return (_location);
}
}
}//package com.adobe.serialization.json
Section 11
//JSONToken (com.adobe.serialization.json.JSONToken)
package com.adobe.serialization.json {
public class JSONToken {
private var _value:Object;
private var _type:int;
public function JSONToken(type:int=-1, value:Object=null){
super();
_type = type;
_value = value;
}
public function set value(v:Object):void{
_value = v;
}
public function get value():Object{
return (_value);
}
public function set type(value:int):void{
_type = value;
}
public function get type():int{
return (_type);
}
}
}//package com.adobe.serialization.json
Section 12
//JSONTokenizer (com.adobe.serialization.json.JSONTokenizer)
package com.adobe.serialization.json {
public class JSONTokenizer {
private var loc:int;
private var ch:String;
private var obj:Object;
private var jsonString:String;
public function JSONTokenizer(s:String){
super();
jsonString = s;
loc = 0;
nextChar();
}
private function skipComments():void{
if (ch == "/"){
nextChar();
switch (ch){
case "/":
do {
nextChar();
} while (((!((ch == "\n"))) && (!((ch == "")))));
nextChar();
break;
case "*":
nextChar();
while (true) {
if (ch == "*"){
nextChar();
if (ch == "/"){
nextChar();
break;
};
} else {
nextChar();
};
if (ch == ""){
parseError("Multi-line comment not closed");
};
};
break;
default:
parseError((("Unexpected " + ch) + " encountered (expecting '/' or '*' )"));
};
};
}
private function isDigit(ch:String):Boolean{
return ((((ch >= "0")) && ((ch <= "9"))));
}
private function readNumber():JSONToken{
var token:JSONToken;
var input:String;
var num:Number;
token = new JSONToken();
token.type = JSONTokenType.NUMBER;
input = "";
if (ch == "-"){
input = (input + "-");
nextChar();
};
if (!isDigit(ch)){
parseError("Expecting a digit");
};
if (ch == "0"){
input = (input + ch);
nextChar();
if (isDigit(ch)){
parseError("A digit cannot immediately follow 0");
};
} else {
while (isDigit(ch)) {
input = (input + ch);
nextChar();
};
};
if (ch == "."){
input = (input + ".");
nextChar();
if (!isDigit(ch)){
parseError("Expecting a digit");
};
while (isDigit(ch)) {
input = (input + ch);
nextChar();
};
};
if ((((ch == "e")) || ((ch == "E")))){
input = (input + "e");
nextChar();
if ((((ch == "+")) || ((ch == "-")))){
input = (input + ch);
nextChar();
};
if (!isDigit(ch)){
parseError("Scientific notation number needs exponent value");
};
while (isDigit(ch)) {
input = (input + ch);
nextChar();
};
};
num = Number(input);
if (((isFinite(num)) && (!(isNaN(num))))){
token.value = num;
return (token);
};
parseError((("Number " + num) + " is not valid!"));
return (null);
}
private function nextChar():String{
return ((ch = jsonString.charAt(loc++)));
}
public function getNextToken():JSONToken{
var token:JSONToken;
var _local2:String;
var _local3:String;
var _local4:String;
token = new JSONToken();
skipIgnored();
switch (ch){
case "{":
token.type = JSONTokenType.LEFT_BRACE;
token.value = "{";
nextChar();
break;
case "}":
token.type = JSONTokenType.RIGHT_BRACE;
token.value = "}";
nextChar();
break;
case "[":
token.type = JSONTokenType.LEFT_BRACKET;
token.value = "[";
nextChar();
break;
case "]":
token.type = JSONTokenType.RIGHT_BRACKET;
token.value = "]";
nextChar();
break;
case ",":
token.type = JSONTokenType.COMMA;
token.value = ",";
nextChar();
break;
case ":":
token.type = JSONTokenType.COLON;
token.value = ":";
nextChar();
break;
case "t":
_local2 = ((("t" + nextChar()) + nextChar()) + nextChar());
if (_local2 == "true"){
token.type = JSONTokenType.TRUE;
token.value = true;
nextChar();
} else {
parseError(("Expecting 'true' but found " + _local2));
};
break;
case "f":
_local3 = (((("f" + nextChar()) + nextChar()) + nextChar()) + nextChar());
if (_local3 == "false"){
token.type = JSONTokenType.FALSE;
token.value = false;
nextChar();
} else {
parseError(("Expecting 'false' but found " + _local3));
};
break;
case "n":
_local4 = ((("n" + nextChar()) + nextChar()) + nextChar());
if (_local4 == "null"){
token.type = JSONTokenType.NULL;
token.value = null;
nextChar();
} else {
parseError(("Expecting 'null' but found " + _local4));
};
break;
case "\"":
token = readString();
break;
default:
if (((isDigit(ch)) || ((ch == "-")))){
token = readNumber();
} else {
if (ch == ""){
return (null);
};
parseError((("Unexpected " + ch) + " encountered"));
};
};
return (token);
}
private function skipWhite():void{
while (isWhiteSpace(ch)) {
nextChar();
};
}
private function isWhiteSpace(ch:String):Boolean{
return ((((((((ch == " ")) || ((ch == "\t")))) || ((ch == "\n")))) || ((ch == "\r"))));
}
public function parseError(message:String):void{
throw (new JSONParseError(message, loc, jsonString));
}
private function skipIgnored():void{
var originalLoc:int;
do {
originalLoc = loc;
skipWhite();
skipComments();
} while (originalLoc != loc);
}
private function isHexDigit(ch:String):Boolean{
var uc:String;
uc = ch.toUpperCase();
return (((isDigit(ch)) || ((((uc >= "A")) && ((uc <= "F"))))));
}
private function readString():JSONToken{
var token:JSONToken;
var string:String;
var _local5:String;
var i:int;
token = new JSONToken();
token.type = JSONTokenType.STRING;
string = "";
nextChar();
while (((!((ch == "\""))) && (!((ch == ""))))) {
if (ch == "\\"){
nextChar();
switch (ch){
case "\"":
string = (string + "\"");
break;
case "/":
string = (string + "/");
break;
case "\\":
string = (string + "\\");
break;
case "b":
string = (string + "\b");
break;
case "f":
string = (string + "\f");
break;
case "n":
string = (string + "\n");
break;
case "r":
string = (string + "\r");
break;
case "t":
string = (string + "\t");
break;
case "u":
_local5 = "";
i = 0;
while (i < 4) {
if (!isHexDigit(nextChar())){
parseError((" Excepted a hex digit, but found: " + ch));
};
_local5 = (_local5 + ch);
i++;
};
string = (string + String.fromCharCode(parseInt(_local5, 16)));
break;
default:
string = (string + ("\\" + ch));
};
} else {
string = (string + ch);
};
nextChar();
};
if (ch == ""){
parseError("Unterminated string literal");
};
nextChar();
token.value = string;
return (token);
}
}
}//package com.adobe.serialization.json
Section 13
//JSONTokenType (com.adobe.serialization.json.JSONTokenType)
package com.adobe.serialization.json {
public class JSONTokenType {
public static const NUMBER:int = 11;
public static const FALSE:int = 8;
public static const RIGHT_BRACKET:int = 4;
public static const NULL:int = 9;
public static const TRUE:int = 7;
public static const RIGHT_BRACE:int = 2;
public static const UNKNOWN:int = -1;
public static const COMMA:int = 0;
public static const LEFT_BRACKET:int = 3;
public static const STRING:int = 10;
public static const LEFT_BRACE:int = 1;
public static const COLON:int = 6;
public function JSONTokenType(){
super();
}
}
}//package com.adobe.serialization.json
Section 14
//ControlSetBothScale (com.kid360.display.transform.ControlSetBothScale)
package com.kid360.display.transform {
import com.senocular.display.transform.*;
public dynamic class ControlSetBothScale extends Array {
public function ControlSetBothScale(){
var moveCursor:CursorMove;
var scaleCursorB:CursorScale;
var scaleCursorB90:CursorScale;
moveCursor = new CursorMove();
scaleCursorB = new CursorScale(ControlUVScale.BOTH, 0);
scaleCursorB90 = new CursorScale(ControlUVScale.BOTH, 90);
super(new ControlBorder(), new ControlMove(moveCursor), new ControlUVScale(0, 0, ControlUVScale.BOTH, scaleCursorB), new ControlUVScale(0, 1, ControlUVScale.BOTH, scaleCursorB90), new ControlUVScale(1, 0, ControlUVScale.BOTH, scaleCursorB90), new ControlUVScale(1, 1, ControlUVScale.BOTH, scaleCursorB), new ControlCursor());
}
}
}//package com.kid360.display.transform
Section 15
//ControlSetNoScale (com.kid360.display.transform.ControlSetNoScale)
package com.kid360.display.transform {
import com.senocular.display.transform.*;
public dynamic class ControlSetNoScale extends Array {
public function ControlSetNoScale(){
var moveCursor:CursorMove;
moveCursor = new CursorMove();
super(new ControlMove(moveCursor), new ControlCursor());
}
}
}//package com.kid360.display.transform
Section 16
//ControlSetRotBothScale (com.kid360.display.transform.ControlSetRotBothScale)
package com.kid360.display.transform {
import com.senocular.display.transform.*;
public dynamic class ControlSetRotBothScale extends Array {
public function ControlSetRotBothScale(){
var moveCursor:CursorMove;
var rotateCursor:CursorRotate;
var scaleCursorB:CursorScale;
var scaleCursorB90:CursorScale;
var rotate00:ControlUVRotate;
var rotate01:ControlUVRotate;
var rotate10:ControlUVRotate;
var rotate11:ControlUVRotate;
moveCursor = new CursorMove();
rotateCursor = new CursorRotate();
scaleCursorB = new CursorScale(ControlUVScale.BOTH, 0);
scaleCursorB90 = new CursorScale(ControlUVScale.BOTH, 90);
rotate00 = new ControlUVRotate(0, 0, rotateCursor);
rotate00.scaleX = 3;
rotate00.scaleY = 3;
rotate00.alpha = 0;
rotate01 = new ControlUVRotate(0, 1, rotateCursor);
rotate01.scaleX = 3;
rotate01.scaleY = 3;
rotate01.alpha = 0;
rotate10 = new ControlUVRotate(1, 0, rotateCursor);
rotate10.scaleX = 3;
rotate10.scaleY = 3;
rotate10.alpha = 0;
rotate11 = new ControlUVRotate(1, 1, rotateCursor);
rotate11.scaleX = 3;
rotate11.scaleY = 3;
rotate11.alpha = 0;
super(new ControlBorder(), new ControlMove(moveCursor), rotate00, rotate01, rotate10, rotate11, new ControlUVScale(0, 0, ControlUVScale.BOTH, scaleCursorB), new ControlUVScale(0, 1, ControlUVScale.BOTH, scaleCursorB90), new ControlUVScale(1, 0, ControlUVScale.BOTH, scaleCursorB90), new ControlUVScale(1, 1, ControlUVScale.BOTH, scaleCursorB), new ControlCursor());
}
}
}//package com.kid360.display.transform
Section 17
//ControlSetRotNoScale (com.kid360.display.transform.ControlSetRotNoScale)
package com.kid360.display.transform {
import com.senocular.display.transform.*;
public dynamic class ControlSetRotNoScale extends Array {
public function ControlSetRotNoScale(){
var moveCursor:CursorMove;
var rotateCursor:CursorRotate;
var rotate00:ControlUVRotate;
var rotate01:ControlUVRotate;
var rotate10:ControlUVRotate;
var rotate11:ControlUVRotate;
moveCursor = new CursorMove();
rotateCursor = new CursorRotate();
rotate00 = new ControlUVRotate(0, 0, rotateCursor);
rotate01 = new ControlUVRotate(0, 1, rotateCursor);
rotate10 = new ControlUVRotate(1, 0, rotateCursor);
rotate11 = new ControlUVRotate(1, 1, rotateCursor);
super(new ControlBorder(), new ControlMove(moveCursor), rotate00, rotate01, rotate10, rotate11, new ControlCursor());
}
}
}//package com.kid360.display.transform
Section 18
//ControlSetRotUniformScale (com.kid360.display.transform.ControlSetRotUniformScale)
package com.kid360.display.transform {
import com.senocular.display.transform.*;
public dynamic class ControlSetRotUniformScale extends Array {
public function ControlSetRotUniformScale(){
var moveCursor:CursorMove;
var rotateCursor:CursorRotate;
var scaleCursorB:CursorScale;
var scaleCursorB90:CursorScale;
var rotate00:ControlUVRotate;
var rotate01:ControlUVRotate;
var rotate10:ControlUVRotate;
var rotate11:ControlUVRotate;
moveCursor = new CursorMove();
rotateCursor = new CursorRotate();
scaleCursorB = new CursorScale(ControlUVScale.UNIFORM, 0);
scaleCursorB90 = new CursorScale(ControlUVScale.UNIFORM, 90);
rotate00 = new ControlUVRotate(0, 0, rotateCursor);
rotate00.scaleX = 3;
rotate00.scaleY = 3;
rotate00.alpha = 0;
rotate01 = new ControlUVRotate(0, 1, rotateCursor);
rotate01.scaleX = 3;
rotate01.scaleY = 3;
rotate01.alpha = 0;
rotate10 = new ControlUVRotate(1, 0, rotateCursor);
rotate10.scaleX = 3;
rotate10.scaleY = 3;
rotate10.alpha = 0;
rotate11 = new ControlUVRotate(1, 1, rotateCursor);
rotate11.scaleX = 3;
rotate11.scaleY = 3;
rotate11.alpha = 0;
super(new ControlBorder(), new ControlMove(moveCursor), rotate00, rotate01, rotate10, rotate11, new ControlUVScale(0, 0, ControlUVScale.UNIFORM, scaleCursorB), new ControlUVScale(0, 1, ControlUVScale.UNIFORM, scaleCursorB90), new ControlUVScale(1, 0, ControlUVScale.UNIFORM, scaleCursorB90), new ControlUVScale(1, 1, ControlUVScale.UNIFORM, scaleCursorB), new ControlCursor());
}
}
}//package com.kid360.display.transform
Section 19
//ControlSetUniformScale (com.kid360.display.transform.ControlSetUniformScale)
package com.kid360.display.transform {
import com.senocular.display.transform.*;
public dynamic class ControlSetUniformScale extends Array {
public function ControlSetUniformScale(){
var moveCursor:CursorMove;
var scaleCursorB:CursorScale;
var scaleCursorB90:CursorScale;
moveCursor = new CursorMove();
scaleCursorB = new CursorScale(ControlUVScale.UNIFORM, 0);
scaleCursorB90 = new CursorScale(ControlUVScale.UNIFORM, 90);
super(new ControlBorder(), new ControlMove(moveCursor), new ControlUVScale(0, 0, ControlUVScale.UNIFORM, scaleCursorB), new ControlUVScale(0, 1, ControlUVScale.UNIFORM, scaleCursorB90), new ControlUVScale(1, 0, ControlUVScale.UNIFORM, scaleCursorB90), new ControlUVScale(1, 1, ControlUVScale.UNIFORM, scaleCursorB), new ControlCursor());
}
}
}//package com.kid360.display.transform
Section 20
//AssetCarouselButton (com.kid360.hasbro.clickncolor.buttons.AssetCarouselButton)
package com.kid360.hasbro.clickncolor.buttons {
import flash.display.*;
import flash.geom.*;
import flash.events.*;
import com.kid360.ui.*;
public class AssetCarouselButton extends SkinnableCarouselItem {
private var iconMask:SkinnableSprite;
private var assetConfig:XML;
private var assetIcon:SkinnableSprite;
private var maxWidth:Number;
private var maxHeight:Number;
public function AssetCarouselButton(container:Scroller=null, assetConfig:XML=null){
super(container);
visible = false;
assetIcon = new SkinnableSprite();
assetIcon.mouseEnabled = false;
assetIcon.name = "icon";
config = assetConfig;
addEventListener(SkinnableSprite.SKINNABLE_SPRITE_READY, onSpriteReady);
}
override protected function applySkin(newConfig:XML):void{
var propertyValue:String;
var newConfig = newConfig;
if (!config){
return;
};
assetConfig = newConfig;
if (config.hasOwnProperty("@buttonID")){
skinConfig = (scroller.parent as Configurable).config.itemSkin.(@id == config.@buttonID);
} else {
skinConfig = (scroller.parent as Configurable).config.itemSkin[0];
};
super.applySkin(skinConfig);
var _local3 = xmlValue(skinConfig, "mask");
propertyValue = _local3;
if ("" != _local3){
iconMask = new SkinnableSprite(new XML((("<mask src='" + propertyValue) + "'/>")));
iconMask.name = "iconMask";
iconMask.addEventListener(SkinnableSprite.SKINNABLE_SPRITE_READY, onSpriteReady);
};
}
private function scaleIcon():void{
var iconWidth:Number;
var iconHeight:Number;
var propertyValue:String;
iconWidth = assetIcon.width;
iconHeight = assetIcon.height;
propertyValue = xmlValue(skinConfig, "@menuScale");
if ("" != propertyValue){
assetIcon.scaleX = (assetIcon.scaleY = parseFloat(propertyValue));
} else {
assetIcon.scaleX = (assetIcon.scaleY = (maxHeight / iconHeight));
if (assetIcon.width > maxWidth){
assetIcon.scaleX = (assetIcon.scaleY = (maxWidth / iconWidth));
};
};
assetIcon.x = ((maxWidth - assetIcon.width) / 2);
assetIcon.y = ((maxHeight - assetIcon.height) / 2);
if (iconMask){
assetIcon.mask = iconMask;
} else {
throw (new Error("Can't mask icon with a null mask"));
};
}
private function onSpriteReady(e:Event):void{
switch (e.target){
case iconMask:
iconMask.removeEventListener(SkinnableSprite.SKINNABLE_SPRITE_READY, onSpriteReady);
addChild(iconMask);
break;
case assetIcon:
assetIcon.removeEventListener(SkinnableSprite.SKINNABLE_SPRITE_READY, onSpriteReady);
scaleIcon();
addChild(assetIcon);
dispatchEvent(new Event(Event.COMPLETE));
break;
default:
break;
};
}
public function get keywords():Array{
var trimString:Function;
var kws:Array;
var kwList:Array;
var kw:String;
trimString = function (s:String):String{
var chars:Array;
chars = s.split("");
while ((((" " == chars[0])) || (("\t" == chars[0])))) {
chars.shift();
};
while ((((" " == chars[(chars.length - 1)])) || (("\t" == chars[(chars.length - 1)])))) {
chars.pop();
};
return (chars.join(""));
};
kws = assetConfig.keywords.split(",");
kwList = [];
for each (kw in kws) {
kwList.push(trimString(kw));
};
return (kwList);
}
override protected function onAssetLoaded(e:StatusEvent):void{
var assetID:String;
var faceNum:int;
var _local4:DisplayObject;
assetID = e.level;
faceNum = ["up", "over", "down", "selectedUp", "selectedOver", "selectedDown"].indexOf(assetID);
if (faceNum > -1){
faces[faceNum] = assetLoader.assetForID(assetID);
switch (assetID){
case "up":
_local4 = (e.target.loaders[assetID].content as DisplayObject);
maxWidth = _local4.width;
maxHeight = _local4.height;
assetIcon.config = assetConfig;
assetIcon.addEventListener(SkinnableSprite.SKINNABLE_SPRITE_READY, onSpriteReady);
curState = IDLE_STATE;
addChildAt(faces[faceNum], 0);
break;
default:
break;
};
};
}
override protected function showState(btnState:int):void{
if (btnState == INIT_STATE){
return;
};
if (faces[btnState]){
if (((faces[curState]) && (contains(faces[curState])))){
removeChild(faces[curState]);
};
addChildAt(faces[btnState], 0);
};
}
public function get iconData():XML{
return (assetConfig);
}
public function get iconAsset():DisplayObject{
return (assetIcon.asset1);
}
}
}//package com.kid360.hasbro.clickncolor.buttons
Section 21
//MessageCarouselButton (com.kid360.hasbro.clickncolor.buttons.MessageCarouselButton)
package com.kid360.hasbro.clickncolor.buttons {
import flash.events.*;
import flash.text.*;
import com.kid360.ui.*;
public class MessageCarouselButton extends CarouselItem {
public var label:TextField;
private var depressed:Boolean;
public function MessageCarouselButton(container:Scroller, labelText:String=""){
super(container);
stop();
mouseChildren = false;
buttonMode = true;
label.autoSize = TextFieldAutoSize.CENTER;
label.wordWrap = true;
buttonLabel = labelText;
addEventListener(MouseEvent.MOUSE_OVER, onRolled);
addEventListener(MouseEvent.MOUSE_OUT, onRolledOut);
addEventListener(MouseEvent.MOUSE_DOWN, onPressed);
addEventListener(MouseEvent.MOUSE_UP, onReleased);
addEventListener(Event.ENTER_FRAME, frameHook);
}
private function onReleased(e:MouseEvent):void{
gotoAndStop((depressed) ? 5 : 2);
}
private function frameHook(e:Event):void{
removeEventListener(Event.ENTER_FRAME, frameHook);
dispatchEvent(new Event(Event.COMPLETE));
}
private function onPressed(e:MouseEvent):void{
depressed = !(depressed);
gotoAndStop((depressed) ? 6 : 2);
}
public function toggle(flag:Boolean):void{
depressed = flag;
gotoAndStop((depressed) ? 4 : 1);
}
public function get isPressed():Boolean{
return (depressed);
}
private function onRolled(e:MouseEvent):void{
gotoAndStop((depressed) ? 5 : 2);
}
private function onRolledOut(e:MouseEvent):void{
gotoAndStop((depressed) ? 4 : 1);
}
public function set buttonLabel(newLabel:String):void{
label.text = newLabel;
label.y = ((label.height > 40)) ? 0 : 11.5;
}
public function get buttonLabel():String{
return (label.text);
}
}
}//package com.kid360.hasbro.clickncolor.buttons
Section 22
//ActivityScreen (com.kid360.hasbro.clickncolor.ActivityScreen)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.events.*;
import flash.text.*;
import fl.transitions.*;
import com.kid360.ui.*;
import com.kid360.hasbro.clickncolor.buttons.*;
import fl.transitions.easing.*;
import com.kid360.*;
import flash.net.*;
import flash.printing.*;
import flash.ui.*;
public class ActivityScreen extends ClickNColorScreen {
private const IDLE_THRESHOLD:Number = 15000;
private var brushHotspot:Point;
private var surfBtn:SkinnableButton;
private var printBtn:SkinnableButton;
private var palette:ColorPalette;
private var workspace:Workspace;
private var printTimer:Timer;
private var categoryButtons:Array;
private var clearBtn:SkinnableButton;
private var xTween:Tween;
private var foldedCardDialog:FoldedCardDialog;
private var tutorialLoader:Loader;
private var cardBtn:SkinnableButton;
private var filterBtns:Array;
private var brushHome:SkinnableSprite;
private var brush:PaintBrush;
private var printcomp:PrintComposition;
private var helpBtn:SkinnableButton;
private var yTween:Tween;
private var testMiniString:String;// = ""
private var dialogLoader:Loader;
private var draggee:Sprite;
private var collections:Array;
private var idleTimer:Timer;
private var eraseBtn:SkinnableButton;
private var curFilter:String;// = ""
private var confirmationDialog:MovieClip;
public function ActivityScreen(screenConfig:XML=null){
categoryButtons = [];
collections = [];
filterBtns = [];
curFilter = "";
testMiniString = "";
super();
workspace = (addChildAt(new Workspace(), 0) as Workspace);
printBtn = new SkinnableButton();
printBtn.name = "printola";
addChild(printBtn);
cardBtn = new SkinnableButton();
cardBtn.name = "carder";
addChild(cardBtn);
clearBtn = new SkinnableButton();
addChild(clearBtn);
surfBtn = new SkinnableButton();
addChild(surfBtn);
helpBtn = new SkinnableButton();
addChild(helpBtn);
eraseBtn = new SkinnableButton();
addChild(eraseBtn);
dialogLoader = new Loader();
dialogLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onDialogLoaded);
tutorialLoader = new Loader();
config = screenConfig;
printTimer = new Timer(150, 1);
printTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onReadyToPrint);
idleTimer = new Timer(IDLE_THRESHOLD, 1);
idleTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onIdle);
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
public function printFoldedCard(greeting:String):void{
var bmd:BitmapData;
workspace.toolTarget = null;
bmd = new BitmapData(720, 502, false);
bmd.draw(workspace);
startPrinting([new GreetingCardImposition(new Bitmap(bmd), greeting, config.printCopyright, config.greetingCard.cardBlurb)]);
workspace.restoreSelection();
}
private function onDialogDone(e:Event):void{
removeChild(confirmationDialog);
}
public function get brushColor():uint{
if (!brushActive){
throw (new Error("Can't retrieve color of an inactive brush"));
};
return (brush.paintColor);
}
private function grabBrush(flag:Boolean):void{
if (!brush){
return;
};
workspace.editable = !(flag);
if (flag){
if (!draggee){
xTween = new Tween(brush, "x", None.easeNone, brush.x, (mouseX - brushHotspot.x), 0.125, true);
yTween = new Tween(brush, "y", None.easeNone, brush.y, (mouseY - brushHotspot.y), 0.125, true);
xTween.addEventListener(TweenEvent.MOTION_FINISH, onBrushAttached);
};
Mouse.hide();
} else {
xTween = new Tween(brush, "x", None.easeNone, brush.x, brushHome.x, 0.125, true);
yTween = new Tween(brush, "y", None.easeNone, brush.y, brushHome.y, 0.125, true);
Mouse.show();
};
}
private function onIdle(e:TimerEvent):void{
var ba:ByteArray;
ba = new ByteArray();
ba.writeObject(workspace.layoutSpec);
dispatchEvent(new NetStatusEvent(NetStatusEvent.NET_STATUS, true, true, ba));
}
public function get canPaint():Boolean{
return (config.hasOwnProperty("colorsList"));
}
public function clear():void{
clearBtn.state = SkinnableButton.IDLE_STATE;
if (confirmationDialog){
activated = false;
addChild(confirmationDialog);
(confirmationDialog.getChildAt(0) as MovieClip).gotoAndPlay("close");
};
}
override public function set config(newConfig:XML):void{
var btnSpec:XML;
var b:SkinnableButton;
var newConfig = newConfig;
super.config = newConfig;
if (!newConfig){
return;
};
dialogLoader.load(new URLRequest((assetsPath + newConfig.confirmationDialog[0].@src)));
workspace.config = newConfig.workspace[0];
foldedCardDialog = new FoldedCardDialog(newConfig.greetingCard[0]);
for each (btnSpec in newConfig.button.("filter" == @action)) {
b = new SkinnableButton(btnSpec);
b.toggling = true;
filterBtns.push(addChild(b));
};
printBtn.config = newConfig.button.("print" == @action)[0];
cardBtn.config = newConfig.button.("greetingcard" == @action)[0];
clearBtn.config = newConfig.button.("clear" == @action)[0];
surfBtn.config = newConfig.button.("surf" == @action)[0];
helpBtn.config = newConfig.button.("tutor" == @action)[0];
eraseBtn.config = newConfig.button.("erase" == @action)[0];
initCategories(newConfig..category);
if (canPaint){
palette = new ColorPalette(config.colorsList[0]);
addChild(palette);
brushHome = new SkinnableSprite(config.paintBucket[0]);
brush = new PaintBrush(config.paintBucket[0]);
brush.name = "paintbrush";
brush.x = parseFloat(config.paintBucket.@x[0]);
brush.y = parseFloat(config.paintBucket.@y[0]);
brushHotspot = new Point(parseFloat(config.paintBucket.@anchorX[0]), parseFloat(config.paintBucket.@anchorY[0]));
addChild(brushHome);
PaintBucket.setTint(brushHome, 0, 100);
addChild(brush);
};
}
private function updateButtons():void{
eraseBtn.mouseEnabled = (clearBtn.mouseEnabled = (printBtn.mouseEnabled = (cardBtn.mouseEnabled = (workspace.numChildren > 1))));
}
private function startPrinting(images:Array, pageMargin:Number=0):void{
var pq:PrintQueue;
pq = new PrintQueue(images);
pq.margin = pageMargin;
addChild(pq);
pq.print();
removeChild(pq);
}
public function print():void{
var outputFormat:String;
workspace.toolTarget = null;
outputFormat = ClickNColorActivity.appConfig.printOutput;
switch (outputFormat){
case "fullPage":
printFullPage();
break;
case "foldedCard":
printFoldedCard("faked message");
break;
default:
trace("not gonna print", outputFormat);
break;
};
}
public function get brushActive():Boolean{
return (((canPaint) && ((draggee == brush))));
}
private function onClick(e:MouseEvent):void{
var workspaceAssetWasClicked:Boolean;
var clickEventCode:String;
var _local4:String;
var _local5:PrintPreviewer;
var _local6:int;
var _local7:int;
idleTimer.reset();
idleTimer.start();
workspaceAssetWasClicked = isWorkspaceAsset((e.target as DisplayObject));
if (!((workspaceAssetWasClicked) || ((e.target is PaintBucket)))){
if (((draggee) && (!((e.target is Workspace))))){
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMovement);
draggee = null;
grabBrush(false);
brush.mouseEnabled = true;
};
};
switch (e.target){
case workspace:
if (draggee){
workspace.bgColor = brushColor;
};
break;
case surfBtn:
ClickNColorActivity.reportClick("HubLink");
_local4 = (e.target as SkinnableButton).config.@actionData[0].toString();
navigateToURL(new URLRequest(_local4), "_blank");
break;
case printBtn:
ClickNColorActivity.reportClick("PrintFull");
workspace.toolTarget = null;
grabBrush(false);
printTimer.start();
break;
case cardBtn:
printcomp = new PrintComposition(workspace.markup);
_local5 = new PrintPreviewer();
printcomp.x = 75.8;
printcomp.y = 43.4;
printcomp.scaleX = (printcomp.scaleY = 0.9);
_local5.addChild(printcomp);
addChild(_local5);
break;
case foldedCardDialog.okBtn:
printFoldedCard(foldedCardDialog.selectedMessage);
break;
case eraseBtn:
workspace.deleteLastChild();
updateButtons();
break;
case clearBtn:
clear();
break;
case helpBtn:
dispatchEvent(new StatusEvent(StatusEvent.STATUS, true, true, "showHelp"));
break;
default:
_local6 = categoryButtons.indexOf(e.target);
_local7 = filterBtns.indexOf(e.target);
if (_local7 > -1){
clickEventCode = (e.target as SkinnableButton).config.@eventCode;
ClickNColorActivity.reportClick(clickEventCode);
filterCollections((e.target as SkinnableButton));
} else {
if (_local6 > -1){
showCollection(_local6);
} else {
if ((e.target is AssetCarouselButton)){
workspace.addItem((e.target as AssetCarouselButton));
updateButtons();
} else {
if ((e.target is PaintBrush)){
grabBrush(true);
} else {
if ((e.target is PaintBucket)){
brush.paintColor = parseInt(e.target.config, 16);
grabBrush(true);
} else {
if (workspaceAssetWasClicked){
if (!(e.target is WorkspaceAsset)){
if (draggee){
(e.target as MovieClip).layerColor = brush.paintColor;
PaintBucket.setTint((e.target as DisplayObject), brush.paintColor, brush.tintPercent);
};
};
} else {
switch (e.target.name){
case "yes_btn":
workspace.clear();
case "no_btn":
(confirmationDialog.getChildAt(0) as MovieClip).gotoAndPlay("open");
activated = true;
updateButtons();
break;
case "startOverBtn":
removeChild(e.target.parent);
workspace.clear();
break;
case "printConfirm":
printCakeComposition();
case "printCancel":
removeChild(e.target.parent);
break;
default:
if ((e.target is Workspace)){
workspace.toolTarget = null;
};
break;
};
};
};
};
};
};
};
break;
};
}
private function onDialogLoaded(e:Event):void{
dialogLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onDialogLoaded);
confirmationDialog = (dialogLoader.content as MovieClip);
if (config.confirmationDialog[0].hasOwnProperty("@x")){
confirmationDialog.x = config.confirmationDialog[0].@x;
};
if (config.confirmationDialog[0].hasOwnProperty("@y")){
confirmationDialog.y = config.confirmationDialog[0].@y;
};
}
private function updateFilters():void{
var defaultFilterButton:SkinnableButton;
var i:int;
var btnSpec:XML;
var attributeValue:String;
if (0 == filterBtns.length){
return;
};
i = 0;
while (i < filterBtns.length) {
btnSpec = filterBtns[i].config;
if (btnSpec.hasOwnProperty("@default")){
attributeValue = btnSpec.@default.toLowerCase();
if (((("yes" == attributeValue)) || (("true" == attributeValue)))){
defaultFilterButton = filterBtns[i];
};
};
i++;
};
if (!defaultFilterButton){
defaultFilterButton = filterBtns[0];
};
filterCollections(defaultFilterButton);
}
private function filterCollections(foo:SkinnableButton):void{
var i:int;
var fc:SkinnableCarousel;
i = 0;
while (i < filterBtns.length) {
filterBtns[i].selected = (foo == filterBtns[i]);
i++;
};
curFilter = foo.config.@keyword;
for each (fc in collections) {
fc.itemFilter = assetScreener;
};
}
public function workspaceMarkupFromMiniString(s:String):XML{
var splitIntoItems:Function;
var workspaceItems:Array;
var result:XML;
var miniString:String;
var s = s;
splitIntoItems = function (s:String, chunkSize:int=25):Array{
var chars:Array;
var assets:Array;
chars = s.split("");
assets = [];
while (chars.length > (chunkSize - 1)) {
assets.push(chars.splice(0, chunkSize).join(""));
};
trace("finished with", chars.length, "leftovers (should always be zero)");
return (assets);
};
workspaceItems = splitIntoItems(s);
result = <page/>
;
for each (miniString in workspaceItems) {
result.appendChild(assetMarkupFromMiniString(miniString));
};
return (result);
}
private function assetScreener(o:DisplayObject):Boolean{
var itemKeywords:Array;
var kw:String;
if ("" == curFilter){
return (true);
};
itemKeywords = (o as AssetCarouselButton).keywords;
for each (kw in itemKeywords) {
if (kw == curFilter){
return (true);
};
};
return (false);
}
private function tutor():void{
parent.addChild(new TutorialScreen());
}
private function isWorkspaceAsset(obj:DisplayObject):Boolean{
var par:DisplayObjectContainer;
if ((obj is WorkspaceAsset)){
return (true);
};
par = obj.parent;
while (par) {
if ((par is WorkspaceAsset)){
return (true);
};
par = par.parent;
};
return (false);
}
private function initCategories(catList:XMLList):void{
var categoryName:Function;
var cat:XML;
var btn:SkinnableButton;
var fc:SkinnableCarousel;
var catList = catList;
categoryName = function (data:String):String{
if (-1 < data.indexOf("Bkgd")){
return ("backgrounds");
};
if (-1 < data.indexOf("Char")){
return ("characters");
};
if (-1 < data.indexOf("Prop")){
return ("props");
};
return ("");
};
for each (cat in catList) {
btn = new SkinnableButton(cat.categoryButton[0]);
btn.toggling = true;
btn.grouped = true;
categoryButtons.push(addChild(btn));
fc = new SkinnableCarousel(cat.carousel[0]);
fc.name = categoryName(cat.categoryButton[0].@up);
collections.push(fc);
};
addChild(collections[0]);
}
private function onReadyToPrint(e:TimerEvent):void{
print();
}
private function onKeyReleased(event:KeyboardEvent):void{
if (!((((event.altKey) || (event.ctrlKey))) || (event.shiftKey))){
if ((((event.keyCode == Keyboard.DELETE)) || ((event.keyCode == Keyboard.BACKSPACE)))){
workspace.deleteLastChild();
};
};
if (event.altKey){
if (event.keyCode == 90){
trace(((root.mouseX + ",") + root.mouseY));
};
};
}
private function onBrushAttached(e:TweenEvent):void{
e.target.removeEventListener(TweenEvent.MOTION_FINISH, onBrushAttached);
draggee = brush;
draggee.mouseEnabled = false;
setChildIndex(draggee, (numChildren - 1));
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMovement);
}
private function showCollection(collectionNum:int):void{
var i:int;
if (contains(collections[collectionNum])){
trace("nothing to do if you keep clicking the same button");
return;
};
i = 0;
while (i < collections.length) {
if (i != collectionNum){
if (contains(collections[i])){
removeChild(collections[i]);
};
};
categoryButtons[i].selected = (collectionNum == i);
i++;
};
addChild(collections[collectionNum]);
}
public function printFullPage():void{
var fpi:FullPageImposition;
var wsLoc:Point;
workspace.toolTarget = null;
fpi = new FullPageImposition();
fpi.layout(workspace, config.printCopyright);
startPrinting([fpi]);
wsLoc = fpi.imageHome;
workspace.x = wsLoc.x;
workspace.y = wsLoc.y;
addChildAt(workspace, 0);
workspace.restoreSelection();
}
public function get selectedCollection():int{
var i:int;
i = 0;
while (i < collections.length) {
if (this.contains(collections[i])){
return (i);
};
i++;
};
trace("We don't ever want to get this far");
return (-1);
}
public function set activated(flag:Boolean):void{
var btns:Array;
var b:Sprite;
var curCollection:int;
btns = [printBtn, clearBtn, surfBtn, helpBtn, eraseBtn].concat(categoryButtons);
for each (b in btns) {
b.mouseEnabled = flag;
};
curCollection = selectedCollection;
if (curCollection > -1){
(collections[curCollection] as SkinnableCarousel).mouseChildren = flag;
};
}
private function onAddedToStage(e:Event):void{
var curCollection:int;
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
addEventListener("dialogDone", onDialogDone);
addEventListener(MouseEvent.CLICK, onClick);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyReleased);
curCollection = selectedCollection;
if (curCollection > -1){
categoryButtons[curCollection].selected = true;
} else {
trace("there is no curCollection <gasp>");
};
updateFilters();
updateButtons();
}
private function onMovement(e:MouseEvent):void{
draggee.x = (mouseX - brushHotspot.x);
draggee.y = (mouseY - brushHotspot.y);
}
public function printCakeComposition():void{
workspace.toolTarget = null;
printcomp.x = (printcomp.y = 0);
printcomp.scaleX = (printcomp.scaleY = 1);
startPrinting([printcomp]);
workspace.restoreSelection();
}
public function assetMarkupFromMiniString(miniString:String):XML{
var restorePeriods:Function;
var assetInfo:XML;
var markup:XML;
var datum:Number;
var miniString = miniString;
restorePeriods = function (s:String):String{
var hunks:Array;
hunks = [s.substr(0, 7), s.substr(7, 5), s.substr(12, 3), s.substr(15, 3), s.substr(18, 5), s.substr(-2)];
return (hunks.join("."));
};
if (25 != miniString.length){
throw (new Error("Can't generate markup from malformed miniString"));
};
miniString = restorePeriods(miniString);
assetInfo = (root as ClickNColorActivityWithSplash).assetForID(miniString.substr(0, 4));
if (((assetInfo.hasOwnProperty("@isBackground")) && (("true" == assetInfo.@isBackground.toLowerCase())))){
markup = <bg><x>0</x><y>0</y><scaleX>1</scaleX><scaleY>1</scaleY><rotation>0</rotation></bg>
;
} else {
markup = <sprite/>
;
datum = parseFloat(miniString.substr(4, 6));
markup.x = String(datum);
datum = parseFloat(miniString.substr(10, 6));
markup.y = String(datum);
datum = parseFloat(miniString.substr(16, 4));
markup.scaleX = String(datum);
datum = parseFloat(miniString.substr(20, 4));
markup.scaleY = String(datum);
datum = parseFloat(miniString.substr(24, 6));
markup.rotation = String(datum);
markup.scale = assetInfo.@scale;
markup.rotate = assetInfo.@rotate;
};
markup.src = assetInfo.@src;
return (markup);
}
}
}//package com.kid360.hasbro.clickncolor
Section 23
//ClickNColorActivity (com.kid360.hasbro.clickncolor.ClickNColorActivity)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.utils.*;
import flash.events.*;
import com.kid360.hasbro.clickncolor.buttons.*;
import com.kid360.hubworld.*;
import com.kid360.i18n.*;
import com.kid360.*;
import flash.net.*;
import flash.external.*;
import flash.system.*;
public class ClickNColorActivity extends HubWorldGame {
private var configLoader:URLLoader;
private var helpScreen:TutorialScreen;
private var activityScreen:ActivityScreen;
public var config:XML;
private var splashScreen:SplashScreen;
private var scriptLoader:URLLoader;
public static var appConfig:XML = defaultConfig;
public function ClickNColorActivity(){
super();
configLoader = new URLLoader();
configLoader.addEventListener(Event.COMPLETE, onConfigLoaded);
scriptLoader = new URLLoader();
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function stringsDidLoad():void{
trace("Let's load config:", (HubWorldGame.gameAssetsURL + "config.xml"));
configLoader.load(new URLRequest((HubWorldGame.gameAssetsURL + "config.xml")));
}
private function onImageSaved(e:Event):void{
var scriptData:XML;
scriptLoader.removeEventListener(Event.COMPLETE, onImageSaved);
scriptData = new XML(scriptLoader.data);
}
private function onStatusMessage(e:StatusEvent):void{
switch (e.code){
case "showActivity":
if (((splashScreen) && (contains(splashScreen)))){
removeChild(splashScreen);
};
addChild(activityScreen);
break;
case "showHelp":
if (((splashScreen) && (contains(splashScreen)))){
removeChild(splashScreen);
};
addChild(helpScreen);
break;
case "tutorialDone":
removeChild(helpScreen);
addChild(activityScreen);
break;
default:
break;
};
}
override public function getAssetsPath():void{
super.getAssetsPath();
StringsManager.loadText((HubWorldGame.gameAssetsURL + "strings.xml"), this, stringsDidLoad);
}
public function get currentScreen():uint{
var content:DisplayObject;
if (numChildren){
content = getChildAt(0);
switch (content){
case splashScreen:
return (1);
case helpScreen:
return (2);
case activityScreen:
return (3);
default:
break;
};
};
return (0);
}
private function onConfigLoaded(e:Event):void{
configLoader.removeEventListener(Event.COMPLETE, onConfigLoaded);
config = new XML(e.target.data);
if (config.hasOwnProperty("runControl")){
ClickNColorActivity.parseConfig(config.runControl[0]);
};
splashScreen = new SplashScreen(config.screens.splash[0]);
addChild(splashScreen);
helpScreen = new TutorialScreen(config.screens.tutorial[0]);
activityScreen = new ActivityScreen(config.screens.activity[0]);
trace("three screens created");
}
public function dbug(... _args):void{
var debugText:String;
debugText = _args.join(" ");
if (this["readout"]){
this["readout"].text = "";
this["readout"].appendText((debugText + "\n"));
};
trace(debugText);
}
private function onAddedToStage(e:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
addEventListener(StatusEvent.STATUS, onStatusMessage);
trace("onHW is", ClickNColorActivity.runningOnHubWorld);
if (!ClickNColorActivity.runningOnHubWorld){
getAssetsPath();
};
}
public function saveImage(sourceObj:IBitmapDrawable, fileName:String, fileType:String):void{
var img:ByteArray;
var dotPos:int;
var imgName:String;
var contentTypeHeader:URLRequestHeader;
var req:URLRequest;
var ext:String;
if (!fileName){
throw (new Error("Can't save an image without a proper file name"));
};
switch (fileType){
case "jpg":
case "jpeg":
case "JPG":
case "JPEG":
img = ImageEncoder.JPEGEncoding(sourceObj);
break;
case "png":
case "PNG":
img = ImageEncoder.PNGEncoding(sourceObj);
break;
default:
throw (new Error("Don't know how to encode images to", fileType));
};
if (!img){
throw (new Error("Failed to encode image to", fileType));
};
dotPos = fileName.indexOf(".");
if (dotPos > -1){
if ((fileName.length - dotPos) <= 4){
ext = fileName.substr((dotPos + 1));
if (ext == fileType){
fileName = fileName.substr(0, dotPos);
};
};
};
imgName = ((fileName + ".") + fileType);
contentTypeHeader = new URLRequestHeader("Content-type", "application/octet-stream");
req = new URLRequest(("creation_agent.php?action=save&name=" + imgName));
req.requestHeaders.push(contentTypeHeader);
req.method = URLRequestMethod.POST;
req.data = img;
scriptLoader.addEventListener(Event.COMPLETE, onImageSaved);
scriptLoader.load(req);
}
public static function reportClick(eventCode:String):void{
var hubWorldGame:Object;
var eventCode = eventCode;
hubWorldGame = getDefinitionByName("com.kid360.hubworld.HubWorldWrapper");
//unresolved jump
var _slot1 = e;
if (hubWorldGame){
trace((("won't report click with code |" + eventCode) + "|, SiteCatalyst unavailable within HubWorld"));
return;
};
if (ExternalInterface.available){
if (Capabilities.playerType == "PlugIn"){
trace((("reporting click with code |" + eventCode) + "|"));
ExternalInterface.call("clickEvent", eventCode, "event75");
} else {
trace((("would have reported click with code |" + eventCode) + "| if we had an HTML wrapper"));
};
};
}
public static function parseConfig(newConfig:XML):void{
if (newConfig.hasOwnProperty("printOutput")){
if (((("fullPage" == newConfig.printOutput)) || (("foldedCard" == newConfig.printOutput)))){
appConfig.printOutput = newConfig.printOutput;
};
};
}
public static function get defaultConfig():XML{
return (<runControl>
<printOutput>fullPage</printOutput>
</runControl>
);
}
public static function get runningOnHubWorld():Boolean{
var hubWorldGame:Object;
hubWorldGame = getDefinitionByName("com.kid360.hubworld.HubWorldWrapper");
//unresolved jump
var _slot1 = e;
return (!((null == hubWorldGame)));
}
}
}//package com.kid360.hasbro.clickncolor
Section 24
//ClickNColorActivityWithSplash (com.kid360.hasbro.clickncolor.ClickNColorActivityWithSplash)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.utils.*;
import flash.events.*;
import com.kid360.hasbro.clickncolor.buttons.*;
import com.kid360.hubworld.*;
import com.kid360.i18n.*;
import com.kid360.*;
import flash.net.*;
import flash.external.*;
import flash.system.*;
public class ClickNColorActivityWithSplash extends HubWorldGame {
private var configLoader:URLLoader;
private var splashScreenSplashScreen:SplashScreenSplashScreen;
private var helpScreen:TutorialScreen;
private var numAssetsToLoad:int;// = -1
private var activityScreen:ActivityScreen;
public var config:XML;
private var splashScreen:SplashScreen;
private var scriptLoader:URLLoader;
public static var appConfig:XML = defaultConfig;
public function ClickNColorActivityWithSplash(){
numAssetsToLoad = -1;
super();
configLoader = new URLLoader();
configLoader.addEventListener(Event.COMPLETE, onConfigLoaded);
scriptLoader = new URLLoader();
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function showChildren():void{
var i:int;
i = 0;
while (i < numChildren) {
trace(i, getChildAt(i));
i++;
};
}
private function onImageSaved(e:Event):void{
var scriptData:XML;
scriptLoader.removeEventListener(Event.COMPLETE, onImageSaved);
scriptData = new XML(scriptLoader.data);
}
public function idForAssetPath(assetPath:String):String{
var zeroPad:Function;
var categoryNum:int;
var itemList:XMLList;
var i:int;
var assetPath = assetPath;
zeroPad = function (s:String, targetLength:int=3):String{
while (s.length < targetLength) {
s = ("0" + s);
};
return (s);
};
categoryNum = 0;
while (categoryNum < config..category.length()) {
itemList = config..category[categoryNum]..item;
i = 0;
while (i < itemList.length()) {
if (assetPath == itemList[i].@src){
trace("eureka!", assetPath, "is item number", i, "of", itemList.length(), "in category", categoryNum);
return ((String((categoryNum + 1)) + zeroPad(i, 3)));
};
i = (i + 1);
};
categoryNum = (categoryNum + 1);
};
return ("");
}
private function stringsDidLoad():void{
trace("Let's load config:", (HubWorldGame.gameAssetsURL + "config.xml"));
configLoader.load(new URLRequest((HubWorldGame.gameAssetsURL + "config.xml")));
}
private function onStatusMessage(e:StatusEvent):void{
var _local2:WorkspaceBackdrop;
trace("activity gets status", e.code);
switch (e.code){
case "assetsLoading":
if (-1 == numAssetsToLoad){
numAssetsToLoad = parseInt(e.level);
};
trace(e.level, "assets not loaded out of", numAssetsToLoad);
splashScreenSplashScreen.showLoading(numAssetsToLoad, parseInt(e.level));
break;
case "splashReady":
trace("splashready, numch", numChildren, getChildAt(0));
splashScreen.visible = true;
removeChild(splashScreenSplashScreen);
splashScreenSplashScreen.cleanUp();
splashScreenSplashScreen = null;
break;
case "showActivity":
if (((splashScreen) && (contains(splashScreen)))){
removeChild(splashScreen);
};
addChild(activityScreen);
break;
case "showHelp":
splashScreen.activated = false;
if (1 == numChildren){
if (ExternalInterface.available){
if ((((Capabilities.playerType == "PlugIn")) || ((Capabilities.playerType == "ActiveX")))){
ExternalInterface.call("weddingTrack.gameStart", "cake");
};
};
addChildAt(helpScreen, 0);
} else {
addChild(helpScreen);
};
break;
case "VideoStart":
if (((splashScreen) && (contains(splashScreen)))){
removeChild(splashScreen);
};
trace("video starting now");
break;
case "tutorialDone":
removeChild(helpScreen);
_local2 = new WorkspaceBackdrop();
_local2.x = 148;
addChild(_local2);
addChild(activityScreen);
break;
default:
break;
};
}
override public function getAssetsPath():void{
super.getAssetsPath();
StringsManager.loadText((HubWorldGame.gameAssetsURL + "strings.xml"), this, stringsDidLoad);
}
public function get currentScreen():uint{
var content:DisplayObject;
if (numChildren){
content = getChildAt(0);
switch (content){
case splashScreen:
return (1);
case helpScreen:
return (2);
case activityScreen:
return (3);
default:
break;
};
};
return (0);
}
private function onConfigLoaded(e:Event):void{
configLoader.removeEventListener(Event.COMPLETE, onConfigLoaded);
config = new XML(e.target.data);
if (config.hasOwnProperty("runControl")){
ClickNColorActivityWithSplash.parseConfig(config.runControl[0]);
};
splashScreenSplashScreen = (addChild(new SplashScreenSplashScreen()) as SplashScreenSplashScreen);
splashScreen = new SplashScreen(config.screens.splash[0]);
splashScreen.visible = false;
trace("config has loaded, so overlay splash on first splash, numch", numChildren);
addChild(splashScreen);
helpScreen = new TutorialScreen(config.screens.tutorial[0]);
activityScreen = new ActivityScreen(config.screens.activity[0]);
trace("three screens created");
}
public function dbug(... _args):void{
var debugText:String;
debugText = _args.join(" ");
if (this["readout"]){
this["readout"].text = "";
this["readout"].appendText((debugText + "\n"));
};
trace(debugText);
}
private function onAddedToStage(e:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
addEventListener(StatusEvent.STATUS, onStatusMessage);
trace("onHW is", ClickNColorActivity.runningOnHubWorld, "numch", numChildren);
if (!ClickNColorActivity.runningOnHubWorld){
getAssetsPath();
};
}
public function assetForID(assetID:String):XML{
var categoryNum:int;
var assetNum:int;
categoryNum = (parseInt(assetID.substr(0, 1)) - 1);
assetNum = parseInt(assetID.substr(1, 3));
return (config..category[categoryNum]..item[assetNum]);
}
public function saveImage(sourceObj:IBitmapDrawable, fileName:String, fileType:String):void{
var img:ByteArray;
var dotPos:int;
var imgName:String;
var contentTypeHeader:URLRequestHeader;
var req:URLRequest;
var ext:String;
if (!fileName){
throw (new Error("Can't save an image without a proper file name"));
};
switch (fileType){
case "jpg":
case "jpeg":
case "JPG":
case "JPEG":
img = ImageEncoder.JPEGEncoding(sourceObj);
break;
case "png":
case "PNG":
img = ImageEncoder.PNGEncoding(sourceObj);
break;
default:
throw (new Error("Don't know how to encode images to", fileType));
};
if (!img){
throw (new Error("Failed to encode image to", fileType));
};
dotPos = fileName.indexOf(".");
if (dotPos > -1){
if ((fileName.length - dotPos) <= 4){
ext = fileName.substr((dotPos + 1));
if (ext == fileType){
fileName = fileName.substr(0, dotPos);
};
};
};
imgName = ((fileName + ".") + fileType);
contentTypeHeader = new URLRequestHeader("Content-type", "application/octet-stream");
req = new URLRequest(("creation_agent.php?action=save&name=" + imgName));
req.requestHeaders.push(contentTypeHeader);
req.method = URLRequestMethod.POST;
req.data = img;
scriptLoader.addEventListener(Event.COMPLETE, onImageSaved);
scriptLoader.load(req);
}
private function onDelayElapsed(e:TimerEvent):void{
}
public static function reportClick(eventCode:String):void{
var hubWorldGame:Object;
var eventCode = eventCode;
hubWorldGame = getDefinitionByName("com.kid360.hubworld.HubWorldWrapper");
//unresolved jump
var _slot1 = e;
if (hubWorldGame){
trace((("won't report click with code |" + eventCode) + "|, SiteCatalyst unavailable within HubWorld"));
return;
};
if (ExternalInterface.available){
if (Capabilities.playerType == "PlugIn"){
trace((("reporting click with code |" + eventCode) + "|"));
ExternalInterface.call("clickEvent", eventCode, "event75");
} else {
trace((("would have reported click with code |" + eventCode) + "| if we had an HTML wrapper"));
};
};
}
public static function parseConfig(newConfig:XML):void{
if (newConfig.hasOwnProperty("printOutput")){
if (((("fullPage" == newConfig.printOutput)) || (("foldedCard" == newConfig.printOutput)))){
appConfig.printOutput = newConfig.printOutput;
};
};
if (newConfig.hasOwnProperty("languageTag")){
appConfig.languageTag = newConfig.languageTag;
};
}
public static function get defaultConfig():XML{
return (<runControl>
<languageTag>en-US</languageTag>
<printOutput>fullPage</printOutput>
</runControl>
);
}
public static function get runningOnHubWorld():Boolean{
var hubWorldGame:Object;
hubWorldGame = getDefinitionByName("com.kid360.hubworld.HubWorldWrapper");
//unresolved jump
var _slot1 = e;
return (!((null == hubWorldGame)));
}
}
}//package com.kid360.hasbro.clickncolor
Section 25
//ClickNColorScreen (com.kid360.hasbro.clickncolor.ClickNColorScreen)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.utils.*;
import flash.events.*;
import com.kid360.ui.*;
public class ClickNColorScreen extends MovieClip {
protected var bg:SkinnableSprite;
public var assetsPath:String;// = "./"
protected var screenConfig:XML;
public function ClickNColorScreen(screenConfig:XML=null){
assetsPath = "./";
super();
updateAssetsPath();
bg = new SkinnableSprite();
bg.mouseEnabled = false;
addChild(bg);
}
public function get config():XML{
return (screenConfig);
}
public function set config(newConfig:XML):void{
if (!newConfig){
return;
};
screenConfig = newConfig;
trace("superscr sends to bg", newConfig.background.toXMLString());
bg.config = newConfig.background[0];
}
protected function updateAssetsPath():void{
var hubWorldGame:Object;
hubWorldGame = getDefinitionByName("com.kid360.hubworld.HubWorldGame");
//unresolved jump
var _slot1 = e;
if (hubWorldGame){
trace((((("updated assetsPath from |" + assetsPath) + "| to |") + (hubWorldGame as Class).gameAssetsURL) + "|"));
assetsPath = (hubWorldGame as Class).gameAssetsURL;
};
}
}
}//package com.kid360.hasbro.clickncolor
Section 26
//ColorPalette (com.kid360.hasbro.clickncolor.ColorPalette)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.events.*;
import com.kid360.ui.*;
public class ColorPalette extends Sprite {
private var paletteConfig:XML;
public function ColorPalette(paletteConfig:XML=null){
super();
config = paletteConfig;
}
public function get config():XML{
return (paletteConfig);
}
public function set config(newConfig:XML):void{
var lastX:Number;
var numColors:int;
var i:int;
var colorConfig:XML;
var choice:PaintBucket;
if (!newConfig){
return;
};
paletteConfig = newConfig;
if (config.hasOwnProperty("@x")){
x = parseFloat(config.@x);
};
if (config.hasOwnProperty("@y")){
y = parseFloat(config.@y);
};
lastX = 0;
numColors = newConfig.children.children().length();
i = 0;
while (i < numColors) {
colorConfig = newConfig.children.children()[i];
choice = new PaintBucket(newConfig.itemSkin[0]);
choice.paintColor = colorConfig;
choice.x = lastX;
lastX = (lastX + (parseFloat(config.@itemSize) + parseFloat(config.@gap)));
addChild(choice);
i++;
};
}
}
}//package com.kid360.hasbro.clickncolor
Section 27
//FoldedCardDialog (com.kid360.hasbro.clickncolor.FoldedCardDialog)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.utils.*;
import flash.events.*;
import com.kid360.ui.*;
import com.kid360.hasbro.clickncolor.buttons.*;
public class FoldedCardDialog extends MovieClip {
private var messagePager:MessageCarousel;
private var fcdConfig:XML;
public var cancelBtn:MovieClip;
private var btns:Array;
public var okBtn:MovieClip;
public function FoldedCardDialog(fcdConfig:XML=null){
btns = [];
super();
if (fcdConfig){
if (fcdConfig.hasOwnProperty("carousel")){
messagePager = new MessageCarousel();
messagePager.config = fcdConfig.carousel[0];
addChild(messagePager);
} else {
trace("no carousel config for folded card messages");
};
} else {
trace("no config for folded card dialog");
};
cancelBtn.gotoAndStop(1);
okBtn.gotoAndStop(1);
okBtn.mouseEnabled = false;
okBtn.alpha = 0.5;
okBtn.buttonMode = (cancelBtn.buttonMode = true);
config = fcdConfig;
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
public function get selectedMessage():String{
var msg:String;
var i:int;
msg = "";
i = 0;
while (i < btns.length) {
if (btns[i].isPressed){
msg = btns[i].buttonLabel;
};
i++;
};
return (msg);
}
public function get config():XML{
return (fcdConfig);
}
public function set config(newConfig:XML):void{
var i:int;
if (!newConfig){
return;
};
fcdConfig = newConfig;
btns = messagePager.collection.collectionItems;
i = 0;
while (i < btns.length) {
btns[i].buttonLabel = fcdConfig.carousel.collection.message[i];
i++;
};
}
private function onAddedToStage(e:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
addEventListener(MouseEvent.CLICK, onClick);
}
private function onClick(e:Event):void{
var btnNum:int;
switch (e.target){
case okBtn:
case cancelBtn:
parent.removeChild(this);
break;
default:
if ((e.target is MessageCarouselButton)){
btnNum = 0;
while (btnNum < btns.length) {
if (e.target != btns[btnNum]){
btns[btnNum].toggle(false);
};
btnNum++;
};
okBtn.mouseEnabled = !(("" == selectedMessage));
okBtn.alpha = (okBtn.mouseEnabled) ? 1 : 0.5;
};
break;
};
}
}
}//package com.kid360.hasbro.clickncolor
Section 28
//FullPageImposition (com.kid360.hasbro.clickncolor.FullPageImposition)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.geom.*;
import flash.text.*;
public class FullPageImposition extends MovieClip {
public var legalese:TextField;
private var oldImageLoc:Point;
public function FullPageImposition(){
super();
}
public function set legalText(newMsg:String):void{
legalese.text = newMsg;
}
public function layout(image:MovieClip, copyrightMsg:String=""):void{
if ("" != copyrightMsg){
legalText = copyrightMsg;
};
oldImageLoc = new Point(image.x, image.y);
image.x = (image.y = 0);
addChildAt(image, 0);
}
public function get imageHome():Point{
return (oldImageLoc);
}
}
}//package com.kid360.hasbro.clickncolor
Section 29
//GreetingCardImposition (com.kid360.hasbro.clickncolor.GreetingCardImposition)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.text.*;
public class GreetingCardImposition extends MovieClip {
private const IMAGE_TOP:Number = 148;
private const IMAGE_LEFT:Number = 178;
private const IMAGE_WIDTH:Number = 288;
private const IMAGE_HEIGHT:Number = 200;
public var advertising:TextField;
public var greeting:TextField;
public var copyright:TextField;
public function GreetingCardImposition(coverImage:Bitmap, msg:String, legalese:String="", blurb:String=""){
super();
greeting.wordWrap = true;
greeting.autoSize = TextFieldAutoSize.CENTER;
greeting.text = msg;
if (legalese){
copyright.text = legalese;
};
if (blurb){
advertising.text = blurb;
};
coverImage.x = (IMAGE_LEFT + (IMAGE_WIDTH / 2));
coverImage.y = (IMAGE_TOP + (IMAGE_HEIGHT / 2));
coverImage.width = IMAGE_WIDTH;
coverImage.height = IMAGE_HEIGHT;
coverImage.rotation = 180;
addChild(coverImage);
}
}
}//package com.kid360.hasbro.clickncolor
Section 30
//PaintBrush (com.kid360.hasbro.clickncolor.PaintBrush)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.events.*;
import com.kid360.ui.*;
public class PaintBrush extends MovieClip {
private var brushConfig:XML;
public var brushCursor:SkinnableSprite;
private var _color:uint;
public function PaintBrush(brushConfig:XML=null){
super();
mouseChildren = false;
brushCursor = new SkinnableSprite();
brushCursor.name = "brushcursor";
addChild(brushCursor);
config = brushConfig;
}
public function set paintColor(newColor:uint):void{
_color = newColor;
PaintBucket.setTint((brushCursor.getChildAt(0) as DisplayObjectContainer).getChildAt(1), newColor, tintPercent);
}
public function get config():XML{
return (brushConfig);
}
public function set config(newConfig:XML):void{
var cursorSpec:XML;
if (!newConfig){
return;
};
brushConfig = newConfig;
cursorSpec = new XML((("<cursor src='" + newConfig.@src) + "' />"));
trace("paintbrush configs cursor:", newConfig.toXMLString());
brushCursor.config = cursorSpec;
}
public function get paintColor():uint{
return (_color);
}
public function get tintPercent():Number{
return (parseFloat(brushConfig.@tintPercent));
}
}
}//package com.kid360.hasbro.clickncolor
Section 31
//PaintBucket (com.kid360.hasbro.clickncolor.PaintBucket)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.geom.*;
import flash.events.*;
import com.kid360.ui.*;
public class PaintBucket extends MovieClip {
private var swatch:Sprite;
private var bg:SkinnableSprite;
private var colorConfig:XML;
private var bucketConfig:XML;
public function PaintBucket(colorConfig:XML=null){
super();
mouseChildren = false;
bg = new SkinnableSprite();
bg.name = "brushCursorImage";
addChild(bg);
config = colorConfig;
addEventListener("skinnableSpriteReady", onBackgroundReady);
}
private function onBackgroundReady(e:Event):void{
var indicator:DisplayObject;
var theColor:uint;
var thePercent:Number;
if (colorConfig){
indicator = (bg.getChildAt(0) as DisplayObjectContainer).getChildAt(1);
theColor = parseInt(colorConfig.text(), 16);
thePercent = parseFloat(bucketConfig.@tintPercent);
setTint(indicator, theColor, thePercent);
} else {
trace("we have no color to tint the bucket");
};
}
public function set paintColor(newColor:XML):void{
colorConfig = newColor;
}
public function get config():XML{
return (colorConfig);
}
public function set config(newConfig:XML):void{
var spec:String;
if (!newConfig){
return;
};
bucketConfig = newConfig;
spec = (("<bg src='" + newConfig.@up) + "' ");
if (newConfig.hasOwnProperty("@width")){
spec = (spec + (("width='" + newConfig.@width) + "' "));
};
if (newConfig.hasOwnProperty("@height")){
spec = (spec + (("height='" + newConfig.@height) + "' "));
};
spec = (spec + "/>");
bg.config = new XML(spec);
}
public static function setBrightness(object:DisplayObject, brightness:int):void{
var t:Transform;
var ct:ColorTransform;
t = new Transform(object);
ct = t.colorTransform;
ct.redMultiplier = (ct.greenMultiplier = (ct.blueMultiplier = (1 - Math.abs((brightness / 100)))));
ct.redOffset = (ct.greenOffset = (ct.blueOffset = ((brightness)>0) ? (brightness * (0x0100 / 100)) : 0));
t.colorTransform = ct;
}
public static function setTint(object:DisplayObject, rgb:uint, percent:uint=100):void{
var t:Transform;
var ct:ColorTransform;
var ratio:Number;
t = new Transform(object);
ct = t.colorTransform;
ratio = (percent / 100);
ct.redOffset = ((rgb >> 16) * ratio);
ct.greenOffset = (((rgb >> 8) & 0xFF) * ratio);
ct.blueOffset = ((rgb & 0xFF) * ratio);
ct.redMultiplier = (ct.greenMultiplier = (ct.blueMultiplier = (1 - (percent / 100))));
t.colorTransform = ct;
}
}
}//package com.kid360.hasbro.clickncolor
Section 32
//Pasteboard (com.kid360.hasbro.clickncolor.Pasteboard)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import com.adobe.serialization.json.*;
import flash.geom.*;
import flash.events.*;
import com.kid360.ui.*;
public class Pasteboard extends MovieClip {
protected var wsHeight:Number;
protected var wsWidth:Number;
protected var backdropColor:uint;// = 0xFFFFFF
protected var pasteboardBackground:WorkspaceAsset;
public static const DEFAULT_BG_COLOR:uint = 0xFFFFFF;
public function Pasteboard(boardConfig:XML=null, boardItems:XML=null){
backdropColor = DEFAULT_BG_COLOR;
super();
config = boardConfig;
markup = boardItems;
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
public function get layoutSpec():Object{
var xmlData:XML;
var o:Object;
var numSprites:int;
var i:int;
var aSprite:Object;
xmlData = markup;
o = {};
o.backdrop = {width:xmlData.backdrop.@width, height:xmlData.backdrop.@height, color:xmlData.backdrop.toString()};
if (xmlData.hasOwnProperty("bg")){
o.bg = {x:xmlData.bg.x.toString(), y:xmlData.bg.y.toString(), scaleX:xmlData.bg.scaleX.toString(), scaleY:xmlData.bg.scaleY.toString(), rotation:xmlData.bg.rotation.toString(), src:xmlData.bg.src.toString()};
};
numSprites = xmlData.sprite.length();
if (numSprites){
o.sprites = [];
i = 0;
while (i < numSprites) {
aSprite = {x:xmlData.sprite[i].x.toString(), y:xmlData.sprite[i].y.toString(), scaleX:xmlData.sprite[i].scaleX.toString(), scaleY:xmlData.sprite[i].scaleY.toString(), rotation:xmlData.sprite[i].rotation.toString(), src:xmlData.sprite[i].src.toString(), scale:xmlData.sprite[i].scale.toString(), rotate:xmlData.sprite[i].rotate.toString()};
o.sprites.push(aSprite);
i++;
};
};
return (o);
}
public function get layoutAsJSON():String{
return (JSON.encode(layoutSpec));
}
protected function showChildren():void{
var i:int;
var c:DisplayObject;
var detail:String;
i = 0;
while (i < numChildren) {
c = getChildAt(i);
detail = ((c is WorkspaceAsset)) ? (c as WorkspaceAsset).config.toXMLString() : "other";
trace(i, c, c.name, detail);
i++;
};
}
public function get bgColor():uint{
return (backdropColor);
}
public function set bgColor(newColor:uint):void{
backdropColor = newColor;
updateBackdrop();
}
protected function updateBackdrop():void{
}
public function set markup(newMarkup:XML):void{
var spr:XML;
if (!newMarkup){
return;
};
clear();
if (newMarkup.hasOwnProperty("backdrop")){
bgColor = parseInt(newMarkup.backdrop[0], 16);
};
if (newMarkup.hasOwnProperty("bg")){
pasteOne(newMarkup.bg[0]);
};
for each (spr in newMarkup.sprite) {
pasteOne(spr);
};
}
public function get markup():XML{
var hex2RGBspec:Function;
var spec:XML;
var itemSpec:XML;
var i:int;
var c:DisplayObject;
var itemConfig:XML;
hex2RGBspec = function (x:uint):String{
var zeroPad:Function;
var x = x;
zeroPad = function (s:String):String{
while (s.length < 6) {
s = ("0" + s);
};
return (s);
};
return (("0x" + zeroPad(x.toString(16))));
};
spec = <page/>
;
spec.backdrop = new XML((((((("<backdrop width=\"" + ??esc_xattr
) + "\" height=\"") + ??esc_xattr
) + "\">") + ??esc_xelem
) + "</backdrop>"));
i = 0;
while (i < numChildren) {
c = getChildAt(i);
itemConfig = (c as WorkspaceAsset).config;
itemSpec = new XML((("<" + itemConfig.name()) + "/>"));
if (itemConfig.hasOwnProperty("src")){
itemSpec.src = itemConfig.src;
} else {
if (itemConfig.hasOwnProperty("@src")){
itemSpec.src = itemConfig.@src;
};
};
itemSpec.x = c.x;
itemSpec.y = c.y;
itemSpec.scaleX = c.scaleX;
itemSpec.scaleY = c.scaleY;
itemSpec.rotation = c.rotation;
if (itemConfig.hasOwnProperty("scale")){
itemSpec.scale = itemConfig.scale;
} else {
if (itemConfig.hasOwnProperty("@scale")){
itemSpec.scale = itemConfig.@scale;
};
};
if (itemConfig.hasOwnProperty("rotate")){
itemSpec.rotate = itemConfig.rotate;
} else {
if (itemConfig.hasOwnProperty("@rotate")){
itemSpec.rotate = itemConfig.@rotate;
};
};
spec.appendChild(itemSpec);
i = (i + 1);
};
return (spec);
}
public function set config(newConfig:XML):void{
var valueForHTMLColor:Function;
var newConfig = newConfig;
valueForHTMLColor = function (colorSpec:String):uint{
var itsValue:uint;
var components:Array;
if ("#" == colorSpec.charAt(0)){
colorSpec = colorSpec.slice(1);
};
colorSpec = colorSpec.toUpperCase();
if (3 == colorSpec.length){
components = colorSpec.split("");
colorSpec = (((((components[0] + components[0]) + components[1]) + components[1]) + components[2]) + components[2]);
};
if (6 != colorSpec.length){
return (0);
};
itsValue = parseInt(colorSpec, 16);
return ((isNaN(itsValue)) ? 0 : itsValue);
};
if (!newConfig){
return;
};
if (newConfig.hasOwnProperty("@x")){
x = parseFloat(newConfig.@x);
};
if (newConfig.hasOwnProperty("@y")){
y = parseFloat(newConfig.@y);
};
if (newConfig.hasOwnProperty("@width")){
wsWidth = parseFloat(newConfig.@width);
};
if (newConfig.hasOwnProperty("@height")){
wsHeight = parseFloat(newConfig.@height);
};
if (newConfig.hasOwnProperty("@bgColor")){
backdropColor = valueForHTMLColor(newConfig.@bgColor);
};
scrollRect = new Rectangle(0, 0, wsWidth, wsHeight);
updateBackdrop();
}
public function clear():void{
while (numChildren) {
removeChildAt(0);
};
trace("cleared the pasteboard");
bgColor = DEFAULT_BG_COLOR;
}
protected function onAddedToStage(e:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
protected function insertBackground(bgConfig:XML):void{
if (pasteboardBackground){
removeChildAt(0);
};
pasteboardBackground = new WorkspaceAsset(bgConfig);
pasteboardBackground.name = "bg";
addChildAt(pasteboardBackground, 0);
}
public function pasteOne(assetConfig:XML):void{
var assetType:String;
var _local3:WorkspaceAsset;
trace("pasting a new", assetConfig.name(), "over", numChildren, "children");
assetType = assetConfig.name();
switch (assetType){
case "bg":
assetConfig.displayOrder = "0";
insertBackground(assetConfig);
break;
case "sprite":
trace("addSprite", numChildren);
assetConfig.displayOrder = String(numChildren);
_local3 = new WorkspaceAsset(assetConfig);
_local3.name = ("layer" + String(numChildren));
trace(assetConfig.src, "at", ((assetConfig.x + ",") + assetConfig.y), "scaleX", assetConfig.scaleX, "scaleY", assetConfig.scaleY, "rot", assetConfig.rotation);
trace("wsa at", ((_local3.x + ",") + _local3.y));
addChild(_local3);
break;
default:
trace("confused by", assetConfig.name());
break;
};
}
protected function itemConfig2ScreenSpec(itemConfig:XML, itemWidth:Number=0, itemHeight:Number=0):XML{
var isBackgroundSpec:Function;
var itemSpec:XML;
var itemConfig = itemConfig;
var itemWidth = itemWidth;
var itemHeight = itemHeight;
isBackgroundSpec = function (config:XML):Boolean{
if (((config.hasOwnProperty("@isBackground")) && (("true" == config.@isBackground[0].toString())))){
return (true);
};
return (false);
};
if (isBackgroundSpec(itemConfig)){
itemSpec = <bg/>
;
itemSpec.x = 0;
itemSpec.y = 0;
} else {
itemSpec = <sprite/>
;
itemSpec.x = ((wsWidth - itemWidth) / 2);
itemSpec.y = ((wsHeight - itemHeight) / 2);
};
itemSpec.scaleX = 1;
itemSpec.scaleY = 1;
itemSpec.rotation = 0;
if (itemConfig.hasOwnProperty("src")){
itemSpec.src = itemConfig.src;
} else {
if (itemConfig.hasOwnProperty("@src")){
itemSpec.src = itemConfig.@src;
};
};
if (itemConfig.hasOwnProperty("scale")){
itemSpec.scale = itemConfig.scale;
} else {
if (itemConfig.hasOwnProperty("@scale")){
itemSpec.scale = itemConfig.@scale;
};
};
if (itemConfig.hasOwnProperty("rotate")){
itemSpec.rotate = itemConfig.rotate;
} else {
if (itemConfig.hasOwnProperty("@rotate")){
itemSpec.rotate = itemConfig.@rotate;
};
};
return (itemSpec);
}
}
}//package com.kid360.hasbro.clickncolor
Section 33
//PrintComposition (com.kid360.hasbro.clickncolor.PrintComposition)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
public class PrintComposition extends MovieClip {
private var creation:Pasteboard;
public function PrintComposition(markup:XML){
var testCake:XML;
var i:int;
super();
testCake = <cake>
<bg>
<x>0</x>
<y>0</y>
<scaleX>1</scaleX>
<scaleY>1</scaleY>
<rotation>0</rotation>
<src>assets/backgrounds/cake_3.swf</src>
</bg>
</cake>
;
creation = new Pasteboard(<spec x="300" y="143" width="565" height="700"></spec>
, markup);
creation.scaleX = (creation.scaleY = 0.357);
addChild(creation);
i = 0;
while (i < numChildren) {
trace(i, getChildAt(i));
i++;
};
}
}
}//package com.kid360.hasbro.clickncolor
Section 34
//SplashScreen (com.kid360.hasbro.clickncolor.SplashScreen)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import com.kid360.ui.*;
import com.kid360.net.*;
import com.kid360.i18n.*;
public class SplashScreen extends MovieClip {
public var legalese:TextField;
private var bg:SkinnableSprite;
private var helpBtn:SkinnableButton;
private var goBtn:SkinnableButton;
public function SplashScreen(screenConfig:XML=null){
super();
bg = new SkinnableSprite();
addChildAt(bg, 0);
helpBtn = new SkinnableButton();
goBtn = new SkinnableButton();
config = screenConfig;
legalese.wordWrap = true;
legalese.autoSize = "center";
localizeText(legalese, "splash", "legal");
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function frameHook(e:Event):void{
var numAssetsPending:int;
numAssetsPending = AssetLoader.pendingAssets;
trace("pending", numAssetsPending);
if (0 == numAssetsPending){
removeEventListener(Event.ENTER_FRAME, frameHook);
addChild(helpBtn);
if (goBtn.config){
trace("gobtn has a config");
addChild(goBtn);
};
dispatchEvent(new StatusEvent(StatusEvent.STATUS, true, true, "splashReady"));
} else {
dispatchEvent(new StatusEvent(StatusEvent.STATUS, true, true, "assetsLoading", numAssetsPending.toString()));
};
}
public function set config(newConfig:XML):void{
var newConfig = newConfig;
bg.config = newConfig.background[0];
helpBtn.config = newConfig.button.("tutorial" == @actionData)[0];
if (newConfig.button.(@actionData == "activity").length()){
goBtn.config = newConfig.button.("activity" == @actionData)[0];
};
}
public function set activated(flag:Boolean):void{
if (!flag){
helpBtn.visible = false;
};
}
private function onAddedToStage(e:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
addEventListener(Event.ENTER_FRAME, frameHook);
addEventListener(MouseEvent.CLICK, onClick);
}
private function localizeText(theField:TextField, screenID:String, blockID:String):void{
var i18n:Object;
i18n = StringsManager.getString(screenID, blockID, ClickNColorActivityWithSplash.appConfig.languageTag);
if (i18n.x){
theField.x = parseFloat(i18n.x.toString());
};
if (i18n.y){
theField.y = parseFloat(i18n.y);
};
theField.text = i18n.text;
}
private function onClick(e:Event):void{
switch (e.target){
case goBtn:
dispatchEvent(new StatusEvent(StatusEvent.STATUS, true, true, "showActivity"));
break;
case helpBtn:
trace("help button was clicked");
dispatchEvent(new StatusEvent(StatusEvent.STATUS, true, true, "showHelp"));
break;
default:
break;
};
}
}
}//package com.kid360.hasbro.clickncolor
Section 35
//TabbedWindow (com.kid360.hasbro.clickncolor.TabbedWindow)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.events.*;
public class TabbedWindow extends MovieClip {
private var fcView:FoldedCardPrintSetup;
public var btn2:MovieClip;
public var btn1:MovieClip;
private var fpView:FullPagePrintSetup;
public function TabbedWindow(){
super();
btn1.label.text = "Full Page";
btn2.label.text = "Folded Card";
btn1.mouseChildren = (btn2.mouseChildren = false);
btn1.buttonMode = (btn2.buttonMode = true);
fpView = new FullPagePrintSetup();
fcView = new FoldedCardPrintSetup();
fpView.x = (fpView.y = (fcView.x = (fcView.y = 30)));
addChild(fpView);
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(e:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
addEventListener(MouseEvent.CLICK, onClick);
}
private function onClick(e:Event):void{
switch (e.target){
case btn1:
if (contains(fcView)){
removeChild(fcView);
};
if (!contains(fpView)){
addChild(fpView);
};
break;
case btn2:
if (contains(fpView)){
removeChild(fpView);
};
if (!contains(fcView)){
addChild(fcView);
};
break;
default:
break;
};
}
}
}//package com.kid360.hasbro.clickncolor
Section 36
//TutorialScreen (com.kid360.hasbro.clickncolor.TutorialScreen)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.utils.*;
import flash.events.*;
import com.kid360.ui.*;
import com.kid360.view.*;
public class TutorialScreen extends MovieClip {
private var bg:SkinnableSprite;
public var assetsPath:String;// = "./"
private var dv:DV;
private var screenConfig:XML;
public function TutorialScreen(screenConfig:XML=null){
assetsPath = "./";
super();
stop();
dv = new DV();
dv.videoWidth = 865;
dv.videoHeight = 700;
addChild(dv);
updateAssetsPath();
config = screenConfig;
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function tutorialDone():void{
var appScreen:uint;
var app:DisplayObjectContainer;
stage.removeEventListener(MouseEvent.MOUSE_DOWN, onPressed);
appScreen = (parent as MovieClip).currentScreen;
if (2 == appScreen){
dispatchEvent(new StatusEvent(StatusEvent.STATUS, true, true, "tutorialDone"));
} else {
app = (stage.getChildAt(0) as DisplayObjectContainer);
app.removeChild(this);
};
}
private function onRemovedFromStage(e:Event):void{
if (dv){
dv.pause();
};
}
private function onPressed(e:MouseEvent):void{
trace("a mouseclick dismissed the tutorial");
tutorialDone();
}
private function onVideoStopped(e:StatusEvent):void{
if ("VideoStop" == e.code){
tutorialDone();
};
}
public function get config():XML{
return (screenConfig);
}
public function set config(newConfig:XML):void{
if (!newConfig){
return;
};
screenConfig = newConfig;
if (config.hasOwnProperty("video")){
dv.addEventListener(StatusEvent.STATUS, onVideoStopped);
} else {
bg = new SkinnableSprite(new XML((("<bg src='" + config.@src[0]) + "' />")));
addChild(bg);
};
}
private function onAddedToStage(e:Event):void{
if (config.hasOwnProperty("video")){
dv.videoSource = (assetsPath + config.video.@src[0]);
dv.play();
};
addEventListener(Event.REMOVED_FROM_STAGE, onRemovedFromStage);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onPressed, false, 0, true);
}
private function updateAssetsPath():void{
var hubWorldGame:Object;
hubWorldGame = getDefinitionByName("com.kid360.hubworld.HubWorldGame");
//unresolved jump
var _slot1 = e;
trace("BOO", _slot1.message);
if (hubWorldGame){
assetsPath = (hubWorldGame as Class).gameAssetsURL;
};
}
}
}//package com.kid360.hasbro.clickncolor
Section 37
//Workspace (com.kid360.hasbro.clickncolor.Workspace)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.geom.*;
import flash.events.*;
import com.senocular.display.transform.*;
import com.kid360.ui.*;
import com.kid360.hasbro.clickncolor.buttons.*;
import com.kid360.display.transform.*;
public class Workspace extends Pasteboard {
private var csus:ControlSetUniformScale;
private var ttool:TransformTool;
private var csrus:ControlSetRotUniformScale;
private var csns:ControlSetNoScale;
private var csrns:ControlSetRotNoScale;
private var lastSelected:WorkspaceAsset;
private var editing:Boolean;
private var csbs:ControlSetBothScale;
private var csrbs:ControlSetRotBothScale;
public function Workspace(workspaceConfig:XML=null, boardItems:XML=null){
super(workspaceConfig, boardItems);
editing = true;
csbs = new ControlSetBothScale();
csns = new ControlSetNoScale();
csus = new ControlSetUniformScale();
csrbs = new ControlSetRotBothScale();
csrns = new ControlSetRotNoScale();
csrus = new ControlSetRotUniformScale();
ttool = new TransformTool(csns);
ttool.autoRaise = true;
ttool.registrationManager.defaultUV = new Point(0.5, 0.5);
ttool.negativeScaling = false;
addChild(ttool);
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
protected function controlSetForConfig(cfg:XML):Array{
var canRotate:Boolean;
var scaleMode:String;
var cs:Array;
var rotatableSets:Object;
var fixedSizeSets:Object;
canRotate = (((cfg.@rotate == "yes")) || (("yes" == cfg.rotate)));
scaleMode = ((cfg.@scale) || (cfg.scale));
if (!scaleMode){
scaleMode = "none";
};
rotatableSets = {none:csrns, uniform:csrus, free:csrbs};
fixedSizeSets = {none:csns, uniform:csus, free:csbs};
if (canRotate){
cs = rotatableSets[scaleMode];
} else {
cs = fixedSizeSets[scaleMode];
};
return (cs);
}
protected function isWorkspaceAsset(obj:DisplayObject):DisplayObject{
var par:DisplayObjectContainer;
if ((obj is Workspace)){
return (null);
};
if ((obj is WorkspaceAsset)){
return (obj);
};
par = obj.parent;
while (par) {
if ((par is WorkspaceAsset)){
return (par);
};
par = par.parent;
};
return (null);
}
public function set toolCursor(newCursor:DisplayObject):void{
ttool.cursor = newCursor;
}
protected function onPressed(e:MouseEvent):void{
var pressee:DisplayObject;
if (!editing){
trace("not editing, ignore press");
return;
};
pressee = isWorkspaceAsset((e.target as DisplayObject));
if (pressee){
if ("sprite" == (pressee as WorkspaceAsset).config.name()){
ttool.setTarget(pressee, e);
ttool.controls = controlSetForConfig((pressee as WorkspaceAsset).config);
lastSelected = (pressee as WorkspaceAsset);
} else {
toolTarget = null;
};
} else {
if (!(e.target is Control)){
toolTarget = null;
};
};
}
public function get miniString():String{
var layoutDescription:String;
var i:int;
var c:DisplayObject;
layoutDescription = "";
i = 0;
while (i < numChildren) {
c = getChildAt(i);
if ((c is TransformTool)){
} else {
layoutDescription = (layoutDescription + (c as WorkspaceAsset).miniString);
};
i++;
};
return (layoutDescription);
}
public function addItem(itemWell:AssetCarouselButton):void{
var isBackgroundSpec:Function;
var itemConfig:XML;
var isBG:Boolean;
var itsWidth:Number;
var itsHeight:Number;
var itemSpec:XML;
var newItem:WorkspaceAsset;
var itemWell = itemWell;
isBackgroundSpec = function (config:XML):Boolean{
var elementName:String;
elementName = config.name();
switch (elementName){
case "item":
return (((config.hasOwnProperty("@isBackground")) && (("true" == config.@isBackground[0].toString()))));
case "bg":
return (true);
default:
break;
};
return (false);
};
toolTarget = null;
itemConfig = itemWell.iconData;
isBG = isBackgroundSpec(itemConfig);
itsWidth = 0;
itsHeight = 0;
if (!isBG){
itsWidth = itemWell.iconAsset.width;
itsHeight = itemWell.iconAsset.height;
};
itemSpec = itemConfig2ScreenSpec(itemConfig, itsWidth, itsHeight);
trace("AssetCarousel triggers ws to add item with spec", itemSpec.toXMLString());
trace("workspace at", ((x + ",") + y));
newItem = new WorkspaceAsset(itemSpec);
if (!isBG){
newItem.name = ("asset" + numChildren);
addChild(newItem);
setChildIndex(ttool, 0);
} else {
newItem.name = "bgnd";
if (numChildren > 1){
if (isBackgroundSpec((getChildAt(1) as WorkspaceAsset).config)){
removeChildAt(1);
};
};
addChildAt(newItem, 1);
};
}
public function get toolInfo():String{
if (!ttool.target){
return ("");
};
(ttool.toString() + ", targ");
return (ttool.target.toString());
}
override public function get markup():XML{
var hex2RGBspec:Function;
var spec:XML;
var itemSpec:XML;
var i:int;
var c:DisplayObject;
var assetColors:Array;
var paintSpec:XML;
var j:int;
hex2RGBspec = function (x:uint):String{
var zeroPad:Function;
var x = x;
zeroPad = function (s:String):String{
while (s.length < 6) {
s = ("0" + s);
};
return (s);
};
return (("0x" + zeroPad(x.toString(16))));
};
spec = <page/>
;
spec.backdrop = new XML((((((("<backdrop width=\"" + ??esc_xattr
) + "\" height=\"") + ??esc_xattr
) + "\">") + ??esc_xelem
) + "</backdrop>"));
i = 0;
while (i < numChildren) {
c = getChildAt(i);
if ((c is TransformTool)){
} else {
itemSpec = (c as WorkspaceAsset).config;
itemSpec.x = c.x;
itemSpec.y = c.y;
itemSpec.scaleX = c.scaleX;
itemSpec.scaleY = c.scaleY;
itemSpec.rotation = c.rotation;
if ((parent as ActivityScreen).canPaint){
assetColors = (c as WorkspaceAsset).layerColors;
paintSpec = <coloring/>
;
j = 0;
while (j < assetColors.length) {
if (assetColors[j]){
paintSpec.appendChild(new XML((((("<layer depth=\"" + ??esc_xattr
) + "\">") + ??esc_xelem
) + "</layer>")));
};
j = (j + 1);
};
itemSpec.appendChild(paintSpec);
};
spec.appendChild(itemSpec);
};
i = (i + 1);
};
return (spec);
}
public function set toolTarget(newTarget:DisplayObject):void{
if (null == newTarget){
setChildIndex(ttool, 0);
};
ttool.target = newTarget;
}
override public function clear():void{
var doomed:Array;
var i:int;
var c:DisplayObject;
toolTarget = null;
doomed = [];
i = 0;
while (i < numChildren) {
c = getChildAt(i);
if ((c is WorkspaceAsset)){
doomed.push(c);
};
i++;
};
while (doomed.length) {
removeChild(doomed.pop());
};
lastSelected = null;
trace("cleared the workspace");
bgColor = DEFAULT_BG_COLOR;
}
override protected function onAddedToStage(e:Event):void{
super.onAddedToStage(e);
addEventListener(MouseEvent.MOUSE_DOWN, onPressed);
ttool.addEventListener(TransformTool.TARGET_TRANSFORMED, onTTCommit);
}
public function deleteLastChild():void{
var c:DisplayObject;
if (lastSelected){
if (lastSelected == ttool.target){
toolTarget = null;
};
removeChild(lastSelected);
lastSelected = null;
} else {
if (numChildren > 1){
c = getChildAt((numChildren - 1));
if ((c is WorkspaceAsset)){
if (c == ttool.target){
toolTarget = null;
};
removeChild(c);
};
} else {
bgColor = Pasteboard.DEFAULT_BG_COLOR;
};
};
}
protected function onTTCommit(e:Event):void{
var asset:WorkspaceAsset;
if (false == ttool.isActive){
asset = (ttool.target as WorkspaceAsset);
trace("tt commit on", ttool.target, "spec", asset.config, "x", asset.x, "y", asset.y);
};
}
public function set editable(flag:Boolean):void{
editing = flag;
if (editing){
if (lastSelected){
toolTarget = lastSelected;
};
} else {
toolTarget = null;
};
}
public function restoreSelection():void{
if (lastSelected){
toolTarget = lastSelected;
};
}
}
}//package com.kid360.hasbro.clickncolor
Section 38
//WorkspaceAsset (com.kid360.hasbro.clickncolor.WorkspaceAsset)
package com.kid360.hasbro.clickncolor {
import flash.display.*;
import flash.events.*;
import com.kid360.ui.*;
public class WorkspaceAsset extends SkinnableSprite {
public function WorkspaceAsset(assetConfig:XML=null){
super();
config = assetConfig;
}
public function get layerColors():Array{
var theColors:Array;
var assetClip:MovieClip;
var i:int;
var c:DisplayObject;
theColors = [];
assetClip = (getChildAt(0) as MovieClip);
i = 0;
while (i < assetClip.numChildren) {
c = assetClip.getChildAt(i);
if ((c is MovieClip)){
if (c.hasOwnProperty("layerColor")){
theColors[i] = (c as MovieClip).layerColor.toString(16);
} else {
theColors[i] = "ffffff";
};
};
i++;
};
return (theColors);
}
public function set coloring(newColoring:XML):void{
var assetClip:MovieClip;
var layerSpec:XML;
var childNum:uint;
var theColor:uint;
assetClip = (getChildAt(0) as MovieClip);
for each (layerSpec in newColoring.layer) {
childNum = parseInt(layerSpec.@depth);
theColor = parseInt(layerSpec, 16);
PaintBucket.setTint(assetClip.getChildAt(childNum), theColor);
};
}
public function get miniString():String{
var zeroPad:Function;
var assetSpec:String;
var rot:Number;
zeroPad = function (s:String, targetLength:int=3):String{
while (s.length < targetLength) {
s = ("0" + s);
};
return (s);
};
assetSpec = "";
assetSpec = (assetSpec + (root as ClickNColorActivityWithSplash).idForAssetPath(config.src));
trace("encoding asset x", x, "as", zeroPad(x.toFixed(2), 6));
assetSpec = (assetSpec + zeroPad(x.toFixed(2), 6));
trace("encoding asset y", y, "as", zeroPad(y.toFixed(2), 6));
assetSpec = (assetSpec + zeroPad(y.toFixed(2), 6));
assetSpec = (assetSpec + zeroPad(scaleX.toFixed(2), 4));
assetSpec = (assetSpec + zeroPad(scaleY.toFixed(2), 4));
rot = rotation;
if (0 > rot){
rot = (rot + 360);
};
assetSpec = (assetSpec + zeroPad(rot.toFixed(2), 6));
trace("returning asset ministring", assetSpec);
return (assetSpec.split(".").join(""));
}
override protected function applySize():void{
super.applySize();
if (((config) && (config.hasOwnProperty("coloring")))){
coloring = config.coloring[0];
};
}
public function set layerColors(newColors:Array):void{
var assetClip:MovieClip;
var i:int;
assetClip = (getChildAt(0) as MovieClip);
i = 0;
while (i < newColors.length) {
if (newColors[i]){
PaintBucket.setTint(assetClip.getChildAt(i), newColors[i]);
};
i++;
};
}
}
}//package com.kid360.hasbro.clickncolor
Section 39
//HubWorldGame (com.kid360.hubworld.HubWorldGame)
package com.kid360.hubworld {
import flash.display.*;
import flash.utils.*;
import flash.events.*;
public class HubWorldGame extends MovieClip implements HubWorldLoadable {
public static var insideHubWorld:Boolean;
public static var gameAssetsURL:String = "./";
public function HubWorldGame(){
super();
}
public function getAssetsPath():void{
var owner:MovieClip;
var pathURL:String;
var thisFolderPath:String;
if ((parent is Loader)){
trace("when parent is Loader, game assumes it is inside HubWorld");
HubWorldGame.insideHubWorld = true;
owner = (parent.parent as MovieClip);
pathURL = owner.assetsURL;
if ("/" != pathURL.substr(-1)){
trace("assets url doesnt end in slash:", pathURL);
pathURL = (pathURL + "/");
};
HubWorldGame.gameAssetsURL = pathURL;
trace("retrieving path from owner:", HubWorldGame.gameAssetsURL);
} else {
thisFolderPath = loaderInfo.url.substr(0, (loaderInfo.url.lastIndexOf("/") + 1));
trace("your folder is", loaderInfo.url.substr(0, (loaderInfo.url.lastIndexOf("/") + 1)));
trace("parent is not loader, so assets load from", (loaderInfo.url + "./"));
HubWorldGame.gameAssetsURL = "./";
HubWorldGame.gameAssetsURL = thisFolderPath;
};
}
public function set gameState(ba:ByteArray):void{
dispatchEvent(new NetStatusEvent(NetStatusEvent.NET_STATUS, true, true, ba));
}
}
}//package com.kid360.hubworld
Section 40
//HubWorldLoadable (com.kid360.hubworld.HubWorldLoadable)
package com.kid360.hubworld {
public interface HubWorldLoadable {
function getAssetsPath():void;
}
}//package com.kid360.hubworld
Section 41
//StringsManager (com.kid360.i18n.StringsManager)
package com.kid360.i18n {
import flash.display.*;
import flash.events.*;
import flash.net.*;
public class StringsManager extends EventDispatcher {
public static const CANONICAL_SUBTAG_SEPARATOR:String = "_";
public static const DEFAULT_LANGUAGE_TAG:String = ((DEFAULT_LANGUAGE + CANONICAL_SUBTAG_SEPARATOR) + DEFAULT_REGION);
public static const DEFAULT_REGION:String = "US";
public static const DEFAULT_LANGUAGE:String = "en";
private static var textloader:URLLoader;
private static var callback:Function;
private static var owner:DisplayObject;
public static var i18n:XML;
public function StringsManager(){
super();
}
private static function tagParts(theTag:String):Array{
var parts:Array;
parts = theTag.split(CANONICAL_SUBTAG_SEPARATOR);
if (parts.length == 2){
return (parts);
};
parts = theTag.split("-");
if (parts.length == 2){
return (parts);
};
return ([theTag, ""]);
}
public static function getString(screenID:String, blockID:String, languageTag:String=""):Object{
var translations:XMLList;
var result:XMLList;
var screenID = screenID;
var blockID = blockID;
var languageTag = languageTag;
if (languageTag == ""){
languageTag = StringsManager.DEFAULT_LANGUAGE_TAG;
};
translations = i18n.screen.(@id == screenID).block.(@id == blockID).text;
languageTag = getBestTag(translations, languageTag);
if (languageTag){
result = i18n.screen.(@id == screenID).block.(@id == blockID).text.(@lang == languageTag);
return ({text:result[0].text(), x:result.@x[0], y:result.@y[0]});
};
return (null);
}
private static function getBestTag(translations:XMLList, languageTag:String):String{
var tags:XMLList;
var subtags:Array;
var t:String;
tags = translations..@lang;
if (tags.contains(languageTag)){
return (languageTag);
};
subtags = StringsManager.tagParts(languageTag);
if (tags.contains(subtags[0])){
return (subtags[0]);
};
for each (t in tags) {
if (t.indexOf(subtags[0]) == 0){
return (t);
};
};
if (tags.contains(DEFAULT_LANGUAGE_TAG)){
return (DEFAULT_LANGUAGE_TAG);
};
if (tags.contains("en")){
return ("en");
};
return ("");
}
private static function doCallback():void{
if (((!((StringsManager.owner == null))) && (!((StringsManager.callback == null))))){
var _local2 = StringsManager.owner;
with (_local2) {
StringsManager.callback();
};
};
}
private static function onTextLoaded(e:Event):void{
StringsManager.i18n = new XML(StringsManager.canonicalize(e.target.data));
doCallback();
}
private static function canonicalize(s:String):String{
return (s.replace(/_/g, CANONICAL_SUBTAG_SEPARATOR));
}
public static function loadText(itsFile:String, owner:DisplayObject=null, callback:Function=null):void{
StringsManager.owner = owner;
StringsManager.callback = callback;
if (StringsManager.i18n){
doCallback();
} else {
StringsManager.textloader = new URLLoader(new URLRequest(itsFile));
StringsManager.textloader.addEventListener(Event.COMPLETE, StringsManager.onTextLoaded, false, 0, true);
};
}
}
}//package com.kid360.i18n
Section 42
//AssetLoader (com.kid360.net.AssetLoader)
package com.kid360.net {
import flash.display.*;
import flash.utils.*;
import flash.events.*;
import flash.net.*;
public class AssetLoader extends EventDispatcher {
public var loaders:Dictionary;
public var assetsPath:String;// = "./"
private static var outstandingAssets:int = 0;
public function AssetLoader(){
var hubWorldGame:Object;
assetsPath = "./";
super();
loaders = new Dictionary();
hubWorldGame = getDefinitionByName("com.kid360.hubworld.HubWorldGame");
//unresolved jump
var _slot1 = e;
if (hubWorldGame){
assetsPath = (hubWorldGame as Class).gameAssetsURL;
};
}
public function assetForID(assetID:String):DisplayObject{
var itsLoader:Loader;
itsLoader = loaders[assetID];
return (itsLoader.content);
}
private function onLoadError(e:IOErrorEvent):void{
trace("ioError:", e.text);
}
private function onAssetLoaded(e:Event):void{
var keyForObject:Function;
var itsLoader:Loader;
var itsID:String;
var e = e;
keyForObject = function (dict:Dictionary, theObj):String{
var key:*;
for (key in dict) {
if (theObj == dict[key]){
return (key);
};
};
return (null);
};
AssetLoader.outstandingAssets--;
e.target.removeEventListener(Event.COMPLETE, onAssetLoaded);
itsLoader = (e.target.loader as Loader);
itsID = keyForObject(loaders, itsLoader);
dispatchEvent(new StatusEvent(StatusEvent.STATUS, true, true, "assetLoaded", itsID));
}
public function loadAsset(assetURL:String, assetID:String=""):void{
var loaderNum:*;
if (!assetURL){
return;
};
if (!assetID){
assetID = "asset1";
};
loaderNum = loaders.length;
loaders[assetID] = new Loader();
loaders[assetID].contentLoaderInfo.addEventListener(Event.COMPLETE, onAssetLoaded);
loaders[assetID].contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
AssetLoader.outstandingAssets++;
loaders[assetID].load(new URLRequest((assetsPath + assetURL)));
}
public static function get pendingAssets():int{
return (outstandingAssets);
}
}
}//package com.kid360.net
Section 43
//Carousel (com.kid360.ui.Carousel)
package com.kid360.ui {
import flash.display.*;
import flash.geom.*;
import flash.events.*;
import fl.transitions.*;
import fl.transitions.easing.*;
public class Carousel extends MovieClip implements Configurable {
public var movingAxis:String;// = "x"
public var prevBtn:InteractiveObject;
protected var inMotion:Boolean;
public var nextBtn:InteractiveObject;
protected var tween:Tween;
protected var pageLength:Number;
public var collection:Scroller;
protected var carouselConfig:XML;
public function Carousel(carouselConfig:XML=null){
movingAxis = "x";
super();
collection = (addChild(new Scroller()) as Scroller);
collection.name = (name + "Coll");
config = carouselConfig;
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
protected function configValue(propertyName:String):String{
var attributeName:String;
if (config.hasOwnProperty(propertyName)){
return (config.child(propertyName)[0]);
};
attributeName = ("@" + propertyName);
if (config.hasOwnProperty(attributeName)){
return (config.attribute(propertyName)[0]);
};
return ("");
}
private function onRest(e:TweenEvent):void{
inMotion = false;
updateButtons();
}
public function get config():XML{
return (carouselConfig);
}
public function updateButtons():void{
nextBtn.visible = (collection.scrollRect[movingAxis] < maxScroll);
prevBtn.visible = (collection.scrollRect[movingAxis] > 0);
}
private function get maxScroll():Number{
return ((collection.contentLength - pageLength));
}
public function set config(newConfig:XML):void{
var propertyValue:String;
if (!newConfig){
return;
};
carouselConfig = newConfig;
propertyValue = configValue("x");
if ("" != propertyValue){
x = parseFloat(propertyValue);
};
propertyValue = configValue("y");
if ("" != propertyValue){
y = parseFloat(propertyValue);
};
collection.config = config.collection[0];
propertyValue = configValue("scrollStep");
if ("" != propertyValue){
pageLength = parseFloat(propertyValue);
};
propertyValue = configValue("motion");
if ("" != propertyValue){
movingAxis = (("horizontal" == propertyValue)) ? "x" : "y";
};
}
private function onAddedToStage(e:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
updateButtons();
addEventListener(MouseEvent.CLICK, onClick);
}
private function onMovement(e:TweenEvent):void{
collection.scrollRect = e.target.obj;
}
public function set itemFilter(filterFunc:Function):void{
collection.filterCollection(filterFunc);
updateButtons();
}
private function onClick(e:Event):void{
var dir:int;
var _local3:Number;
if (inMotion){
return;
};
switch (e.target){
case prevBtn:
case nextBtn:
dir = ((e.target == nextBtn)) ? 1 : -1;
inMotion = true;
_local3 = (collection.scrollRect[movingAxis] + (dir * pageLength));
_local3 = Math.max(0, Math.min(maxScroll, _local3));
tween = new Tween(collection.scrollRect, movingAxis, Back.easeOut, collection.scrollRect[movingAxis], _local3, 1.5, true);
tween.addEventListener(TweenEvent.MOTION_CHANGE, onMovement);
tween.addEventListener(TweenEvent.MOTION_FINISH, onRest);
break;
default:
break;
};
}
}
}//package com.kid360.ui
Section 44
//CarouselItem (com.kid360.ui.CarouselItem)
package com.kid360.ui {
import flash.display.*;
public class CarouselItem extends MovieClip {
protected var scroller:Scroller;
public function CarouselItem(container:Scroller){
super();
scroller = container;
}
public function get itemHeight():Number{
return (height);
}
public function get itemWidth():Number{
return (width);
}
}
}//package com.kid360.ui
Section 45
//Configurable (com.kid360.ui.Configurable)
package com.kid360.ui {
public interface Configurable {
function get config():XML;
function set config(/Users/rich/Projects/Hasbro/mylittlepony.com/ponywedding/cake;com/kid360/ui;Configurable.as:XML):void;
}
}//package com.kid360.ui
Section 46
//Scroller (com.kid360.ui.Scroller)
package com.kid360.ui {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.events.*;
public class Scroller extends Sprite implements Configurable {
private var visibleItems:Array;
private var collectionConfig:XML;
private var allItems:Array;
private var itemGap:Number;// = 0
public function Scroller(collectionConfig:XML=null){
allItems = [];
visibleItems = [];
itemGap = 0;
super();
config = collectionConfig;
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
public function positionItems():void{
var firstLoc:Number;
var i:int;
i = 0;
while (i < visibleItems.length) {
visibleItems[i][(parent as Carousel).movingAxis] = (i * (itemSize + itemGap));
i++;
};
}
public function resetScrollRect():void{
var propertyValue:String;
var windowWidth:Number;
var windowHeight:Number;
windowWidth = 100;
windowHeight = 100;
propertyValue = configValue("width");
if ("" != propertyValue){
windowWidth = parseFloat(propertyValue);
};
propertyValue = configValue("height");
if ("" != propertyValue){
windowHeight = parseFloat(propertyValue);
};
scrollRect = new Rectangle(0, 0, windowWidth, windowHeight);
}
public function get isWide():Boolean{
return (("x" == (parent as Carousel).movingAxis));
}
public function filterCollection(filterFunc:Function):void{
var trimString:Function;
var o:DisplayObject;
var filterFunc = filterFunc;
trimString = function (s:String):String{
var chars:Array;
chars = s.split("");
while ((((" " == chars[0])) || (("\t" == chars[0])))) {
chars.shift();
};
while ((((" " == chars[(chars.length - 1)])) || (("\t" == chars[(chars.length - 1)])))) {
chars.pop();
};
return (chars.join(""));
};
clear();
for each (o in allItems) {
if (filterFunc(o)){
visibleItems.push(o);
};
};
resetScrollRect();
positionItems();
for each (o in visibleItems) {
addChild(o);
};
}
public function get config():XML{
return (collectionConfig);
}
protected function configValue(propertyName:String):String{
var attributeName:String;
if (config.hasOwnProperty(propertyName)){
return (config.child(propertyName)[0]);
};
attributeName = ("@" + propertyName);
if (config.hasOwnProperty(attributeName)){
return (config.attribute(propertyName)[0]);
};
return ("");
}
public function set config(newConfig:XML):void{
var propertyValue:String;
var btnClass:Class;
var g:XML;
var btn:DisplayObject;
if (!newConfig){
return;
};
collectionConfig = newConfig;
propertyValue = configValue("gap");
if ("" != propertyValue){
itemGap = parseFloat(propertyValue);
};
propertyValue = configValue("x");
if ("" != propertyValue){
x = parseFloat(propertyValue);
};
propertyValue = configValue("y");
if ("" != propertyValue){
y = parseFloat(propertyValue);
};
resetScrollRect();
propertyValue = configValue("@buttonClass");
if ("" != propertyValue){
btnClass = (getDefinitionByName(propertyValue) as Class);
} else {
throw (new Error("Can't make a collection of buttons without a class name"));
};
for each (g in collectionConfig.*) {
btn = new btnClass(this, g);
allItems.push(btn);
visibleItems.push(btn);
btn.addEventListener(Event.COMPLETE, onItemComplete);
};
}
public function clear():void{
var i:int;
i = 0;
while (i < visibleItems.length) {
if (contains(visibleItems[i])){
removeChild(visibleItems[i]);
};
i++;
};
visibleItems = [];
}
protected function onAddedToStage(e:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
public function get itemSize():Number{
return ((isWide) ? allItems[0].itemWidth : allItems[0].itemHeight);
}
public function get collectionItems():Array{
return (allItems);
}
public function get contentLength():Number{
return (((visibleItems.length * itemSize) + ((visibleItems.length - 0) * itemGap)));
}
protected function onItemComplete(e:Event):void{
var o:DisplayObject;
e.target.removeEventListener(Event.COMPLETE, onItemComplete);
addChild((e.target as DisplayObject));
if (numChildren == allItems.length){
positionItems();
for each (o in allItems) {
o.visible = true;
};
(parent as Carousel).updateButtons();
};
}
}
}//package com.kid360.ui
Section 47
//SkinnableButton (com.kid360.ui.SkinnableButton)
package com.kid360.ui {
import flash.display.*;
import flash.utils.*;
import flash.events.*;
import flash.media.*;
import flash.net.*;
import flash.ui.*;
public class SkinnableButton extends SkinnableSprite {
private const clickSound:Sound;
private const rollOverSound:Sound;
protected var curState:int;// = -1
private var rollOverSoundTimer:Timer;
private var depressed:Boolean;// = false
protected var toggles:Boolean;// = false
protected var faces:Array;
private var groupMember:Boolean;// = false
public static const INIT_STATE:int = -1;
public static const SELECTED_HILITED_STATE:int = 4;
public static const IDLE_STATE:int = 0;
public static const HILITED_STATE:int = 1;
public static const SELECTED_IDLE_STATE:int = 3;
public static const SELECTED_DEPRESSED_STATE:int = 5;
public static const DEPRESSED_STATE:int = 2;
public static const DISABLED_STATE:int = 99;
public function SkinnableButton(btnConfig:XML=null){
toggles = false;
faces = [];
curState = INIT_STATE;
depressed = false;
groupMember = false;
rollOverSound = new Sound();
clickSound = new Sound();
super();
mouseChildren = false;
buttonMode = true;
config = btnConfig;
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
override protected function applySkin(config:XML):void{
var propertyValue:String;
if (!config){
return;
};
propertyValue = configValue("up");
if ("" != propertyValue){
assetLoader.loadAsset(propertyValue, "up");
};
propertyValue = configValue("down");
if ("" != propertyValue){
assetLoader.loadAsset(propertyValue, "down");
};
propertyValue = configValue("over");
if ("" != propertyValue){
assetLoader.loadAsset(propertyValue, "over");
};
propertyValue = configValue("selectedUp");
if ("" != propertyValue){
assetLoader.loadAsset(propertyValue, "selectedUp");
};
propertyValue = configValue("selectedDown");
if ("" != propertyValue){
assetLoader.loadAsset(propertyValue, "selectedDown");
};
propertyValue = configValue("selectedOver");
if ("" != propertyValue){
assetLoader.loadAsset(propertyValue, "selectedOver");
};
propertyValue = configValue("clickSound");
if ("" != propertyValue){
clickSound.load(new URLRequest((assetLoader.assetsPath + propertyValue)));
};
propertyValue = configValue("rollOverSound");
if ("" != propertyValue){
rollOverSound.load(new URLRequest((assetLoader.assetsPath + propertyValue)));
};
propertyValue = configValue("rollOverSoundDelay");
if ("" != propertyValue){
rollOverSoundTimer = new Timer(parseInt(propertyValue), 1);
rollOverSoundTimer.addEventListener(TimerEvent.TIMER, onRollOverTimeout);
};
propertyValue = configValue("x");
if ("" != propertyValue){
x = parseFloat(propertyValue);
};
propertyValue = configValue("y");
if ("" != propertyValue){
y = parseFloat(propertyValue);
};
}
public function get toggling():Boolean{
return (toggles);
}
public function set toggling(flag:Boolean):void{
toggles = flag;
}
public function set state(newState:int):void{
if (newState == curState){
return;
};
switch (newState){
case INIT_STATE:
break;
case DISABLED_STATE:
break;
case IDLE_STATE:
case HILITED_STATE:
case DEPRESSED_STATE:
case SELECTED_IDLE_STATE:
case SELECTED_HILITED_STATE:
case SELECTED_DEPRESSED_STATE:
showState(newState);
break;
};
if (faces[newState]){
curState = newState;
} else {
trace("can't change to state", newState, "without a face, so state remains at", curState);
};
mouseEnabled = !((newState == DISABLED_STATE));
alpha = ((newState == DISABLED_STATE)) ? 0.5 : 1;
}
public function set selected(flag:Boolean):void{
depressed = flag;
state = (flag) ? SELECTED_IDLE_STATE : IDLE_STATE;
}
private function onPressed(e:MouseEvent):void{
state = (selected) ? SELECTED_DEPRESSED_STATE : DEPRESSED_STATE;
}
private function onReleased(e:MouseEvent):void{
if (clickSound.url){
if (rollOverSoundTimer){
rollOverSoundTimer.reset();
};
clickSound.play(0, 1);
};
if (toggling){
if (!grouped){
selected = !(selected);
};
};
state = (selected) ? SELECTED_HILITED_STATE : HILITED_STATE;
}
public function get grouped():Boolean{
return (groupMember);
}
private function onRollOverTimeout(e:TimerEvent):void{
rollOverSound.play(0, 1);
}
public function get state():int{
return (curState);
}
private function keyUpHandler(event:KeyboardEvent):void{
if (event.keyCode == Keyboard.SPACE){
dispatchEvent(new MouseEvent(MouseEvent.CLICK));
};
}
private function onAddedToStage(e:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
addEventListener(MouseEvent.MOUSE_OVER, onRolled);
addEventListener(MouseEvent.MOUSE_OUT, onRolledOut);
addEventListener(MouseEvent.MOUSE_DOWN, onPressed);
addEventListener(MouseEvent.MOUSE_UP, onReleased);
addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
}
public function assetForID(assetID:String):DisplayObject{
return (assetLoader.assetForID(assetID));
}
public function get selected():Boolean{
return (depressed);
}
protected function onRolledOut(e:MouseEvent):void{
if (mouseEnabled){
state = (selected) ? SELECTED_IDLE_STATE : IDLE_STATE;
};
}
override protected function onAssetLoaded(e:StatusEvent):void{
var assetID:String;
var faceNum:int;
assetID = e.level;
faceNum = ["up", "over", "down", "selectedUp", "selectedOver", "selectedDown"].indexOf(assetID);
if (faceNum > -1){
faces[faceNum] = assetLoader.assetForID(assetID);
switch (assetID){
case "up":
curState = IDLE_STATE;
addChild(faces[faceNum]);
dispatchEvent(new Event("skinnableButtonReady", true));
break;
default:
break;
};
};
applySize();
}
protected function showState(btnState:int):void{
if (btnState == INIT_STATE){
return;
};
if (faces[btnState]){
if (((faces[curState]) && (contains(faces[curState])))){
removeChild(faces[curState]);
};
addChild(faces[btnState]);
};
}
public function set grouped(flag:Boolean):void{
groupMember = flag;
}
protected function onRolled(e:MouseEvent):void{
if (mouseEnabled){
if (rollOverSound.url){
if (rollOverSoundTimer){
rollOverSoundTimer.reset();
rollOverSoundTimer.start();
} else {
rollOverSound.play(0, 1);
};
};
state = (selected) ? SELECTED_HILITED_STATE : HILITED_STATE;
};
}
public static function stateName(theState:uint):String{
if (theState == DISABLED_STATE){
return ("Disabled");
};
return (["Init", "Up", "Hilite", "Pushed", "Selectup", "SelectHilite", "SelectPushed"][(theState + 1)]);
}
}
}//package com.kid360.ui
Section 48
//SkinnableCarousel (com.kid360.ui.SkinnableCarousel)
package com.kid360.ui {
import flash.display.*;
import flash.events.*;
public class SkinnableCarousel extends Carousel {
public function SkinnableCarousel(carouselConfig:XML=null){
super();
nextBtn = new SkinnableButton();
nextBtn.name = "skcarNext";
addChild(nextBtn);
prevBtn = new SkinnableButton();
prevBtn.name = "skcarPrev";
addChild(prevBtn);
collection = (addChild(new Scroller()) as Scroller);
config = carouselConfig;
}
override public function set config(newConfig:XML):void{
var propertyValue:String;
var newConfig = newConfig;
if (!newConfig){
return;
};
carouselConfig = newConfig;
var _local3 = configValue("x");
propertyValue = _local3;
if ("" != _local3){
x = parseFloat(propertyValue);
};
_local3 = configValue("y");
propertyValue = _local3;
if ("" != _local3){
y = parseFloat(propertyValue);
};
(nextBtn as SkinnableButton).config = config.button.("pageDown" == @action)[0];
(prevBtn as SkinnableButton).config = config.button.("pageUp" == @action)[0];
collection.config = config.collection[0];
_local3 = configValue("scrollStep");
propertyValue = _local3;
if ("" != _local3){
pageLength = parseFloat(propertyValue);
};
_local3 = configValue("motion");
propertyValue = _local3;
if ("" != _local3){
movingAxis = (("horizontal" == propertyValue)) ? "x" : "y";
};
}
}
}//package com.kid360.ui
Section 49
//SkinnableCarouselItem (com.kid360.ui.SkinnableCarouselItem)
package com.kid360.ui {
public class SkinnableCarouselItem extends SkinnableButton {
protected var scroller:Scroller;
public function SkinnableCarouselItem(container:Scroller){
super();
scroller = container;
}
public function get itemHeight():Number{
return (height);
}
public function get itemWidth():Number{
return (width);
}
}
}//package com.kid360.ui
Section 50
//SkinnableSprite (com.kid360.ui.SkinnableSprite)
package com.kid360.ui {
import flash.display.*;
import flash.events.*;
import com.kid360.net.*;
public class SkinnableSprite extends Sprite implements Configurable {
protected var assetLoader:AssetLoader;
protected var skinConfig:XML;
public static const SKINNABLE_SPRITE_READY:String = "skinnableSpriteReady";
public function SkinnableSprite(spriteConfig:XML=null){
super();
assetLoader = new AssetLoader();
assetLoader.addEventListener(StatusEvent.STATUS, onAssetLoaded, false, 0, true);
config = spriteConfig;
}
protected function applySkin(config:XML):void{
var propertyValue:String;
if (!config){
return;
};
propertyValue = configValue("src");
if ("" != propertyValue){
assetLoader.loadAsset(propertyValue);
} else {
propertyValue = configValue("bgColor");
if ("" != propertyValue){
if (((configValue("width")) && (configValue("height")))){
showBackdrop(parseInt(propertyValue, 16), parseFloat(configValue("width")), parseFloat(configValue("height")));
} else {
throw (new Error("Can't fill backdrop without a width and height"));
};
};
};
propertyValue = configValue("x");
if ("" != propertyValue){
x = parseFloat(propertyValue);
};
propertyValue = configValue("y");
if ("" != propertyValue){
y = parseFloat(propertyValue);
};
}
public function get asset1():DisplayObject{
return (assetLoader.assetForID("asset1"));
}
public function get config():XML{
return (skinConfig);
}
protected function configValue(propertyName:String):String{
return (xmlValue(config, propertyName));
}
public function showBackdrop(itsColor:uint, itsWidth:Number, itsHeight:Number):void{
var itsColor = itsColor;
var itsWidth = itsWidth;
var itsHeight = itsHeight;
if (!itsWidth){
return;
};
if (!itsHeight){
return;
};
var _local5 = graphics;
with (_local5) {
beginFill(itsColor);
drawRect(0, 0, itsWidth, itsHeight);
};
}
public function set config(newConfig:XML):void{
skinConfig = newConfig;
applySkin(skinConfig);
}
protected function applySize():void{
var propertyValue:String;
if (!config){
return;
};
propertyValue = configValue("width");
if ("" != propertyValue){
width = parseFloat(propertyValue);
};
propertyValue = configValue("height");
if ("" != propertyValue){
height = parseFloat(propertyValue);
};
propertyValue = configValue("scaleX");
if ("" != propertyValue){
scaleX = parseFloat(propertyValue);
};
propertyValue = configValue("scaleY");
if ("" != propertyValue){
scaleY = parseFloat(propertyValue);
};
propertyValue = configValue("rotation");
if ("" != propertyValue){
rotation = parseFloat(propertyValue);
};
}
protected function xmlValue(xmlData:XML, propertyName:String):String{
var attributeName:String;
if (xmlData.hasOwnProperty(propertyName)){
return (xmlData.child(propertyName)[0]);
};
attributeName = ("@" + propertyName);
if (xmlData.hasOwnProperty(attributeName)){
return (xmlData.attribute(propertyName)[0]);
};
return ("");
}
protected function onAssetLoaded(e:StatusEvent):void{
addChild(assetLoader.assetForID(e.level));
applySize();
dispatchEvent(new Event("skinnableSpriteReady", true));
}
}
}//package com.kid360.ui
Section 51
//DV (com.kid360.view.DV)
package com.kid360.view {
import flash.display.*;
import flash.utils.*;
import flash.events.*;
import flash.media.*;
import flash.net.*;
public class DV extends Sprite {
private var vid:Video;
private var timeoutID:uint;
private var DVSource:String;
private var nc:NetConnection;
private var ns:NetStream;
private var metad:Object;
public function DV(){
super();
vid = new Video(480, 320);
addChild(vid);
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, nsEventHandler);
nc.connect(null);
}
public function set videoHeight(newHeight:Number):void{
vid.height = newHeight;
}
public function set videoSource(newSource:String):void{
DVSource = newSource;
}
private function connectStream(theClip:String=""):void{
trace("connecting stream", theClip);
ns = new NetStream(nc);
ns.addEventListener(NetStatusEvent.NET_STATUS, nsEventHandler);
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
ns.client = this;
vid.attachNetStream(ns);
if (theClip){
ns.play(theClip);
} else {
trace("no clip to show, so no playing for you");
};
}
public function set videoWidth(newWidth:Number):void{
vid.width = newWidth;
}
public function play():void{
if (DVSource){
connectStream(DVSource);
} else {
throw (new Error("Can't play a video without a videoSource"));
};
}
public function onMetaData(md:Object):void{
metad = md;
}
private function asyncErrorHandler(e:AsyncErrorEvent):void{
trace("async error:", e.error);
}
private function nsEventHandler(e:NetStatusEvent):void{
trace("handling netstatus", e.info.code);
switch (e.info.code){
case "NetConnection.Connect.Success":
trace("NetConnection has connected");
break;
case "NetStream.Play.StreamNotFound":
trace("Can't find video");
break;
case "NetStream.Play.Start":
trace("received vidstart, time:", ns.time);
timeoutID = setTimeout(notifyVideoStart, 50);
break;
case "NetStream.Play.Stop":
dispatchEvent(new StatusEvent(StatusEvent.STATUS, true, true, "VideoStop"));
break;
case "NetStream.Seek.Notify":
case "NetStream.Buffer.Empty":
case "NetStream.Buffer.Full":
case "NetStream.Buffer.Flush":
break;
default:
trace(("VideoPane: unknown net status event: " + e.info.code));
break;
};
}
private function notifyVideoStart():void{
clearTimeout(timeoutID);
dispatchEvent(new StatusEvent(StatusEvent.STATUS, true, true, "VideoStart"));
}
public function pause():void{
ns.pause();
}
}
}//package com.kid360.view
Section 52
//ImageEncoder (com.kid360.ImageEncoder)
package com.kid360 {
import com.adobe.images.*;
import flash.display.*;
import flash.utils.*;
import flash.events.*;
public class ImageEncoder extends EventDispatcher {
public static const TYPE_PNG:uint = 2;
private static const DEFAULT_JPEG_QUALITY:Number = 80;
public static const TYPE_JPEG:uint = 1;
public function ImageEncoder(){
super();
}
public static function PNGEncoding(sourceObj:IBitmapDrawable):ByteArray{
return (ImageEncoder.encode(sourceObj, ImageEncoder.TYPE_PNG));
}
private static function encode(sourceObj:IBitmapDrawable, imageType:uint=1, jpegQuality:uint=0):ByteArray{
var result:ByteArray;
var srcWidth:Number;
var srcHeight:Number;
var jpegEncoder:JPGEncoder;
var bmd:BitmapData;
if (0 == jpegQuality){
jpegQuality = ImageEncoder.DEFAULT_JPEG_QUALITY;
};
if ((sourceObj is DisplayObject)){
srcWidth = (sourceObj as DisplayObject).width;
srcHeight = (sourceObj as DisplayObject).height;
} else {
if ((sourceObj is BitmapData)){
srcWidth = (sourceObj as BitmapData).width;
srcHeight = (sourceObj as BitmapData).height;
} else {
throw (new Error((("mysterious sourceObj " + sourceObj) + " claims to be IBitmapDrawable")));
};
};
bmd = new BitmapData(srcWidth, srcHeight);
bmd.draw(sourceObj);
switch (imageType){
case ImageEncoder.TYPE_JPEG:
jpegEncoder = new JPGEncoder(jpegQuality);
result = jpegEncoder.encode(bmd);
break;
case ImageEncoder.TYPE_PNG:
result = PNGEncoder.encode(bmd);
};
return (result);
}
public static function JPEGEncoding(sourceObj:IBitmapDrawable):ByteArray{
return (ImageEncoder.encode(sourceObj, ImageEncoder.TYPE_JPEG));
}
}
}//package com.kid360
Section 53
//PrintQueue (com.kid360.PrintQueue)
package com.kid360 {
import flash.display.*;
import flash.geom.*;
import flash.printing.*;
public class PrintQueue extends Sprite {
private var theQueue:Array;
private var marginThickness:Number;// = 18
private var paperSize:Rectangle;
private var pj:PrintJob;
public function PrintQueue(pages:Array){
marginThickness = 18;
super();
visible = false;
theQueue = pages;
pj = new PrintJob();
paperSize = new Rectangle();
}
private function fitToPage(obj:Rectangle, pg:Rectangle):Object{
var pageIsWide:Boolean;
var objIsWide:Boolean;
var scaleFactor:Number;
var needsRotate:Boolean;
pageIsWide = (pg.width > pg.height);
objIsWide = (obj.width > obj.height);
if (pageIsWide){
scaleFactor = (pg.width / (objIsWide) ? obj.width : obj.height);
needsRotate = !(objIsWide);
} else {
scaleFactor = (pg.height / (objIsWide) ? obj.width : obj.height);
needsRotate = objIsWide;
};
return ({scale:scaleFactor, rot:needsRotate});
}
private function drawUnderlay(width:Number, height:Number):void{
var width = width;
var height = height;
var _local4 = graphics;
with (_local4) {
lineStyle();
beginFill(0xFFFFFF);
drawRect(0, 0, width, height);
endFill();
};
}
public function set margin(newMargin:Number):void{
marginThickness = Math.abs(newMargin);
}
public function get isWidePaper():Boolean{
return ((paperSize.width > paperSize.height));
}
public function get margin():Number{
return (marginThickness);
}
private function centerOnPage(obj:DisplayObject, pg:Rectangle):void{
var hMargin:Number;
var vMargin:Number;
hMargin = ((pg.width - obj.width) / 2);
vMargin = ((pg.height - obj.height) / 2);
obj.x = (hMargin + ((obj.rotation == 90)) ? obj.width : 0);
obj.y = vMargin;
}
public function print():Boolean{
var queueSize:int;
var pageContent:DisplayObject;
var fitSpec:Object;
if (pj.start()){
paperSize.width = (pj.pageWidth - marginThickness);
paperSize.height = (pj.pageHeight - marginThickness);
drawUnderlay(paperSize.width, paperSize.height);
queueSize = 0;
for (;theQueue.length > 0;continue, (var _local3:* = #InvalidMultinameIndex#), continue, 0, throw (_local3), removeChild(pageContent), //unexpected switch
) {
pageContent = theQueue.shift();
fitSpec = fitToPage(pageContent.getBounds(pageContent), paperSize);
pageContent.scaleX = (pageContent.scaleY = fitSpec.scale);
if (fitSpec.rot){
pageContent.rotation = 90;
};
centerOnPage(pageContent, paperSize);
addChild(pageContent);
pj.addPage(this);
queueSize = (queueSize + 1);
continue;
var _slot1 = e;
trace(_slot1.message);
};
if (queueSize > 0){
pj.send();
};
return ((queueSize > 0));
};
return (false);
}
}
}//package com.kid360
Section 54
//Control (com.senocular.display.transform.Control)
package com.senocular.display.transform {
import flash.display.*;
import flash.events.*;
public class Control extends Sprite {
private var _fillAlpha:Number;// = 1
private var _fillColor:uint;// = 0xFFFFFF
private var _lineColor:uint;// = 0
private var _lineAlpha:Number;// = 1
private var _tool:TransformTool;
private var _lineThickness:Number;// = 0
public function Control(){
_fillColor = 0xFFFFFF;
_lineColor = 0;
_fillAlpha = 1;
_lineAlpha = 1;
_lineThickness = 0;
super();
addEventListener(Event.ADDED, added, true);
addEventListener(Event.ADDED_TO_STAGE, addedToStage);
addEventListener(Event.REMOVED_FROM_STAGE, removedFromStage);
}
protected function added(event:Event):void{
draw();
}
protected function targetChanged(event:Event):void{
}
protected function addedToStage(event:Event):void{
var tool:TransformTool;
tool = (parent as TransformTool);
if (tool != null){
this.tool = tool;
draw();
} else {
this.tool = null;
};
}
protected function removedFromStage(event:Event):void{
this.tool = null;
}
public function set fillAlpha(value:Number):void{
_fillAlpha = value;
}
public function set tool(value:TransformTool):void{
if (value == _tool){
return;
};
cleanupTool();
_tool = value;
setupTool();
}
public function draw():void{
}
public function set fillColor(value:uint):void{
_fillColor = value;
}
protected function cleanupTool():void{
if (_tool){
_tool.removeEventListener(TransformTool.REDRAW, redraw);
_tool.removeEventListener(TransformTool.TARGET_CHANGED, targetChanged);
};
}
public function get tool():TransformTool{
return (_tool);
}
public function get fillColor():uint{
return (_fillColor);
}
public function set lineAlpha(value:Number):void{
_lineAlpha = value;
}
public function set lineColor(value:uint):void{
_lineColor = value;
}
public function get fillAlpha():Number{
return (_fillAlpha);
}
protected function setupTool():void{
if (_tool){
_tool.addEventListener(TransformTool.REDRAW, redraw);
_tool.addEventListener(TransformTool.TARGET_CHANGED, targetChanged);
redraw(null);
};
}
public function set lineThickness(value:Number):void{
_lineThickness = value;
}
public function get lineAlpha():Number{
return (_lineAlpha);
}
public function get lineColor():uint{
return (_lineColor);
}
public function get lineThickness():Number{
return (_lineThickness);
}
public function redraw(event:Event):void{
}
}
}//package com.senocular.display.transform
Section 55
//ControlBorder (com.senocular.display.transform.ControlBorder)
package com.senocular.display.transform {
import flash.events.*;
public class ControlBorder extends Control {
public function ControlBorder(){
mouseEnabled = false;
super();
}
override public function draw():void{
super.draw();
redraw(null);
}
override public function redraw(event:Event):void{
var tool:TransformTool;
var event = event;
super.redraw(event);
tool = this.tool;
if (tool == null){
return;
};
var _local3 = graphics;
with (_local3) {
clear();
lineStyle(this.lineThickness, this.lineColor, this.lineAlpha);
moveTo(tool.topLeft.x, tool.topLeft.y);
lineTo(tool.topRight.x, tool.topRight.y);
lineTo(tool.bottomRight.x, tool.bottomRight.y);
lineTo(tool.bottomLeft.x, tool.bottomLeft.y);
lineTo(tool.topLeft.x, tool.topLeft.y);
};
}
}
}//package com.senocular.display.transform
Section 56
//ControlCursor (com.senocular.display.transform.ControlCursor)
package com.senocular.display.transform {
import flash.display.*;
import flash.geom.*;
import flash.events.*;
public class ControlCursor extends Sprite {
protected var mouseActive:Boolean;// = false
protected var activeTarget:IEventDispatcher;
private var _cursor:DisplayObject;
private var _tool:TransformTool;
private var _offset:Point;
public function ControlCursor(offset:Point=null){
_offset = new Point(20, 28);
mouseActive = false;
super();
mouseEnabled = false;
if (offset){
this.offset = offset;
};
addEventListener(Event.ADDED_TO_STAGE, addedToStage);
addEventListener(Event.REMOVED_FROM_STAGE, removedFromStage);
}
protected function targetChanged(event:Event):void{
var targetEvent:MouseEvent;
cleanupActiveMouse();
cursor = null;
cursorChanged(event);
targetEvent = (_tool.targetEvent as MouseEvent);
if (targetEvent){
activeMouseMove(targetEvent);
};
}
protected function cleanupActiveMouse():void{
if (activeTarget){
activeTarget.removeEventListener(MouseEvent.MOUSE_MOVE, activeMouseMove, false);
activeTarget = null;
};
mouseActive = false;
}
protected function cleanupCursor():void{
if (((_cursor) && ((cursor.parent == this)))){
removeChild(_cursor);
};
}
protected function addedToStage(event:Event):void{
this.tool = (parent as TransformTool);
}
public function set offset(value:Point):void{
_offset = value;
}
protected function removedFromStage(event:Event):void{
this.tool = null;
cleanupActiveMouse();
}
protected function setupCursor():void{
var cursorEvent:MouseEvent;
if (_cursor){
addChild(_cursor);
setupActiveMouse();
cursorEvent = (_tool.cursorEvent as MouseEvent);
if (cursorEvent){
activeMouseMove(cursorEvent);
};
} else {
cleanupActiveMouse();
};
}
public function set tool(value:TransformTool):void{
if (value == _tool){
return;
};
if (_tool){
_tool.removeEventListener(TransformTool.CURSOR_CHANGED, cursorChanged);
_tool.removeEventListener(TransformTool.TARGET_CHANGED, targetChanged);
};
_tool = value;
if (_tool){
_tool.addEventListener(TransformTool.CURSOR_CHANGED, cursorChanged);
_tool.addEventListener(TransformTool.TARGET_CHANGED, targetChanged);
};
}
protected function get cursor():DisplayObject{
return (_cursor);
}
protected function setupActiveMouse():void{
if (mouseActive){
return;
};
activeTarget = null;
if (((((stage) && (loaderInfo))) && (loaderInfo.parentAllowsChild))){
activeTarget = stage;
} else {
if (root){
activeTarget = root;
};
};
if (activeTarget){
mouseActive = true;
activeTarget.addEventListener(MouseEvent.MOUSE_MOVE, activeMouseMove, false, 1);
};
}
protected function cursorChanged(event:Event):void{
cursor = _tool.cursor;
}
public function get tool():TransformTool{
return (_tool);
}
public function get offset():Point{
return (_offset);
}
protected function set cursor(value:DisplayObject):void{
if (value == _cursor){
return;
};
cleanupCursor();
_cursor = value;
setupCursor();
}
protected function activeMouseMove(event:MouseEvent):void{
var position:Point;
if ((((event == _tool.targetEvent)) && (_tool.targetEventMouse))){
position = _tool.targetEventMouse;
} else {
position = new Point(event.stageX, event.stageY);
};
position = _tool.globalToLocal(position);
if (_offset){
position.x = (position.x + _offset.x);
position.y = (position.y + _offset.y);
};
x = position.x;
y = position.y;
event.updateAfterEvent();
}
}
}//package com.senocular.display.transform
Section 57
//ControlInteractive (com.senocular.display.transform.ControlInteractive)
package com.senocular.display.transform {
import flash.geom.*;
import flash.events.*;
public class ControlInteractive extends Control {
public const MIN_SCALE_BASE:Number = 0.1;
protected var localMouse:Point;
protected var baseLocalRegistration:Point;
protected var activeX:Number;
protected var activeY:Number;
protected var activeLocalX:Number;
protected var baseRegistration:Point;
protected var activeTarget:IEventDispatcher;
protected var activeLocalY:Number;
private var _cursor:Cursor;
protected var baseLocalY:Number;
protected var baseLocalMatrixInverted:Matrix;
protected var baseLocalX:Number;
protected var baseY:Number;
protected var activeMouseEvent:MouseEvent;
protected var baseX:Number;
protected var mouse:Point;
protected var offsetMouse:Point;
public function ControlInteractive(cursor:Cursor=null){
offsetMouse = new Point();
super();
this.cursor = cursor;
fillColor = 0;
lineColor = 0xFFFFFF;
lineThickness = 2;
addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
addEventListener(MouseEvent.MOUSE_UP, mouseUp);
addEventListener(MouseEvent.ROLL_OVER, rollOver);
addEventListener(MouseEvent.ROLL_OUT, rollOut);
}
override protected function removedFromStage(event:Event):void{
cleanupActiveMouse();
super.removedFromStage(event);
}
protected function rollOver(event:MouseEvent):void{
if (((!((_cursor == null))) && (!((tool == null))))){
if (!tool.isActive){
tool.setCursor(_cursor, event);
};
};
}
protected function cleanupCursor():void{
if (_cursor){
_cursor.tool = null;
};
}
protected function setupCursor():void{
if (_cursor){
_cursor.tool = tool;
};
}
protected function cleanupActiveMouse():void{
var tool:TransformTool;
tool = this.tool;
if (activeTarget){
activeTarget.removeEventListener(MouseEvent.ROLL_OUT, activeMouseUp);
activeTarget.removeEventListener(MouseEvent.MOUSE_MOVE, activeMouseMove);
activeTarget.removeEventListener(MouseEvent.MOUSE_UP, activeMouseUp, true);
activeTarget.removeEventListener(MouseEvent.MOUSE_UP, activeMouseUp, false);
activeTarget = null;
tool.isActive = false;
};
tool.removeEventListener(TransformTool.RESTRICT, restrict);
if (tool.cursor == _cursor){
tool.setCursor(null);
};
}
protected function mouseUp(event:MouseEvent):void{
if (tool != null){
tool.setCursor(_cursor, event);
};
}
protected function scaleXAxis():void{
if (Math.abs(baseLocalX) >= MIN_SCALE_BASE){
tool.preTransform.scale((activeLocalX / baseLocalX), 1);
};
}
protected function activeMouseUp(event:MouseEvent):void{
if (event.eventPhase != EventPhase.BUBBLING_PHASE){
activeMouseEvent = null;
cleanupActiveMouse();
tool.commitTarget();
};
}
protected function moveRegistration():void{
tool.localRegistration.x = localMouse.x;
tool.localRegistration.y = localMouse.y;
tool.saveRegistration();
}
protected function skewXAxis():void{
if (Math.abs(baseLocalY) >= MIN_SCALE_BASE){
tool.preTransform.c = ((activeLocalX - baseLocalX) / baseLocalY);
};
}
protected function updateBaseReferences():void{
var tool:TransformTool;
var baseLocalMatrix:Matrix;
tool = this.tool;
if (tool.normalizeBase()){
calculateAndUpdate();
} else {
if (activeMouseEvent != tool.targetEvent){
tool.update();
};
};
baseLocalMatrix = tool.baseMatrix;
baseLocalMatrixInverted = baseLocalMatrix.clone();
baseLocalMatrixInverted.invert();
baseLocalRegistration = tool.localRegistration;
baseRegistration = baseLocalMatrix.transformPoint(baseLocalRegistration);
updateBaseMouse();
}
protected function rotate():void{
var baseAngle:Number;
var activeAngle:Number;
baseAngle = Math.atan2(baseY, baseX);
activeAngle = Math.atan2(activeY, activeX);
tool.postTransform.rotate((activeAngle - baseAngle));
}
protected function setupActiveMouse():void{
activeTarget = null;
if (((((stage) && (loaderInfo))) && (loaderInfo.parentAllowsChild))){
activeTarget = stage;
} else {
if (root){
activeTarget = root;
activeTarget.addEventListener(MouseEvent.ROLL_OUT, activeMouseUp);
};
};
if (activeTarget){
tool.isActive = true;
activeTarget.addEventListener(MouseEvent.MOUSE_MOVE, activeMouseMove);
activeTarget.addEventListener(MouseEvent.MOUSE_UP, activeMouseUp, true);
activeTarget.addEventListener(MouseEvent.MOUSE_UP, activeMouseUp, false);
};
tool.addEventListener(TransformTool.RESTRICT, restrict);
}
public function get cursor():Cursor{
return (_cursor);
}
protected function rollOut(event:MouseEvent):void{
if (((!((_cursor == null))) && (!((tool == null))))){
if (((!(tool.isActive)) && ((activeTarget == null)))){
tool.setCursor(null);
};
};
}
protected function scaleYAxis():void{
if (Math.abs(baseLocalY) >= MIN_SCALE_BASE){
tool.preTransform.scale(1, (activeLocalY / baseLocalY));
};
}
protected function updateBaseMouse():void{
var localOffset:Point;
updateMousePositions(activeMouseEvent);
baseX = ((mouse.x + offsetMouse.x) - baseRegistration.x);
baseY = ((mouse.y + offsetMouse.y) - baseRegistration.y);
localOffset = baseLocalMatrixInverted.deltaTransformPoint(offsetMouse);
baseLocalX = ((localMouse.x + localOffset.x) - baseLocalRegistration.x);
baseLocalY = ((localMouse.y + localOffset.y) - baseLocalRegistration.y);
}
protected function scale():void{
var sx:Number;
var sy:Number;
sx = ((Math.abs(baseLocalX))>=MIN_SCALE_BASE) ? (activeLocalX / baseLocalX) : 1;
sy = ((Math.abs(baseLocalY))>=MIN_SCALE_BASE) ? (activeLocalY / baseLocalY) : 1;
if (((!((sx == 1))) || (!((sy == 1))))){
tool.preTransform.scale(sx, sy);
};
}
protected function activeMouseMove(event:MouseEvent):void{
activeMouseEvent = event;
updateActiveMouse();
}
override protected function setupTool():void{
setupCursor();
super.setupTool();
}
protected function calculateAndUpdate(commit:Boolean=true, enforceNegativeScaling:Boolean=true):void{
tool.calculateTransform(true, enforceNegativeScaling);
tool.update(commit);
}
public function set cursor(value:Cursor):void{
if (value == _cursor){
return;
};
setupCursor();
_cursor = value;
cleanupCursor();
}
protected function updateMousePositions(event:MouseEvent=null):void{
var tool:TransformTool;
tool = this.tool;
if ((((event == tool.targetEvent)) && (tool.targetEventMouse))){
mouse = tool.targetEventMouse.clone();
} else {
mouse = new Point(event.stageX, event.stageY);
};
if (tool.target.parent != null){
mouse = tool.target.parent.globalToLocal(mouse);
};
localMouse = baseLocalMatrixInverted.transformPoint(mouse);
}
protected function restrict(event:Event):void{
}
protected function updateActiveMouse():void{
var localOffset:Point;
updateMousePositions(activeMouseEvent);
activeX = ((mouse.x + offsetMouse.x) - baseRegistration.x);
activeY = ((mouse.y + offsetMouse.y) - baseRegistration.y);
localOffset = baseLocalMatrixInverted.deltaTransformPoint(offsetMouse);
activeLocalX = ((localMouse.x + localOffset.x) - baseLocalRegistration.x);
activeLocalY = ((localMouse.y + localOffset.y) - baseLocalRegistration.y);
}
protected function skewYAxis():void{
if (Math.abs(baseLocalX) >= MIN_SCALE_BASE){
tool.preTransform.b = ((activeLocalY - baseLocalY) / baseLocalX);
};
}
protected function move():void{
tool.postTransform.translate((activeX - baseX), (activeY - baseY));
}
override protected function targetChanged(event:Event):void{
cleanupActiveMouse();
}
protected function mouseDown(event:MouseEvent):void{
activeMouseEvent = event;
updateBaseReferences();
setupActiveMouse();
}
override public function redraw(event:Event):void{
if (_cursor != null){
_cursor.redraw(event);
};
}
protected function uniformScale():void{
var sx:Number;
var sy:Number;
var ratioX:Number;
var ratioY:Number;
sx = ((Math.abs(baseLocalX))>=MIN_SCALE_BASE) ? (activeLocalX / baseLocalX) : 1;
sy = ((Math.abs(baseLocalY))>=MIN_SCALE_BASE) ? (activeLocalY / baseLocalY) : 1;
if (((!((sx == 1))) || (!((sy == 1))))){
ratioX = (sy) ? Math.abs((sx / sy)) : 0;
ratioY = (sx) ? Math.abs((sy / sx)) : 0;
if ((((ratioX == 0)) || ((ratioY == 0)))){
sx = 0;
sy = 0;
} else {
if (ratioX > ratioY){
sx = (sx * ratioY);
} else {
sy = (sy * ratioX);
};
};
tool.preTransform.scale(sx, sy);
};
}
}
}//package com.senocular.display.transform
Section 58
//ControlMove (com.senocular.display.transform.ControlMove)
package com.senocular.display.transform {
import flash.display.*;
import flash.events.*;
public class ControlMove extends ControlInteractive {
private var _target:DisplayObject;
public function ControlMove(cursor:Cursor=null){
super(cursor);
}
public function set target(value:DisplayObject):void{
var targetEvent:MouseEvent;
if (value == _target){
return;
};
if (_target){
_target.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
_target.removeEventListener(MouseEvent.MOUSE_UP, mouseUp);
_target.removeEventListener(MouseEvent.ROLL_OVER, rollOver);
_target.removeEventListener(MouseEvent.ROLL_OUT, rollOut);
};
_target = value;
if (_target){
_target.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
_target.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
_target.addEventListener(MouseEvent.ROLL_OVER, rollOver);
_target.addEventListener(MouseEvent.ROLL_OUT, rollOut);
targetEvent = (tool.targetEvent as MouseEvent);
if (((targetEvent) && ((targetEvent.type == MouseEvent.MOUSE_DOWN)))){
rollOver(targetEvent);
mouseDown(targetEvent);
};
};
}
override public function set tool(value:TransformTool):void{
var tool:TransformTool;
super.tool = value;
tool = super.tool;
if (tool){
this.target = tool.target;
} else {
this.target = null;
};
}
public function get target():DisplayObject{
return (_target);
}
override protected function activeMouseMove(event:MouseEvent):void{
super.activeMouseMove(event);
move();
calculateAndUpdate(false);
}
override protected function targetChanged(event:Event):void{
super.targetChanged(event);
this.target = tool.target;
}
}
}//package com.senocular.display.transform
Section 59
//ControlUV (com.senocular.display.transform.ControlUV)
package com.senocular.display.transform {
import flash.display.*;
import flash.geom.*;
import flash.events.*;
public class ControlUV extends ControlInteractive {
private var _offset:Point;
private var _u:Number;
private var _v:Number;
public function ControlUV(u:Number=0, v:Number=0, cursor:Cursor=null){
super(cursor);
this.u = u;
this.v = v;
}
override public function redraw(event:Event):void{
super.redraw(event);
setPosition();
}
public function getLocalUVPosition(u:Number, v:Number, target:DisplayObject):Point{
var bounds:Rectangle;
if (target == null){
return (new Point(0, 0));
};
bounds = target.getBounds(target);
return (new Point((bounds.left + (bounds.width * u)), (bounds.top + (bounds.height * v))));
}
public function get v():Number{
return (_v);
}
public function get u():Number{
return (_u);
}
public function get offset():Point{
return (_offset);
}
public function getUVPosition(u:Number=NaN, v:Number=NaN, offset:Point=null):Point{
var tool:TransformTool;
var position:Point;
var angle:Number;
tool = this.tool;
if ((((tool == null)) || ((tool.target == null)))){
return (new Point(0, 0));
};
if (isNaN(u)){
u = _u;
};
if (isNaN(v)){
v = _v;
};
if (offset == null){
offset = _offset;
};
position = getLocalUVPosition(u, v, tool.target);
position = tool.calculatedMatrix.transformPoint(position);
if (offset){
if (!isNaN(offset.x)){
angle = tool.getRotationX();
position.x = (position.x + (offset.x * Math.cos(angle)));
position.y = (position.y + (offset.x * Math.sin(angle)));
};
if (!isNaN(offset.y)){
angle = tool.getRotationY();
position.x = (position.x + (offset.y * Math.sin(angle)));
position.y = (position.y + (offset.y * Math.cos(angle)));
};
};
return (position);
}
public function set u(value:Number):void{
_u = (isNaN(value)) ? 0 : value;
}
public function set v(value:Number):void{
_v = (isNaN(value)) ? 0 : value;
}
public function set offset(value:Point):void{
_offset = value;
}
protected function setPosition():void{
var position:Point;
position = getUVPosition();
x = position.x;
y = position.y;
}
}
}//package com.senocular.display.transform
Section 60
//ControlUVRotate (com.senocular.display.transform.ControlUVRotate)
package com.senocular.display.transform {
import flash.events.*;
public class ControlUVRotate extends ControlUV {
public function ControlUVRotate(u:Number=1, v:Number=1, cursor:Cursor=null){
super(u, v, cursor);
addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
}
override public function draw():void{
super.draw();
graphics.clear();
if (numChildren){
return;
};
var _local2 = graphics;
with (_local2) {
beginFill(this.fillColor, this.fillAlpha);
lineStyle(this.lineThickness, this.lineColor, this.lineAlpha);
drawCircle(0, 0, 4);
};
}
override protected function activeMouseMove(event:MouseEvent):void{
super.activeMouseMove(event);
rotate();
calculateAndUpdate(false);
}
override protected function restrict(event:Event):void{
var snap:Number;
event.preventDefault();
if (activeMouseEvent.shiftKey){
snap = (Math.PI / 4);
tool.setRotation((Math.round((tool.getRotation() / snap)) * snap));
};
tool.restrictRotation();
}
}
}//package com.senocular.display.transform
Section 61
//ControlUVScale (com.senocular.display.transform.ControlUVScale)
package com.senocular.display.transform {
import flash.events.*;
public class ControlUVScale extends ControlUV {
private var _mode:String;
public static const BOTH:String = "both";
public static const UNIFORM:String = "uniform";
public static const Y_AXIS:String = "yAxis";
public static const X_AXIS:String = "xAxis";
public function ControlUVScale(u:Number=1, v:Number=1, mode:String="both", cursor:Cursor=null){
super(u, v, cursor);
this.mode = mode;
}
override protected function mouseDown(event:MouseEvent):void{
offsetMouse.x = -(event.localX);
offsetMouse.y = -(event.localY);
super.mouseDown(event);
}
override public function draw():void{
super.draw();
graphics.clear();
if (numChildren){
return;
};
var _local2 = graphics;
with (_local2) {
beginFill(this.fillColor, this.fillAlpha);
lineStyle(this.lineThickness, this.lineColor, this.lineAlpha);
drawRect(-4, -4, 8, 8);
};
}
public function set mode(value:String):void{
_mode = value;
}
public function get mode():String{
return (_mode);
}
override protected function activeMouseMove(event:MouseEvent):void{
super.activeMouseMove(event);
switch (_mode){
case X_AXIS:
scaleXAxis();
break;
case Y_AXIS:
scaleYAxis();
break;
case UNIFORM:
uniformScale();
break;
case BOTH:
default:
if (event.shiftKey){
uniformScale();
} else {
scale();
};
break;
};
calculateAndUpdate(false);
}
}
}//package com.senocular.display.transform
Section 62
//Cursor (com.senocular.display.transform.Cursor)
package com.senocular.display.transform {
import flash.display.*;
import flash.events.*;
public class Cursor extends Sprite {
private var _fillAlpha:Number;// = 1
private var _fillColor:uint;// = 0
private var _lineColor:uint;// = 0xFFFFFF
private var _lineAlpha:Number;// = 1
private var _tool:TransformTool;
private var _lineThickness:Number;// = 0
public function Cursor(){
_fillColor = 0;
_lineColor = 0xFFFFFF;
_fillAlpha = 1;
_lineAlpha = 1;
_lineThickness = 0;
super();
draw();
addEventListener(Event.ADDED, added, true);
}
protected function added(event:Event):void{
draw();
}
public function set fillAlpha(value:Number):void{
_fillAlpha = value;
}
public function set tool(value:TransformTool):void{
if (value == _tool){
return;
};
_tool = value;
}
public function draw():void{
}
public function set fillColor(value:uint):void{
_fillColor = value;
}
public function get tool():TransformTool{
return (_tool);
}
public function get fillColor():uint{
return (_fillColor);
}
public function set lineAlpha(value:Number):void{
_lineAlpha = value;
}
public function set lineColor(value:uint):void{
_lineColor = value;
}
public function get fillAlpha():Number{
return (_fillAlpha);
}
public function set lineThickness(value:Number):void{
_lineThickness = value;
}
public function get lineAlpha():Number{
return (_lineAlpha);
}
public function get lineColor():uint{
return (_lineColor);
}
public function get lineThickness():Number{
return (_lineThickness);
}
public function redraw(event:Event):void{
}
}
}//package com.senocular.display.transform
Section 63
//CursorMove (com.senocular.display.transform.CursorMove)
package com.senocular.display.transform {
public class CursorMove extends Cursor {
public function CursorMove(){
super();
}
override public function draw():void{
super.draw();
graphics.clear();
if (numChildren){
return;
};
var _local2 = graphics;
with (_local2) {
beginFill(this.fillColor, this.fillAlpha);
lineStyle(this.lineThickness, this.lineColor, this.lineAlpha);
moveTo(1, 1);
lineTo(1, -2);
lineTo(-1, -2);
lineTo(2, -6);
lineTo(5, -2);
lineTo(3, -2);
lineTo(3, 1);
lineTo(6, 1);
lineTo(6, -1);
lineTo(10, 2);
lineTo(6, 5);
lineTo(6, 3);
lineTo(3, 3);
lineTo(3, 5);
lineTo(3, 6);
lineTo(5, 6);
lineTo(2, 10);
lineTo(-1, 6);
lineTo(1, 6);
lineTo(1, 5);
lineTo(1, 3);
lineTo(-2, 3);
lineTo(-2, 5);
lineTo(-6, 2);
lineTo(-2, -1);
lineTo(-2, 1);
lineTo(1, 1);
endFill();
};
}
}
}//package com.senocular.display.transform
Section 64
//CursorRotate (com.senocular.display.transform.CursorRotate)
package com.senocular.display.transform {
public class CursorRotate extends Cursor {
public function CursorRotate(){
super();
}
override public function draw():void{
var angle1:Number;
var angle2:Number;
super.draw();
graphics.clear();
if (numChildren){
return;
};
angle1 = Math.PI;
angle2 = (-(Math.PI) / 2);
var _local2 = graphics;
with (_local2) {
beginFill(this.fillColor, this.fillAlpha);
lineStyle(this.lineThickness, this.lineColor, this.lineAlpha);
this.drawArc(0, 0, 4, angle1, angle2, true);
this.drawArc(0, 0, 6, angle2, angle1, false);
lineTo(-8, 0);
lineTo(-5, 4);
lineTo(-2, 0);
lineTo(-4, 0);
endFill();
};
}
protected function drawArc(originX:Number, originY:Number, radius:Number, angle1:Number, angle2:Number, useMove:Boolean=true):void{
var diff:Number;
var divs:int;
var span:Number;
var cosSpan:Number;
var radiusc:Number;
var i:int;
diff = (angle2 - angle1);
divs = (1 + Math.floor((Math.abs(diff) / (Math.PI / 4))));
span = (diff / (2 * divs));
cosSpan = Math.cos(span);
radiusc = (cosSpan) ? (radius / cosSpan) : 0;
if (useMove){
graphics.moveTo((originX + (Math.cos(angle1) * radius)), (originY - (Math.sin(angle1) * radius)));
} else {
graphics.lineTo((originX + (Math.cos(angle1) * radius)), (originY - (Math.sin(angle1) * radius)));
};
i = 0;
while (i < divs) {
angle2 = (angle1 + span);
angle1 = (angle2 + span);
graphics.curveTo((originX + (Math.cos(angle2) * radiusc)), (originY - (Math.sin(angle2) * radiusc)), (originX + (Math.cos(angle1) * radius)), (originY - (Math.sin(angle1) * radius)));
i++;
};
}
}
}//package com.senocular.display.transform
Section 65
//CursorScale (com.senocular.display.transform.CursorScale)
package com.senocular.display.transform {
import flash.events.*;
public class CursorScale extends Cursor {
private var _mode:String;
private var _rotationOffset:Number;
public function CursorScale(mode:String="both", rotationOffset:Number=0){
super();
this.mode = mode;
if (isNaN(rotationOffset)){
rotationOffset = 0;
};
this.rotationOffset = rotationOffset;
}
override public function draw():void{
super.draw();
graphics.clear();
if (numChildren){
return;
};
var _local2 = graphics;
with (_local2) {
beginFill(this.fillColor, this.fillAlpha);
lineStyle(this.lineThickness, this.lineColor, this.lineAlpha);
moveTo(4.5, -0.5);
lineTo(4.5, -2.5);
lineTo(8.5, 0.5);
lineTo(4.5, 3.5);
lineTo(4.5, 1.5);
lineTo(-0.5, 1.5);
lineTo(-3.5, 1.5);
lineTo(-3.5, 3.5);
lineTo(-7.5, 0.5);
lineTo(-3.5, -2.5);
lineTo(-3.5, -0.5);
lineTo(4.5, -0.5);
endFill();
};
}
public function set rotationOffset(value:Number):void{
_rotationOffset = value;
}
public function set mode(value:String):void{
_mode = value;
}
public function get rotationOffset():Number{
return (_rotationOffset);
}
public function get mode():String{
return (_mode);
}
override public function redraw(event:Event):void{
var tool:TransformTool;
var TO_DEGREES:Number;
var angleX:Number;
var angleY:Number;
super.redraw(event);
tool = this.tool;
if (tool == null){
return;
};
TO_DEGREES = (180 / Math.PI);
angleX = (Math.atan2((tool.topRight.y - tool.topLeft.y), (tool.topRight.x - tool.topLeft.x)) * TO_DEGREES);
angleY = (Math.atan2((tool.bottomLeft.y - tool.topLeft.y), (tool.bottomLeft.x - tool.topLeft.x)) * TO_DEGREES);
switch (mode){
case ControlUVScale.X_AXIS:
rotation = (rotationOffset + angleX);
break;
case ControlUVScale.Y_AXIS:
rotation = (rotationOffset + angleY);
break;
case ControlUVScale.BOTH:
case ControlUVScale.UNIFORM:
default:
rotation = (rotationOffset + ((angleX + angleY) / 2));
break;
};
}
}
}//package com.senocular.display.transform
Section 66
//RegistrationManager (com.senocular.display.transform.RegistrationManager)
package com.senocular.display.transform {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
public class RegistrationManager {
private var _defaultUV:Point;
private var _defaultXY:Point;
private var _enabled:Boolean;// = true
protected var map:Dictionary;
public function RegistrationManager(){
_enabled = true;
super();
map = new Dictionary(true);
}
public function get enabled():Boolean{
return (_enabled);
}
public function set enabled(value:Boolean):void{
_enabled = value;
if (_enabled == false){
clear();
};
}
public function get defaultXY():Point{
return (_defaultXY);
}
public function set defaultUV(value:Point):void{
_defaultUV = (value) ? value.clone() : null;
}
public function set defaultXY(value:Point):void{
_defaultXY = (value) ? value.clone() : null;
}
public function clear(target:DisplayObject=null):void{
var key:Object;
if (target){
delete map[target];
} else {
for (key in map) {
delete map[target];
};
};
}
public function getRegistration(target:DisplayObject):Point{
var result:Point;
var bounds:Rectangle;
if (target == null){
return (null);
};
result = (map[target] as Point);
if (result){
return (result);
};
if (_defaultUV){
bounds = target.getBounds(target);
return (new Point((bounds.x + (bounds.width * _defaultUV.x)), (bounds.y + (bounds.height * _defaultUV.y))));
};
if (_defaultXY){
return (_defaultXY.clone());
};
return (null);
}
public function get defaultUV():Point{
return (_defaultUV);
}
public function setRegistration(target:DisplayObject, point:Point):void{
if (((((_enabled) && (target))) && (point))){
map[target] = point.clone();
};
}
public function contains(target:DisplayObject):Boolean{
return ((target in map));
}
}
}//package com.senocular.display.transform
Section 67
//TransformTool (com.senocular.display.transform.TransformTool)
package com.senocular.display.transform {
import flash.display.*;
import flash.geom.*;
import flash.events.*;
import flash.ui.*;
public class TransformTool extends Sprite {
private var _cursorHidesMouse:Boolean;// = false
private var _maxWidth:Number;
private var _maxHeight:Number;
private var _minRotation:Number;
private var _isActive:Boolean;// = false
private var _cursor:DisplayObject;
private var _minHeight:Number;
private var _target:DisplayObject;
public var bottomRight:Point;
public var registration:Point;
protected var _postTransform:Matrix;
public var bottomLeft:Point;
public var topLeft:Point;
protected var _targetEventMouse:Point;
protected var _cursorEvent:Event;
private var _transformMethod:String;// = "matrix"
private var _maxRotation:Number;
private var _localRegistration:Point;
private var _maxScaleX:Number;
private var _negativeScaling:Boolean;// = true
private var _maxScaleY:Number;
private var _livePreview:Boolean;// = true
protected var _calculatedMatrix:Matrix;
protected var _baseMatrix:Matrix;
private var _minScaleX:Number;
private var _minScaleY:Number;
public var topRight:Point;
protected var _targetEvent:Event;
protected var _preTransform:Matrix;
private var _minWidth:Number;
private var _registrationManager:RegistrationManager;
private var _autoRaise:Boolean;// = false
public static const TRANSFORM_CHANGED:String = "transformChanged";
public static const TARGET_CHANGED:String = "targetChanged";
public static const CURSOR_CHANGED:String = "cursorChanged";
public static const TRANSFORM_PROPERTIES:String = "properties";
public static const TRANSFORM_MATRIX:String = "matrix";
public static const REDRAW:String = "redraw";
public static const RESTRICT:String = "restrict";
public static const TARGET_TRANSFORMED:String = "targetTransformed";
public static const COMMIT:String = "commit";
public function TransformTool(controls:Array=null, registrationManager:RegistrationManager=null){
_cursorHidesMouse = false;
_localRegistration = new Point(0, 0);
_negativeScaling = true;
registration = new Point();
topLeft = new Point();
topRight = new Point();
bottomLeft = new Point();
bottomRight = new Point();
_baseMatrix = new Matrix();
_preTransform = new Matrix();
_postTransform = new Matrix();
_calculatedMatrix = new Matrix();
_transformMethod = TRANSFORM_MATRIX;
_livePreview = true;
_autoRaise = false;
_isActive = false;
super();
visible = false;
if (controls != null){
this.controls = controls;
};
if (registrationManager != null){
this.registrationManager = registrationManager;
} else {
this.registrationManager = new RegistrationManager();
};
}
public function setRotation(value:Number, matrix:Matrix=null):void{
var tx:Number;
var ty:Number;
var angle:Number;
if (isNaN(value)){
return;
};
if (matrix == null){
matrix = _calculatedMatrix;
};
tx = matrix.tx;
ty = matrix.ty;
angle = Math.atan2(matrix.b, matrix.a);
matrix.rotate((value - angle));
matrix.tx = tx;
matrix.ty = ty;
}
public function set maxRotation(value:Number):void{
_maxRotation = value;
}
public function raise():void{
var container:DisplayObjectContainer;
if (_target){
container = _target.parent;
if (container){
container.setChildIndex(_target, (container.numChildren - 1));
};
};
container = this.parent;
if (container){
container.setChildIndex(this, (container.numChildren - 1));
};
}
public function get preTransform():Matrix{
return (_preTransform);
}
public function getWidth():Number{
var bounds:Rectangle;
if (_target == null){
return (0);
};
bounds = _target.getBounds(_target);
return ((bounds.width * getScaleX(_calculatedMatrix)));
}
public function get minHeight():Number{
return (_minHeight);
}
public function getHeight():Number{
var bounds:Rectangle;
if (_target == null){
return (0);
};
bounds = _target.getBounds(_target);
return ((bounds.height * getScaleY(_calculatedMatrix)));
}
protected function resetTransformModifiers(resetBase:Boolean=true):void{
var baseRotation:Number;
_preTransform.identity();
_postTransform.identity();
if (resetBase){
_baseMatrix.identity();
if (validateTargetMatrix()){
_baseMatrix.concat(_target.transform.matrix);
if (((!(_negativeScaling)) && (!(isPositiveScale(_baseMatrix))))){
baseRotation = Math.atan2((_baseMatrix.a + _baseMatrix.c), (_baseMatrix.d + _baseMatrix.b));
if ((((baseRotation < -(((3 * Math.PI) / 4)))) || ((baseRotation > (Math.PI / 4))))){
_calculatedMatrix.c = -(_calculatedMatrix.c);
_calculatedMatrix.d = -(_calculatedMatrix.d);
} else {
_calculatedMatrix.a = -(_calculatedMatrix.a);
_calculatedMatrix.b = -(_calculatedMatrix.b);
};
};
};
};
}
public function setHeight(value:Number):void{
var bounds:Rectangle;
var ratio:Number;
if ((((_target == null)) || (isNaN(value)))){
return;
};
bounds = _target.getBounds(_target);
ratio = (Math.abs(value) / bounds.height);
ratio = (ratio / getScaleY(_calculatedMatrix));
calculatedMatrix.c = (calculatedMatrix.c * ratio);
calculatedMatrix.d = (calculatedMatrix.d * ratio);
}
public function set minHeight(value:Number):void{
_minHeight = value;
}
protected function setupCursor():void{
if (_cursorHidesMouse){
if (_cursor == null){
Mouse.show();
} else {
Mouse.hide();
};
};
dispatchEvent(new Event(CURSOR_CHANGED));
}
public function setCursor(value:DisplayObject, cursorEvent:Event=null):void{
_cursorEvent = (value) ? cursorEvent : null;
if (value == _cursor){
return;
};
cleanupCursor();
_cursor = value;
setupCursor();
}
public function restrictRotation():void{
var min:Number;
var max:Number;
var angle:Number;
if (((!(isNaN(_minRotation))) && (!(isNaN(_maxRotation))))){
min = (_minRotation * (Math.PI / 180));
max = (_maxRotation * (Math.PI / 180));
angle = Math.atan2(_calculatedMatrix.b, _calculatedMatrix.a);
if (min == max){
if (angle != min){
setRotation(min);
};
} else {
if (min < max){
if (angle < min){
setRotation(min);
} else {
if (angle > max){
setRotation(max);
};
};
} else {
if ((((angle < min)) && ((angle > max)))){
if (Math.abs((angle - min)) > Math.abs((angle - max))){
setRotation(max);
} else {
setRotation(min);
};
};
};
};
};
}
protected function setupTarget():void{
retrieveRegistration();
if (_target){
visible = true;
if (_autoRaise){
raise();
};
fitToTarget();
} else {
visible = false;
};
dispatchEvent(new Event(TARGET_CHANGED));
}
public function set livePreview(value:Boolean):void{
_livePreview = value;
}
public function set minScaleX(value:Number):void{
_minScaleX = value;
}
public function set minScaleY(value:Number):void{
_minScaleY = value;
}
public function setWidth(value:Number):void{
var bounds:Rectangle;
var ratio:Number;
if ((((_target == null)) || (isNaN(value)))){
return;
};
bounds = _target.getBounds(_target);
ratio = (Math.abs(value) / bounds.width);
ratio = (ratio / getScaleX(_calculatedMatrix));
calculatedMatrix.a = (calculatedMatrix.a * ratio);
calculatedMatrix.b = (calculatedMatrix.b * ratio);
}
public function setTarget(value:DisplayObject, targetEvent:Event=null):void{
var targetMouseEvent:MouseEvent;
_targetEvent = (value) ? targetEvent : null;
targetMouseEvent = (_targetEvent as MouseEvent);
if (targetMouseEvent){
_targetEventMouse = new Point(targetMouseEvent.stageX, targetMouseEvent.stageY);
} else {
_targetEventMouse = null;
};
if (value == _target){
return;
};
cleanupTarget();
_target = value;
setupTarget();
}
public function get minWidth():Number{
return (_minWidth);
}
public function updateControls():void{
dispatchEvent(new Event(REDRAW));
}
public function get targetEventMouse():Point{
return (_targetEventMouse);
}
public function set cursor(value:DisplayObject):void{
setCursor(value, null);
}
public function get postTransform():Matrix{
return (_postTransform);
}
public function calculateTransform(reset:Boolean=true, enforceNegativeScaling:Boolean=true):void{
var originalMatrix:Matrix;
var tx:Number;
var ty:Number;
originalMatrix = _calculatedMatrix.clone();
_calculatedMatrix.identity();
_calculatedMatrix.concat(_preTransform);
_calculatedMatrix.concat(_baseMatrix);
tx = (_calculatedMatrix.tx + _postTransform.tx);
ty = (_calculatedMatrix.ty + _postTransform.ty);
_calculatedMatrix.concat(_postTransform);
_calculatedMatrix.tx = tx;
_calculatedMatrix.ty = ty;
restrict(enforceNegativeScaling);
applyRegistrationOffset();
if (reset){
resetTransformModifiers(false);
};
if (!matrixEquals(originalMatrix, _calculatedMatrix)){
dispatchEvent(new Event(TRANSFORM_CHANGED));
};
}
protected function applyRegistrationOffset():void{
var reg:Point;
var regOffset:Point;
retrieveRegistration();
if (((!((_localRegistration.x == 0))) || (!((_localRegistration.y == 0))))){
reg = _baseMatrix.deltaTransformPoint(_localRegistration);
regOffset = _calculatedMatrix.deltaTransformPoint(_localRegistration);
regOffset = reg.subtract(regOffset);
_calculatedMatrix.translate(regOffset.x, regOffset.y);
};
}
public function get registrationManager():RegistrationManager{
return (_registrationManager);
}
public function get controls():Array{
var value:Array;
var i:int;
value = [];
i = numChildren;
while (i--) {
value[i] = getChildAt(i);
};
return (value);
}
public function get maxWidth():Number{
return (_maxWidth);
}
protected function restrict(enforceNegativeScaling:Boolean=true):void{
var restrictEvent:Event;
restrictEvent = new Event(RESTRICT, false, true);
dispatchEvent(restrictEvent);
if (restrictEvent.isDefaultPrevented()){
return;
};
restrictScale(enforceNegativeScaling);
restrictRotation();
}
public function deselect(event:Event):void{
if (((!((_target == null))) && ((event.eventPhase == EventPhase.AT_TARGET)))){
setTarget(null, null);
};
}
public function update(commit:Boolean=true):void{
updateMetrics();
if (commit){
commitTarget();
} else {
updateTarget();
};
updateControls();
}
public function get isActive():Boolean{
return (_isActive);
}
public function get maxScaleX():Number{
return (_maxScaleX);
}
public function get maxScaleY():Number{
return (_maxScaleY);
}
public function saveRegistration():void{
_registrationManager.setRegistration(_target, _localRegistration);
}
public function set transformMethod(value:String):void{
_transformMethod = value;
}
public function resetTransform():void{
resetTransformModifiers(false);
normalizeBase();
_postTransform.identity();
_postTransform.concat(_baseMatrix);
_postTransform.invert();
_postTransform.tx = 0;
_postTransform.ty = 0;
calculateTransform(true, false);
}
public function matrixEquals(m1:Matrix, m2:Matrix=null):Boolean{
if (m2 == null){
m2 = _calculatedMatrix;
};
if (((((((((((!((m1.a == m2.a))) || (!((m1.d == m2.d))))) || (!((m1.b == m2.b))))) || (!((m1.c == m2.c))))) || (!((m1.tx == m2.tx))))) || (!((m1.ty == m2.ty))))){
return (false);
};
return (true);
}
protected function validateTargetMatrix():Boolean{
if (_target == null){
return (false);
};
if (_target.transform.matrix == null){
_target.transform.matrix = new Matrix(1, 0, 0, 1, _target.x, _target.y);
};
return (true);
}
public function get cursorEvent():Event{
return (_cursorEvent);
}
public function set autoRaise(value:Boolean):void{
_autoRaise = value;
}
public function get maxRotation():Number{
return (_maxRotation);
}
protected function retrieveRegistration():void{
var saved:Point;
saved = _registrationManager.getRegistration(_target);
if (saved != null){
_localRegistration.x = saved.x;
_localRegistration.y = saved.y;
} else {
_localRegistration.x = 0;
_localRegistration.y = 0;
};
}
protected function cleanupCursor():void{
}
public function select(event:Event):void{
if (((!((event.currentTarget == this))) && ((event.currentTarget.parent == parent)))){
setTarget((event.currentTarget as DisplayObject), event);
} else {
if (((!((event.target == this))) && ((event.target.parent == parent)))){
setTarget((event.target as DisplayObject), event);
};
};
}
public function set target(value:DisplayObject):void{
setTarget(value, null);
}
public function get calculatedMatrix():Matrix{
return (_calculatedMatrix);
}
public function set negativeScaling(value:Boolean):void{
_negativeScaling = value;
}
public function fitToTarget():void{
if (_target == null){
return;
};
resetTransformModifiers();
calculateTransform(false);
update();
}
public function getRotation():Number{
return (getRotationX(null));
}
public function set minWidth(value:Number):void{
_minWidth = value;
}
public function get livePreview():Boolean{
return (_livePreview);
}
public function get minScaleY():Number{
return (_minScaleY);
}
public function getScaleX(matrix:Matrix=null):Number{
if (matrix == null){
matrix = _calculatedMatrix;
};
return (Math.sqrt(((_calculatedMatrix.a * _calculatedMatrix.a) + (_calculatedMatrix.b * _calculatedMatrix.b))));
}
public function get minScaleX():Number{
return (_minScaleX);
}
public function getScaleY(matrix:Matrix=null):Number{
if (matrix == null){
matrix = _calculatedMatrix;
};
return (Math.sqrt(((_calculatedMatrix.c * _calculatedMatrix.c) + (_calculatedMatrix.d * _calculatedMatrix.d))));
}
public function setScaleX(value:Number, matrix:Matrix=null):void{
var angle:Number;
if (isNaN(value)){
return;
};
if (matrix == null){
matrix = _calculatedMatrix;
};
angle = Math.atan2(matrix.b, matrix.a);
matrix.a = (value * Math.cos(angle));
matrix.b = (value * Math.sin(angle));
}
public function set cursorHidesMouse(value:Boolean):void{
_cursorHidesMouse = value;
}
protected function cleanupTarget():void{
if (_target){
saveRegistration();
};
}
public function get cursor():DisplayObject{
return (_cursor);
}
public function setScaleY(value:Number, matrix:Matrix=null):void{
var angle:Number;
if (isNaN(value)){
return;
};
if (matrix == null){
matrix = _calculatedMatrix;
};
angle = Math.atan2(matrix.c, matrix.d);
matrix.c = (value * Math.sin(angle));
matrix.d = (value * Math.cos(angle));
}
public function set maxHeight(value:Number):void{
_maxHeight = value;
}
public function get transformMethod():String{
return (_transformMethod);
}
public function set registrationManager(value:RegistrationManager):void{
if (value){
if (value != _registrationManager){
_registrationManager = value;
retrieveRegistration();
};
} else {
throw (new ArgumentError("Parameter registrationManager cannot be null"));
};
}
public function set controls(value:Array):void{
var child:DisplayObject;
var childrenOffset:int;
var i:int;
var n:int;
var end:int;
childrenOffset = 0;
n = (value) ? value.length : 0;
i = 0;
while (i < n) {
child = (value[i] as DisplayObject);
if (child){
if (child.parent == this){
setChildIndex(child, (i - childrenOffset));
} else {
addChildAt(child, (i - childrenOffset));
};
} else {
childrenOffset++;
};
i++;
};
end = (n - childrenOffset);
while (numChildren > end) {
removeChildAt(end);
};
}
public function set maxWidth(value:Number):void{
_maxWidth = value;
}
public function get targetEvent():Event{
return (_targetEvent);
}
public function get target():DisplayObject{
return (_target);
}
public function get negativeScaling():Boolean{
return (_negativeScaling);
}
public function get autoRaise():Boolean{
return (_autoRaise);
}
public function normalizeBase(amount:Number=1):Boolean{
var changed:Boolean;
var bounds:Rectangle;
if (_target == null){
return (false);
};
changed = false;
bounds = _target.getBounds(_target);
if (((!((bounds.width == 0))) && (!((bounds.height == 0))))){
if ((((_baseMatrix.a == 0)) && ((_baseMatrix.b == 0)))){
_baseMatrix.a = (amount / bounds.width);
changed = true;
};
if ((((_baseMatrix.d == 0)) && ((_baseMatrix.c == 0)))){
_baseMatrix.d = (amount / bounds.height);
changed = true;
};
};
return (changed);
}
public function set isActive(value:Boolean):void{
_isActive = value;
}
public function set maxScaleX(value:Number):void{
_maxScaleX = value;
}
public function set maxScaleY(value:Number):void{
_maxScaleY = value;
}
public function resetRegistration():void{
_localRegistration.x = 0;
_localRegistration.y = 0;
saveRegistration();
registration = _calculatedMatrix.transformPoint(_localRegistration);
}
public function get cursorHidesMouse():Boolean{
return (_cursorHidesMouse);
}
public function commitTarget():void{
var transformed:Boolean;
if (!_isActive){
transformed = applyTransformToTarget();
resetTransformModifiers();
if (transformed){
dispatchEvent(new Event(TARGET_TRANSFORMED));
};
dispatchEvent(new Event(COMMIT));
};
}
protected function applyTransformToTarget():Boolean{
var bounds:Rectangle;
var ratioX:Number;
var ratioY:Number;
var angle:Number;
if (((!(validateTargetMatrix())) || (matrixEquals(_target.transform.matrix, _calculatedMatrix)))){
return (false);
};
switch (_transformMethod){
case TRANSFORM_MATRIX:
_target.transform.matrix = _calculatedMatrix;
break;
case TRANSFORM_PROPERTIES:
bounds = _target.getBounds(_target);
if ((((bounds.width == 0)) || ((bounds.height == 0)))){
return (false);
};
_target.rotation = 0;
ratioX = Math.sqrt(((_calculatedMatrix.a * _calculatedMatrix.a) + (_calculatedMatrix.b * _calculatedMatrix.b)));
ratioY = Math.sqrt(((_calculatedMatrix.c * _calculatedMatrix.c) + (_calculatedMatrix.d * _calculatedMatrix.d)));
angle = Math.atan2(_calculatedMatrix.b, _calculatedMatrix.a);
_target.width = (bounds.width * ratioX);
_target.height = (bounds.height * ratioY);
_target.rotation = (angle * (180 / Math.PI));
_target.x = _calculatedMatrix.tx;
_target.y = _calculatedMatrix.ty;
break;
default:
return (false);
};
return (true);
}
public function get maxHeight():Number{
return (_maxHeight);
}
public function updateTarget():void{
if (_livePreview){
if (applyTransformToTarget()){
dispatchEvent(new Event(TARGET_TRANSFORMED));
};
};
}
public function updateMetrics():void{
var bounds:Rectangle;
var referencePoint:Point;
bounds = _target.getBounds(_target);
retrieveRegistration();
registration = _calculatedMatrix.transformPoint(_localRegistration);
referencePoint = new Point(bounds.left, bounds.top);
topLeft = _calculatedMatrix.transformPoint(referencePoint);
referencePoint.x = bounds.right;
topRight = _calculatedMatrix.transformPoint(referencePoint);
referencePoint.y = bounds.bottom;
bottomRight = _calculatedMatrix.transformPoint(referencePoint);
referencePoint.x = bounds.left;
bottomLeft = _calculatedMatrix.transformPoint(referencePoint);
}
public function isPositiveScale(matrix:Matrix=null):Boolean{
if (matrix == null){
matrix = _calculatedMatrix;
};
return (Boolean((((matrix.a * matrix.d) - (matrix.c * matrix.b)) > 0)));
}
public function get localRegistration():Point{
return (_localRegistration);
}
public function set minRotation(value:Number):void{
_minRotation = value;
}
public function getRotationX(matrix:Matrix=null):Number{
if (matrix == null){
matrix = _calculatedMatrix;
};
return (Math.atan2(matrix.b, matrix.a));
}
public function getRotationY(matrix:Matrix=null):Number{
if (matrix == null){
matrix = _calculatedMatrix;
};
return (Math.atan2(matrix.c, matrix.d));
}
public function restrictScale(enforceNegativeScaling:Boolean=true):void{
var bounds:Rectangle;
var minX:Number;
var maxX:Number;
var minY:Number;
var maxY:Number;
var currScaleX:Number;
var currScaleY:Number;
var scale:Number;
var angle:Number;
var currAngleX:Number;
var baseAngleX:Number;
var currAngleY:Number;
var baseAngleY:Number;
var baseX:Number;
var toolX:Number;
bounds = _target.getBounds(_target);
if ((((bounds.width == 0)) || ((bounds.height == 0)))){
return;
};
if (isNaN(_minWidth)){
minX = _minScaleX;
} else {
if (isNaN(_minScaleX)){
minX = (_minWidth / bounds.width);
} else {
minX = Math.max(_minScaleX, (_minWidth / bounds.width));
};
};
if (isNaN(_maxWidth)){
maxX = _maxScaleX;
} else {
if (isNaN(_maxScaleX)){
maxX = (_maxWidth / bounds.width);
} else {
maxX = Math.min(_maxScaleX, (_maxWidth / bounds.width));
};
};
if (isNaN(_minHeight)){
minY = _minScaleY;
} else {
if (isNaN(_minScaleY)){
minY = (_minHeight / bounds.height);
} else {
minY = Math.max(_minScaleY, (_minHeight / bounds.height));
};
};
if (isNaN(_maxHeight)){
maxY = _maxScaleY;
} else {
if (isNaN(_maxScaleY)){
maxY = (_maxHeight / bounds.height);
} else {
maxY = Math.min(_maxScaleY, (_maxHeight / bounds.height));
};
};
if (minX < 0){
minX = -(minX);
};
if (maxX < 0){
maxX = -(maxX);
};
if (minY < 0){
minY = -(minY);
};
if (maxY < 0){
maxY = -(maxY);
};
currScaleX = Math.sqrt(((_calculatedMatrix.a * _calculatedMatrix.a) + (_calculatedMatrix.b * _calculatedMatrix.b)));
currScaleY = Math.sqrt(((_calculatedMatrix.c * _calculatedMatrix.c) + (_calculatedMatrix.d * _calculatedMatrix.d)));
if (((enforceNegativeScaling) && (!(_negativeScaling)))){
currAngleX = Math.atan2(_calculatedMatrix.b, _calculatedMatrix.a);
baseAngleX = Math.atan2(_baseMatrix.b, _baseMatrix.a);
if (((!((currScaleX == 0))) && ((Math.abs((baseAngleX - currAngleX)) > (Math.PI / 2))))){
currScaleX = -(currScaleX);
};
currAngleY = Math.atan2(_calculatedMatrix.c, _calculatedMatrix.d);
baseAngleY = Math.atan2(_baseMatrix.c, _baseMatrix.d);
if (((!((currScaleY == 0))) && ((Math.abs((baseAngleY - currAngleY)) > (Math.PI / 2))))){
currScaleY = -(currScaleY);
};
};
if (((!(isNaN(minX))) && ((currScaleX < minX)))){
scale = minX;
} else {
if (((!(isNaN(maxX))) && ((currScaleX > maxX)))){
scale = maxX;
} else {
scale = Number.NaN;
};
};
if (!isNaN(scale)){
if (currScaleX){
scale = (scale / currScaleX);
_calculatedMatrix.a = (_calculatedMatrix.a * scale);
_calculatedMatrix.b = (_calculatedMatrix.b * scale);
} else {
angle = Math.atan2(_baseMatrix.b, _baseMatrix.a);
_calculatedMatrix.a = (scale * Math.cos(angle));
_calculatedMatrix.b = (scale * Math.sin(angle));
};
};
if (((!(isNaN(minY))) && ((currScaleY < minY)))){
scale = minY;
} else {
if (((!(isNaN(maxY))) && ((currScaleY > maxY)))){
scale = maxY;
} else {
scale = Number.NaN;
};
};
if (!isNaN(scale)){
if (currScaleY){
scale = (scale / currScaleY);
_calculatedMatrix.c = (_calculatedMatrix.c * scale);
_calculatedMatrix.d = (_calculatedMatrix.d * scale);
} else {
angle = Math.atan2(_baseMatrix.c, _baseMatrix.d);
_calculatedMatrix.c = (scale * Math.sin(angle));
_calculatedMatrix.d = (scale * Math.cos(angle));
};
};
if (((((enforceNegativeScaling) && (!(_negativeScaling)))) && (!(isPositiveScale(_calculatedMatrix))))){
baseX = (_baseMatrix.a + _baseMatrix.c);
toolX = (_calculatedMatrix.a + _calculatedMatrix.c);
if ((((((toolX < 0)) && ((baseX >= 0)))) || ((((toolX >= 0)) && ((baseX < 0)))))){
_calculatedMatrix.a = -(_calculatedMatrix.a);
_calculatedMatrix.b = -(_calculatedMatrix.b);
} else {
_calculatedMatrix.c = -(_calculatedMatrix.c);
_calculatedMatrix.d = -(_calculatedMatrix.d);
};
};
}
public function get minRotation():Number{
return (_minRotation);
}
public function get baseMatrix():Matrix{
return (_baseMatrix);
}
}
}//package com.senocular.display.transform
Section 68
//Back (fl.transitions.easing.Back)
package fl.transitions.easing {
public class Back {
public function Back(){
super();
}
public static function easeOut(t:Number, b:Number, c:Number, d:Number, s:Number=0):Number{
if (!s){
s = 1.70158;
};
t = ((t / d) - 1);
return (((c * (((t * t) * (((s + 1) * t) + s)) + 1)) + b));
}
public static function easeIn(t:Number, b:Number, c:Number, d:Number, s:Number=0):Number{
if (!s){
s = 1.70158;
};
t = (t / d);
return (((((c * t) * t) * (((s + 1) * t) - s)) + b));
}
public static function easeInOut(t:Number, b:Number, c:Number, d:Number, s:Number=0):Number{
if (!s){
s = 1.70158;
};
t = (t / (d / 2));
if (t < 1){
s = (s * 1.525);
return ((((c / 2) * ((t * t) * (((s + 1) * t) - s))) + b));
};
t = (t - 2);
s = (s * 1.525);
return ((((c / 2) * (((t * t) * (((s + 1) * t) + s)) + 2)) + b));
}
}
}//package fl.transitions.easing
Section 69
//None (fl.transitions.easing.None)
package fl.transitions.easing {
public class None {
public function None(){
super();
}
public static function easeOut(t:Number, b:Number, c:Number, d:Number):Number{
return ((((c * t) / d) + b));
}
public static function easeIn(t:Number, b:Number, c:Number, d:Number):Number{
return ((((c * t) / d) + b));
}
public static function easeInOut(t:Number, b:Number, c:Number, d:Number):Number{
return ((((c * t) / d) + b));
}
public static function easeNone(t:Number, b:Number, c:Number, d:Number):Number{
return ((((c * t) / d) + b));
}
}
}//package fl.transitions.easing
Section 70
//Tween (fl.transitions.Tween)
package fl.transitions {
import flash.display.*;
import flash.utils.*;
import flash.events.*;
public class Tween extends EventDispatcher {
private var _position:Number;// = NAN
public var prevTime:Number;// = NAN
public var prevPos:Number;// = NAN
public var isPlaying:Boolean;// = false
public var begin:Number;// = NAN
private var _fps:Number;// = NAN
private var _time:Number;// = NAN
public var change:Number;// = NAN
private var _finish:Number;// = NAN
public var looping:Boolean;// = false
private var _intervalID:uint;// = 0
public var func:Function;
private var _timer:Timer;// = null
private var _startTime:Number;// = NAN
public var prop:String;// = ""
private var _duration:Number;// = NAN
public var obj:Object;// = null
public var useSeconds:Boolean;// = false
protected static var _mc:MovieClip = new MovieClip();
public function Tween(obj:Object, prop:String, func:Function, begin:Number, finish:Number, duration:Number, useSeconds:Boolean=false){
isPlaying = false;
obj = null;
prop = "";
func = function (t:Number, b:Number, c:Number, d:Number):Number{
return ((((c * t) / d) + b));
};
begin = NaN;
change = NaN;
useSeconds = false;
prevTime = NaN;
prevPos = NaN;
looping = false;
_duration = NaN;
_time = NaN;
_fps = NaN;
_position = NaN;
_startTime = NaN;
_intervalID = 0;
_finish = NaN;
_timer = null;
super();
if (!arguments.length){
return;
};
this.obj = obj;
this.prop = prop;
this.begin = begin;
this.position = begin;
this.duration = duration;
this.useSeconds = useSeconds;
if ((func is Function)){
this.func = func;
};
this.finish = finish;
this._timer = new Timer(100);
this.start();
}
public function continueTo(finish:Number, duration:Number):void{
this.begin = this.position;
this.finish = finish;
if (!isNaN(duration)){
this.duration = duration;
};
this.start();
}
public function stop():void{
this.stopEnterFrame();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_STOP, this._time, this._position));
}
private function fixTime():void{
if (this.useSeconds){
this._startTime = (getTimer() - (this._time * 1000));
};
}
public function set FPS(fps:Number):void{
var oldIsPlaying:Boolean;
oldIsPlaying = this.isPlaying;
this.stopEnterFrame();
this._fps = fps;
if (oldIsPlaying){
this.startEnterFrame();
};
}
public function get finish():Number{
return ((this.begin + this.change));
}
public function get duration():Number{
return (this._duration);
}
protected function startEnterFrame():void{
var milliseconds:Number;
if (isNaN(this._fps)){
_mc.addEventListener(Event.ENTER_FRAME, this.onEnterFrame, false, 0, true);
} else {
milliseconds = (1000 / this._fps);
this._timer.delay = milliseconds;
this._timer.addEventListener(TimerEvent.TIMER, this.timerHandler, false, 0, true);
this._timer.start();
};
this.isPlaying = true;
}
public function set time(t:Number):void{
this.prevTime = this._time;
if (t > this.duration){
if (this.looping){
this.rewind((t - this._duration));
this.update();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_LOOP, this._time, this._position));
} else {
if (this.useSeconds){
this._time = this._duration;
this.update();
};
this.stop();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_FINISH, this._time, this._position));
};
} else {
if (t < 0){
this.rewind();
this.update();
} else {
this._time = t;
this.update();
};
};
}
protected function stopEnterFrame():void{
if (isNaN(this._fps)){
_mc.removeEventListener(Event.ENTER_FRAME, this.onEnterFrame);
} else {
this._timer.stop();
};
this.isPlaying = false;
}
public function getPosition(t:Number=NaN):Number{
if (isNaN(t)){
t = this._time;
};
return (this.func(t, this.begin, this.change, this._duration));
}
public function set finish(value:Number):void{
this.change = (value - this.begin);
}
public function set duration(d:Number):void{
this._duration = ((d)<=0) ? Infinity : d;
}
public function setPosition(p:Number):void{
this.prevPos = this._position;
if (this.prop.length){
this.obj[this.prop] = (this._position = p);
};
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_CHANGE, this._time, this._position));
}
public function resume():void{
this.fixTime();
this.startEnterFrame();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_RESUME, this._time, this._position));
}
public function fforward():void{
this.time = this._duration;
this.fixTime();
}
protected function onEnterFrame(event:Event):void{
this.nextFrame();
}
public function get position():Number{
return (this.getPosition(this._time));
}
public function yoyo():void{
this.continueTo(this.begin, this.time);
}
public function nextFrame():void{
if (this.useSeconds){
this.time = ((getTimer() - this._startTime) / 1000);
} else {
this.time = (this._time + 1);
};
}
protected function timerHandler(timerEvent:TimerEvent):void{
this.nextFrame();
timerEvent.updateAfterEvent();
}
public function get FPS():Number{
return (this._fps);
}
public function rewind(t:Number=0):void{
this._time = t;
this.fixTime();
this.update();
}
public function set position(p:Number):void{
this.setPosition(p);
}
public function get time():Number{
return (this._time);
}
private function update():void{
this.setPosition(this.getPosition(this._time));
}
public function start():void{
this.rewind();
this.startEnterFrame();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_START, this._time, this._position));
}
public function prevFrame():void{
if (!this.useSeconds){
this.time = (this._time - 1);
};
}
}
}//package fl.transitions
Section 71
//TweenEvent (fl.transitions.TweenEvent)
package fl.transitions {
import flash.events.*;
public class TweenEvent extends Event {
public var time:Number;// = NAN
public var position:Number;// = NAN
public static const MOTION_START:String = "motionStart";
public static const MOTION_STOP:String = "motionStop";
public static const MOTION_LOOP:String = "motionLoop";
public static const MOTION_CHANGE:String = "motionChange";
public static const MOTION_FINISH:String = "motionFinish";
public static const MOTION_RESUME:String = "motionResume";
public function TweenEvent(type:String, time:Number, position:Number, bubbles:Boolean=false, cancelable:Boolean=false){
time = NaN;
position = NaN;
super(type, bubbles, cancelable);
this.time = time;
this.position = position;
}
override public function clone():Event{
return (new TweenEvent(this.type, this.time, this.position, this.bubbles, this.cancelable));
}
}
}//package fl.transitions
Section 72
//FoldedCardPrintSetup (FoldedCardPrintSetup)
package {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.events.*;
import flash.text.*;
import flash.media.*;
import flash.net.*;
import flash.printing.*;
import flash.ui.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.system.*;
import flash.xml.*;
public dynamic class FoldedCardPrintSetup extends MovieClip {
public var printBtn:MovieClip;
public var cancelBtn:MovieClip;
public function FoldedCardPrintSetup(){
super();
addFrameScript(0, frame1);
}
function frame1(){
addEventListener(MouseEvent.CLICK, onClick);
}
public function onClick(e:MouseEvent):void{
switch (e.target){
case printBtn:
dispatchEvent(new Event("printFolded", true));
case cancelBtn:
(parent.parent as MovieClip).vanish();
break;
default:
break;
};
}
}
}//package
Section 73
//FullPagePrintSetup (FullPagePrintSetup)
package {
import flash.display.*;
import flash.utils.*;
import flash.geom.*;
import flash.events.*;
import flash.text.*;
import flash.media.*;
import flash.net.*;
import flash.printing.*;
import flash.ui.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.system.*;
import flash.xml.*;
public dynamic class FullPagePrintSetup extends MovieClip {
public var printBtn:MovieClip;
public var cancelBtn:MovieClip;
public function FullPagePrintSetup(){
super();
addFrameScript(0, frame1);
}
function frame1(){
addEventListener(MouseEvent.CLICK, onClick);
}
public function onClick(e:MouseEvent):void{
switch (e.target){
case printBtn:
dispatchEvent(new Event("printFull", true));
case cancelBtn:
(parent.parent as MovieClip).vanish();
break;
default:
break;
};
}
}
}//package
Section 74
//MessageCarousel (MessageCarousel)
package {
import com.kid360.ui.*;
public dynamic class MessageCarousel extends Carousel {
public function MessageCarousel(){
super();
}
}
}//package
Section 75
//PrintPreviewer (PrintPreviewer)
package {
import flash.display.*;
public dynamic class PrintPreviewer extends MovieClip {
public var startOverBtn:SimpleButton;
public var printConfirm:SimpleButton;
public var printCancel:SimpleButton;
public function PrintPreviewer(){
super();
}
}
}//package
Section 76
//SplashScreenSplashScreen (SplashScreenSplashScreen)
package {
import flash.display.*;
import flash.utils.*;
import flash.events.*;
public dynamic class SplashScreenSplashScreen extends MovieClip {
public var bar:MovieClip;
public var t:Timer;
public function SplashScreenSplashScreen(){
super();
addFrameScript(0, frame1);
}
function frame1(){
t = new Timer(100);
t.addEventListener(TimerEvent.TIMER, onInterval);
}
public function showLoading(total:int, remaining:int):void{
var numLoaded:int;
var fractionLoaded:Number;
var newFrameNum:int;
if (((t) && (!(t.running)))){
t.start();
};
numLoaded = (total - remaining);
fractionLoaded = (numLoaded / total);
trace((100 * fractionLoaded), "percent done");
newFrameNum = Math.round((100 * fractionLoaded));
if (newFrameNum > bar.currentFrame){
bar.gotoAndStop(newFrameNum);
};
}
public function onInterval(e:TimerEvent):void{
trace("barfr", bar.currentFrame);
bar.nextFrame();
}
public function cleanUp():void{
t.stop();
t.removeEventListener(TimerEvent.TIMER, onInterval);
}
}
}//package
Section 77
//WorkspaceBackdrop (WorkspaceBackdrop)
package {
import flash.display.*;
public dynamic class WorkspaceBackdrop extends MovieClip {
public function WorkspaceBackdrop(){
super();
}
}
}//package