272 lines
7.6 KiB
ActionScript
272 lines
7.6 KiB
ActionScript
import mx.utils.Delegate;
|
|
import mx.transitions.easing.None;
|
|
import mx.transitions.Tween;
|
|
|
|
// This is an abstract class, and should be extended.
|
|
// It only has common functions that can be shared among screens with page navigation functionality
|
|
// The extended class still has to setup the list array properly and calling these functions at the right places
|
|
class ScreenWithPageNavigator extends Screen
|
|
{
|
|
private var mcPageNavigator:PageNavigator;
|
|
private var mCurrentPage:Number;
|
|
private var mMovieClipList:Array;
|
|
private var mEntriesPerPage:Number = 10;
|
|
private var mFirstEntryX:Number;
|
|
private var mFirstEntryY:Number;
|
|
private var mDeltaY:Number;
|
|
|
|
public function ScreenWithPageNavigator()
|
|
{
|
|
mCurrentPage = 0;
|
|
mScreenId = ScreenID.INVALID_ID;
|
|
mScreenTabId = ScreenTab.ID_INVALID;
|
|
mMovieClipList = new Array();
|
|
|
|
//extended class should reset these to different values in the constructor
|
|
mFirstEntryX = 0;
|
|
mFirstEntryY = 0;
|
|
mDeltaY = 0;
|
|
}
|
|
|
|
public function OnShow():Void
|
|
{
|
|
mcPageNavigator._x = 611;
|
|
mcPageNavigator.AddCallbacks( Delegate.create( this, NextPage ), Delegate.create( this, PreviousPage ) );
|
|
}
|
|
|
|
public function OnMoveClipListUpdated():Void
|
|
{
|
|
mcPageNavigator.SetTotalPages( Math.ceil( mMovieClipList.length / mEntriesPerPage ) );
|
|
}
|
|
|
|
public function GoToPage( _page ):Void
|
|
{
|
|
mcPageNavigator.GoToPage( _page );
|
|
}
|
|
|
|
public function NextPage():Void
|
|
{
|
|
ShowPage( mCurrentPage + 1);
|
|
}
|
|
|
|
public function PreviousPage():Void
|
|
{
|
|
ShowPage( mCurrentPage - 1 );
|
|
}
|
|
|
|
public function ShowPage( _page:Number ):Void
|
|
{
|
|
if ( ( _page - 1 ) * mEntriesPerPage <= mMovieClipList.length && _page != mCurrentPage )
|
|
{
|
|
if ( mCurrentPage > 0 )
|
|
{
|
|
HidePage( mCurrentPage );
|
|
mCurrentPage = _page;
|
|
}
|
|
else
|
|
{
|
|
ConsoleWindow.Trace("Showing page " + _page);
|
|
mCurrentPage = _page;
|
|
TogglePageVisibility( mCurrentPage, true );
|
|
}
|
|
}
|
|
}
|
|
|
|
public function HidePage( _page:Number ):Void
|
|
{
|
|
if ( ( _page-1 ) * mEntriesPerPage <= mMovieClipList.length )
|
|
{
|
|
ConsoleWindow.Trace("Hiding page " + _page);
|
|
TogglePageVisibility( _page, false );
|
|
}
|
|
}
|
|
|
|
private function RefreshPage():Void
|
|
{
|
|
//TogglePageVisibility( mCurrentPage, true );
|
|
InstantShowPage();
|
|
}
|
|
|
|
private function InstantShowPage():Void
|
|
{
|
|
var startIndex:Number = mCurrentPage * mEntriesPerPage - ( mEntriesPerPage );
|
|
var endIndex:Number = startIndex + mEntriesPerPage;
|
|
|
|
for ( var i:Number = 0; i < mEntriesPerPage; i++ )
|
|
{
|
|
var mcEntry:MovieClip = mMovieClipList[startIndex+i];
|
|
if ( !mcEntry )
|
|
{
|
|
break;
|
|
}
|
|
|
|
mcEntry._visible = true;
|
|
mcEntry._x = mFirstEntryX;
|
|
mcEntry._y = mFirstEntryY + (i) * (mcEntry._height + mDeltaY);
|
|
OnShowMovieClipEntry( mcEntry );
|
|
}
|
|
}
|
|
|
|
private var mLastTime:Number;
|
|
private var mCurEntryIndex:Number;
|
|
private var mFirstEntryIndex:Number;
|
|
private var mEntryVisibleState:Boolean;
|
|
private function TogglePageVisibility( _page:Number, _visibleState:Boolean ):Void
|
|
{
|
|
mcPageNavigator.Disable();
|
|
ConsoleWindow.Trace(this + ".TogglePageVisibility()..." + _visibleState);
|
|
mLastTime = getTimer();
|
|
|
|
mFirstEntryIndex = _page * mEntriesPerPage - ( mEntriesPerPage );
|
|
mEntryVisibleState = _visibleState;
|
|
|
|
mCurEntryIndex = 0;
|
|
onEnterFrame = OnTick;
|
|
}
|
|
|
|
private function OnTick():Void
|
|
{
|
|
var now:Number = getTimer();
|
|
var delta:Number = now - mLastTime;
|
|
|
|
//ConsoleWindow.Trace("OnTick, delta = " + delta);
|
|
//for ( var i:Number = 0; i < mEntriesPerPage; i++ )
|
|
if( delta > 100 )
|
|
{
|
|
ToggleEntryVisibility();
|
|
mLastTime = now;
|
|
}
|
|
}
|
|
|
|
private function ToggleEntryVisibility():Void
|
|
{
|
|
//ConsoleWindow.Trace(this + ".ToggleEntryVisibility(), mEntryVisibleState = " + mEntryVisibleState);
|
|
if( mCurEntryIndex < mEntriesPerPage )
|
|
{
|
|
var mcEntry:MovieClip = mMovieClipList[mFirstEntryIndex+mCurEntryIndex];
|
|
if ( !mcEntry )
|
|
{
|
|
ConsoleWindow.Trace("Entry not found.");
|
|
RemoveOnTick();
|
|
return;
|
|
}
|
|
|
|
mcEntry._visible = true;
|
|
if ( mEntryVisibleState )
|
|
{
|
|
//ConsoleWindow.Trace("Showing entry: " + mcEntry);
|
|
mcEntry._x = mFirstEntryX;// + 500;
|
|
mcEntry._y = mFirstEntryY + (mCurEntryIndex) * (mcEntry._height + mDeltaY);
|
|
//new Tween( mcEntry, "_x", None.easeNone, mFirstEntryX-200, mFirstEntryX, .3, true );
|
|
new Tween( mcEntry, "_alpha", None.easeNone, 0, 100, .3, true );
|
|
OnShowMovieClipEntry( mcEntry );
|
|
}
|
|
else
|
|
{
|
|
var tween_handler:Tween = new Tween( mcEntry, "_alpha", None.easeNone, 100, 0, .3, true );
|
|
//ConsoleWindow.Trace("Hiding entry: " + mcEntry);
|
|
//ConsoleWindow.Trace("Hiding tween_handler: " + tween_handler);
|
|
tween_handler.onMotionFinished = function()
|
|
{
|
|
this.obj._visible = false;
|
|
}
|
|
//OnHideMovieClipEntry( mcEntry );
|
|
}
|
|
|
|
mCurEntryIndex++;
|
|
return;
|
|
}
|
|
|
|
RemoveOnTick();
|
|
}
|
|
|
|
public function RemoveOnTick():Void
|
|
{
|
|
onEnterFrame = null;
|
|
if ( !mEntryVisibleState )
|
|
{
|
|
ConsoleWindow.Trace("Finished hiding previous page, showing current page: " + mCurrentPage);
|
|
TogglePageVisibility( mCurrentPage, true );
|
|
}
|
|
else
|
|
{
|
|
mcPageNavigator.Enable();
|
|
}
|
|
}
|
|
|
|
//override this in extended class to show/hide specific movieclips within mcEntry
|
|
private function OnShowMovieClipEntry( mcEntry:MovieClip, index:Number ):Void
|
|
{
|
|
mcEntry.mcLine._visible = ( index != 0 );
|
|
}
|
|
|
|
private function OnHideMovieClipEntry( mcEntry:MovieClip ):Void
|
|
{
|
|
}
|
|
|
|
private function OnFinishedHidingEntry( mcEntry:MovieClip ):Void
|
|
{
|
|
|
|
}
|
|
|
|
private function RemoveEntryFromList( _entry:MovieClip, _list:Array, bInstantRefresh:Boolean ):Void
|
|
{
|
|
var index:Number = -1;
|
|
var length = mMovieClipList.length;
|
|
for ( var i:Number = 0; i < length; i++ )
|
|
{
|
|
var entry:MovieClip = mMovieClipList[i];
|
|
//ConsoleWindow.Trace("entry = " + entry);
|
|
if ( entry == _entry )
|
|
{
|
|
index = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( index >= 0 )
|
|
{
|
|
mMovieClipList.splice( index, 1 );
|
|
_entry.removeMovieClip();
|
|
|
|
if ( bInstantRefresh )
|
|
{
|
|
InstantShowPage();
|
|
}
|
|
else
|
|
{
|
|
mFirstEntryIndex = mCurrentPage * mEntriesPerPage - ( mEntriesPerPage );
|
|
mCurEntryIndex = index - mFirstEntryIndex;
|
|
ConsoleWindow.Trace("Entry removed. mFirstEntryIndex = " + mFirstEntryIndex + " mCurEntryIndex = " + mCurEntryIndex);
|
|
for ( var n:Number = mCurEntryIndex; n < mEntriesPerPage; n++ )
|
|
{
|
|
var mcEntry:MovieClip = mMovieClipList[mFirstEntryIndex + n];
|
|
|
|
if ( n == mEntriesPerPage - 1 )
|
|
{
|
|
mcEntry._visible = true;
|
|
mcEntry._x = mFirstEntryX;
|
|
mcEntry._y = mFirstEntryY + (n+1) * (mcEntry._height + mDeltaY);
|
|
new Tween( mcEntry, "_alpha", None.easeNone, 0, 100, .3, true );
|
|
}
|
|
|
|
var targetY:Number = mFirstEntryY + (n) * (mcEntry._height + mDeltaY);
|
|
new Tween( mcEntry, "_y", None.easeNone, mcEntry._y, targetY, .3, true );
|
|
}
|
|
}
|
|
OnMoveClipListUpdated();
|
|
}
|
|
else
|
|
{
|
|
ConsoleWindow.Trace("WARNING! RemoveEntryFromList(), can't find the right entry to remove! entry = " + _entry);
|
|
}
|
|
|
|
mFirstEntryIndex = mCurrentPage * mEntriesPerPage - ( mEntriesPerPage );
|
|
//User deleted all the entries on the current page, manually show previous page
|
|
if ( mFirstEntryIndex >= mMovieClipList.length && mCurrentPage > 1 )
|
|
{
|
|
mcPageNavigator.PreviousPage();
|
|
}
|
|
//ConsoleWindow.Trace( " mFirstEntryIndex = " + mFirstEntryIndex + " mMovieClipList.length = " + mMovieClipList.length);
|
|
}
|
|
} |