/***************************************************** * * Copyright 2009 Adobe Systems Incorporated. All Rights Reserved. * ***************************************************** * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is Adobe Systems Incorporated. * Portions created by Adobe Systems Incorporated are Copyright (C) 2009 Adobe Systems * Incorporated. All Rights Reserved. * *****************************************************/ package org.osmf.traits { import flash.errors.IllegalOperationError; import org.osmf.events.LoadEvent; import org.osmf.events.LoaderEvent; import org.osmf.media.MediaResourceBase; import org.osmf.utils.OSMFStrings; /** * Dispatched when the state of the LoadTrait has changed. * * @eventType org.osmf.events.LoadEvent.LOAD_STATE_CHANGE * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ [Event(name="loadStateChange", type="org.osmf.events.LoadEvent")] /** * Dispatched when total size in bytes of data being loaded has changed. * * @eventType org.osmf.events.LoadEvent.BYTES_TOTAL_CHANGE * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ [Event(name="bytesTotalChange",type="org.osmf.events.LoadEvent")] /** * LoadTrait defines the trait interface for media that must be loaded before it * can be presented. It can also be used as the base class for a more specific * LoadTrait subclass. * *
If hasTrait(MediaTraitType.LOAD)
returns true
,
* use the MediaElement.getTrait(MediaTraitType.LOAD)
method
* to get an object of this type.
loadStateChange
event with every state change.
*
* Typical states are LOADING
while the media is loading,
* READY
after it has successfully completed loading,
* and LOAD_ERROR
if it fails to complete loading.
If the LoadState is LOADING
or READY
* when the method is called, throws an error.
LOADING
or
* READY
.
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 1.5
* @productversion OSMF 1.0
*/
public function load():void
{
if (loader)
{
if (_loadState == LoadState.READY)
{
throw new IllegalOperationError(OSMFStrings.getString(OSMFStrings.ALREADY_READY));
}
if (_loadState == LoadState.LOADING)
{
throw new IllegalOperationError(OSMFStrings.getString(OSMFStrings.ALREADY_LOADING));
}
else
{
loader.load(this);
}
}
else
{
throw new IllegalOperationError(OSMFStrings.getString(OSMFStrings.MUST_SET_LOADER));
}
}
/**
* Unloads this LoadTrait. Updates the load state.
* Dispatches the loadStateChange
event with every state change.
*
* Typical states are UNLOADING
while the media is unloading,
* UNINITIALIZED
after it has successfully completed unloading,
* and LOAD_ERROR
if it fails to complete unloading.
If the LoadState is not READY
when the
* method is called, throws an error.
READY
.
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 1.5
* @productversion OSMF 1.0
*/
public function unload():void
{
if (loader)
{
if (_loadState == LoadState.UNLOADING)
{
throw new IllegalOperationError(OSMFStrings.getString(OSMFStrings.ALREADY_UNLOADING));
}
if (_loadState == LoadState.UNINITIALIZED)
{
throw new IllegalOperationError(OSMFStrings.getString(OSMFStrings.ALREADY_UNLOADED));
}
loader.unload(this);
}
else
{
throw new IllegalOperationError(OSMFStrings.getString(OSMFStrings.MUST_SET_LOADER));
}
}
/**
* The number of bytes of data that have been loaded.
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 1.5
* @productversion OSMF 1.0
*/
public function get bytesLoaded():Number
{
return _bytesLoaded;
}
/**
* The total size in bytes of the data being loaded.
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 1.5
* @productversion OSMF 1.0
*/
public function get bytesTotal():Number
{
return _bytesTotal;
}
// Internals
//
/**
* Sets the load state for this LoadTrait.
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 1.5
* @productversion OSMF 1.0
*/
protected final function setLoadState(newState:String):void
{
if (_loadState != newState)
{
loadStateChangeStart(newState);
_loadState = newState;
loadStateChangeEnd();
}
}
/**
* Sets the number of bytes of data that have been loaded.
*
* @throws ArgumentError If value is negative, NaN, or greater than bytesTotal.
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 1.5
* @productversion OSMF 1.0
*/
protected final function setBytesLoaded(value:Number):void
{
if (isNaN(value) || value > bytesTotal || value < 0)
{
throw new ArgumentError(OSMFStrings.getString(OSMFStrings.INVALID_PARAM));
}
if (value != _bytesLoaded)
{
bytesLoadedChangeStart(value);
_bytesLoaded = value;
bytesLoadedChangeEnd();
}
}
/**
* Sets the total size in bytes of the data being loaded.
*
* @throws ArgumentError If value is negative or smaller than bytesLoaded.
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 1.5
* @productversion OSMF 1.0
*/
protected final function setBytesTotal(value:Number):void
{
if (value < _bytesLoaded || value < 0)
{
throw new ArgumentError(OSMFStrings.getString(OSMFStrings.INVALID_PARAM));
}
if (value != _bytesTotal)
{
bytesTotalChangeStart(value);
_bytesTotal = value;
bytesTotalChangeEnd();
}
}
/**
* Called immediately before the bytesLoaded
property is changed.
* Subclasses can override this method to communicate the change to the media.
* * @param newValue NewbytesLoaded
value.
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 1.5
* @productversion OSMF 1.0
*/
protected function bytesLoadedChangeStart(newValue:Number):void
{
}
/**
* Called just after the bytesLoaded
property has changed.
*
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 1.5
* @productversion OSMF 1.0
*/
protected function bytesLoadedChangeEnd():void
{
}
/**
* Called immediately before the bytesTotal
property is changed.
* Subclasses can override this method to communicate the change to the media.
* * @param newValue NewbytesTotal
value.
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 1.5
* @productversion OSMF 1.0
*/
protected function bytesTotalChangeStart(newValue:Number):void
{
}
/**
* Called just after the bytesTotal
property has changed.
* Dispatches the bytesTotalChange event.
* Subclasses that override should call this method to * dispatch the bytesTotalChange event.
* * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ protected function bytesTotalChangeEnd():void { dispatchEvent(new LoadEvent(LoadEvent.BYTES_TOTAL_CHANGE, false, false, null, _bytesTotal)); } /** * Called immediately before theloadState
* property is changed.
* Subclasses can override this method to communicate the change to the media.
* * @param newState NewloadState
value.
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 1.5
* @productversion OSMF 1.0
*/
protected function loadStateChangeStart(newState:String):void
{
}
/**
* Called just after the loadState
property is
* change.
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 1.5
* @productversion OSMF 1.0
*/
protected function loadStateChangeEnd():void
{
dispatchEvent(new LoadEvent(LoadEvent.LOAD_STATE_CHANGE, false, false, _loadState));
}
private function onLoadStateChange(event:LoaderEvent):void
{
if (event.loadTrait == this)
{
setLoadState(event.newState);
}
}
private var loader:LoaderBase;
private var _resource:MediaResourceBase;
private var _loadState:String;
private var _bytesLoaded:Number;
private var _bytesTotal:Number;
}
}