📄 abstractcontroller.as
字号:
/**
* Abstract controller class of the MCV pattern, extended by all controlllers.
*
* @author Jeroen Wijering
* @version 1.5
**/
import com.jeroenwijering.players.*;
import com.jeroenwijering.utils.Randomizer;
class com.jeroenwijering.players.AbstractController
implements com.jeroenwijering.feeds.FeedListener {
/** Randomizer instance **/
private var randomizer:Randomizer;
/** array with all registered models **/
private var registeredModels:Array;
/** reference to the config array **/
private var config:Object;
/** reference to the feed array **/
private var feeder:Object;
/** Current item **/
private var currentItem:Number;
/** Current item **/
private var currentURL:String;
/** Current item **/
private var isPlaying:Boolean;
/** Number of items played to track play-once repeat **/
private var itemsPlayed:Number = 0;
/** LoadVars object for event logging **/
private var logObject:LoadVars;
/** Constructor. **/
function AbstractController(cfg:Object,fed:Object) {
config = cfg;
feeder = fed;
if(config["shuffle"] == "false") {
currentItem = 0;
} else {
randomizer = new Randomizer(feeder.feed);
currentItem = randomizer.pick();
}
feeder.addListener(this);
};
/** Complete the build of the MCV cycle and start flow of events. **/
public function startMCV(mar:Array) {};
/** Receive events from the views. **/
public function getEvent(typ:String,prm:Number) {
trace("controller: "+typ+": "+prm);
if( feeder.feed[currentItem]["category"] == "commercial" &&
typ != "volume" && typ != "getlink" && typ != "complete" &&
typ != "stop") {
return;
}
switch(typ) {
case "playpause":
setPlaypause();
break;
case "prev":
setPrev();
break;
case "next":
setNext();
break;
case "stop":
setStop();
break;
case "scrub":
setScrub(prm);
break;
case "volume":
setVolume(prm);
break;
case "playitem":
setPlayitem(prm);
break;
case "getlink":
setGetlink(prm);
break;
case "fullscreen":
setFullscreen();
break;
case "complete":
setComplete();
break;
case "captions":
setCaptions();
break;
default:
trace("controller: incompatible event received");
break;
}
};
/** PlayPause switch **/
private function setPlaypause() {};
/** Play previous item. **/
private function setPrev() {};
/** Play next item. **/
private function setNext() {};
/** Stop and clear item. **/
private function setStop() {};
/** Forward scrub number to model. **/
private function setScrub(prm:Number) {};
/** Play a new item. **/
private function setPlayitem(itm:Number) {
currentURL = feeder.feed[itm]['file'];
};
/** Get url from an item if link exists, else playpause. **/
private function setGetlink(idx:Number) {};
/** Determine what to do if an item is completed. **/
private function setComplete() {};
/** Volume event handler **/
private function setVolume(prm:Number) {};
/** Switch fullscreen mode **/
private function setFullscreen() {};
/** Switch captions on and off **/
private function setCaptions() {};
/** Sending changes to all registered models. **/
private function sendChange(typ:String,prm:Number):Void {
for(var i=0; i<registeredModels.length; i++) {
registeredModels[i].getChange(typ,prm);
}
};
/** check with feedupdates if current item is also changed **/
public function onFeedUpdate() {
if(feeder.feed[currentItem]['file'] != currentURL) {
setStop();
if(randomizer != undefined) {
randomizer = new Randomizer(feeder.feed);
}
if(currentItem >= feeder.feed.length) {
if(config["shuffle"] == "false") {
currentItem = 0;
} else {
currentItem = randomizer.pick();
}
sendChange("item",currentItem);
}
}
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -