videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrol.cpp
changeset 0 96612d01cf9f
child 6 7d91903f795f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrol.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,585 @@
+/*
+* 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 CMPXVideoPlaybackControl
+*
+*/
+
+// Version : %version: 18 %
+
+
+// INCLUDE FILES
+#include <avkon.hrh>
+#include <e32std.h>
+#include <AknUtils.h>
+
+#include "mpxcommonvideoplaybackview.hrh"
+#include "mpxvideoplaybackcontrol.h"
+#include "mpxvideoplaybackvolumebar.h"
+#include "mpxvideoplaybackbuttonbar.h"
+#include "mpxvideoplaybackprogressbar.h"
+#include "mpxvideoplaybackcontrolscontroller.h"
+#include "mpxvideoplaybackviewfiledetails.h"
+#include "mpxvideoplaybackaspectratioicon.h"
+#include "mpxvideoplaybackbrandinganimation.h"
+#include "mpxvideoplaybackuserinputhandler.h"
+#include "mpxvideoplaybackcontainer.h"
+#include "mpxvideo_debug.h"
+
+#ifdef RD_TACTILE_FEEDBACK
+#include <touchfeedback.h>
+#endif //RD_TACTILE_FEEDBACK
+
+// ================= MEMBER FUNCTIONS ==============================================================
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::CMPXVideoPlaybackControl()
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -------------------------------------------------------------------------------------------------
+//
+CMPXVideoPlaybackControl::CMPXVideoPlaybackControl(
+        CMPXVideoPlaybackControlsController* aController,
+        CCoeControl* aControl,
+        TMPXVideoPlaybackControls aControlIndex,
+        TUint aProperties )
+    : iController( aController )
+    , iControl( aControl )
+    , iControlIndex( aControlIndex )
+    , iProperties( aProperties )
+{
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXVideoPlaybackControl::ConstructL( TRect aRect )
+{
+    MPX_DEBUG(_L("CMPXVideoPlaybackControl::ConstructL()"));
+
+    CreateWindowL();
+    EnableDragEvents();
+
+    iEikonEnv->EikAppUi()->AddToStackL( this, ECoeStackPriorityDefault );
+
+    SetRect( aRect );
+
+    iControl->SetContainerWindowL( *this );
+    iControl->SetRect( Rect() );
+    SetComponentsToInheritVisibility( ETrue );
+
+#ifdef RD_TACTILE_FEEDBACK
+    if ( iProperties & EMPXSoftkeyControl )
+    {
+        iFeedback = MTouchFeedback::Instance();
+    }
+#endif //RD_TACTILE_FEEDBACK
+
+    Window().SetNonFading( ETrue );
+
+    ActivateL();
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::NewL()
+// Two-phased constructor.
+// -------------------------------------------------------------------------------------------------
+//
+CMPXVideoPlaybackControl* CMPXVideoPlaybackControl::NewL(
+    CMPXVideoPlaybackControlsController* aController,
+    CCoeControl* aControl,
+    TRect aRect,
+    TMPXVideoPlaybackControls aControlIndex,
+    TUint aProperties )
+{
+    MPX_DEBUG(_L("CMPXVideoPlaybackControl::NewL()"));
+
+    CMPXVideoPlaybackControl* self =
+        new (ELeave) CMPXVideoPlaybackControl( aController, aControl, aControlIndex, aProperties );
+
+    CleanupStack::PushL(self);
+    self->ConstructL( aRect );
+    CleanupStack::Pop();
+
+    return self;
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::~CMPXVideoPlaybackControlsController()
+// Destructor.
+// -------------------------------------------------------------------------------------------------
+//
+CMPXVideoPlaybackControl::~CMPXVideoPlaybackControl()
+{
+    MPX_DEBUG(_L("CMPXVideoPlaybackControl::~CMPXVideoPlaybackControl()"));
+
+    iEikonEnv->EikAppUi()->RemoveFromStack( this );
+
+#ifdef RD_TACTILE_FEEDBACK
+    if ( iFeedback )
+    {
+       iFeedback->RemoveFeedbackForControl( this );
+    }
+#endif //RD_TACTILE_FEEDBACK
+
+    if ( iControl )
+    {
+        delete iControl;
+        iControl = NULL;
+    }
+
+    CloseWindow();
+}
+
+// -------------------------------------------------------------------------------------------------
+// From CCoeControl
+// Gets the number of controls contained in a compound control.
+// -------------------------------------------------------------------------------------------------
+//
+TInt CMPXVideoPlaybackControl::CountComponentControls() const
+{
+    return 1;
+}
+
+// -------------------------------------------------------------------------------------------------
+// From CCoeControl
+// Gets an indexed component of a compound control.
+// -------------------------------------------------------------------------------------------------
+//
+CCoeControl* CMPXVideoPlaybackControl::ComponentControl( TInt /*aIndex*/ ) const
+{
+    return iControl;
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::Draw()
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXVideoPlaybackControl::Draw( const TRect& aRect ) const
+{
+    MPX_DEBUG(_L("CMPXVideoPlaybackControl::Draw()"));
+
+    CWindowGc& gc = SystemGc();
+    gc.SetClippingRect( aRect );
+
+    if ( Window().DisplayMode() == EColor16MAP )
+    {
+        gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha );
+        gc.SetBrushColor( TRgb::Color16MAP( 255 ) );
+    }
+    else if ( Window().DisplayMode() == EColor16MA )
+    {
+        gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha );
+        gc.SetBrushColor( TRgb::Color16MA( 0 ) );
+    }
+    else
+    {
+        gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+        gc.SetBrushColor( KRgbBlack );
+    }
+
+    gc.Clear( aRect );
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::HandlePointerEventL()
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXVideoPlaybackControl::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+{
+    MPX_DEBUG(_L("CMPXVideoPlaybackControl::HandlePointerEventL()"));
+
+    iController->iContainer->UserInputHandler()->ProcessPointerEventL( this,
+                                                                       aPointerEvent,
+                                                                       EMpxVideoPlaybackControl );
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::DoHandlePointerEventL()
+// -------------------------------------------------------------------------------------------------
+//
+EXPORT_C void CMPXVideoPlaybackControl::DoHandlePointerEventL( const TPointerEvent& aPointerEvent)
+{
+    MPX_DEBUG(_L("CMPXVideoPlaybackControl::DoHandlePointerEventL()"));
+
+    if ( AknLayoutUtils::PenEnabled() )
+    {
+        switch( iControlIndex )
+        {
+            case EMPXProgressBar:
+            case EMPXVolumeBar:
+            case EMPXButtonBar:
+            case EMPXAspectRatioIcon:
+            case EMPXMediaDetailsViewer:
+            {
+                if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
+                {
+                    iController->ResetDisappearingTimers( EMPXTimerCancel );
+
+                    iControl->SetPointerCapture( ETrue );
+                    iControl->ClaimPointerGrab( ETrue );
+                }
+                else if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
+                {
+                    iController->ResetDisappearingTimers( EMPXTimerReset );
+
+                    iControl->SetPointerCapture( EFalse );
+                    iControl->ClaimPointerGrab( EFalse );
+                }
+
+                //
+                // Pass an event to controller
+                //
+                iControl->HandlePointerEventL( aPointerEvent );
+                break;
+            }
+            case EMPXSoftkeyDetails:
+            {
+                if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
+                {
+#ifdef RD_TACTILE_FEEDBACK
+                    if ( iFeedback )
+                    {
+                        iFeedback->InstantFeedback( ETouchFeedbackBasic );
+                    }
+#endif //RD_TACTILE_FEEDBACK
+
+                    iController->HandleCommandL( EMPXPbvCmdShowFileDetails );
+                }
+                break;
+            }
+            case EMPXSoftkeyBack:
+            {
+                if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
+                {
+#ifdef RD_TACTILE_FEEDBACK
+                    if ( iFeedback )
+                    {
+                        iFeedback->InstantFeedback( ETouchFeedbackBasic );
+                    }
+#endif //RD_TACTILE_FEEDBACK
+
+                    iController->HandleCommandL( EAknSoftkeyBack );
+                }
+                break;
+            }
+            case EMPXNoVideoBitmap:
+            case EMPXRealAudioBitmap:
+            case EMPXSoundBitmap:
+            case EMPXTitleLabel:
+            case EMPXArtistLabel:
+            case EMPXBrandingAnimation:
+            default:
+            {
+                //
+                //  Ignore pointer events for these controls
+                //
+                break;
+            }
+        }
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::SetVisibility()
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXVideoPlaybackControl::SetVisibility( TMPXPlaybackState aState )
+{
+    TBool visible = EFalse;
+
+    switch( aState )
+    {
+        case EPbStatePlaying:
+        {
+            if ( iProperties & EMPXShownWhenPlaying )
+            {
+                visible = ETrue;
+            }
+            break;
+        }
+        case EPbStatePaused:
+        {
+            if ( iProperties & EMPXShownWhenPaused )
+            {
+                visible = ETrue;
+            }
+            break;
+        }
+        case EPbStatePluginSeeking:
+        {
+            if ( iProperties & EMPXShownWhenSeeking )
+            {
+                visible = ETrue;
+            }
+            break;
+        }
+        case EPbStateBuffering:
+        {
+            if ( iProperties & EMPXBufferingControl )
+            {
+                visible = ETrue;
+            }
+            break;
+        }
+        case EPbStateStopped:
+        {
+            if ( iProperties & EMPXShownWhenStopped )
+            {
+                visible = ETrue;
+            }
+            break;
+        }
+        case EPbStateNotInitialised:
+        case EPbStateInitialising:
+        {
+            if ( iProperties & EMPXShownWhenInitializing )
+            {
+                visible = ETrue;
+            }
+            break;
+        }
+    }
+
+    MPX_DEBUG(_L("CMPXVideoPlaybackControl::SetVisibility(%d)"), visible);
+
+    MakeVisible( visible );
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::ControlIndex()
+// -------------------------------------------------------------------------------------------------
+//
+TMPXVideoPlaybackControls CMPXVideoPlaybackControl::ControlIndex()
+{
+    return iControlIndex;
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::VolumeChanged()
+// -------------------------------------------------------------------------------------------------
+//
+TBool CMPXVideoPlaybackControl::VolumeChanged( TInt aVolume )
+{
+    TBool changed = EFalse;
+
+    if ( iControlIndex == EMPXVolumeBar )
+    {
+        MPX_DEBUG(_L("CMPXVideoPlaybackControlsController::VolumeChanged() [%d]"), aVolume);
+
+        static_cast<CMPXVideoPlaybackVolumeBar*>(iControl)->VolumeChanged( aVolume );
+
+        changed = ETrue;
+    }
+
+    return changed;
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::DurationChangedL()
+// -------------------------------------------------------------------------------------------------
+//
+TBool CMPXVideoPlaybackControl::DurationChangedL( TInt aDuration )
+{
+    TBool changed = EFalse;
+
+    if ( iControlIndex == EMPXProgressBar )
+    {
+        MPX_DEBUG(_L("CMPXVideoPlaybackControlsController::DurationChangedL() [%d]"), aDuration);
+
+        static_cast<CMPXVideoPlaybackProgressBar*>(iControl)->DurationChangedL( aDuration );
+
+        changed = ETrue;
+    }
+
+    return changed;
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::PositionChangedL()
+// -------------------------------------------------------------------------------------------------
+//
+TBool CMPXVideoPlaybackControl::PositionChangedL( TInt aPosition )
+{
+    TBool changed = EFalse;
+
+    if ( iControlIndex == EMPXProgressBar )
+    {
+        MPX_DEBUG(_L("CMPXVideoPlaybackControlsController::PositionChangedL() [%d]"), aPosition);
+
+        static_cast<CMPXVideoPlaybackProgressBar*>(iControl)->PositionChangedL( aPosition );
+
+        changed = ETrue;
+    }
+
+    return changed;
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::AspectRatioChanged()
+// -------------------------------------------------------------------------------------------------
+//
+TBool CMPXVideoPlaybackControl::AspectRatioChanged( TInt aAspectRatio )
+{
+    TBool changed = EFalse;
+
+    if ( iControlIndex == EMPXAspectRatioIcon )
+    {
+        MPX_DEBUG(
+            _L("CMPXVideoPlaybackControlsController::AspectRatioChanged() [%d]"), aAspectRatio);
+
+        static_cast<CMPXVideoPlaybackAspectRatioIcon*>(iControl)->
+            AspectRatioChanged( aAspectRatio );
+
+        changed = ETrue;
+    }
+
+    return changed;
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPlaybackControl::SetDownloadSize()
+// -------------------------------------------------------------------------------------------------
+//
+TBool CMPXVideoPlaybackControl::SetDownloadSize( TInt aSize )
+{
+    TBool changed = EFalse;
+
+    if ( iControlIndex == EMPXProgressBar )
+    {
+        MPX_DEBUG(_L("CMPXVideoPlaybackControlsController::SetDownloadSize() [%d]"), aSize);
+
+        static_cast<CMPXVideoPlaybackProgressBar*>(iControl)->SetDownloadSize( aSize );
+
+        changed = ETrue;
+    }
+
+    return changed;
+}
+
+// -------------------------------------------------------------------------------------------------
+//   CMPXVideoPlaybackControl::UpdateDownloadPosition()
+// -------------------------------------------------------------------------------------------------
+//
+TBool CMPXVideoPlaybackControl::UpdateDownloadPosition( TInt aSize )
+{
+    TBool changed = EFalse;
+
+    if ( iControlIndex == EMPXProgressBar )
+    {
+        MPX_DEBUG(_L("CMPXVideoPlaybackControlsController::UpdateDownloadPosition() [%d]"), aSize);
+
+        static_cast<CMPXVideoPlaybackProgressBar*>(iControl)->UpdateDownloadPosition( aSize );
+
+        changed = ETrue;
+    }
+
+    return changed;
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::UpdateStateOnButtonBar()
+// -------------------------------------------------------------------------------------------------
+//
+TBool CMPXVideoPlaybackControl::UpdateStateOnButtonBar( TMPXPlaybackState aState )
+{
+    TBool changed = EFalse;
+
+    if ( iControlIndex == EMPXButtonBar )
+    {
+        MPX_DEBUG(_L("CMPXVideoPlaybackControlsController::UpdateStateOnButtonBar() [%d]"), aState);
+
+        static_cast<CMPXVideoPlaybackButtonBar*>(iControl)->UpdateStateOnButtonBar( aState );
+
+        changed = ETrue;
+    }
+
+    return changed;
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::UpdateControlsWithFileDetailsL()
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXVideoPlaybackControl::UpdateControlsWithFileDetailsL(
+        CMPXVideoPlaybackViewFileDetails* aDetails )
+{
+    iPlaybackMode = aDetails->iPlaybackMode;
+
+    //
+    //  Controls should be shown when if there is no video or the TV-Out is connected
+    //
+    if ( iControlIndex == EMPXButtonBar )
+    {
+        static_cast<CMPXVideoPlaybackButtonBar*>(iControl)->UpdateButtonBarState( aDetails );
+    }
+    else if ( iControlIndex == EMPXProgressBar )
+    {
+        static_cast<CMPXVideoPlaybackProgressBar*>(iControl)->UpdateProgressBarStateL( aDetails );
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::StopBrandingAnimationTimer()
+// -------------------------------------------------------------------------------------------------
+//
+TBool CMPXVideoPlaybackControl::StopBrandingAnimationTimer()
+{
+    TBool changed = EFalse;
+
+    if ( iControlIndex == EMPXBrandingAnimation )
+    {
+        MPX_DEBUG(_L("CMPXVideoPlaybackControlsController::StopBrandingAnimationTimer()"));
+
+        static_cast<CMPXVideoPlaybackBrandingAnimation*>(iControl)->CancelBrandingTimer();
+
+        changed = ETrue;
+    }
+
+    return changed;
+}
+
+// -------------------------------------------------------------------------------------------------
+// CMPXVideoPlaybackControl::ResetControl()
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXVideoPlaybackControl::ResetControl()
+{
+    MPX_DEBUG(_L("CMPXVideoPlaybackControlsController::ResetControl()"));
+
+    switch( iControlIndex )
+    {
+        case EMPXButtonBar:
+        {
+            static_cast<CMPXVideoPlaybackButtonBar*>(iControl)->Reset();
+            break;
+        }
+        case EMPXProgressBar:
+        {
+            static_cast<CMPXVideoPlaybackProgressBar*>(iControl)->Reset();
+            break;
+        }
+        case EMPXVolumeBar:
+        {
+             static_cast<CMPXVideoPlaybackVolumeBar*>(iControl)->Reset();
+             break;
+        }
+        case EMPXAspectRatioIcon:
+        default:
+            break;
+    }
+}
+
+// End of File