| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- 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);
- }
- }
|