Init
This commit is contained in:
@ -0,0 +1,272 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user