diff -r 000000000000 -r 96612d01cf9f videoplayback/videoplaybackviews/src/mpxvideoplaybackcontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoplayback/videoplaybackviews/src/mpxvideoplaybackcontainer.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,573 @@ +/* +* Copyright (c) 2008 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: Implementation of Video playback view's container. +* +*/ + +// Version : %version: 22 % + + + +// INCLUDE FILES + +#include // RWindowBase +#include +#include +#include +#include +#include +#include +#include // SetSize for the icons +#include +#include +#include // Side volume key +#include // KDC_APP_BITMAP_DIR +#include +#include +#include + +#include "mpxcommonvideoplaybackview.hrh" +#include "mpxvideoplaybackview.h" +#include "mpxvideoplaybackviewfiledetails.h" +#include "mpxvideoplaybackcontainer.h" +#include "mpxvideoplaybackcontrolscontroller.h" +#include "mpxvideoplaybackuserinputhandler.h" +#include +#include "mpxvideo_debug.h" + +using namespace AknLayoutScalable_Apps; + +// CONSTANTS + +// ======== MEMBER FUNCTIONS ======================================================================= + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackContainer::CMPXVideoPlaybackContainer() +// ------------------------------------------------------------------------------------------------- +// +CMPXVideoPlaybackContainer::CMPXVideoPlaybackContainer( CMPXVideoBasePlaybackView* aView ) + : iView( aView ) +{ +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackContainer::NewL() +// ------------------------------------------------------------------------------------------------- +// +CMPXVideoPlaybackContainer* CMPXVideoPlaybackContainer::NewL( CMPXVideoBasePlaybackView* aView ) +{ + MPX_DEBUG(_L("CMPXVideoPlaybackContainer::NewL()")); + + CMPXVideoPlaybackContainer* self = new (ELeave) CMPXVideoPlaybackContainer( aView ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; +} + +// ------------------------------------------------------------------------------------------------- +// CMPNormalScreenPlaybackContainer::ConstructL +// Symbian 2nd phase constructor can leave. +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackContainer::ConstructL() +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackContainer::ConstructL()")); + + SetMopParent( iView ); + CreateWindowL(); + + TAknWindowLineLayout screenLayout = AknLayout::screen(); + TRect screenRect = screenLayout.Rect(); + + SetRect( screenRect ); + + CreateControlsL(); + + iUserInputHandler = + CMPXVideoPlaybackUserInputHandler::NewL( this, iFileDetails->iTvOutConnected ); + + ActivateL(); +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackContainer::~CMPXVideoPlaybackContainer() +// ------------------------------------------------------------------------------------------------- +// +CMPXVideoPlaybackContainer::~CMPXVideoPlaybackContainer() +{ + if ( iFileDetails ) + { + delete iFileDetails; + iFileDetails = NULL; + } + + if ( iControlsController ) + { + delete iControlsController; + iControlsController = NULL; + } + + if ( iUserInputHandler ) + { + delete iUserInputHandler; + iUserInputHandler = NULL; + } + + CloseWindow(); +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackContainer::AddFileDetailsL() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackContainer::AddFileDetailsL( CMPXVideoPlaybackViewFileDetails* aDetails ) +{ + iControlsController->AddFileDetailsL( aDetails ); + + // + // Delete the temp file details since plugin initialization is complete + // + if ( iFileDetails ) + { + delete iFileDetails; + iFileDetails = NULL; + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackContainer::GetWindow() +// ------------------------------------------------------------------------------------------------- +// +RWindow& CMPXVideoPlaybackContainer::GetWindow() const +{ + return Window(); +} + +// ------------------------------------------------------------------------------------------------- +// From CCoeControl +// Handles key events. +// ------------------------------------------------------------------------------------------------- +// +TKeyResponse CMPXVideoPlaybackContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ) +{ + MPX_ENTER_EXIT( + _L("CMPXVideoPlaybackContainer::OfferKeyEventL()"), + _L("iCode = %d iScanCode = %d aType = %d"), + aKeyEvent.iCode, aKeyEvent.iScanCode, aType ); + + iKeyResponse = EKeyWasNotConsumed; + + iUserInputHandler->ProcessKeyEventL( aKeyEvent, aType ); + + return iKeyResponse; +} + + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackContainer::DoHandleKeyEventL() +// ------------------------------------------------------------------------------------------------- +// +EXPORT_C void +CMPXVideoPlaybackContainer::DoHandleKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ) +{ + MPX_DEBUG(_L("CMPXVideoPlaybackContainer::DoHandleKeyEventL()")); + + switch ( aKeyEvent.iScanCode ) + { + case EStdKeyDevice3: // rocker middle key + case EStdKeyEnter: // enter key on a qwerty key board + { + HandleRockerMiddleKeyL( aKeyEvent, aType ); + iKeyResponse = EKeyWasConsumed; + break; + } + case EStdKeyUpArrow: // rocker up key + { + if ( aType == EEventKeyDown ) + { + HandleCommandL( EMPXPbvCmdIncreaseVolume ); + iKeyResponse = EKeyWasConsumed; + } + break; + } + case EStdKeyDownArrow: // rocker down key + { + if ( aType == EEventKeyDown ) + { + HandleCommandL( EMPXPbvCmdDecreaseVolume ); + iKeyResponse = EKeyWasConsumed; + } + break; + } + case EStdKeyLeftArrow: // rocker left key + { + HandleSeekBackL(aType); + iKeyResponse = EKeyWasConsumed; + break; + } + case EStdKeyRightArrow: // rocker right key + { + HandleSeekFwdL(aType); + iKeyResponse = EKeyWasConsumed; + break; + } + case EStdKeyDevice0: + case EStdKeyDevice1: + { + if ( aType == EEventKeyUp ) + { + iControlsController->HandleEventL( EMPXControlCmdSoftKeyPressed, + aKeyEvent.iScanCode ); + } + + iKeyResponse = EKeyWasConsumed; + break; + } + } +} + +// ------------------------------------------------------------------------------------------------- +// Handles rocker's middle key => Toggles between play & pause +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackContainer::HandleRockerMiddleKeyL(const TKeyEvent& aKeyEvent, + TEventCode aType) +{ + if ( aKeyEvent.iCode == EKeyNull && aType == EEventKeyDown ) + { + iView->HandleCommandL(EMPXPbvCmdPlayPause); + } +} + +// ------------------------------------------------------------------------------------------------- +// Starts/Stops Seeking Forward +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackContainer::HandleSeekFwdL(TEventCode aType) +{ + if (aType == EEventKeyDown) + { + iView->HandleCommandL(EMPXPbvCmdSeekForward); + } + else if (aType == EEventKeyUp) + { + iView->HandleCommandL(EMPXPbvCmdEndSeek); + } +} + +// ------------------------------------------------------------------------------------------------- +// Starts/Stops Seeking Backward +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackContainer::HandleSeekBackL(TEventCode aType) +{ + if (aType == EEventKeyDown) + { + iView->HandleCommandL(EMPXPbvCmdSeekBackward); + } + else if (aType == EEventKeyUp) + { + iView->HandleCommandL(EMPXPbvCmdEndSeek); + } +} + +// ------------------------------------------------------------------------------------------------- +// From CCoeControl +// Handles a change to the control's resources. +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackContainer::HandleResourceChange( TInt aType ) +{ + CCoeControl::HandleResourceChange( aType ); +} + +// ------------------------------------------------------------------------------------------------- +// From CCoeControl +// Gets the control's help context. +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackContainer::GetHelpContext( TCoeHelpContext& /*aContext*/ ) const +{ + //aContext.iMajor = KAppUidMusicPlayerX; +} + +// ------------------------------------------------------------------------------------------------- +// From CCoeControl +// Gets the number of controls contained in a compound control. +// ------------------------------------------------------------------------------------------------- +// +TInt CMPXVideoPlaybackContainer::CountComponentControls() const +{ + TInt count = 0; + + if ( iRealOneBitmap ) + { + count = 1; + } + + return count; +} + +// ------------------------------------------------------------------------------------------------- +// From CCoeControl +// Gets an indexed component of a compound control. +// ------------------------------------------------------------------------------------------------- +// +CCoeControl* CMPXVideoPlaybackContainer::ComponentControl( TInt aIndex ) const +{ + CCoeControl* control = NULL; + + switch ( aIndex ) + { + case 0: + { + control = iRealOneBitmap; + break; + } + } + + return control; +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackContainer::HandlePointerEventL() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackContainer::HandlePointerEventL()")); + + iUserInputHandler->ProcessPointerEventL(this, aPointerEvent, EMpxVideoPlaybackContainer); +} + + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackContainer::DoHandlePointerEventL() +// +// Gets called from the Controls Controller +// only if if OK to handle pointer events +// ------------------------------------------------------------------------------------------------- +// +EXPORT_C void CMPXVideoPlaybackContainer::DoHandlePointerEventL( const TPointerEvent& aPointerEvent ) +{ + MPX_DEBUG(_L("CMPXVideoPlaybackContainer::DoHandlePointerEventL()")); + + if ( AknLayoutUtils::PenEnabled() && aPointerEvent.iType == TPointerEvent::EButton1Up ) + { + iControlsController->HandleEventL( EMPXControlCmdToggleVisibility ); + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackContainer::Draw() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackContainer::Draw( const TRect& aRect ) const +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackContainer::Draw()")); + + CWindowGc& gc = SystemGc(); + + gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + + // + // Make the window transparent when a surface has been created + // unless TV-Out is connected + // + if ( iSurfaceCreated && ! iTvOutConnected ) + { + gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha ); + + if ( Window().DisplayMode() == EColor16MAP ) + { + gc.SetBrushColor( TRgb::Color16MAP(255) ); + } + else if ( Window().DisplayMode() == EColor16MA ) + { + gc.SetBrushColor( TRgb::Color16MA(0) ); + } + + gc.Clear( aRect ); + } + else + { + // + // Set the background to black + // + gc.SetBrushColor( KRgbBlack ); + gc.DrawRect( aRect ); + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackContainer::HandleEventL() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackContainer::HandleEventL( TMPXVideoPlaybackControlCommandIds aEvent, + TInt aValue ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackContainer::HandleEventL()")); + + if ( aEvent == EMPXControlCmdHandleBackgroundEvent ) + { + iUserInputHandler->SetForeground(EFalse); + } + else if ( aEvent == EMPXControlCmdHandleForegroundEvent ) + { + iUserInputHandler->SetForeground(ETrue); + } + else if ( aEvent == EMPXControlCmdTvOutConnected ) + { + iTvOutConnected = ETrue; + iUserInputHandler->HandleTVOutEvent(ETrue); + DrawNow(); + } + else if ( aEvent == EMPXControlCmdTvOutDisconnected ) + { + iTvOutConnected = EFalse; + iUserInputHandler->HandleTVOutEvent(EFalse); + DrawNow(); + } + + iControlsController->HandleEventL( aEvent, aValue ); +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackContainer::HandleCommandL() +// ------------------------------------------------------------------------------------------------- +// +EXPORT_C void CMPXVideoPlaybackContainer::HandleCommandL( TInt aCommand, TInt aValue ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackContainer::HandleCommandL()"), + _L("aCommand = %d aValue = %d"), aCommand, aValue ); + + switch ( aCommand ) + { + case EMPXPbvCmdSetPosition: + { + iView->SetPropertyL( EPbPropertyPosition, (TInt)aValue * KPbMilliMultiplier ); + break; + } + case EMPXPbvCmdResetControls: + { + // + // Recreate the controls with the new clip + // + CreateControlsL(); + + // + // Retrieve the PDL information for container + // + iView->RetrievePdlInformationL(); + + iControlsController->HandleEventL( EMPXControlCmdCloseFileDetailsViewer ); + + break; + } + case EAknSoftkeyOptions: + { + static_cast(iView)->ProcessCommandL( EAknSoftkeyOptions ); + break; + } + case EMPXPbvCmdSetVolume: + { + iView->SetPropertyL( EPbPropertyVolume, aValue ); + break; + } + case EMPXPbvSurfaceCreated: + { + iSurfaceCreated = ETrue; + iControlsController->HandleEventL( EMPXControlCmdSurfaceCreated ); + DrawNow(); + break; + } + default: + { + iView->HandleCommandL( aCommand ); + break; + } + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackContainer::CreateControlsL() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackContainer::CreateControlsL() +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackContainer::CreateControlsL()")); + + // + // Query playback plugin for filename and mode + // + CMPXCommand* cmd = CMPXCommand::NewL(); + CleanupStack::PushL( cmd ); + + iView->RetrieveFileNameAndModeL( cmd ); + + // + // Create a temporary file details that is populated with the + // file name and playback mode. This will be delete when + // plugin initialization is complete + // + if ( iFileDetails ) + { + delete iFileDetails; + iFileDetails = NULL; + } + + iFileDetails = CMPXVideoPlaybackViewFileDetails::NewL(); + + TPtrC fileName( cmd->ValueText( KMPXMediaVideoPlaybackFileName ) ); + iFileDetails->iClipName = fileName.AllocL(); + + iFileDetails->iPlaybackMode = (TMPXVideoMode) cmd->ValueTObjectL( KMPXMediaVideoMode ); + + iFileDetails->iTvOutConnected = cmd->ValueTObjectL( KMPXMediaVideoTvOutConnected ); + iFileDetails->iTvOutPlayAllowed = cmd->ValueTObjectL( KMPXMediaVideoTvOutPlayAllowed ); + + TPtrC mimeType( cmd->ValueText( KMPXMediaVideoRecognizedMimeType ) ); + iFileDetails->iMimeType = mimeType.AllocL(); + + CleanupStack::PopAndDestroy( cmd ); + + if ( iControlsController ) + { + delete iControlsController; + iControlsController = NULL; + } + + iControlsController = CMPXVideoPlaybackControlsController::NewL( this, Rect(), iFileDetails ); + + // + // Retrieve the Real One Logo bitmap + // + iRealOneBitmap = iControlsController->GetBitmap( EMPXRealLogoBitmap ); + iTvOutConnected = iFileDetails->iTvOutConnected; +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackContainer::UserInputHandler() +// ------------------------------------------------------------------------------------------------- +// +EXPORT_C CMPXVideoPlaybackUserInputHandler* CMPXVideoPlaybackContainer::UserInputHandler() +{ + MPX_DEBUG(_L("CMPXVideoPlaybackContainer::UserInputHandler()")); + + return iUserInputHandler; +} + +// EOF