mpxplugins/viewplugins/views/commonplaybackview/src/mpxbuttonmanager.cpp
changeset 0 ff3acec5bc43
child 21 a1247965635c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpxplugins/viewplugins/views/commonplaybackview/src/mpxbuttonmanager.cpp	Thu Dec 17 08:45:05 2009 +0200
@@ -0,0 +1,748 @@
+/*
+* Copyright (c) 2006 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:  Button state manager for playback view
+*
+*/
+
+
+// INCLUDE FILES
+#include <aknbutton.h>
+#include <mpxcommonplaybackview.rsg>
+#include <AknsUtils.h>
+#include <AknsSkinInstance.h>
+#include <AknsDrawUtils.h>
+#include <barsread.h>
+#include <AknDef.h>
+#include <featmgr.h>
+#include <aknconsts.h>
+#include "mpxbuttonmanager.h"
+#include "mpxplaybackviewlayoutinterface.h"
+#include "mpxcommonplaybackview.hrh"
+#include "mpxlog.h"
+
+// CONSTANTS
+
+
+struct TStateAndCommandIds
+    {
+    TInt iState;
+    TInt iEnterCommand;
+    TInt iExitCommand;
+    TInt iLongEnterCommand;
+    TInt iLongExitCommand;
+    };
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMPXButtonManager::CMPXButtonManager
+// -----------------------------------------------------------------------------
+//
+CMPXButtonManager::CMPXButtonManager(
+    MMPXButtonCmdObserver* aObserver,
+    MMPXPlaybackViewLayout* aLayout )
+    : iObserver(aObserver),
+      iLayout(aLayout),
+      iEnabled(ETrue)
+    {
+    MPX_FUNC("CMPXButtonManager::CMPXButtonManager()");
+    }
+
+// -----------------------------------------------------------------------------
+// CMPXButtonManager::NewL
+// -----------------------------------------------------------------------------
+//
+CMPXButtonManager* CMPXButtonManager::NewL(
+    MMPXButtonCmdObserver* aObserver,
+    MMPXPlaybackViewLayout* aLayout,
+    const CCoeControl &aContainer)
+    {
+    MPX_FUNC("CMPXButtonManager::NewL()");
+    CMPXButtonManager* self = new (ELeave) CMPXButtonManager(
+        aObserver,
+        aLayout);
+
+    CleanupStack::PushL(self);
+    //self->ConstructL(aRect, aContainer);
+    self->ConstructL(aContainer);
+    CleanupStack::Pop();
+    return self;
+    }
+// -----------------------------------------------------------------------------
+// CMPXButtonManager::~CMPXButtonManager
+// -----------------------------------------------------------------------------
+//
+CMPXButtonManager::~CMPXButtonManager()
+    {
+    MPX_FUNC("CMPXButtonManager::~CMPXButtonManager()");
+//    iButtons.ResetAndDestroy();
+    iAvkonButtons.ResetAndDestroy();
+    if (iLongKeyTimer)
+        {
+        iLongKeyTimer->Cancel();
+        delete iLongKeyTimer;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CMPXButtonManager::ConstructL (overloaded for avkon button rocker)
+// -----------------------------------------------------------------------------
+//
+void CMPXButtonManager::ConstructL(const CCoeControl &aContainer)
+    {
+    MPX_FUNC("CMPXButtonManager::ConstructL()");
+    iIsLongPress = EFalse;
+    iVolumeInRocker = (!FeatureManager::FeatureSupported( KFeatureIdSideVolumeKeys ));
+
+    if( AknLayoutUtils::PenEnabled() )
+        {
+            iIsTouchUi = ETrue;
+        }
+    else
+        {
+            iIsTouchUi = EFalse;
+        }
+
+    if (!iVolumeInRocker)
+        {
+            iStopInRocker = ETrue;
+        }
+    else
+        {
+            iStopInRocker = EFalse;
+        }
+
+    if( !iIsTouchUi)
+        {
+        CreateRockerAvkonButtonsL(aContainer);
+        }
+
+    ActivateL();
+
+    iLongKeyTimer = CPeriodic::NewL(CActive::EPriorityStandard);
+
+    }
+
+// -----------------------------------------------------------------------------
+// CMPXButtonManager::UpdateButtonStates
+// -----------------------------------------------------------------------------
+//
+void CMPXButtonManager::UpdateButtonStates( TMPXPlaybackState aState )
+    {
+    MPX_DEBUG2("CMPXButtonManager::UpdateButtonStates(%d) entering", aState);
+    if( !iIsTouchUi && !iIsSeeking )
+        {
+        if (aState == EPbStatePlaying)
+            {
+            // Playing
+            if (iAvkonButtons[EButtonPlay]->IsVisible())
+                {
+                iAvkonButtons[EButtonPlay]->MakeVisible(EFalse);
+                }
+            if (!iAvkonButtons[EButtonPause]->IsVisible())
+                {
+                iAvkonButtons[EButtonPause]->MakeVisible(ETrue);
+                }
+            }
+        else
+            {
+            // Not playing
+            if (!iAvkonButtons[EButtonPlay]->IsVisible())
+                {
+                iAvkonButtons[EButtonPlay]->MakeVisible(ETrue);
+                }
+            if (iAvkonButtons[EButtonPause]->IsVisible())
+                {
+                iAvkonButtons[EButtonPause]->MakeVisible(EFalse);
+                }
+            }
+
+        if (iAvkonButtons[EButtonPlay]->IsVisible())
+            {
+            if (aState == EPbStateNotInitialised &&
+                !iAvkonButtons[EButtonPlay]->IsDimmed())
+                {
+                iAvkonButtons[EButtonPlay]->SetDimmed(ETrue);
+                }
+            if (aState != EPbStateNotInitialised &&
+                iAvkonButtons[EButtonPlay]->IsDimmed())
+                {
+                iAvkonButtons[EButtonPlay]->SetDimmed(EFalse);
+                }
+            }
+
+        for (TInt i = 0; i< iRockerAvkonButtonCount; i++)
+            {
+            iAvkonButtons[i]->SetCurrentState(0, ETrue);
+            }
+        }
+
+    MPX_DEBUG1("CMPXButtonManager::UpdateButtonStates() exiting");
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMPXButtonManager::OfferKeyEventL
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CMPXButtonManager::OfferKeyEventL(
+    const TKeyEvent& aKeyEvent,
+    TEventCode aType )
+    {
+    MPX_DEBUG3("CMPXButtonManager::OfferKeyEventL(%d, %d) entering", aKeyEvent.iScanCode, aType);
+
+    TKeyResponse response( EKeyWasNotConsumed );
+    response = SetAvkonButtonState(aKeyEvent, aType);
+    MPX_DEBUG2("CMPXButtonManager::OfferKeyEventL() exiting %d", response);
+    return response;
+    }
+
+// -----------------------------------------------------------------------------
+// CMPXButtonManager::SetParentRect
+// -----------------------------------------------------------------------------
+//
+void CMPXButtonManager::SetParentRect(
+    const TRect& aRect )
+    {
+    iParentRect = aRect;
+    }
+
+// -----------------------------------------------------------------------------
+// CMPXButtonManager::SetEnabled
+// -----------------------------------------------------------------------------
+//
+void CMPXButtonManager::SetEnabled( TBool aEnabled )
+    {
+    MPX_DEBUG2("CMPXButtonManager::SetEnabled(%d) entering", aEnabled);
+    iEnabled = aEnabled;
+    MPX_DEBUG1("CMPXButtonManager::SetEnabled() exiting");
+    }
+
+// -----------------------------------------------------------------------------
+// CMPXButtonManager::HandleForegroundLostL
+// -----------------------------------------------------------------------------
+//
+void CMPXButtonManager::HandleForegroundLostL()
+    {
+    MPX_FUNC( "CMPXButtonManager::HandleForegroundLostL" );
+    iIsSeeking = EFalse;
+
+ 	if (iIsLongPress)
+		{
+		iIsLongPress = EFalse;
+		iObserver->HandleButtonCommandL(EMPXPbvCmdEndSeek);
+		}
+
+	if(iLongKeyTimer)
+		{
+		iLongKeyTimer->Cancel();
+		}
+    }
+
+// -----------------------------------------------------------------------------
+// CMPXCommonPlaybackViewContainer::CreateRockerAvkonButtonsL
+// -----------------------------------------------------------------------------
+//
+void CMPXButtonManager::CreateRockerAvkonButtonsL(const CCoeControl &aContainer)
+    {
+    TResourceReader reader;
+    iRockerAvkonButtonCount = 0;
+    CCoeEnv::Static()->CreateResourceReaderLC( reader, R_MPX_PBV_ROCKER_AVKON_BUTTONS );
+    TInt numButtons( reader.ReadInt16() );
+
+    CCoeControl::SetContainerWindowL(aContainer);
+
+    for (TInt i = 0; i < numButtons; i++ )
+        {
+        CAknButton* aknButton = CAknButton::NewL();
+        CleanupStack::PushL( aknButton );
+        aknButton->SetContainerWindowL(*this);
+        aknButton->SetParent( this );
+        aknButton->ConstructFromResourceL( reader );
+        aknButton->SetObserver( this );
+        aknButton->SetLongPressInterval(1000);//KAknKeyboardRepeatInitialDelay / 1000);
+        aknButton->SetKeyRepeatInterval(0, KAknKeyboardRepeatInitialDelay / 1000);
+        aknButton->ActivateL();
+        iAvkonButtons.AppendL( aknButton );
+        CleanupStack::Pop( aknButton );
+        iRockerAvkonButtonCount++;
+        }
+
+    CleanupStack::PopAndDestroy(); // reader;
+
+    TResourceReader reader2;
+    if (iVolumeInRocker)
+        {
+        CCoeEnv::Static()->CreateResourceReaderLC( reader2, R_MPX_PBV_ROCKER_VOLUME_AVKON_BUTTONS );
+        numButtons = reader2.ReadInt16();
+        for (TInt i = 0; i < numButtons; i++ )
+            {
+            CAknButton* aknButton = CAknButton::NewL();
+            CleanupStack::PushL( aknButton );
+            aknButton->SetContainerWindowL( *this );
+            aknButton->SetParent( this );
+            aknButton->ConstructFromResourceL( reader2 );
+            aknButton->SetObserver( this );
+            aknButton->SetLongPressInterval(1000);//KAknKeyboardRepeatInitialDelay / 1000);
+            aknButton->SetKeyRepeatInterval(0, KAknKeyboardRepeatInitialDelay / 1000);
+            aknButton->ActivateL();
+            iAvkonButtons.AppendL( aknButton );
+            CleanupStack::Pop( aknButton );
+            iRockerAvkonButtonCount++;
+            }
+        }
+    else
+        {
+        CCoeEnv::Static()->CreateResourceReaderLC( reader2, R_MPX_PBV_ROCKER_STOP_AVKON_BUTTON );
+        CAknButton* aknButton = CAknButton::NewL();
+        CleanupStack::PushL( aknButton );
+        aknButton->SetContainerWindowL( *this );
+        aknButton->SetParent( this );
+        aknButton->ConstructFromResourceL( reader2 );
+        aknButton->SetObserver( this );
+        aknButton->SetLongPressInterval(1000);//KAknKeyboardRepeatInitialDelay / 1000);
+        aknButton->SetKeyRepeatInterval(0, KAknKeyboardRepeatInitialDelay / 1000);
+        aknButton->ActivateL();
+        iAvkonButtons.AppendL( aknButton );
+        CleanupStack::Pop( aknButton );
+        iRockerAvkonButtonCount++;
+        }
+
+    CleanupStack::PopAndDestroy(); // reader2;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CMPXCommonPlaybackViewContainer::SetAvkonButtonState
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CMPXButtonManager::SetAvkonButtonState(const TKeyEvent& aKeyEvent,
+        TEventCode aType)
+    {
+
+    TKeyResponse response = EKeyWasNotConsumed;
+
+    if (aKeyEvent.iScanCode == EStdKeyLeftArrow || aKeyEvent.iCode == EKeyLeftArrow)
+        {    
+        MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState LeftArrow" );
+        if (aType == EEventKeyDown)
+            {
+            if (!iIsTouchUi)
+                {
+                iAvkonButtons[EButtonRewind]->SetCurrentState(1, ETrue); 
+                }
+            iLongKeyTimer->Cancel();
+            iLongKeyTimer->Start(KAknKeyboardRepeatInitialDelay,
+                                 KAknKeyboardRepeatInitialDelay,
+                                 TCallBack(TimerCallback, this));
+            iLongPressCommandId = EMPXPbvCmdSeekBackward;
+            iIsSeeking = ETrue;
+            }
+        else if (aType == EEventKeyUp)
+            {
+            if (!iIsTouchUi)
+                {
+                iAvkonButtons[EButtonRewind]->SetCurrentState(0, ETrue);
+                }
+            iLongKeyTimer->Cancel();
+            if (iIsLongPress)
+               {
+               MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState LeftArrow long press" );
+               iIsLongPress = EFalse;
+               iObserver->HandleButtonCommandL(EMPXPbvCmdEndSeek);
+               }
+            else
+               {
+               MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState LeftArrow short press" );
+               iObserver->HandleButtonCommandL(EMPXPbvCmdPreviousListItem);
+               }
+            iIsLongPress = EFalse;
+            response = EKeyWasConsumed;
+            iIsSeeking = EFalse;
+            }
+        }
+    else if (aKeyEvent.iScanCode == EStdKeyRightArrow || aKeyEvent.iCode == EKeyRightArrow)
+        {
+        if (aType == EEventKeyDown)
+            {
+	    	    if (!iIsTouchUi)
+	    	        {
+                iAvkonButtons[EButtonFastForward]->SetCurrentState(1, ETrue);
+                }
+            iLongKeyTimer->Cancel();
+            iLongKeyTimer->Start(KAknKeyboardRepeatInitialDelay,
+                                 KAknKeyboardRepeatInitialDelay,
+                                 TCallBack(TimerCallback, this));
+            iLongPressCommandId = EMPXPbvCmdSeekForward;
+            iIsSeeking = ETrue;
+            }
+            else if (aType == EEventKeyUp)
+                {
+                if (!iIsTouchUi)
+                    {
+                    iAvkonButtons[EButtonFastForward]->SetCurrentState(0, ETrue);    
+                    }
+                iLongKeyTimer->Cancel();
+                if (iIsLongPress)
+                    {
+                    MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState RightArrow long press" );
+                    iIsLongPress = EFalse;
+                    iObserver->HandleButtonCommandL(EMPXPbvCmdEndSeek);
+                    }
+                else
+                    {
+				            MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState RightArrow short press" );
+                   iObserver->HandleButtonCommandL(EMPXPbvCmdNextListItem);
+                   }
+                iIsLongPress = EFalse;
+                iIsSeeking = EFalse;
+                response = EKeyWasConsumed;
+                }
+        }
+    else if (aKeyEvent.iScanCode == EStdKeyDevice3 || aKeyEvent.iCode == EKeyDevice3
+            || aKeyEvent.iScanCode == EStdKeyEnter || aKeyEvent.iCode == EKeyEnter)
+   		{
+   		MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState EStdKeyDevice3 or EStdKeyEnter pressed" );
+        if (!iIsTouchUi)
+            {
+            if (aType == EEventKeyDown)
+                {
+                iKeyDownEventReceived = ETrue;
+    
+                if (iAvkonButtons[EButtonPause]->IsVisible())
+                    {
+                    iAvkonButtons[EButtonPause]->SetCurrentState(1, ETrue);
+                    }
+                else
+                    {
+                    iAvkonButtons[EButtonPlay]->SetCurrentState(1, ETrue);
+                    }
+                }
+            else if (aType == EEventKeyUp)
+                {
+                if ( iKeyDownEventReceived )
+                    {
+                    if (iAvkonButtons[EButtonPause]->IsVisible())
+                        {
+                        iAvkonButtons[EButtonPause]->SetCurrentState(0, ETrue);
+                        iObserver->HandleButtonCommandL(EMPXPbvCmdPause);
+                        response = EKeyWasConsumed;
+                        }
+                    else
+                        {
+                        iAvkonButtons[EButtonPlay]->SetCurrentState(0, ETrue);
+                        iObserver->HandleButtonCommandL(EMPXPbvCmdPlay);
+                        response = EKeyWasConsumed;
+                        }
+                    }
+                iKeyDownEventReceived= EFalse;
+                }
+            }
+        else  //iIsTouchUi
+            {
+            if (aType == EEventKeyDown)
+                {
+                iKeyDownEventReceived = ETrue;
+                }
+            else if (aType == EEventKeyUp)
+                {
+                if ( iKeyDownEventReceived )
+                    {
+                    iObserver->HandleButtonCommandL(EMPXPbvCmdPlayPause );
+                    response = EKeyWasConsumed;
+                    }
+                iKeyDownEventReceived = EFalse;
+                }
+            }	
+   		}
+    else if (aKeyEvent.iScanCode == EStdKeyDownArrow || aKeyEvent.iCode == EKeyDownArrow)
+        {
+        MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState EStdKeyDownArrow pressed" );
+        if (iVolumeInRocker || iStopInRocker)
+           {	
+           if (!iIsTouchUi)
+               {
+            if (aType == EEventKeyDown)
+                {
+                iAvkonButtons[EButtonVolumeDown]->SetCurrentState(1, ETrue);
+                }
+            else if (aType == EEventKeyUp)
+                {
+                iAvkonButtons[EButtonVolumeDown]->SetCurrentState(0, ETrue);
+                if(iVolumeInRocker)
+                    {
+                    iObserver->HandleButtonCommandL(EMPXPbvCmdDecreaseVolume);
+                    }
+                else
+                    {
+                    iObserver->HandleButtonCommandL(EMPXPbvCmdStop);
+                    }
+                response = EKeyWasConsumed;
+                    }
+               }
+		       else //iIsTouchUi
+		           {
+               if (iVolumeInRocker && aType == EEventKeyUp )
+			             {            
+                   iObserver->HandleButtonCommandL(EMPXPbvCmdDecreaseVolume);
+                   }
+               else if (iStopInRocker && aType == EEventKeyUp)
+                   {                 		
+                   iObserver->HandleButtonCommandL(EMPXPbvCmdStop);
+                   }
+               response = EKeyWasConsumed; 
+               }
+		        }
+		    }
+    else if (aKeyEvent.iScanCode == EStdKeyUpArrow || aKeyEvent.iCode == EKeyUpArrow)
+        {
+        MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState EStdKeyUpArrow pressed" );
+        if(iVolumeInRocker)
+            {
+	    	    if (!iIsTouchUi)
+                {
+                if (aType == EEventKeyDown)
+                    {
+                    iAvkonButtons[EButtonVolumeUp]->SetCurrentState(1, ETrue);
+                    }
+                else if (aType == EEventKeyUp)
+                    {
+                	  iAvkonButtons[EButtonVolumeUp]->SetCurrentState(0, ETrue);     		
+                	  iObserver->HandleButtonCommandL(EMPXPbvCmdIncreaseVolume);
+                	  response = EKeyWasConsumed;
+                	  }
+                }
+            else //iIsTouchUi
+                {
+                if (aType == EEventKeyUp)
+              	    {
+                    iObserver->HandleButtonCommandL(EMPXPbvCmdIncreaseVolume);
+                	  response = EKeyWasConsumed;   
+                	  }	
+                }
+           }
+        }
+      return response;
+    }
+
+// -----------------------------------------------------------------------------
+// CMPlayerPlaybackContainer::TimerCallback
+// -----------------------------------------------------------------------------
+//
+TInt CMPXButtonManager::TimerCallback(TAny* aPtr)
+    {
+    //HandleLongPress();
+    static_cast<CMPXButtonManager*>(aPtr)->HandleLongPress();
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CMPlayerPlaybackContainer::HandleLongPress
+// -----------------------------------------------------------------------------
+//
+void CMPXButtonManager::HandleLongPress()
+    {
+    iObserver->HandleButtonCommandL(iLongPressCommandId);
+    iLongKeyTimer->Cancel();
+    iIsLongPress = ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// void CMPXCommonPlaybackViewContainer::HandleControlEventL
+// ----------------------------------------------------------------------------
+//
+void CMPXButtonManager::HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType )
+    {
+
+    if( AknLayoutUtils::PenEnabled() )
+        {
+        switch( aEventType )
+            {
+            case EEventStateChanged:
+                {
+                if (iVolumeInRocker)
+                {
+                if ( aControl == iAvkonButtons[EButtonVolumeUp] )
+                    {
+                    iAvkonButtons[EButtonVolumeUp]->SetCurrentState(0, ETrue);
+                    iObserver->HandleButtonCommandL(EMPXPbvCmdIncreaseVolume);
+                    }
+                else if ( aControl == iAvkonButtons[EButtonVolumeDown] )
+                    {
+                    iAvkonButtons[EButtonVolumeDown]->SetCurrentState(0, ETrue);
+                    iObserver->HandleButtonCommandL(EMPXPbvCmdDecreaseVolume);
+                    }
+
+                }
+
+                break;
+                }
+            case CAknButton::ELongPressEvent:
+                {
+                if ( aControl == iAvkonButtons[EButtonFastForward] )
+                    {
+                    iIsLongPress = ETrue;
+                    iAvkonButtons[EButtonFastForward]->SetCurrentState(0, ETrue);
+                    iObserver->HandleButtonCommandL(EMPXPbvCmdSeekForward);
+                    }
+                else if ( aControl == iAvkonButtons[EButtonRewind] )
+                    {
+                    iIsLongPress = ETrue;
+                    iAvkonButtons[EButtonRewind]->SetCurrentState(0, ETrue);
+                    iObserver->HandleButtonCommandL(EMPXPbvCmdSeekBackward);
+                    }
+                break;
+                }
+            case MCoeControlObserver::EEventRequestExit:
+                {
+                if ( aControl == iAvkonButtons[EButtonPlay] )
+                    {
+                    iAvkonButtons[EButtonPlay]->SetCurrentState(0, ETrue);
+                    iObserver->HandleButtonCommandL(EMPXPbvCmdPlay);
+                    }
+                else if ( aControl == iAvkonButtons[EButtonPause] )
+                    {
+                    iAvkonButtons[EButtonPause]->SetCurrentState(0, ETrue);
+                    iObserver->HandleButtonCommandL(EMPXPbvCmdPause);
+                    }
+                else if ( aControl == iAvkonButtons[EButtonFastForward] )
+                    {
+                    if (iIsLongPress)
+                        {
+                        iIsLongPress = EFalse;
+                        iAvkonButtons[EButtonFastForward]->SetCurrentState(0, ETrue);
+                        iObserver->HandleButtonCommandL(EMPXPbvCmdEndSeek);
+                        }
+                    else
+                        {
+                        iAvkonButtons[EButtonFastForward]->SetCurrentState(0, ETrue);
+                        iObserver->HandleButtonCommandL(EMPXPbvCmdNextListItem);
+                        }
+                    }
+                else if ( aControl == iAvkonButtons[EButtonRewind] )
+                    {
+                    if (iIsLongPress)
+                        {
+                        iIsLongPress = EFalse;
+                        iAvkonButtons[EButtonRewind]->SetCurrentState(0, ETrue);
+                        iObserver->HandleButtonCommandL(EMPXPbvCmdEndSeek);
+                        }
+                    else
+                        {
+                        iAvkonButtons[EButtonRewind]->SetCurrentState(0, ETrue);
+                        iObserver->HandleButtonCommandL(EMPXPbvCmdPreviousListItem);
+                        }
+                    }
+                else if ( !iVolumeInRocker)
+                    {
+                    if(aControl == iAvkonButtons[EButtonVolumeDown])
+                        {
+                        iAvkonButtons[EButtonVolumeDown]->SetCurrentState(0, ETrue);
+                        iObserver->HandleButtonCommandL(EMPXPbvCmdStop);
+                        }
+                    }
+                break;
+                }
+            default:
+                break;
+            }
+        }
+
+    }
+
+// ---------------------------------------------------------------------------
+// From CCoeControl
+// Gets the number of controls contained in a compound control.
+// ---------------------------------------------------------------------------
+//
+TInt CMPXButtonManager::CountComponentControls() const
+    {
+    return iRockerAvkonButtonCount;
+    }
+
+// ---------------------------------------------------------------------------
+// From CCoeControl
+// Gets an indexed component of a compound control.
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CMPXButtonManager::ComponentControl( TInt aIndex ) const
+    {
+    ASSERT( aIndex < iRockerAvkonButtonCount );
+    return iAvkonButtons[aIndex];
+    }
+
+// ---------------------------------------------------------------------------
+// From CCoeControl
+// Handles a change to the control's resources.
+// ---------------------------------------------------------------------------
+//
+void CMPXButtonManager::HandleResourceChange( TInt aType )
+    {
+
+    if ( aType == KAknsMessageSkinChange )
+        {
+        for (TInt i = 0; i< iRockerAvkonButtonCount; i++)
+            {
+            iAvkonButtons[i]->HandleResourceChange( aType );
+            }
+
+        }
+    }
+// ---------------------------------------------------------------------------
+// From CCoeControl
+// Handles a size change
+// ---------------------------------------------------------------------------
+//
+void CMPXButtonManager::SizeChanged()
+    {
+    iParentRect = Rect();
+    TRect rockerRect = iLayout->ButtonLayout(iParentRect);
+    TRect controlButtonRect;
+    for (TInt i = 0; i< iRockerAvkonButtonCount; i++)
+        {
+        controlButtonRect = iLayout->ButtonLayout(rockerRect, i);
+        iAvkonButtons[i]->SetRect( controlButtonRect );
+        }
+    }
+
+void CMPXButtonManager::Draw(CWindowGc& /*aGc*/, const CCoeControl& /*aControl*/, const TRect& /*aRect*/) const
+    {
+	// Do Nothing
+    }
+
+// -----------------------------------------------------------------------------
+// CMPXButtonManager::RestoreButtonStates
+// -----------------------------------------------------------------------------
+//
+void CMPXButtonManager::RestoreButtonStates( TMPXPlaybackState aState )
+    {
+    MPX_DEBUG2("CMPXButtonManager::RestoreButtonStates(%d) entering", aState);    
+    if( !iIsTouchUi)
+        {
+        if (aState == EPbStatePlaying)
+            {
+            // Playing
+            if (!iAvkonButtons[EButtonFastForward]->IsDimmed())
+                {
+                iAvkonButtons[EButtonFastForward]->SetDimmed(ETrue);
+                }
+            if (!iAvkonButtons[EButtonRewind]->IsDimmed())
+                {
+                iAvkonButtons[EButtonRewind]->SetDimmed(ETrue);
+                }
+            }
+        }
+    MPX_DEBUG1("CMPXButtonManager::ResoreButtonStates() exiting");
+    }
+//  End of File