pickles/static/contrib/mediaplayer-3.15/source/com/jeroenwijering/players/RotatorView.as

521 lines
No EOL
14 KiB
ActionScript
Executable file

/**
* Rotator user interface View of the MCV cycle.
*
* @author Jeroen Wijering
* @version 1.5
**/
import com.jeroenwijering.players.*;
import com.jeroenwijering.utils.ImageLoader;
import com.jeroenwijering.utils.Animations;
import flash.geom.Transform;
import flash.geom.ColorTransform;
class com.jeroenwijering.players.RotatorView extends AbstractView {
/** full width of the scrubbars **/
private var currentItem:Number;
/** clip that's currently active **/
private var upClip:MovieClip;
/** clip that's currently inactive **/
private var downClip:MovieClip;
/** boolean for whether to use the title display **/
private var useTitle:Boolean;
/** boolean to see if the transition is done **/
private var transitionDone:Boolean = false;
/** boolean to detect first run **/
private var firstRun:Boolean = true;
/** interval for hiding the display **/
private var hideInt:Number;
/** array with all transitions **/
private var allTransitions:Array = new Array(
"bgfade",
"blocks",
"bubbles",
"circles",
"fade",
"flash",
"fluids",
"lines",
"slowfade"
);
/** Constructor **/
function RotatorView(ctr:AbstractController,cfg:Object,fed:Object) {
super(ctr,cfg,fed);
setColorsClicks();
if(config["shownavigation"] == "true") {
Mouse.addListener(this);
}
};
/** Sets up visibility, sizes and colors of all display items **/
private function setColorsClicks() {
var ref = this;
var tgt:MovieClip = config["clip"];
tgt.button._width = config["width"];
tgt.button._height = config["height"];
if(config['overstretch']=='true' || config['overstretch']=='fit') {
tgt.img1.bg._visible = tgt.img2.bg._visible = false;
} else {
tgt.img1.bg._width = tgt.img2.bg._width = config["width"];
tgt.img1.bg._height = tgt.img2.bg._height = config["height"];
tgt.img1.col = new Color(tgt.img1.bg);
tgt.img1.col.setRGB(config["screencolor"]);
tgt.img2.col = new Color(tgt.img2.bg);
tgt.img2.col.setRGB(config["screencolor"]);
}
if(config["linkfromdisplay"] == "true") {
tgt.button.onRelease = function() {
ref.sendEvent("getlink",ref.currentItem);
};
tgt.playicon._visible = false;
} else {
tgt.button.onRelease = function() {
ref.sendEvent("next");
};
}
tgt.img1.swapDepths(1);
tgt.img2.swapDepths(2);
tgt.playicon.swapDepths(4);
tgt.activity.swapDepths(5);
tgt.navigation.swapDepths(6);
tgt.logo.swapDepths(7);
tgt.playicon._x=tgt.activity._x = Math.round(config["width"]/2);
tgt.playicon._y=tgt.activity._y = Math.round(config["height"]/2);
if(config["logo"] != undefined) {
var lll = new ImageLoader(tgt.logo,"none");
lll.onLoadFinished = function() {
ref.config['clip'].logo._x = ref.config["displaywidth"] -
ref.config['clip'].logo._width -10;
ref.config['clip'].logo._y = 10;
};
lll.loadImage(config["logo"]);
tgt.logo.onRelease = function() {
ref.sendEvent("getlink",ref.currentItem);
};
}
tgt = config["clip"].navigation;
if (config["shownavigation"] == "true") {
tgt._y = config["height"] - 40;
tgt._x = config["width"]/2 - 50;
tgt.prevBtn.col1 = new Color(tgt.prevBtn.bck);
tgt.prevBtn.col1.setRGB(config["backcolor"]);
tgt.prevBtn.col2 = new Color(tgt.prevBtn.icn);
tgt.prevBtn.col2.setRGB(config["frontcolor"]);
tgt.itmBtn.col1 = new Color(tgt.itmBtn.bck);
tgt.itmBtn.col1.setRGB(config["backcolor"]);
tgt.itmBtn.txt.textColor = config["frontcolor"];
tgt.nextBtn.col1 = new Color(tgt.nextBtn.bck);
tgt.nextBtn.col1.setRGB(config["backcolor"]);
tgt.nextBtn.col2 = new Color(tgt.nextBtn.icn);
tgt.nextBtn.col2.setRGB(config["frontcolor"]);
tgt.prevBtn.onRollOver = tgt.nextBtn.onRollOver = function() {
this.col2.setRGB(ref.config["lightcolor"]);
};
tgt.prevBtn.onRollOut = tgt.nextBtn.onRollOut = function() {
this.col2.setRGB(ref.config["frontcolor"]);
};
tgt.itmBtn.onRollOver = function() {
this.txt.textColor = ref.config["lightcolor"];
};
tgt.itmBtn.onRollOut = function() {
this.txt.textColor = ref.config["frontcolor"];
};
tgt.prevBtn.onRelease = function() {
ref.sendEvent("prev");
this.col2.setRGB(ref.config["frontcolor"]);
};
tgt.itmBtn.onRelease = function() { ref.sendEvent("playpause"); };
tgt.nextBtn.onRelease = function() {
ref.sendEvent("next");
this.col2.setRGB(ref.config["frontcolor"]);
};
// set sizes, colors and buttons for image title
var len = 0;
for(var i=0; i<feeder.feed.length; i++) {
if(feeder.feed[i]['title'] != undefined &&
feeder.feed[i]['title'].length > len) {
len = feeder.feed[i]['title'].length;
}
}
if(len == 0) {
useTitle = false;
tgt.titleBtn._visible = false;
} else {
useTitle = true;
tgt.titleBtn._x = 74;
tgt.titleBtn.col1 = new Color(tgt.titleBtn.left);
tgt.titleBtn.col1.setRGB(config["backcolor"]);
tgt.titleBtn.col2 = new Color(tgt.titleBtn.mid);
tgt.titleBtn.col2.setRGB(config["backcolor"]);
tgt.titleBtn.col3 = new Color(tgt.titleBtn.right);
tgt.titleBtn.col3.setRGB(config["backcolor"]);
tgt.titleBtn.tf._width = len*6;
tgt.titleBtn.tf.textColor = config["frontcolor"];
if(feeder.feed[0]["link"] != undefined) {
tgt.titleBtn.onRollOver = function() {
this.tf.textColor = ref.config["lightcolor"];
};
tgt.titleBtn.onRollOut = function() {
this.tf.textColor = ref.config["frontcolor"];
};
tgt.titleBtn.onRelease = function() {
ref.sendEvent("getlink",ref.currentItem);
};
};
tgt.titleBtn.mid._width = len*6;
tgt.titleBtn.right._x = len*6+4;
tgt.nextBtn._x = len*6 + 79;
}
if(feeder.audio == true) {
tgt.audioBtn.col1 = new Color(tgt.audioBtn.bck);
tgt.audioBtn.col2 = new Color(tgt.audioBtn.icnOn);
tgt.audioBtn.col3 = new Color(tgt.audioBtn.icnOff);
tgt.audioBtn.col1.setRGB(config["backcolor"]);
tgt.audioBtn.col2.setRGB(config["frontcolor"]);
tgt.audioBtn.col3.setRGB(config["frontcolor"]);
tgt.audioBtn.onRollOver = function() {
this.col2.setRGB(ref.config["lightcolor"]);
this.col3.setRGB(ref.config["lightcolor"]);
};
tgt.audioBtn.onRollOut = function() {
this.col2.setRGB(ref.config["frontcolor"]);
this.col3.setRGB(ref.config["frontcolor"]);
};
tgt.audioBtn.onRelease = function() {
ref.sendEvent("audio");
this.col2.setRGB(ref.config["frontcolor"]);
this.col3.setRGB(ref.config["frontcolor"]);
};
if(config['useaudio'] == "true") {
tgt.audioBtn.icnOff._visible = false;
} else {
tgt.audioBtn.icnOn._visible = false;
}
tgt.audioBtn._x = len*6 + 104;
} else {
tgt.audioBtn._x = 0;
tgt.audioBtn._visible = false;
}
tgt._x = Math.round(config["width"]/2 - tgt._width/2);
} else {
tgt._visible = false;
}
};
/** New item: switch clips and ready transition **/
private function setItem(pr1) {
currentItem = pr1;
transitionDone = false;
var tgt = config["clip"];
tgt.navigation.itmBtn.txt.text = (currentItem+1) + " / " +
feeder.feed.length;
if (useTitle == true) {
tgt.navigation.titleBtn.tf.text=feeder.feed[currentItem]["title"];
}
tgt.img1.swapDepths(tgt.img2);
downClip = upClip;
if (upClip == tgt.img1) {
upClip = tgt.img2;
} else {
upClip = tgt.img1;
}
};
/** State switch; start the transition **/
private function setState(stt:Number) {
switch(stt) {
case 0:
if(config["showicons"] == "true") {
config["clip"].playicon._visible = true;
}
config["clip"].activity._visible = false;
break;
case 1:
config["clip"].playicon._visible = false;
if(config["showicons"] == "true") {
config["clip"].activity._visible = true;
}
break;
case 2:
config["clip"].playicon._visible = false;
config["clip"].activity._visible = false;
if(transitionDone == false) {
doTransition();
if(config["kenburns"] == "true") {
moveClip();
}
}
break;
}
};
/** (Re)set the ken burns fade **/
private function moveClip() {
var dir = random(4);
var clp = upClip.smc;
if(upClip.smc == undefined) { clp = upClip.mc; }
clp._xscale *= config['rotatetime']/20 + 1;
clp._yscale *= config['rotatetime']/20 + 1;
if(dir == 0) {
clp._x = 0;
} else if (dir == 1) {
clp._y = 0;
} else if (dir == 2) {
clp._x = config['width'] - upClip._width;
} else {
clp._y = config['height'] - upClip._height;
}
clp.onEnterFrame = function() {
if(dir == 0) {
this._x -= 0.3;
} else if (dir == 1) {
this._y -= 0.3;
} else if (dir == 2) {
this._x += 0.3;
} else {
this._y += 0.3;
}
};
};
/** Start a transition **/
private function doTransition() {
transitionDone = true;
if(firstRun == true) {
config["clip"].img1._alpha = 100;
config["clip"].img2._alpha = 0;
firstRun = false;
} else {
var trs = config["transition"];
if(trs == "random") {
trs = allTransitions[random(allTransitions.length)];
}
switch (trs) {
case "bgfade":
doBGFade();
break;
case "blocks":
doBlocks();
break;
case "bubbles":
doBubbles();
break;
case "circles":
doCircles();
break;
case "fade":
doFade();
break;
case "flash":
doFlash();
break;
case "fluids":
doFluids();
break;
case "lines":
doLines();
break;
case "slowfade":
doSlowfade();
break;
default:
doFade();
break;
}
}
};
/** Function for the fade transition **/
private function doFade() {
upClip.ref = this;
upClip._alpha = 0;
upClip.onEnterFrame = function() {
this._alpha +=5;
if(this._alpha >= 100) {
delete this.onEnterFrame;
this.ref.downClip._alpha = 0;
}
};
};
/** Function for the bgfade transition **/
private function doBGFade() {
downClip.ref = upClip.ref = this;
downClip.onEnterFrame = function() {
this._alpha -=5;
if(this._alpha <= 0) {
delete this.onEnterFrame;
this.ref.upClip.onEnterFrame = function() {
if(this._alpha >= 100) {
delete this.onEnterFrame;
} else {
this._alpha +=5;
}
};
}
};
};
/** Function for the blocks transition **/
private function doBlocks() {
upClip._alpha = 100;
config["clip"].attachMovie("blocksMask","mask",3);
var msk:MovieClip = config["clip"].mask;
if (config["width"] > config["height"]) {
msk._width = msk._height = config["width"];
} else {
msk._width = msk._height = config["height"];
}
msk._rotation = random(4)*90;
msk._rotation == 90 ? msk._x = config["width"]: null;
msk._rotation == 180 ? msk._x = config["width"]: null;
msk._rotation == 180 ? msk._y = config["height"]: null;
msk._rotation == -90 ? msk._y = config["height"]: null;
upClip.setMask(msk);
playClip(msk);
};
/** Function for the bubbles transition **/
private function doBubbles() {
upClip._alpha = 100;
config["clip"].attachMovie("bubblesMask","mask",3);
var msk:MovieClip = config["clip"].mask;
upClip.setMask(msk);
if (config["width"] > config["height"]) {
msk._width = msk._height = config["width"];
msk._y = config["height"]/2 - msk._height/2;
} else {
msk._width = msk._height = config["height"];
msk._x = config["width"]/2- msk._width/2;
}
if(random(2) == 1) {
msk._xscale = -msk._xscale;
msk._x += config['width'];
}
playClip(msk);
};
/** Function for the circles transition **/
private function doCircles() {
upClip._alpha = 100;
config["clip"].attachMovie("circlesMask","mask",3);
var msk:MovieClip = config["clip"].mask;
upClip.setMask(msk);
if (config["width"] > config["height"]) {
msk._width = msk._height = config["width"];
} else {
msk._width = msk._height = config["height"];
}
msk._x = config["width"]/2;
msk._y = config["height"]/2;
playClip(msk,10);
};
/** Function for the flash transition **/
private function doFlash() {
upClip._alpha = 100;
upClip.col = new Color(upClip);
upClip.ctf = new Object({rb:255,gb:255,bb:255});
upClip.col.setTransform(upClip.ctf);
upClip.onEnterFrame = function() {
if(this.ctf.rb < 1) {
this.ctf = new Object({rb:0,gb:0,bb:0});
this.col.setTransform(this.ctf);
delete this.onEnterFrame;
} else {
this.ctf.rb /= 1.05;
this.ctf.gb /= 1.05;
this.ctf.bb /= 1.05;
this.col.setTransform(this.ctf);
}
};
};
/** Function for the fluids transition **/
private function doFluids() {
upClip._alpha = 100;
config["clip"].attachMovie("fluidsMask","mask",3);
var msk:MovieClip = config["clip"].mask;
upClip.setMask(msk);
msk._width = config["width"];
msk._height = config["height"];
playClip(msk);
};
/** Function for the lines transition **/
private function doLines() {
upClip._alpha = 100;
config["clip"].attachMovie("linesMask","mask",3);
var msk:MovieClip = config["clip"].mask;
upClip.setMask(msk);
msk._width = config["width"];
msk._height = config["height"];
playClip(msk);
};
/** Function for the fade transition **/
private function doSlowfade() {
upClip.ref = this;
upClip._alpha = 0;
upClip.onEnterFrame = function() {
this._alpha+=2;
if(this._alpha >= 100) {
delete this.onEnterFrame;
this.ref.downClip._alpha = 0;
}
};
};
/** Play a specific Movieclip and remove it once it's finished **/
private function playClip(tgt:MovieClip,rot:Number) {
tgt.ref = this;
tgt.onEnterFrame = function() {
this.nextFrame();
rot == undefined ? null: this._rotation +=rot;
if(this._currentframe == this._totalframes) {
this.ref.downClip._alpha = 0;
this.clear();
this.unloadMovie();
this.removeMovieClip();
}
};
};
/** after a delay, the controlbar is hidden **/
private function hideBar() {
Animations.fadeOut(config['clip'].navigation);
clearInterval(hideInt);
}
/** Mouse move shows controlbar **/
public function onMouseMove() {
Animations.fadeIn(config['clip'].navigation);
clearInterval(hideInt);
if(!config["clip"].navigation.hitTest(_root._xmouse,_root._ymouse)) {
hideInt = setInterval(this,"hideBar",500);
}
};
}