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

444 lines
No EOL
13 KiB
ActionScript
Executable file

/**
* Controlbar user interface management of the players MCV pattern.
*
* @author Jeroen Wijering
* @version 1.13
**/
import com.jeroenwijering.players.*;
import com.jeroenwijering.utils.*;
import com.jeroenwijering.feeds.FeedListener;
class com.jeroenwijering.players.ControlbarView extends AbstractView
implements FeedListener {
/** currently active item **/
private var currentItem:Number;
/** full width of the scrubbars **/
private var barWidths:Number;
/** duration of the currently playing item **/
private var itemLength:Number;
/** progress of the currently playing item **/
private var itemProgress:Number = 0
/** do not rescale loadbar on rebuffering **/
private var wasLoaded:Boolean = false;
/** interval for hiding the display **/
private var hideInt:Number;
/** Constructor **/
function ControlbarView(ctr:AbstractController,cfg:Object,fed:Object) {
super(ctr,cfg,fed);
setColorsClicks();
setDimensions();
Stage.addListener(this);
feeder.addListener(this);
Mouse.addListener(this);
};
/** Sets up colors and clicks of all controlbar items. **/
private function setColorsClicks() {
var ref = this;
var tgt = config["clip"].controlbar;
tgt.col = new Color(tgt.back);
tgt.col.setRGB(config["backcolor"]);
tgt.playpause.col1 = new Color(tgt.playpause.ply);
tgt.playpause.col1.setRGB(config["frontcolor"]);
tgt.playpause.col2 = new Color(tgt.playpause.pas);
tgt.playpause.col2.setRGB(config["frontcolor"]);
tgt.playpause.onRollOver = function() {
this.col1.setRGB(ref.config["lightcolor"]);
this.col2.setRGB(ref.config["lightcolor"]);
};
tgt.playpause.onRollOut = function() {
this.col1.setRGB(ref.config["frontcolor"]);
this.col2.setRGB(ref.config["frontcolor"]);
};
tgt.playpause.onRelease = function() { ref.sendEvent("playpause"); };
tgt.stop.col = new Color(tgt.stop.icn);
tgt.stop.col.setRGB(config["frontcolor"]);
tgt.stop.onRollOver = function() {
this.col.setRGB(ref.config["lightcolor"]);
};
tgt.stop.onRollOut = function() {
this.col.setRGB(ref.config["frontcolor"]);
};
tgt.stop.onRelease = function() { ref.sendEvent("stop"); };
tgt.prev.col = new Color(tgt.prev.icn);
tgt.prev.col.setRGB(config["frontcolor"]);
tgt.prev.onRollOver = function() {
this.col.setRGB(ref.config["lightcolor"]);
};
tgt.prev.onRollOut = function() {
this.col.setRGB(ref.config["frontcolor"]);
};
tgt.prev.onRelease = function() { ref.sendEvent("prev"); };
tgt.next.col = new Color(tgt.next.icn);
tgt.next.col.setRGB(config["frontcolor"]);
tgt.next.onRollOver = function() {
this.col.setRGB(ref.config["lightcolor"]);
};
tgt.next.onRollOut = function() {
this.col.setRGB(ref.config["frontcolor"]);
};
tgt.next.onRelease = function() { ref.sendEvent("next"); };
tgt.scrub.elpTxt.textColor = config["frontcolor"];
tgt.scrub.remTxt.textColor = config["frontcolor"];
tgt.scrub.col = new Color(tgt.scrub.icn);
tgt.scrub.col.setRGB(config["frontcolor"]);
tgt.scrub.col2 = new Color(tgt.scrub.bar);
tgt.scrub.col2.setRGB(config["frontcolor"]);
tgt.scrub.col3 = new Color(tgt.scrub.bck);
tgt.scrub.col3.setRGB(config["frontcolor"]);
tgt.scrub.bck.onRollOver = function() {
this._parent.col.setRGB(ref.config["lightcolor"]);
};
tgt.scrub.bck.onRollOut = function() {
this._parent.col.setRGB(ref.config["frontcolor"]);
};
tgt.scrub.bck.onPress= function() {
this.onEnterFrame = function() {
var xm = this._parent._xmouse;
if(xm < this._parent.bck._width + this._parent.bck._x &&
xm > this._parent.bck._x) {
this._parent.icn._x = this._parent._xmouse - 1;
}
}
};
tgt.scrub.bck.onRelease= tgt.scrub.bck.onReleaseOutside= function() {
var sec = (this._parent._xmouse-this._parent.bar._x) /
ref.barWidths*ref.itemLength;
ref.sendEvent("scrub",Math.round(sec));
delete this.onEnterFrame;
};
tgt.scrub.bck.tabEnabled = false;
tgt.fs.col1 = new Color(tgt.fs.ns);
tgt.fs.col2 = new Color(tgt.fs.fs);
tgt.fs.col.setRGB(ref.config["frontcolor"]);
tgt.fs.col2.setRGB(ref.config["frontcolor"]);
tgt.fs.onRollOver = function() {
this.col1.setRGB(ref.config["lightcolor"]);
this.col2.setRGB(ref.config["lightcolor"]);
};
tgt.fs.onRollOut = function() {
this.col1.setRGB(ref.config["frontcolor"]);
this.col2.setRGB(ref.config["frontcolor"]);
};
tgt.fs.onRelease = function() {
ref.sendEvent("fullscreen");
this.col1.setRGB(ref.config["frontcolor"]);
this.col2.setRGB(ref.config["frontcolor"]);
};
tgt.cc.col = new Color(tgt.cc.icn);
tgt.cc.col.setRGB(ref.config["frontcolor"]);
tgt.cc.onRollOver = function() {
this.col.setRGB(ref.config["lightcolor"]);
};
tgt.cc.onRollOut = function() {
this.col.setRGB(ref.config["frontcolor"]);
};
tgt.cc.onRelease = function() {
ref.sendEvent("captions");
};
tgt.au.col = new Color(tgt.au.icn);
tgt.au.col.setRGB(ref.config["frontcolor"]);
tgt.au.onRollOver = function() {
this.col.setRGB(ref.config["lightcolor"]);
};
tgt.au.onRollOut = function() {
this.col.setRGB(ref.config["frontcolor"]);
};
tgt.au.onRelease = function() {
ref.sendEvent("audio");
};
tgt.dl.col = new Color(tgt.dl.icn);
tgt.dl.col.setRGB(ref.config["frontcolor"]);
tgt.dl.onRollOver = function() {
this.col.setRGB(ref.config["lightcolor"]);
};
tgt.dl.onRollOut = function() {
this.col.setRGB(ref.config["frontcolor"]);
};
tgt.dl.onRelease = function() {
ref.sendEvent("getlink",ref.currentItem);
};
tgt.vol.col = new Color(tgt.vol.bar);
tgt.vol.col.setRGB(config["frontcolor"]);
tgt.vol.col2 = new Color(tgt.vol.bck);
tgt.vol.col2.setRGB(config["frontcolor"]);
tgt.vol.col3 = new Color(tgt.vol.icn);
tgt.vol.col3.setRGB(config["frontcolor"]);
tgt.vol.onRollOver = function() {
this.col.setRGB(ref.config["lightcolor"]);
this.col3.setRGB(ref.config["lightcolor"]);
};
tgt.vol.onRollOut = function() {
this.col.setRGB(ref.config["frontcolor"]);
this.col3.setRGB(ref.config["frontcolor"]);
};
tgt.vol.onRelease = function() {
this.onEnterFrame = function() {
this.msk._width = this._xmouse-12;
};
};
tgt.vol.onRelease = tgt.vol.onReleaseOutside = function() {
ref.sendEvent("volume",(this._xmouse-12)*5);
delete this.onEnterFrame;
};
};
/** Sets up dimensions of all controlbar items. **/
private function setDimensions() {
clearInterval(hideInt);
var tgt = config["clip"].controlbar;
var cbw = 400;
// overall position and width
if(Stage["displayState"] == "fullScreen") {
tgt._x = Math.round(Stage.width/2-200);
tgt._y = Stage.height - 40;
tgt._alpha = 100;
tgt.back._alpha = 50;
tgt.fs.fs._visible = false;
tgt.fs.ns._visible = true;
} else if(config["displayheight"] == config["height"]) {
tgt._y = config["displayheight"] - 40;
if(config["displaywidth"] > 450 &&
config["displaywidth"] == config["width"]) {
tgt._x = Math.round(Stage.width/2-200);
} else {
tgt._x = 20;
cbw = config["displaywidth"] - 40;
}
tgt.back._alpha = 40;
tgt.fs.fs._visible = true;
tgt.fs.ns._visible = false;
} else {
tgt._x = 0;
tgt._y = config["displayheight"];
cbw = config["width"];
tgt._alpha = 100;
tgt.back._alpha = 100;
tgt.fs.fs._visible = true;
tgt.fs.ns._visible = false;
}
if(config["largecontrols"] == "true") {
tgt._xscale = tgt._yscale = 200;
if(Stage["displayState"] == "fullScreen") {
tgt._y = Stage.height - 60;
cbw = 300;
tgt._x = Math.round(Stage.width/2 - 300);
} else {
cbw /= 2;
}
}
tgt.back._width = cbw;
// all buttons
if(config["displayheight"] < config["height"] - 40 ||
config["displaywidth"] < config["width"] - 40 ||
cbw < 200 || feeder.feed.length < 2) {
tgt.prev._visible = tgt.next._visible = false;
tgt.scrub.shd._width = cbw-17;
tgt.scrub._x = 17;
} else {
tgt.prev._visible = tgt.next._visible = true;
tgt.scrub.shd._width = cbw-51;
tgt.scrub._x = 51;
}
if(config['showstop'] == 'true') {
tgt.scrub.shd._width -= 17;
tgt.scrub._x += 17;
} else {
tgt.stop._visible = false;
tgt.prev._x = 17;
tgt.next._x = 34;
}
var xp = cbw;
if(cbw > 50) {
xp -= 37;
tgt.scrub.shd._width -= 37;
tgt.vol._x = xp;
} else {
xp -= 1;
tgt.scrub.shd._width -= 1;
tgt.vol._x = xp;
}
if (feeder.audio == true) {
xp -= 17;
tgt.scrub.shd._width -= 17;
tgt.au._x = xp;
tgt.au._visible = true;
} else {
tgt.au._visible = false;
}
if (feeder.captions == true) {
xp -= 17;
tgt.scrub.shd._width -= 17;
tgt.cc._x = xp;
tgt.cc._visible = true;
} else {
tgt.cc._visible = false;
}
if (config["showdownload"] == "true") {
xp -= 17;
tgt.scrub.shd._width -= 17;
tgt.dl._x = xp;
} else {
tgt.dl._visible = false;
}
if((Stage["displayState"] == undefined ||
config["usefullscreen"] == "false" ||
feeder.onlymp3s == true) &&
config["fsbuttonlink"] == undefined) {
tgt.fs._visible = false;
} else {
xp -= 18;
tgt.scrub.shd._width -= 18;
tgt.fs._x = xp;
}
if(config["showdigits"] == "false" || tgt.scrub.shd._width < 120 ||
System.capabilities.version.indexOf("7,0,") > -1) {
tgt.scrub.elpTxt._visible = tgt.scrub.remTxt._visible = false;
tgt.scrub.bar._x = tgt.scrub.bck._x = tgt.scrub.icn._x = 5;
barWidths = tgt.scrub.bck._width = tgt.scrub.shd._width - 10;
} else {
tgt.scrub.elpTxt._visible = tgt.scrub.remTxt._visible = true;
tgt.scrub.bar._x = tgt.scrub.bck._x = tgt.scrub.icn._x = 42;
barWidths = tgt.scrub.bck._width = tgt.scrub.shd._width - 84;
tgt.scrub.remTxt._x = tgt.scrub.shd._width - 39;
}
tgt.scrub.bar._width = 0;
};
/** Show and hide the play/pause button and show activity icon **/
private function setState(stt:Number) {
var tgt = config["clip"].controlbar.playpause;
switch(stt) {
case 0:
tgt.ply._visible = true;
tgt.pas._visible = false;
break;
case 1:
tgt.pas._visible = true;
tgt.ply._visible = false;
break;
case 2:
tgt.pas._visible = true;
tgt.ply._visible = false;
break;
}
};
/** Print current time to controlBar **/
private function setTime(elp:Number,rem:Number) {
itemLength = elp + rem;
itemProgress = Math.round(rem/(itemLength)*100);
var tgt = config["clip"].controlbar.scrub;
var w = Math.floor(elp/(elp+rem)*barWidths) - 2;
if(rem > 0) {
tgt.icn._visible = true;
tgt.bar._visible = true;
elp == 0 || w < 2 ? tgt.bar._width = 0: tgt.bar._width = w - 2;
tgt.icn._x = tgt.bar._width + tgt.bar._x + 1;
} else {
tgt.icn._visible = false;
tgt.bar._visible = false;
}
tgt.elpTxt.text = StringMagic.addLeading(elp/60) + ":" +
StringMagic.addLeading(elp%60);
if(tgt.bck._width == barWidths) {
if(config['showdigits'] == "total") {
tgt.remTxt.text = StringMagic.addLeading((elp+rem)/60)+ ":" +
StringMagic.addLeading((elp+rem)%60);
} else {
tgt.remTxt.text = StringMagic.addLeading(rem/60)+ ":" +
StringMagic.addLeading(rem%60);
}
}
};
/** New item is loaded **/
private function setItem(prm:Number) {
wasLoaded = false;
currentItem = prm;
config["clip"].controlbar.scrub.icn._alpha = 100;
};
/** Print current buffer amount to controlbar **/
private function setLoad(pct:Number) {
var tgt = config["clip"].controlbar.scrub;
if(wasLoaded == false) {
tgt.bck._width = Math.round(barWidths*pct/100);
}
tgt.remTxt.text = Math.round(pct)+" %";
pct == 100 ? wasLoaded = true: null;
};
/** Reflect current volume in volumebar **/
private function setVolume(pr1:Number) {
var tgt = config["clip"].controlbar.vol;
tgt.msk._width = Math.round(pr1/5);
if(pr1 == 0) {
tgt.icn._alpha = 40;
} else {
tgt.icn._alpha = 100;
}
};
/** Catches stage resizing **/
public function onResize() {
if(config['displayheight'] > config["height"]+10) {
config["height"] = config["displayheight"] = Stage.height;
config["width"] = config["displaywidth"] = Stage.width;
}
setDimensions();
};
/** Catches fullscreen escape **/
public function onFullScreen(fs:Boolean) {
if(fs == false) {
setDimensions();
Animations.fadeIn(config['clip'].controlbar);
} else {
hideInt = setInterval(this,"hideBar",500);
}
};
/** after a delay, the controlbar is hidden **/
private function hideBar() {
Animations.fadeOut(config['clip'].controlbar);
clearInterval(hideInt);
}
/** Mouse move shows controlbar **/
public function onMouseMove() {
if(config["displayheight"] == config["height"] ||
Stage["displayState"] == "fullScreen") {
Animations.fadeIn(config['clip'].controlbar);
clearInterval(hideInt);
if(!config["clip"].controlbar.hitTest(_root._xmouse,_root._ymouse)) {
hideInt = setInterval(this,"hideBar",500);
}
}
};
public function onFeedUpdate(typ:String) {
setDimensions();
};
}