/** * AUTO * Toolbox. * * Kurt George Gjerde 2009 * Licence: CC BY-SA 3.0 or GNU GPL **/ package { import com.jeroenwijering.events.*; import flash.display.MovieClip; //import flash.text.TextField; public class Casket extends MovieClip implements PluginInterface { /** Reference to this plugins' flashvars. **/ public var config:Object = { seekstate:'play', autoload:false, autostart:0 }; /** Reference to this plugins' stage graphics. **/ public var clip:MovieClip; /** Reference to the View of the player. **/ private var view:AbstractView; /** globals **/ private var version:String = '1.0'; private var debug:Boolean = false; /** Position and duration **/ private var position:Number = 0; private var duration:Number = 0; private var playtime:Number = 0; private var waitingForPause:Boolean = false; private var autoloadInitiated:Boolean = false; private var autoloadStopped:Boolean = false; /** Constructor. **/ public function Casket():void { clip = this; }; /** Initializer **/ public function initializePlugin(v:AbstractView):void { view = v; // Config if (view.config['casket.autoload']) { config['autoload'] = view.config['casket.autoload']; } if (view.config['casket.seekstate']) { config['seekstate'] = view.config['casket.seekstate']; } // Listeners view.addModelListener(ModelEvent.TIME, timeHandler); view.addModelListener(ModelEvent.STATE, stateHandler); // Autoload if (config['autoload']) { view.config['autostart'] = true; view.addModelListener(ModelEvent.META, metaHandler); //view.addModelListener(ModelEvent.LOADED, loadedHandler); } // Seek if (config['seekstate']!='play') { view.addControllerListener(ControllerEvent.SEEK, seekHandler); } }; /** Meta handler **/ function metaHandler(e:ModelEvent) { if (config['autoload'] && e.data.duration) { if (!autoloadInitiated) { waitingForPause = true; } } } function loadedHandler(e:ModelEvent) { var lo = e.data.loaded; var to = e.data.total; if (autoloadInitiated && (lo>=to) && !autoloadStopped) { //view.sendEvent(ViewEvent.STOP); autoloadStopped = true; } } /** State handler **/ function stateHandler(e:ModelEvent) { var st = e.data.newstate; var os = e.data.oldstate; // Seek if (config['seekstate']!='play') { if (st=='PLAYING') { if (os=='PAUSED' || os=='COMPLETED') { playtime = 0; } } } } /** Seek handler **/ function seekHandler(e:ControllerEvent) { if (config['seekstate']=='play') { // currently the default action of the player, so do nothing. } else if (config['seekstate']=='nochange' && (playtime<0.5)) { waitingForPause = true; } else if (config['seekstate']=='pause') { waitingForPause = true; } } /** Time handler **/ function timeHandler(e:ModelEvent) { position = e.data.position; duration = e.data.duration; playtime += 0.1; if (waitingForPause) { view.sendEvent(ViewEvent.PLAY, 'false'); waitingForPause = false; if (config['autoload'] && !autoloadInitiated) { autoloadInitiated = true; //view.sendEvent(ViewEvent.STOP); } } } }; }