diff -r 839377eedc2b -r befca0ec475f videoplayback/videoplaybackcontrols/src/mpxvideoplaybackvolumebar.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackvolumebar.cpp Wed Sep 01 12:30:28 2010 +0100 @@ -0,0 +1,1046 @@ +/* +* 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: Volume bar control +* +*/ + + +// Version : %version: 27 % + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mpxcommonvideoplaybackview.hrh" +#include "mpxvideoplaybackvolumebar.h" +#include "mpxvideoplaybackviewfiledetails.h" +#include "mpxvideoplaybackcontrolscontroller.h" +#include "mpxvideo_debug.h" + +#ifdef RD_TACTILE_FEEDBACK +#include +#endif //RD_TACTILE_FEEDBACK + +// CONSTANTS +const TInt KMPXSliderHeight = 30; +const TInt KMPXSliderWidth = 18; +const TInt KMPXVolumeDragEventTimeOut = 100000; +const TInt KMPXPtrEventRepeatRequestTime = 200000; +const TInt KDynamicSliderFeedbackTimeOut = 100000; +const TInt KDynamicSliderFeedbackIntensity = 100; + +using namespace AknLayoutScalable_Apps; +using namespace AknLayoutScalable_Avkon; + +// ============================ MEMBER FUNCTIONS =================================================== + +CMPXVideoPlaybackVolumeBar::CMPXVideoPlaybackVolumeBar( + CMPXVideoPlaybackControlsController* aController, TRect aRect ) + : iOneVolumeIncrementHeight(0) + , iMuted(EFalse) + , iRect(aRect) + , iDragging(EVolumeNotDragging) + , iController(aController) +{ +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::ConstructL() +// Symbian 2nd phase constructor can leave. +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::ConstructL() +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::ConstructL()")); + + SetLayout(); + SkinChangeL(); + + iDraggingHandlerTimer = CPeriodic::NewL( CActive::EPriorityStandard ); + +#ifdef RD_TACTILE_FEEDBACK + iFeedback = MTouchFeedback::Instance(); +#endif //RD_TACTILE_FEEDBACK +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::NewL() +// Two-phased constructor. +// ------------------------------------------------------------------------------------------------- +// +CMPXVideoPlaybackVolumeBar* CMPXVideoPlaybackVolumeBar::NewL( + CMPXVideoPlaybackControlsController* aController, TRect aRect ) +{ + CMPXVideoPlaybackVolumeBar* self = + new ( ELeave ) CMPXVideoPlaybackVolumeBar( aController, aRect ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::~CMPXVideoPlaybackVolumeBar() +// Destructor. +// ------------------------------------------------------------------------------------------------- +// +CMPXVideoPlaybackVolumeBar::~CMPXVideoPlaybackVolumeBar() +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::~CMPXVideoPlaybackVolumeBar()")); + + if ( iDraggingHandlerTimer ) + { + iDraggingHandlerTimer->Cancel(); + delete iDraggingHandlerTimer; + iDraggingHandlerTimer = NULL; + } + + if (iSpeakerIcon) + { + delete iSpeakerIcon; + iSpeakerIcon = NULL; + } + + if (iSpeakerMuteIcon) + { + delete iSpeakerMuteIcon; + iSpeakerMuteIcon = NULL; + } + + if (iSliderIcon) + { + delete iSliderIcon; + iSliderIcon = NULL; + } + + if (iSliderSelectedIcon) + { + delete iSliderSelectedIcon; + iSliderSelectedIcon = NULL; + } + + if (iVolumeUpIcon) + { + delete iVolumeUpIcon; + iVolumeUpIcon = NULL; + } + + if (iVolumeDownIcon) + { + delete iVolumeDownIcon; + iVolumeDownIcon = NULL; + } + + if (iVolumeFrameIconTop) + { + delete iVolumeFrameIconTop; + iVolumeFrameIconTop = NULL; + } + + if (iVolumeFrameIconMiddle) + { + delete iVolumeFrameIconMiddle; + iVolumeFrameIconMiddle = NULL; + } + + if (iVolumeFrameIconBottom) + { + delete iVolumeFrameIconBottom; + iVolumeFrameIconBottom = NULL; + } + + if (iNoAudioIcon) + { + delete iNoAudioIcon; + iNoAudioIcon = NULL; + } + +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback ) + { + iFeedback->RemoveFeedbackForControl(this); + } +#endif //RD_TACTILE_FEEDBACK +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::HandleResourceChange() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::HandleResourceChange( TInt aType ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleResourceChange()"), + _L("aType = 0x%X"), aType); + + if ( aType == KAknsMessageSkinChange ) + { + TRAP_IGNORE( SkinChangeL() ); + } + + CCoeControl::HandleResourceChange( aType ); +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::SetLayout() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::SetLayout() +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::SetLayout()")); + + TAknLayoutRect tmpLayoutRect; + + iRect = TRect( 0, 0, iRect.Width(), iRect.Height() ); + + tmpLayoutRect.LayoutRect( iRect, bg_popup_window_pane_cp19( 9 ).LayoutLine() ); + iVolumeControlRect = tmpLayoutRect.Rect(); + + + tmpLayoutRect.LayoutRect( iRect, aid_touch_area_slider( 6 ).LayoutLine() ); + iVolumeBarRect = tmpLayoutRect.Rect(); + + tmpLayoutRect.LayoutRect( iRect, slider_pane( 6 ).LayoutLine() ); + TRect sliderBarRect( tmpLayoutRect.Rect() ); + TInt volumeBarEndHeight = sliderBarRect.Height() / 10; + iVolumeBarRectTop = TRect( sliderBarRect.iTl.iX, + sliderBarRect.iTl.iY, + sliderBarRect.iBr.iX, + sliderBarRect.iTl.iY + volumeBarEndHeight ); + + iVolumeBarRectBottom = TRect( sliderBarRect.iTl.iX, + sliderBarRect.iBr.iY - volumeBarEndHeight, + sliderBarRect.iBr.iX, + sliderBarRect.iBr.iY ); + + iVolumeBarRectMiddle = TRect( iVolumeBarRectTop.iTl.iX, + iVolumeBarRectTop.iBr.iY, + iVolumeBarRectTop.iBr.iX, + iVolumeBarRectBottom.iTl.iY ); + + TInt volumeBarMiddleX = sliderBarRect.iTl.iX + sliderBarRect.Width() / 2; + iSliderRect = TRect( volumeBarMiddleX - KMPXSliderWidth / 2, + sliderBarRect.iBr.iY - KMPXSliderHeight, + volumeBarMiddleX + KMPXSliderWidth / 2, + sliderBarRect.iBr.iY ); + + tmpLayoutRect.LayoutRect( iRect, aid_touch_area_increase( 6 ).LayoutLine() ); + iVolumeUpControlRect = tmpLayoutRect.Rect(); + + tmpLayoutRect.LayoutRect( iRect, aid_touch_area_decrease( 6 ).LayoutLine() ); + iVolumeDownControlRect = tmpLayoutRect.Rect(); + + tmpLayoutRect.LayoutRect( iRect, popup_slider_window_g4( 6 ).LayoutLine() ); + iVolumeUpRect = tmpLayoutRect.Rect(); + + tmpLayoutRect.LayoutRect( iRect, popup_slider_window_g5( 6 ).LayoutLine() ); + iVolumeDownRect = tmpLayoutRect.Rect(); + + tmpLayoutRect.LayoutRect( iRect, aid_touch_area_mute( 4 ).LayoutLine() ); + iSpeakerControlRect = tmpLayoutRect.Rect(); + + tmpLayoutRect.LayoutRect( iRect, popup_slider_window_g6( 2 ).LayoutLine() ); + iSpeakerRect = tmpLayoutRect.Rect(); + + iOneVolumeIncrementHeight = (TReal)( iVolumeBarRect.Height() - KMPXSliderHeight ) + / (TReal)KPbPlaybackVolumeLevelMax; +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::SkinChangeL() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::SkinChangeL() +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::SkinChangeL()")); + + // + // Create icons + // + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + TFileName iconsPath; + iController->LocateBitmapFileL( iconsPath ); + + CreateSliderIconsL(); + + delete iSpeakerIcon; + iSpeakerIcon = NULL; + iSpeakerIcon = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiNsliderUnmuted, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_unmuted, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_unmuted_mask ); + + if ( iSpeakerIcon ) + { + AknIconUtils::SetSize( iSpeakerIcon->Bitmap(), + iSpeakerRect.Size(), + EAspectRatioPreserved ); + } + + delete iSpeakerMuteIcon; + iSpeakerMuteIcon = NULL; + iSpeakerMuteIcon = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiNsliderMuted, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_muted, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_muted_mask ); + + + if ( iSpeakerMuteIcon ) + { + AknIconUtils::SetSize( iSpeakerMuteIcon->Bitmap(), + iSpeakerRect.Size(), + EAspectRatioPreserved ); + } + + delete iNoAudioIcon; + iNoAudioIcon = NULL; + iNoAudioIcon = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnGrafMupLstCorrupttrack, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_graf_mup_lst_corrupttrack, + EMbmMpxvideoplaybackcontrolsQgn_graf_mup_lst_corrupttrack_mask ); + + + if ( iNoAudioIcon ) + { + AknIconUtils::SetSize( iNoAudioIcon->Bitmap(), + iSpeakerRect.Size(), + EAspectRatioPreserved ); + } + + delete iVolumeUpIcon; + iVolumeUpIcon = NULL; + iVolumeUpIcon = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiCam4ZoomMax, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_increase, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_increase_mask ); + + if ( iVolumeUpIcon ) + { + AknIconUtils::SetSize( iVolumeUpIcon->Bitmap(), + iVolumeUpRect.Size(), + EAspectRatioPreserved ); + } + + delete iVolumeDownIcon; + iVolumeDownIcon = NULL; + iVolumeDownIcon = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiCam4ZoomMin, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_decrease, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_decrease_mask ); + + if ( iVolumeDownIcon ) + { + AknIconUtils::SetSize( iVolumeDownIcon->Bitmap(), + iVolumeDownRect.Size(), + EAspectRatioPreserved ); + } + + delete iVolumeFrameIconTop; + iVolumeFrameIconTop = NULL; + iVolumeFrameIconTop = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiCam4ZoomTop, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_top, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_top_mask ); + + if ( iVolumeFrameIconTop ) + { + AknIconUtils::SetSize( iVolumeFrameIconTop->Bitmap(), + TSize( iVolumeBarRectTop.Width(), iVolumeBarRectTop.Height() ), + EAspectRatioNotPreserved ); + } + + delete iVolumeFrameIconMiddle; + iVolumeFrameIconMiddle = NULL; + iVolumeFrameIconMiddle = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiCam4ZoomMiddle, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_middle, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_middle_mask ); + + if ( iVolumeFrameIconMiddle ) + { + AknIconUtils::SetSize( iVolumeFrameIconMiddle->Bitmap(), + TSize( iVolumeBarRectMiddle.Width(), iVolumeBarRectMiddle.Height() ), + EAspectRatioNotPreserved ); + } + + delete iVolumeFrameIconBottom; + iVolumeFrameIconBottom = NULL; + iVolumeFrameIconBottom = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiCam4ZoomBottom, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_bottom, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_bottom_mask ); + + if ( iVolumeFrameIconBottom ) + { + AknIconUtils::SetSize( iVolumeFrameIconBottom->Bitmap(), + TSize( iVolumeBarRectBottom.Width(), iVolumeBarRectBottom.Height() ), + EAspectRatioNotPreserved ); + } + + // Calculate the X coordinate to center the icon of sliderbar + TRect volumeBarRectPart; + CGulIcon* volumeFrameIconPart = NULL; + + if ( iVolumeFrameIconTop ) + { + volumeFrameIconPart = iVolumeFrameIconTop; + volumeBarRectPart = iVolumeBarRectTop; + } + else if ( iVolumeFrameIconMiddle ) + { + volumeFrameIconPart = iVolumeFrameIconMiddle; + volumeBarRectPart = iVolumeBarRectMiddle; + } + else if ( iVolumeFrameIconBottom ) + { + volumeFrameIconPart = iVolumeFrameIconBottom; + volumeBarRectPart = iVolumeBarRectBottom; + } + + if ( volumeFrameIconPart ) + { + iCenteredSliderbarIconX = volumeBarRectPart.iTl.iX + + ( volumeBarRectPart.Width() - + volumeFrameIconPart->Bitmap()->SizeInPixels().iWidth ) / 2; + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::HandleVolumeIncreaseL +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::HandleVolumeIncreaseL( const TPointerEvent& aPointerEvent ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleVolumeIncreaseL()"), + _L("aPointerEvent.iType = %d"), aPointerEvent.iType); + + switch ( aPointerEvent.iType ) + { + case TPointerEvent::EButtonRepeat: + { +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback && !iController->FileDetails()->iTvOutConnected ) + { + iFeedback->InstantFeedback( ETouchFeedbackSlider ); + } +#endif //RD_TACTILE_FEEDBACK + iController->HandleCommandL( EMPXPbvCmdIncreaseVolume ); + iDragging = EVolumeIncreaseDragging; + + } + case TPointerEvent::EButton1Down: + { + Window().RequestPointerRepeatEvent( + TTimeIntervalMicroSeconds32(KMPXPtrEventRepeatRequestTime) + ,iVolumeUpControlRect); + + break; + } + case TPointerEvent::EDrag: + { + iDragging = EVolumeIncreaseDragging; + break; + } + case TPointerEvent::EButton1Up: + { +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback && !iController->FileDetails()->iTvOutConnected ) + { + iFeedback->InstantFeedback( ETouchFeedbackSlider ); + } +#endif //RD_TACTILE_FEEDBACK + + iController->HandleCommandL( EMPXPbvCmdIncreaseVolume ); + + iDragging = EVolumeNotDragging; + + break; + } + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::HandleVolumeDecreaseL +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::HandleVolumeDecreaseL( const TPointerEvent& aPointerEvent ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleVolumeDecreaseL()"), + _L("aPointerEvent.iType = %d"), aPointerEvent.iType); + + switch ( aPointerEvent.iType ) + { + case TPointerEvent::EButtonRepeat: + { +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback && !iController->FileDetails()->iTvOutConnected ) + { + iFeedback->InstantFeedback( ETouchFeedbackSlider ); + } +#endif //RD_TACTILE_FEEDBACK + iController->HandleCommandL( EMPXPbvCmdDecreaseVolume ); + iDragging = EVolumeDecreaseDragging; + + } + case TPointerEvent::EButton1Down: + { + Window().RequestPointerRepeatEvent( + TTimeIntervalMicroSeconds32(KMPXPtrEventRepeatRequestTime) + ,iVolumeDownControlRect); + + break; + } + case TPointerEvent::EDrag: + { + iDragging = EVolumeDecreaseDragging; + break; + } + case TPointerEvent::EButton1Up: + { +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback && !iController->FileDetails()->iTvOutConnected ) + { + iFeedback->InstantFeedback( ETouchFeedbackSlider ); + } +#endif //RD_TACTILE_FEEDBACK + + iController->HandleCommandL( EMPXPbvCmdDecreaseVolume ); + + iDragging = EVolumeNotDragging; + + break; + } + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::HandleSpeakerControlEventL +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::HandleSpeakerControlEventL( const TPointerEvent& aPointerEvent ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleSpeakerControlEventL()"), + _L("aPointerEvent.iType = %d"), aPointerEvent.iType); + + switch ( aPointerEvent.iType ) + { + case TPointerEvent::EButton1Up: + { +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback ) + { + iFeedback->InstantFeedback( ETouchFeedbackBasicButton ); + } +#endif //RD_TACTILE_FEEDBACK + + if ( iMuted ) + { + iController->HandleCommandL( EMPXPbvCmdUnMute ); + } + else + { + iController->HandleCommandL( EMPXPbvCmdMute ); + } + + iDragging = EVolumeNotDragging; + + break; + } + case TPointerEvent::EDrag: + { + iDragging = EVolumeSpeakerDragging; + + break; + } + case TPointerEvent::EButton1Down: + { + iDragging = EVolumeNotDragging; + + break; + } + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::HandleVolumeBarEventL +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::HandleVolumeBarEventL( const TPointerEvent& aPointerEvent ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleVolumeBarEventL()"), + _L("aPointerEvent.iType = %d"), aPointerEvent.iType); + + TInt vol = 0; + + // + // Dynamic Slider Feedback should only be given when the slider is not at the top or bottom + // + TBool giveDynamicSliderFeedback = EFalse; + + if ( aPointerEvent.iPosition.iY < iVolumeBarRect.iTl.iY + KMPXSliderHeight / 2 ) + { + vol = KPbPlaybackVolumeLevelMax; + } + else if ( aPointerEvent.iPosition.iY > iVolumeBarRect.iBr.iY - KMPXSliderHeight / 2 ) + { + vol = 0; + } + else + { + giveDynamicSliderFeedback = ETrue; + + vol = ( iVolumeBarRect.iBr.iY - KMPXSliderHeight / 2 - aPointerEvent.iPosition.iY ) / + iOneVolumeIncrementHeight; + } + + switch ( aPointerEvent.iType ) + { + case TPointerEvent::EButton1Down: + { +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback && !iController->FileDetails()->iTvOutConnected ) + { + iFeedback->InstantFeedback( ETouchFeedbackSlider ); + } +#endif //RD_TACTILE_FEEDBACK + + if ( ! iDraggingHandlerTimer->IsActive() ) + { + iDraggingHandlerTimer->Start( + KMPXVolumeDragEventTimeOut, + KMPXVolumeDragEventTimeOut, + TCallBack( CMPXVideoPlaybackVolumeBar::HandleVolumeDragEventTimeOut, this ) ); + } + + iDragging = EVolumeNotDragging; + + break; + } + case TPointerEvent::EDrag: + { +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback && giveDynamicSliderFeedback && + !iController->FileDetails()->iTvOutConnected ) + { + iFeedback->StartFeedback( this, + ETouchDynamicSlider, + &aPointerEvent, + KDynamicSliderFeedbackIntensity, + KDynamicSliderFeedbackTimeOut ); + } +#endif //RD_TACTILE_FEEDBACK + + iVolumeWhileDraggingEvent = vol; + iDragging = EVolumeBarDragging; + + break; + } + case TPointerEvent::EButton1Up: + { + if ( iDraggingHandlerTimer->IsActive() ) + { + iDraggingHandlerTimer->Cancel(); + } + + SetVolumeL( vol ); + + if ( iDragging == EVolumeBarDragging && vol == 0 ) + { + // + // volume & mute levels are kept track in playbackplugin. + // + iController->HandleCommandL( EMPXPbvCmdMute ); + } + + iDragging = EVolumeNotDragging; + + if ( IsVisible() ) + { + DrawNow(); + } + + break; + } + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::HandleVolumeDragEventTimeOut +// ------------------------------------------------------------------------------------------------- +// +TInt CMPXVideoPlaybackVolumeBar::HandleVolumeDragEventTimeOut( TAny* aPtr ) +{ + static_cast(aPtr)->DoHandleVolumeDragEventTimeOut(); + return KErrNone; +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::DoHandleVolumeDragEventTimeOut +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::DoHandleVolumeDragEventTimeOut() +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackController::DoHandleVolumeDragEventTimeOut()")); + + if ( iDragging == EVolumeBarDragging ) + { + MPX_TRAPD( err, SetVolumeL( iVolumeWhileDraggingEvent ) ); + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::HandlePointerEventL +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::HandlePointerEventL( const TPointerEvent& aPointerEvent ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandlePointerEventL()")); + + if ( iController->FileDetails()->iAudioEnabled ) + { + // + // Volume up + // + if ( iDragging == EVolumeIncreaseDragging || + ( iVolumeUpControlRect.Contains( aPointerEvent.iPosition ) && + iDragging == EVolumeNotDragging ) ) + { + HandleVolumeIncreaseL( aPointerEvent ); + } + // + // Volume down + // + else if ( iDragging == EVolumeDecreaseDragging || + ( iVolumeDownControlRect.Contains( aPointerEvent.iPosition ) && + iDragging == EVolumeNotDragging ) ) + { + HandleVolumeDecreaseL( aPointerEvent ); + } + // + // Speaker/Mute + // + else if ( iDragging == EVolumeSpeakerDragging || + ( iSpeakerControlRect.Contains( aPointerEvent.iPosition ) && + iDragging == EVolumeNotDragging ) ) + { + HandleSpeakerControlEventL( aPointerEvent ); + } + // + // Volume Bar + // + else + { + HandleVolumeBarEventL( aPointerEvent ); + } + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::Draw() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::Draw( const TRect& aRect ) const +{ + MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::Draw()")); + + CWindowGc& gc = SystemGc(); + gc.SetClippingRect( aRect ); + + if ( Window().DisplayMode() == EColor16MAP ) + { + gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha ); + gc.SetBrushColor( TRgb::Color16MAP( 255 ) ); + gc.Clear( aRect ); + } + else if ( Window().DisplayMode() == EColor16MA ) + { + gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha ); + gc.SetBrushColor( TRgb::Color16MA( 0 ) ); + gc.Clear( aRect ); + } + + if ( ! iController->FileDetails()->iAudioEnabled || iMuted ) + { + if ( iController->FileDetails()->iAudioEnabled ) + { + // + // use "Mute" icon for media clip with audio supported + // + gc.BitBltMasked( iSpeakerRect.iTl, + iSpeakerMuteIcon->Bitmap(), + TRect(iSpeakerRect.Size()), + iSpeakerMuteIcon->Mask(), + ETrue ); + } + else + { + // + // use "No Audio" icon instead of the generic "Mute" icon + // for media clip with audio not supported + // + gc.BitBltMasked( iSpeakerRect.iTl, + iNoAudioIcon->Bitmap(), + TRect(iSpeakerRect.Size()), + iNoAudioIcon->Mask(), + ETrue ); + } + } + else + { + gc.BitBltMasked( iSpeakerRect.iTl, + iSpeakerIcon->Bitmap(), + TRect(iSpeakerRect.Size()), + iSpeakerIcon->Mask(), + ETrue ); + } + + if ( iVolumeUpIcon ) + { + gc.BitBltMasked( iVolumeUpRect.iTl, + iVolumeUpIcon->Bitmap(), + TRect(iVolumeUpRect.Size()), + iVolumeUpIcon->Mask(), + ETrue ); + } + + if ( iVolumeDownIcon ) + { + gc.BitBltMasked( iVolumeDownRect.iTl, + iVolumeDownIcon->Bitmap(), + TRect(iVolumeDownRect.Size()), + iVolumeDownIcon->Mask(), + ETrue ); + } + + TPoint srcPoint( iCenteredSliderbarIconX, 0 ); + if ( iVolumeFrameIconTop ) + { + srcPoint.iY = iVolumeBarRectTop.iTl.iY; + gc.BitBltMasked( srcPoint, + iVolumeFrameIconTop->Bitmap(), + TRect(iVolumeBarRectTop.Size()), + iVolumeFrameIconTop->Mask(), + ETrue ); + } + + if ( iVolumeFrameIconMiddle ) + { + srcPoint.iY = iVolumeBarRectMiddle.iTl.iY; + gc.BitBltMasked( srcPoint, + iVolumeFrameIconMiddle->Bitmap(), + TRect(iVolumeBarRectMiddle.Size()), + iVolumeFrameIconMiddle->Mask(), + ETrue ); + } + + if ( iVolumeFrameIconBottom ) + { + srcPoint.iY = iVolumeBarRectBottom.iTl.iY; + gc.BitBltMasked( srcPoint, + iVolumeFrameIconBottom->Bitmap(), + TRect(iVolumeBarRectBottom.Size()), + iVolumeFrameIconBottom->Mask(), + ETrue ); + } + + if ( iController->FileDetails() && + iController->FileDetails()->iAudioEnabled && + !iController->FileDetails()->iTvOutConnected && + iSliderIcon && + iSliderSelectedIcon ) + { + if ( iDragging == EVolumeBarDragging ) + { + gc.BitBltMasked( iSliderRect.iTl, + iSliderSelectedIcon->Bitmap(), + TRect(iSliderRect.Size()), + iSliderSelectedIcon->Mask(), + ETrue ); + } + else + { + gc.BitBltMasked( iSliderRect.iTl, + iSliderIcon->Bitmap(), + TRect(iSliderRect.Size()), + iSliderIcon->Mask(), + ETrue ); + } + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::CountComponentControls() +// ------------------------------------------------------------------------------------------------- +// +TInt CMPXVideoPlaybackVolumeBar::CountComponentControls() const +{ + return 0; +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::VolumeChanged() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::VolumeChanged( TInt aVolume ) +{ + MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::VolumeChanged() [%d]"), aVolume); + + iMuted = (aVolume == 0)? ETrue:EFalse; + + TReal volumeBarHeight = (TReal)iVolumeBarRect.iBr.iY - + iOneVolumeIncrementHeight * (TReal)aVolume; + + iSliderRect.iTl.iY = volumeBarHeight - KMPXSliderHeight; + iSliderRect.iBr.iY = volumeBarHeight; + + if ( IsVisible() ) + { + DrawNow(); + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::Reset +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::Reset() +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::Reset()")); + + if ( iDragging != EVolumeNotDragging ) + { + TPointerEvent event; + event.iType = TPointerEvent::EButton1Up; + event.iPosition.iY = ( iSliderRect.iTl.iY + iSliderRect.iBr.iY ) / 2; + + MPX_TRAPD( err, HandlePointerEventL(event) ); + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::SetVolumeL() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::SetVolumeL( TInt aVolume ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::SetVolumeL()"), + _L("aVolume = %d"), aVolume ); + + iController->HandleCommandL( EMPXPbvCmdSetVolume, aVolume ); +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::UpdateTVOutStatus() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::UpdateTVOutStatusL( TBool aConnected ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::UpdateTVOutStatus()")); + + if ( aConnected ) + { + if ( iSliderIcon ) + { + delete iSliderIcon; + iSliderIcon = NULL; + } + + if ( iSliderSelectedIcon ) + { + delete iSliderSelectedIcon; + iSliderSelectedIcon = NULL; + } + } + else + { + CreateSliderIconsL(); + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::CreateSliderIconsL() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::CreateSliderIconsL() +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::CreateSliderIconsL()")); + + // + // Create icons + // + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + TFileName iconsPath; + iController->LocateBitmapFileL( iconsPath ); + + delete iSliderIcon; + iSliderIcon = NULL; + iSliderIcon = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnGrafNsliderVerticalMarker, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker_mask ); + + if ( iSliderIcon ) + { + AknIconUtils::SetSize( iSliderIcon->Bitmap(), + TSize(KMPXSliderWidth, KMPXSliderHeight), + EAspectRatioNotPreserved ); + } + + delete iSliderSelectedIcon; + iSliderSelectedIcon = NULL; + iSliderSelectedIcon = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnGrafNsliderVerticalMarkerSelected, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker_selected, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker_selected_mask ); + + if ( iSliderSelectedIcon ) + { + AknIconUtils::SetSize( iSliderSelectedIcon->Bitmap(), + TSize(KMPXSliderWidth, KMPXSliderHeight), + EAspectRatioNotPreserved ); + } +} +// End of File