--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/tsrc/public/basic/common/testviewframework/src/testplaybackview.cpp Mon Oct 04 00:50:27 2010 +0300
@@ -0,0 +1,400 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A view displaying basic playback state and feature
+*
+*/
+
+#include <stiflogger.h>
+#include <e32const.h>
+#include "testplaybackviewobserver.h"
+#include "testplaybackview.h"
+
+// CONSTANTS
+_LIT(KSpacer, " ");
+_LIT(KPlay, " Play-1 ");
+_LIT(KPlaySel, "(Play-1)");
+_LIT(KBackward, " <<-2 ");
+_LIT(KForward, " >>-3 ");
+_LIT(KStop, " Stop-4 ");
+_LIT(KStopSel, "(Stop-4)");
+_LIT(KFastRewind, " FR-5 ");
+_LIT(KFastRewindSel, "(FR-5)");
+_LIT(KFastForward, " FF-6 ");
+_LIT(KFastForwardSel, "(FF-6)");
+_LIT(KPause, " Pause-7 ");
+_LIT(KPauseSel, "(Pause-7)");
+
+_LIT(KExit, "Exit-Esc" );
+
+const TInt KSongInfoYOffset = 10;
+const TInt KDisplayScreenWidthOffset = 10;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Symbian 2-phrase constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CTestPlaybackView* CTestPlaybackView::NewL(CConsoleMain* aConsoleMain,
+ CTestBaseView* aParent,
+ const TDesC& aName,
+ CStifLogger* aLogger)
+ {
+ CTestPlaybackView* self = new (ELeave) CTestPlaybackView(aConsoleMain,
+ aParent,
+ aName,
+ aLogger);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+
+ }
+
+// ---------------------------------------------------------------------------
+// C++ destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CTestPlaybackView::~CTestPlaybackView()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Add observer
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTestPlaybackView::AddObserver(MTestPlaybackViewObserver* aObs)
+ {
+ iTestPlaybackViewObs = aObs;
+ }
+
+// ---------------------------------------------------------------------------
+// Update current index
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTestPlaybackView::UpdateItemIndex(TInt aIndex, TInt aTotalItem)
+ {
+ iCurrentStatus.iItemIndex = aIndex;
+ iCurrentStatus.iMaxItems = aTotalItem;
+ RedrawIndex();
+ }
+
+// ---------------------------------------------------------------------------
+// Update position in the song
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTestPlaybackView::UpdateProgress(TInt aPosition, TInt aDuration)
+ {
+ iCurrentStatus.iProgressPos = aPosition;
+ iCurrentStatus.iProgressDur = aDuration;
+ RedrawProgress();
+ }
+
+// ---------------------------------------------------------------------------
+// Update volume
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTestPlaybackView::UpdateVolume(TInt aVolume, TInt aMaxVolume)
+ {
+ iCurrentStatus.iVolume = aVolume;
+ iCurrentStatus.iMaxVolume = aMaxVolume;
+ RedrawVolume();
+ }
+
+// ---------------------------------------------------------------------------
+// Update artist and song name
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTestPlaybackView::UpdateSongInfo(const TDesC& aArtist,
+ const TDesC& aSongName)
+ {
+ TInt y = iDisplaySize.iHeight/ 2 - 2;
+ //erase previous text
+ for(TInt i = 0; i < iDisplaySize.iWidth; i++)
+ {
+ iConsole->SetPos(i,y);
+ iConsole->Printf(_L(" "));
+ iConsole->SetPos(i,y+1);
+ iConsole->Printf(_L(" "));
+ }
+ iConsole->SetPos(
+ Max((iDisplaySize.iWidth - aArtist.Length())/2, 0), y++);
+ iConsole->Printf(_L("%S"), &aArtist);
+ iConsole->SetPos(
+ Max((iDisplaySize.iWidth - aSongName.Length())/2, 0), y);
+ iConsole->Printf(_L("%S"), &aSongName);
+ //DisplayViewL();
+ }
+
+// ---------------------------------------------------------------------------
+// Handles state changes in playbackutility
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTestPlaybackView::StateChanged(TTestPlaybackState aState)
+ {
+
+ switch(aState)
+ {
+ case ETPbStateInitialising:
+ UpdateSongInfo(KNullDesC, _L("Opening file"));
+ case ETPbStateShuttingDown:
+ case ETPbStateBuffering:
+ case ETPbStateDownloading:
+ case ETPbStateStopped:
+ case ETPbStateNotInitialised:
+ iCurrentStatus.iPlaying = iCurrentStatus.iForwardSeek
+ = iCurrentStatus.iBackwardSeek = iCurrentStatus.iPause = EFalse;
+ break;
+ case ETPbStatePaused:
+ iCurrentStatus.iPlaying = iCurrentStatus.iForwardSeek
+ = iCurrentStatus.iBackwardSeek = EFalse;
+ iCurrentStatus.iPause = ETrue;
+ break;
+ case ETPbStatePlaying:
+ iCurrentStatus.iPause = iCurrentStatus.iForwardSeek
+ = iCurrentStatus.iBackwardSeek = EFalse;
+ iCurrentStatus.iPlaying = ETrue;
+ break;
+ case ETPbStateSeekingForward:
+ iCurrentStatus.iBackwardSeek = EFalse;
+ iCurrentStatus.iForwardSeek = ETrue;
+ break;
+ case ETPbStateSeekingBackward:
+ iCurrentStatus.iForwardSeek = EFalse;
+ iCurrentStatus.iBackwardSeek = ETrue;
+ break;
+ }
+ RedrawPlayerStatue();
+ }
+
+// ---------------------------------------------------------------------------
+// From class CTestBaseView.
+// Initialization of a view before first time activation
+// ---------------------------------------------------------------------------
+//
+void CTestPlaybackView::InitializeViewL()
+ {
+ iConsole->ClearScreen();
+ RedrawProgress();
+ RedrawVolume();
+ UpdateSongInfo(KNullDesC, KNullDesC);
+ RedrawPlayerStatue();
+ }
+
+// ---------------------------------------------------------------------------
+// From class CTestBaseView.
+// Cleanup the child view before deactivate/destroy view
+// ---------------------------------------------------------------------------
+//
+void CTestPlaybackView::CleanupViewL()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// From class CTestBaseView.
+// Display this view
+// ---------------------------------------------------------------------------
+//
+void CTestPlaybackView::DisplayViewL()
+ {
+ DisplayViewBase();
+ RedrawIndex();
+ RedrawProgress();
+ RedrawVolume();
+ RedrawPlayerStatue();
+ }
+
+// ---------------------------------------------------------------------------
+// From class CTestBaseView.
+// Process keypresses on this view - called by ConsoleMain
+// ---------------------------------------------------------------------------
+//
+void CTestPlaybackView::SelectL( TKeyCode aSelection, TBool& aContinue )
+ {
+ aContinue = ETrue;
+ switch(aSelection)
+ {
+ case '1':
+ iTestPlaybackViewObs->HandleUiCommandL(ETPbViewCmdPlay);
+ break;
+ case '2':
+ iTestPlaybackViewObs->HandleUiCommandL(ETPbViewCmdPrevious);
+ break;
+ case '3':
+ iTestPlaybackViewObs->HandleUiCommandL(ETPbViewCmdNext);
+ break;
+ case '4':
+ iTestPlaybackViewObs->HandleUiCommandL(ETPbViewCmdStop);
+ break;
+ case '5':
+ iTestPlaybackViewObs->HandleUiCommandL(iCurrentStatus.iBackwardSeek?
+ ETPbViewCmdStopSeeking :
+ ETPbViewCmdStartSeekBackward);
+ break;
+ case '6':
+ iTestPlaybackViewObs->HandleUiCommandL(iCurrentStatus.iForwardSeek?
+ ETPbViewCmdStopSeeking :
+ ETPbViewCmdStartSeekForward);
+ break;
+ case '7':
+ iTestPlaybackViewObs->HandleUiCommandL(ETPbViewCmdPause);
+ break;
+ case '8':
+ iTestPlaybackViewObs->HandleUiCommandL(ETPbViewCmdDecreaseVolume);
+ break;
+ case '9':
+ iTestPlaybackViewObs->HandleUiCommandL(ETPbViewCmdIncreaseVolume);
+ break;
+ case EKeyEscape:
+ iTestPlaybackViewObs->HandleUiCommandL(ETPbViewCmdClose);
+ aContinue = EFalse;
+ CurrentViewDoneL();
+ break;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From class CTestBaseView.
+// Update display from timer - called by ConsoleMain
+// ---------------------------------------------------------------------------
+//
+void CTestPlaybackView::TimerUpdate()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CTestPlaybackView::CTestPlaybackView(CConsoleMain* aConsoleMain,
+ CTestBaseView* aParent,
+ const TDesC& aName,
+ CStifLogger* aLogger)
+ : CTestBaseView(aConsoleMain, aParent, aName)
+ {
+ iDisplaySize = iConsole->ScreenSize();
+ iDisplaySize.iWidth = iDisplaySize.iWidth - KDisplayScreenWidthOffset;
+ iLogger = aLogger;
+ }
+
+// ---------------------------------------------------------------------------
+// Symbian 2-phrase constructor
+// ---------------------------------------------------------------------------
+//
+void CTestPlaybackView::ConstructL()
+ {
+
+ iCurrentStatus.iBackwardSeek = EFalse;
+ iCurrentStatus.iForwardSeek = EFalse;
+ iCurrentStatus.iPlaying = EFalse;
+ iCurrentStatus.iPause = EFalse;
+ iCurrentStatus.iVolume = 0;
+ iCurrentStatus.iMaxVolume = 20; //magic number??
+ iCurrentStatus.iProgressPos = 0;
+ iCurrentStatus.iProgressDur = KMaxTInt;
+ iCurrentStatus.iItemIndex = 0;
+ iCurrentStatus.iMaxItems = 0;
+
+ InitializeViewL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// Redraw index in view
+// ---------------------------------------------------------------------------
+//
+void CTestPlaybackView::RedrawIndex()
+ {
+ if(iCurrentStatus.iMaxItems <= 0)
+ return;
+ iConsole->SetPos(iDisplaySize.iWidth - 5, 3); //##/## format
+ iConsole->Printf(_L(" ")); //clean
+ iConsole->SetPos(iDisplaySize.iWidth - 5, 3);
+ iConsole->Printf(_L("%d/%d"), iCurrentStatus.iItemIndex,
+ iCurrentStatus.iMaxItems);
+
+ }
+
+// ---------------------------------------------------------------------------
+// Redraw progress bar in view
+// ---------------------------------------------------------------------------
+//
+void CTestPlaybackView::RedrawProgress()
+ {
+ if(iCurrentStatus.iProgressDur <= 0)
+ return;
+ TInt pos = iCurrentStatus.iProgressPos *
+ iDisplaySize.iWidth / iCurrentStatus.iProgressDur ;
+ iConsole->SetPos(0, iDisplaySize.iHeight / 2);
+ for(TInt x = 1; x <= iDisplaySize.iWidth; x++)
+ iConsole->Printf(x<=pos? _L("=") : _L("-"));
+ }
+
+// ---------------------------------------------------------------------------
+// Redraw volume bar in view
+// ---------------------------------------------------------------------------
+//
+void CTestPlaybackView::RedrawVolume()
+ {
+ if(iCurrentStatus.iMaxVolume <= 0)
+ return;
+ TInt pos = iCurrentStatus.iVolume *
+ iCurrentStatus.iMaxVolume / iCurrentStatus.iMaxVolume ;
+ iConsole->SetPos(0, 1);
+ iConsole->Printf(_L("Volume(8|9):"));
+ for(TInt x = 1; x <= iCurrentStatus.iMaxVolume; x++)
+ iConsole->Printf(x <= pos? _L("=") : _L("-"));
+ iConsole->Printf(_L(" %d/%d"),
+ iCurrentStatus.iVolume,
+ iCurrentStatus.iMaxVolume);
+ }
+
+// ---------------------------------------------------------------------------
+// Redraw status/control part of the view
+// ---------------------------------------------------------------------------
+//
+void CTestPlaybackView::RedrawPlayerStatue()
+ {
+ TInt linePosY = iDisplaySize.iHeight - KSongInfoYOffset;
+
+ //Line 1
+ iConsole->SetPos(0, linePosY);
+ iConsole->Printf(iCurrentStatus.iPlaying?
+ KStop : KStopSel);
+ iConsole->Printf(KSpacer);
+ iConsole->Printf(iCurrentStatus.iBackwardSeek?
+ KFastRewindSel : KFastRewind);
+ iConsole->Printf(KSpacer);
+ iConsole->Printf(iCurrentStatus.iForwardSeek?
+ KFastForwardSel : KFastForward);
+ iConsole->Printf(KSpacer);
+ iConsole->Printf(iCurrentStatus.iPause?
+ KPauseSel : KPause);
+
+ //Line 2
+ iConsole->SetPos(0, ++linePosY);
+ iConsole->Printf(iCurrentStatus.iPlaying?
+ KPlaySel : KPlay);
+ iConsole->Printf(KSpacer);
+ iConsole->Printf(KBackward);
+ iConsole->Printf(KSpacer);
+ iConsole->Printf(KForward);
+
+ //Line Exit
+ iConsole->SetPos(iDisplaySize.iWidth - KExit().Length(),
+ iDisplaySize.iHeight - 1);
+ iConsole->Printf(KExit);
+ }
+