--- /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