267 lines
No EOL
7.4 KiB
ActionScript
Executable file
267 lines
No EOL
7.4 KiB
ActionScript
Executable file
/**
|
|
* Display user interface management of the players MCV pattern.
|
|
*
|
|
* @author Jeroen Wijering
|
|
* @version 1.8
|
|
**/
|
|
|
|
|
|
import com.jeroenwijering.players.*;
|
|
import com.jeroenwijering.utils.*;
|
|
|
|
|
|
class com.jeroenwijering.players.DisplayView extends AbstractView {
|
|
|
|
|
|
/** reference to the imageloader object **/
|
|
private var imageLoader:ImageLoader;
|
|
/** Reference to the currently active item **/
|
|
private var currentItem;
|
|
/** Reference to the currently active item **/
|
|
private var itemSize:Array;
|
|
/** Reference to the currently active item **/
|
|
private var thumbSize:Array;
|
|
/** Starting position of the players **/
|
|
private var startPos:Array;
|
|
|
|
|
|
/** Constructor **/
|
|
function DisplayView(ctr:AbstractController,cfg:Object,fed:Object) {
|
|
super(ctr,cfg,fed);
|
|
Stage.addListener(this);
|
|
itemSize = new Array(config['displaywidth'],config['displayheight']);
|
|
thumbSize = new Array(config['displaywidth'],config['displayheight']);
|
|
var ref = this;
|
|
var tgt = config["clip"];
|
|
imageLoader = new ImageLoader(tgt.display.thumb);
|
|
imageLoader.onLoadFinished = function() {
|
|
ref.thumbSize = new Array(this.targetClip._width,
|
|
this.targetClip._height);
|
|
ref.scaleClip(tgt.display.thumb,this.targetClip._width,
|
|
this.targetClip._height);
|
|
}
|
|
startPos = new Array(tgt._x,tgt._y);
|
|
setColorsClicks();
|
|
setDimensions();
|
|
};
|
|
|
|
|
|
/** Sets up colors and clicks of all display items. **/
|
|
private function setColorsClicks() {
|
|
var ref = this;
|
|
// background
|
|
var tgt = config["clip"].back;
|
|
tgt.col = new Color(tgt);
|
|
tgt.col.setRGB(config["backcolor"]);
|
|
// display items
|
|
tgt = config["clip"].display;
|
|
tgt.col = new Color(tgt.back);
|
|
tgt.col.setRGB(config["screencolor"]);
|
|
tgt.setMask(config["clip"].mask);
|
|
if(config["showicons"] == "false") {
|
|
tgt.playicon._visible = false;
|
|
tgt.muteicon._visible = false;
|
|
}
|
|
tgt.activity._visible = false;
|
|
tgt.back.tabEnabled = false;
|
|
if(config["autostart"] == "muted") {
|
|
tgt.back.onRelease = function() {
|
|
ref.sendEvent("volume",80);
|
|
ref.firstClick();
|
|
};
|
|
} else if (config["autostart"] == "false") {
|
|
tgt.muteicon._visible = false;
|
|
tgt.back.onRelease = function() {
|
|
ref.sendEvent("playpause");
|
|
ref.firstClick();
|
|
};
|
|
} else {
|
|
ref.firstClick();
|
|
}
|
|
if(config["logo"] != "undefined") {
|
|
var lll = new ImageLoader(tgt.logo,"none");
|
|
lll.onLoadFinished = function() {
|
|
tgt.logo._x = ref.config["displaywidth"] -
|
|
tgt.logo._width - 10;
|
|
tgt.logo._y = 10;
|
|
};
|
|
lll.loadImage(config["logo"]);
|
|
tgt.logo.onRelease = function() {
|
|
ref.sendEvent("getlink",ref.currentItem);
|
|
};
|
|
}
|
|
};
|
|
|
|
|
|
/** Sets up dimensions of all controlbar items. **/
|
|
private function setDimensions() {
|
|
var tgt = config["clip"].back;
|
|
if(Stage["displayState"] == "fullScreen") {
|
|
config["clip"]._x = config["clip"]._y = 0;
|
|
tgt._width = Stage.width;
|
|
tgt._height = Stage.height;
|
|
} else {
|
|
config["clip"]._x = startPos[0];
|
|
config["clip"]._y = startPos[1];
|
|
tgt._width = config["width"];
|
|
tgt._height = config["height"];
|
|
if(config["displayheight"] >= config["height"] -
|
|
config['controlbar']) { tgt._height--; }
|
|
}
|
|
tgt = config["clip"].display;
|
|
scaleClip(tgt.thumb,thumbSize[0],thumbSize[1]);
|
|
scaleClip(tgt.image,itemSize[0],itemSize[1]);
|
|
scaleClip(tgt.video,itemSize[0],itemSize[1]);
|
|
if(Stage["displayState"] == "fullScreen") {
|
|
config["clip"].mask._width =
|
|
tgt.back._width = Stage.width;
|
|
config["clip"].mask._height =
|
|
tgt.back._height = Stage.height;
|
|
} else {
|
|
config["clip"].mask._width =
|
|
tgt.back._width = config["displaywidth"];
|
|
config["clip"].mask._height =
|
|
tgt.back._height = config["displayheight"];
|
|
}
|
|
tgt.playicon._x = tgt.activity._x = tgt.muteicon._x =
|
|
Math.round(tgt.back._width/2);
|
|
tgt.playicon._y = tgt.activity._y = tgt.muteicon._y =
|
|
Math.round(tgt.back._height/2);
|
|
if(Stage["displayState"] == "fullScreen") {
|
|
tgt.playicon._xscale = tgt.playicon._yscale =
|
|
tgt.muteicon._xscale = tgt.muteicon._yscale =
|
|
tgt.activity._xscale = tgt.activity._yscale =
|
|
tgt.logo._xscale = tgt.logo._yscale = 200;
|
|
tgt.logo._x = Stage.width - tgt.logo._width - 20;
|
|
tgt.logo._y = 20;
|
|
} else {
|
|
tgt.playicon._xscale = tgt.playicon._yscale =
|
|
tgt.muteicon._xscale = tgt.muteicon._yscale =
|
|
tgt.activity._xscale = tgt.activity._yscale =
|
|
tgt.logo._xscale = tgt.logo._yscale = 100;
|
|
if(tgt.logo._height > 1) {
|
|
tgt.logo._x= config["displaywidth"]-tgt.logo._width -10;
|
|
tgt.logo._y = 10;
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
/** Show and hide the play/pause button and show activity icon **/
|
|
private function setState(stt:Number) {
|
|
var tgt = config["clip"].display;
|
|
switch(stt) {
|
|
case 0:
|
|
if (config["linkfromdisplay"] == "false" &&
|
|
config["showicons"] == "true") {
|
|
tgt.playicon._visible = true;
|
|
}
|
|
tgt.activity._visible = false;
|
|
break;
|
|
case 1:
|
|
tgt.playicon._visible = false;
|
|
if (config["showicons"] == "true") {
|
|
tgt.activity._visible = true;
|
|
}
|
|
break;
|
|
case 2:
|
|
tgt.playicon._visible = false;
|
|
tgt.activity._visible = false;
|
|
break;
|
|
}
|
|
};
|
|
|
|
|
|
/** save size information and rescale accordingly **/
|
|
private function setSize(wid:Number,hei:Number) {
|
|
itemSize = new Array (wid,hei);
|
|
var tgt = config["clip"].display;
|
|
scaleClip(tgt.image,itemSize[0],itemSize[1]);
|
|
scaleClip(tgt.video,itemSize[0],itemSize[1]);
|
|
};
|
|
|
|
|
|
/** Scale movie according to overstretch setting **/
|
|
private function scaleClip(tgt:MovieClip,wid:Number,hei:Number):Void {
|
|
var tcf = tgt.mc._currentframe;
|
|
tgt.mc.gotoAndStop(1);
|
|
var stw = config["displaywidth"];
|
|
var sth = config["displayheight"];
|
|
if(Stage["displayState"] == "fullScreen") {
|
|
stw = Stage.width;
|
|
sth = Stage.height;
|
|
}
|
|
var xsr = stw/wid;
|
|
var ysr = sth/hei;
|
|
var mxm = Math.max(xsr,ysr);
|
|
if ((Math.abs(xsr-ysr)/mxm < 0.1 && config["overstretch"] != "none")
|
|
|| config["overstretch"] == "fit") {
|
|
tgt._width = stw;
|
|
tgt._height = sth;
|
|
} else if (xsr < ysr && config["overstretch"] == "false" ||
|
|
ysr < xsr && config["overstretch"] == "true") {
|
|
tgt._width = wid*xsr;
|
|
tgt._height = hei*xsr;
|
|
} else if(config["overstretch"] == "none") {
|
|
tgt._width = wid;
|
|
tgt._height = hei;
|
|
} else {
|
|
tgt._width = wid*ysr;
|
|
tgt._height = hei*ysr;
|
|
}
|
|
tgt._x = stw/2 - tgt._width/2;
|
|
tgt._y = sth/2 - tgt._height/2;
|
|
tgt.mc.gotoAndPlay(tcf);
|
|
};
|
|
|
|
|
|
/** Load Thumbnail image if available. **/
|
|
private function setItem(idx:Number) {
|
|
currentItem = idx;
|
|
var tgt = config["clip"].display;
|
|
if(feeder.feed[idx]["image"] == "undefined") {
|
|
tgt.thumb.clear();
|
|
tgt.thumb._visible = false;
|
|
} else {
|
|
imageLoader.loadImage(feeder.feed[idx]["image"]);
|
|
tgt.thumb._visible = true;
|
|
}
|
|
};
|
|
|
|
|
|
/** OnResize Handler: catches stage resizing **/
|
|
public function onResize() {
|
|
if(config['displayheight'] >= config["height"]) {
|
|
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(); }
|
|
};
|
|
|
|
|
|
/** Catches the first display click to reset unmute / displayclick **/
|
|
private function firstClick() {
|
|
var ref = this;
|
|
var tgt = config["clip"].display;
|
|
tgt.playicon._visible = false;
|
|
tgt.muteicon._visible = false;
|
|
if(config["linkfromdisplay"] == "true") {
|
|
tgt.back.onRelease = function() {
|
|
ref.sendEvent("getlink",ref.currentItem);
|
|
};
|
|
} else {
|
|
tgt.back.onRelease = function() {
|
|
ref.sendEvent("playpause",1);
|
|
};
|
|
}
|
|
|
|
};
|
|
|
|
|
|
} |