diff -r 6385c4c93049 -r 8e6fa1719340 browserplugins/browseraudiovideoplugin/src/BavpView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserplugins/browseraudiovideoplugin/src/BavpView.cpp Wed Sep 01 12:31:04 2010 +0100 @@ -0,0 +1,796 @@ +/* +* 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 the License "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: Uses the interface MPluginAdapter to notify browser of construction + and destruction of the plug-in, implements interface MPluginOptionHandler + to add menus and draws animated images while video player loading the data +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include // For TResourceReader +#include +#include +#include // For text + +#include + +#include "BavpLogger.h" +#include "BavpView.h" +#include "BavpController.h" +#include "BavpPlugin.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CBavpView::CBavpView +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +CBavpView::CBavpView() + { + } + +// ----------------------------------------------------------------------------- +// CBavpView::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CBavpView::ConstructL( const CCoeControl* aParent, + const TRect& aRect, CBavpPlugin* aBavPlugin ) + { + Log( EFalse, _L("CBavpView::ConstructL") ); + iBavPlugin = aBavPlugin; + + CreateWindowL(aParent); +#ifdef BRDO_MULTITOUCH_ENABLED_FF + if (AknLayoutUtils::PenEnabled()) { + DrawableWindow()->SetPointerGrab(ETrue); + EnableDragEvents(); + } + //To enable advance pointer info for multi-touch + Window().EnableAdvancedPointers(); +#endif + ActivateL(); // Draws icon + iRect = aRect; + CCoeControl::SetRect( aRect ); // Calls SizeChanged + + User::LeaveIfError( iWsSession.Connect() ); + iWindowId = iCoeEnv->RootWin().Identifier(); + + // Video buffering animation, used to show that content is buffering + iVideoBuffAnimation = CAknBitmapAnimation::NewL(); + iVideoBuffAnimation->SetContainerWindowL( *this ); + TResourceReader rrBuffering; + iCoeEnv->CreateResourceReaderLC( rrBuffering, R_ANIMATION_BUFFERING ); + iVideoBuffAnimation->ConstructFromResourceL( rrBuffering ); + CleanupStack::PopAndDestroy(); // rrBuffering + iIsVideoBuffAnimRunning = EFalse; + + // Bad content animation, used to show that content is not available + iBadContentAnimation = CAknBitmapAnimation::NewL(); + iBadContentAnimation->SetContainerWindowL( *this ); + TResourceReader rrNoContentAnim; + iCoeEnv->CreateResourceReaderLC( rrNoContentAnim, R_NO_CONTENT_ANIMATION ); + iBadContentAnimation->ConstructFromResourceL( rrNoContentAnim ); + CleanupStack::PopAndDestroy(); // rrNoContentAnim + iIsBadContentAnimRunning = EFalse; + + // Video stopped animation, used to show that video content is stopped + iVideoStoppedAnimation = CAknBitmapAnimation::NewL(); + iVideoStoppedAnimation->SetContainerWindowL( *this ); + TResourceReader rrVideoStoppedAnim; + iCoeEnv->CreateResourceReaderLC( rrVideoStoppedAnim, R_VIDEO_STOPPED_ANIMATION ); + iVideoStoppedAnimation->ConstructFromResourceL( rrVideoStoppedAnim ); + CleanupStack::PopAndDestroy(); // rrVideoStoppedAnim + iIsVideoStoppedAnimRunning = EFalse; + + // Video paused animation, used to show that video content is paused + iVideoPausedAnimation = CAknBitmapAnimation::NewL(); + iVideoPausedAnimation->SetContainerWindowL( *this ); + TResourceReader rrVideoPausedAnim; + iCoeEnv->CreateResourceReaderLC( rrVideoPausedAnim, R_VIDEO_PAUSED_ANIMATION ); + iVideoPausedAnimation->ConstructFromResourceL( rrVideoPausedAnim ); + CleanupStack::PopAndDestroy(); // rrVideoPausedAnim + iIsVideoPausedAnimRunning = EFalse; + + // Audio playing animation, used when no video is present, only audio + iAudioPlayAnimation = CAknBitmapAnimation::NewL(); + iAudioPlayAnimation->SetContainerWindowL( *this ); + TResourceReader rrAudioPlayAnim; + iCoeEnv->CreateResourceReaderLC( rrAudioPlayAnim, R_AUDIO_PLAY_ANIMATION ); + iAudioPlayAnimation->ConstructFromResourceL( rrAudioPlayAnim ); + CleanupStack::PopAndDestroy(); // rrAudioPlayAnim + iIsAudioPlayAnimRunning = EFalse; + + // Audio stopped animation, used to show that audio content is stopped + iAudioStoppedAnimation = CAknBitmapAnimation::NewL(); + iAudioStoppedAnimation->SetContainerWindowL( *this ); + TResourceReader rrAudioStoppedAnim; + iCoeEnv->CreateResourceReaderLC( rrAudioStoppedAnim, R_AUDIO_STOPPED_ANIMATION ); + iAudioStoppedAnimation->ConstructFromResourceL( rrAudioStoppedAnim ); + CleanupStack::PopAndDestroy(); // rrAudioStoppedAnim + iIsAudioStoppedAnimRunning = EFalse; + + // Audio paused animation, used to show that audio content is paused + iAudioPausedAnimation = CAknBitmapAnimation::NewL(); + iAudioPausedAnimation->SetContainerWindowL( *this ); + TResourceReader rrAudioPausedAnim; + iCoeEnv->CreateResourceReaderLC( rrAudioPausedAnim, R_AUDIO_PAUSED_ANIMATION ); + iAudioPausedAnimation->ConstructFromResourceL( rrAudioPausedAnim ); + CleanupStack::PopAndDestroy(); // rrAudioPausedAnim + iIsAudioPausedAnimRunning = EFalse; + + Log( EFalse, _L("CBavpView::ConstructL - Start Buffering animation") ); + RunAnimation(iVideoBuffAnimation, iIsVideoBuffAnimRunning); + } + +// ----------------------------------------------------------------------------- +// CBavpView::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +CBavpView* CBavpView::NewL( const CCoeControl* aParent, + const TRect& aRect, CBavpPlugin* aBavPlugin ) + { + Log( EFalse, _L("CBavpView::NewL") ); + + CBavpView* self = new( ELeave ) CBavpView; + CleanupStack::PushL( self ); + self->ConstructL( aParent, aRect, aBavPlugin ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CBavpView::Destructor +// ----------------------------------------------------------------------------- +CBavpView::~CBavpView() + { + Log( EFalse, _L("CBavpView::~CBavpView") ); + + // Check if the keyhandling is on the stack, if yes, remove it + if ( iIsOnStack ) + { + // Check if the animation is active + // if it is not start animation + iEikonEnv->EikAppUi()->RemoveFromStack( this ); + } + + // Cancel video buffering animation, if it's still running + if ( iIsVideoBuffAnimRunning ) + { + iVideoBuffAnimation->CancelAnimation(); + } + delete iVideoBuffAnimation; + + // Cancel video stopped animation, if it's still running + if ( iIsVideoStoppedAnimRunning ) + { + iVideoStoppedAnimation->CancelAnimation(); + } + delete iVideoStoppedAnimation; + + // Cancel video paused animation, if it's still running + if ( iIsVideoPausedAnimRunning ) + { + iVideoPausedAnimation->CancelAnimation(); + } + delete iVideoPausedAnimation; + + // Cancel audio only animation, if it's still running + if ( iIsAudioPlayAnimRunning ) + { + iAudioPlayAnimation->CancelAnimation(); + } + delete iAudioPlayAnimation; + + // Cancel audio stopped animation, if it's still running + if ( iIsAudioStoppedAnimRunning ) + { + iAudioStoppedAnimation->CancelAnimation(); + } + delete iAudioStoppedAnimation; + + // Cancel audio paused animation, if it's still running + if ( iIsAudioPausedAnimRunning ) + { + iAudioPausedAnimation->CancelAnimation(); + } + delete iAudioPausedAnimation; + + // Cancel bad content animation, if it's still running + if ( iIsBadContentAnimRunning ) + { + iBadContentAnimation->CancelAnimation(); + } + delete iBadContentAnimation; + + iWsSession.Close(); + } + +// ----------------------------------------------------------------------------- +// CBavpView::SizeChanged +// Responds to size changes to sets the size and position of the contents of +// this control +// ----------------------------------------------------------------------------- +void CBavpView::SizeChanged() + { + Log( EFalse, _L("CBavpView::SizeChanged") ); + + if ( iBavpController ) + { + iRect = Rect(); + iBavpController->RefreshRectCoordinatesL(); + } + } + +// ----------------------------------------------------------------------------- +// CBavpView::AddPluginOptionMenuItemsL +// Add the Option Menu items to the menuPane, these will be handled by plugin. +// ----------------------------------------------------------------------------- +void CBavpView::AddPluginOptionMenuItemsL( CEikMenuPane& aMenuPane, + TInt aCommandBase, + TInt /*aAfter*/ ) + { + Log( EFalse, _L("CBavpView::AddPluginOptionMenuItemsL") ); + + iCommandBase = aCommandBase; + TInt index( 0 ); + + // The menus are only added, if the controller exists and we're in + // normal screen and not bad content + if ( !iBavpController || iBavpController->IsClipFullScreen() || + iBavpController->State() == EBavpBadContent ) + { + return; + } + + // Display the "Mute" menu item, unless we have HW volume keys, and... + if ( !HAS_HW_VOLUME_KEYS && + !iBavpController->IsVolumeMuted() && + !iBavpController->IsClipRewinding() && + !iBavpController->IsClipFastForwarding() ) + { + InsertOneMenuItemL( aMenuPane, EBavpCmdMuteVolume, + R_TEXT_VIDEO_PLUGIN_VOLUME_MUTE, index); + index++; + } + + // Check CurrentState to determine the menu items to add + switch ( iBavpController->State() ) + { + case EBavpStopped: + case EBavpRewindComplete: + case EBavpPlayComplete: + { + // The content is at the beginning, user can play + InsertOneMenuItemL( aMenuPane, EBavpCmdPlay, + R_TEXT_VIDEO_PLUGIN_PLAY, index ); + index ++; + break; + } + case EBavpPlaying: + { + // Check if it can be paused + if ( iBavpController->IsClipSeekable() ) + { + InsertOneMenuItemL( aMenuPane, EBavpCmdPause, + R_TEXT_VIDEO_PLUGIN_PAUSE, index); + index++; + } + + // If playing, user can also stop + InsertOneMenuItemL( aMenuPane, EBavpCmdStop, + R_TEXT_VIDEO_PLUGIN_STOP, index ); + index++; + // Add FF and Rewind, only if content seekable, local media, video + if ( iBavpController->IsClipSeekable() && + iBavpController->IsClipLocalMedia() && + iBavpController->IsClipVideo() ) + { + InsertOneMenuItemL( aMenuPane, EBavpCmdFastForward, + R_TEXT_VIDEO_PLUGIN_FAST_FORWARD, index ); + index++; + InsertOneMenuItemL( aMenuPane, EBavpCmdRewind, + R_TEXT_VIDEO_PLUGIN_REWIND, index ); + index++; + } + // Add full screen, only if video content + if ( iBavpController->IsClipVideo() ) + { + InsertOneMenuItemL( aMenuPane, EBavpCmdPlayFullScreen, + R_TEXT_VIDEO_PLUGIN_FULL_SCREEN, index ); + index++; + } + break; + } + case EBavpPaused: + { + // If paused, user can continue (play) or stop + InsertOneMenuItemL( aMenuPane, EBavpCmdPlay, + R_TEXT_VIDEO_PLUGIN_PLAY, index ); + index++; + + InsertOneMenuItemL( aMenuPane, EBavpCmdStop, + R_TEXT_VIDEO_PLUGIN_STOP, index ); + index++; + // Add FF and Rewind, only if content seekable, local media, video + if ( iBavpController->IsClipSeekable() && + iBavpController->IsClipLocalMedia() && + iBavpController->IsClipVideo() ) + { + InsertOneMenuItemL( aMenuPane, EBavpCmdFastForward, + R_TEXT_VIDEO_PLUGIN_FAST_FORWARD, index ); + index++; + InsertOneMenuItemL( aMenuPane, EBavpCmdRewind, + R_TEXT_VIDEO_PLUGIN_REWIND, index ); + index++; + } + break; + } + case EBavpFastForwarding: + case EBavpRewinding: + { + // User can play, while FF or Rewinding + InsertOneMenuItemL( aMenuPane, EBavpCmdPlay, + R_TEXT_VIDEO_PLUGIN_PLAY, index ); + index++; + // Add pause, we should only be fast-forwarding or rewinding + // seekable content, no need to check + InsertOneMenuItemL( aMenuPane, EBavpCmdPause, + R_TEXT_VIDEO_PLUGIN_PAUSE, index); + index++; + break; + } + case EBavpFastForwardComplete: + { + // Content is at the end, user can replay + InsertOneMenuItemL( aMenuPane, EBavpCmdPlay, + R_TEXT_VIDEO_PLUGIN_PLAY, index ); + index++; + // Add rewind, we should only be fast-forwarding seekable content, + // no need to check + InsertOneMenuItemL( aMenuPane, EBavpCmdRewind, + R_TEXT_VIDEO_PLUGIN_REWIND, index ); + index++; + break; + } + default: + { + break; + } + } // End of switch + + // Display "Media Volume" menu item, unless we have HW volume keys and... + if ( !HAS_HW_VOLUME_KEYS && + !iBavpController->IsClipRewinding() && + !iBavpController->IsClipFastForwarding() ) + { + // User can adjust volume + InsertOneMenuItemL( aMenuPane, EBavpCmdChangeVolume, + R_TEXT_VIDEO_PLUGIN_MEDIA_VOLUME, index ); + } + } + +// ----------------------------------------------------------------------------- +// CBavpView::HandlePluginCommandL +// Handle the user command from the option menu to the plugin. +// ----------------------------------------------------------------------------- +void CBavpView::HandlePluginCommandL( TInt aCommand ) + { + iBavpController->HandleCommandL( (TBavpCommandIds)(aCommand - iCommandBase) ); + } + +// ----------------------------------------------------------------------------- +// CBavpView::OfferKeyEventL +// Control framework calls this function to handle the key event +// ----------------------------------------------------------------------------- +TKeyResponse CBavpView::OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + Log( EFalse, _L("CBavpView::OfferKeyEventL") ); + + TKeyResponse keyResponse( EKeyWasNotConsumed ); + + //Check if the controller is already initialized + if (iBavpController) + { + // Let the Audio or Video controller handle the key presses + keyResponse = iBavpController->HandleKeysL( aKeyEvent, aType ); + } + + return keyResponse; + } + +// ----------------------------------------------------------------------------- +// CBavpView::SetRect +// Sets the control's extent, specifying a TRect +// ----------------------------------------------------------------------------- +void CBavpView::SetRect( NPWindow* aWindow ) + { + Log( EFalse, _L("CBavpView::SetRect") ); + iWindowRect = TRect(TPoint(aWindow->x, aWindow->y), TSize(aWindow->width, aWindow->height)); + iClipRect = TRect(aWindow->clipRect.left, aWindow->clipRect.top, aWindow->clipRect.right, aWindow->clipRect.bottom); + TRect r(iClipRect); + r.Intersection(iWindowRect); + TBool flag = iRect != r; + iRect = r; + CCoeControl::SetRect( iRect ); + + // Set the rect only when the animation is playing + if ( iIsVideoBuffAnimRunning && iVideoBuffAnimation && + flag) + { + iVideoBuffAnimation->CancelAnimation(); + TRect animRect( iWindowRect); + iVideoBuffAnimation->SetRect( animRect ); + TRAP_IGNORE( iVideoBuffAnimation->StartAnimationL() ); + } + else if ( iIsAudioPlayAnimRunning && iAudioPlayAnimation && + flag) + { + iAudioPlayAnimation->CancelAnimation(); + TRect animRect( iWindowRect); + iAudioPlayAnimation->SetRect( animRect ); + TRAP_IGNORE( iAudioPlayAnimation->StartAnimationL() ); + } + else if ( iIsAudioStoppedAnimRunning && iAudioStoppedAnimation && + flag) + { + iAudioStoppedAnimation->CancelAnimation(); + TRect animRect( iWindowRect); + iAudioStoppedAnimation->SetRect( animRect ); + TRAP_IGNORE( iAudioStoppedAnimation->StartAnimationL() ); + } + else if ( iIsAudioPausedAnimRunning && iAudioPausedAnimation && + flag) + { + iAudioPausedAnimation->CancelAnimation(); + TRect animRect( iWindowRect); + iAudioPausedAnimation->SetRect( animRect ); + TRAP_IGNORE( iAudioPausedAnimation->StartAnimationL() ); + } + else if ( iIsVideoStoppedAnimRunning && iVideoStoppedAnimation && + flag) + { + iVideoStoppedAnimation->CancelAnimation(); + TRect animRect( iWindowRect); + iVideoStoppedAnimation->SetRect( animRect ); + TRAP_IGNORE( iVideoStoppedAnimation->StartAnimationL() ); + } + else if ( iIsVideoPausedAnimRunning && iVideoPausedAnimation && + flag) + { + iVideoPausedAnimation->CancelAnimation(); + TRect animRect( iWindowRect); + iVideoPausedAnimation->SetRect( animRect ); + TRAP_IGNORE( iVideoPausedAnimation->StartAnimationL() ); + } + else if ( iIsBadContentAnimRunning && iBadContentAnimation && + flag) + { + iBadContentAnimation->CancelAnimation(); + TRect animRect( iWindowRect); + iBadContentAnimation->SetRect( animRect ); + TRAP_IGNORE( iBadContentAnimation->StartAnimationL() ); + } + } + +// ----------------------------------------------------------------------------- +// CBavpView::IsTopWindow +// Return ETrue if the CCoeControl is the top window instance +// ----------------------------------------------------------------------------- +TBool CBavpView::IsTopWindowL() + { + Log( EFalse, _L("CBavpView::IsTopWindowL") ); + + TBool ret( EFalse ); + TInt numWg( iWsSession.NumWindowGroups() ); + CArrayFixFlat* wgList = new (ELeave) CArrayFixFlat( numWg ); + + // Check if our window is front or not + if ( iWsSession.WindowGroupList( 0, wgList ) == KErrNone ) + { + ret = ( iWindowId == wgList->At(0) ); + } + else + { + ret = EFalse; + } + + delete wgList; + return ret; + } + +// ----------------------------------------------------------------------------- +// CBavpView::UpdateView +// Check animation running status, display the animated image if the video +// player is not playing +// ----------------------------------------------------------------------------- +void CBavpView::UpdateView() + { + Log( EFalse, _L("CBavpView::UpdateView") ); + + // Handle the bad content case, ie MMF reports an error that needs to + // be displayed to the user. (loss of network or bad content) + if ( iBavpController->State() == EBavpBadContent && !iIsBadContentAnimRunning ) + { + Log( EFalse, _L("CBavpView::UpdateView - Bad Content") ); + RunAnimation( iBadContentAnimation, iIsBadContentAnimRunning ); + } + // Handle the beffering content state + else if ( iBavpController->State() == EBavpBuffering && !iIsVideoBuffAnimRunning ) + { + Log( EFalse, _L("CBavpView::UpdateView - Buffering media") ); + RunAnimation( iVideoBuffAnimation, iIsVideoBuffAnimRunning ); + } + // Handle the video animations states + else if ( iBavpController->IsClipVideo() ) + { + Log( EFalse, _L("CBavpView::UpdateView - We got Video") ); + if ( iBavpController->State() == EBavpPlaying ) + { + Log( EFalse, _L("CBavpView::UpdateView - Video Playing, stop animation") ); + TBool flag( EFalse ); + RunAnimation( NULL, flag ); + } + else if ( iBavpController->State() == EBavpStopped && !iIsVideoStoppedAnimRunning ) + { + Log( EFalse, _L("CBavpView::UpdateView - Video Stopped") ); + RunAnimation( iVideoStoppedAnimation, iIsVideoStoppedAnimRunning ); + } + else if ( iBavpController->State() == EBavpPaused && !iIsVideoPausedAnimRunning ) + { + Log( EFalse, _L("CBavpView::UpdateView - Video Paused") ); + RunAnimation( iVideoPausedAnimation, iIsVideoPausedAnimRunning ); + } + } + // Handle the audio animations states + else + { + Log( EFalse, _L("CBavpView::UpdateView - We got Audio") ); + if ( iBavpController->State() == EBavpPlaying && !iIsAudioPlayAnimRunning ) + { + Log( EFalse, _L("CBavpView::UpdateView - Audio Playing") ); + RunAnimation( iAudioPlayAnimation, iIsAudioPlayAnimRunning ); + } + else if ( iBavpController->State() == EBavpStopped || + iBavpController->State() == EBavpPlayComplete && + !iIsAudioStoppedAnimRunning ) + { + Log( EFalse, _L("CBavpView::UpdateView - Audio Stopped") ); + RunAnimation( iAudioStoppedAnimation, iIsAudioStoppedAnimRunning ); + } + else if ( iBavpController->State() == EBavpPaused && !iIsAudioPausedAnimRunning ) + { + Log( EFalse, _L("CBavpView::UpdateView - Audio Paused") ); + RunAnimation( iAudioPausedAnimation, iIsAudioPausedAnimRunning ); + } + } + } + +// ----------------------------------------------------------------------------- +// CBavpView::FocusChanged +// This method is called once CCoeControl::SetFocus is called, could be when +// BavpPlugin::NotifyL causes SetFocus to be called +// ----------------------------------------------------------------------------- +void CBavpView::FocusChanged( TDrawNow /*aDrawNow*/ ) + { + iBavpController->BavpFocusChanged( IsFocused() ); + } + +// ----------------------------------------------------------------------------- +// CBavpView::Draw +// This method is called by CCoeControl::Draw +// ----------------------------------------------------------------------------- +void CBavpView::Draw( const TRect& aRect ) const + { + + if (iBavpController && !iBavpController->IsClipFullScreen()) { + if ( Window().DisplayMode() == EColor16MA ) + { + Log( EFalse, _L("BavpView::Draw() - DisplayMode=EColor16MA") ); + CWindowGc& gc = SystemGc(); + gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha ); +#ifdef _DEBUG + gc.SetBrushColor(TRgb::Color16MA(0x0000ff00)); +#else + gc.SetBrushColor( TRgb::Color16MA(0) ); +#endif + gc.Clear( aRect ); + } + + if (iBavpController->IsClipLocalMedia() && iBavpController->IsClipSeekable()) { + if (iBavpController->State() == EBavpPlayComplete) { + TRAP_IGNORE(iBavpController->setPositionL(iBavpController->Duration())); + } + else if (iBavpController->State() == EBavpPaused) { + TRAP_IGNORE(iBavpController->setPositionL(iBavpController->getPositionL())); + } + } + } + + } + +// ----------------------------------------------------------------------------- +// CBavpView::ControllerStateChangedL +// Check animation running status and the display screen mode +// ----------------------------------------------------------------------------- +void CBavpView::ControllerStateChangedL() + { + Log( EFalse, _L("CBavpView::ControllerStateChangedL") ); + + // If not in full screen mode and if it is on the stack, then remove + // from the stack + if ( !iBavpController->IsClipFullScreen() && iIsOnStack ) + { + iIsOnStack = EFalse; + iEikonEnv->EikAppUi()->RemoveFromStack( this ); + } + else if ( iBavpController->IsClipFullScreen() && !iIsOnStack ) + { + // If full screen mode and not on stack, add to stack + iIsOnStack = ETrue; + iEikonEnv->EikAppUi()->AddToStackL( this ); + } + } + +// ----------------------------------------------------------------------------- +// CBavpView::InsertOneMenuItemL +// Insert one menu item +// ----------------------------------------------------------------------------- +void CBavpView::InsertOneMenuItemL( CEikMenuPane& aMenuPane, TInt aCommand, + TInt aResourceId, TInt index ) + { + Log( EFalse, _L("CBavpView::InsertOneMenuItemL") ); + + CEikMenuPaneItem::SData item; + HBufC* buf = StringLoader::LoadLC( aResourceId ); + item.iText.Copy( *buf ); + CleanupStack::PopAndDestroy(); // buf + buf = NULL; + + item.iCommandId = aCommand + iCommandBase; + item.iFlags = 0; + item.iCascadeId = 0; + aMenuPane.InsertMenuItemL( item, index ); + } + +// ----------------------------------------------------------------------------- +// CBavpView::RunAnimation +// Run the animation specified, and stop all the other animations +// If the animation and run flag are NULL, we stop all animations +// Check if animation is already running, if so don't stop, this causes flicker +// ----------------------------------------------------------------------------- +void CBavpView::RunAnimation( CAknBitmapAnimation* aAnimation, + TBool &aAnimRunning ) + { + Log( EFalse, _L("CBavpView::RunAnimation") ); + // Display the animation specified, after cancelling any + // other animations first. + // + // Stop the video buffering animation + if ( iIsVideoBuffAnimRunning && iVideoBuffAnimation != aAnimation ) + { + Log( EFalse, _L("CBavpView::RunAnimation - cancel VideoBuffAnimation") ); + iVideoBuffAnimation->CancelAnimation(); + iIsVideoBuffAnimRunning = EFalse; + } + else if ( iIsVideoStoppedAnimRunning && iVideoStoppedAnimation != aAnimation ) + { + // Stop the video stopped animation + Log( EFalse, _L("CBavpView::RunAnimation - cancel VideoStoppedAnimation") ); + iVideoStoppedAnimation->CancelAnimation(); + iIsVideoStoppedAnimRunning = EFalse; + } + else if ( iIsVideoPausedAnimRunning && iVideoPausedAnimation != aAnimation ) + { + // Stop the video paused animation + Log( EFalse, _L("CBavpView::RunAnimation - cancel VideoPausedAnimation") ); + iVideoPausedAnimation->CancelAnimation(); + iIsVideoPausedAnimRunning = EFalse; + } + else if ( iIsAudioPlayAnimRunning && iAudioPlayAnimation != aAnimation ) + { + // Stop the audio playing animation + Log( EFalse, _L("CBavpView::RunAnimation - cancel AudioPlayAnimation") ); + iAudioPlayAnimation->CancelAnimation(); + iIsAudioPlayAnimRunning = EFalse; + } + else if ( iIsAudioStoppedAnimRunning && iAudioStoppedAnimation != aAnimation ) + { + // Stop the audio stopped animation + Log( EFalse, _L("CBavpView::RunAnimation - cancel AudioStoppedAnimation") ); + iAudioStoppedAnimation->CancelAnimation(); + iIsAudioStoppedAnimRunning = EFalse; + } + else if ( iIsAudioPausedAnimRunning && iAudioPausedAnimation != aAnimation ) + { + // Stop the audio paused animation + Log( EFalse, _L("CBavpView::RunAnimation - cancel AudioPausedAnimation") ); + iAudioPausedAnimation->CancelAnimation(); + iIsAudioPausedAnimRunning = EFalse; + } + else if ( iIsBadContentAnimRunning && iBadContentAnimation != aAnimation ) + { + // Stop the bad content animation + Log( EFalse, _L("CBavpView::RunAnimation - cancel BadContentAnimation") ); + iBadContentAnimation->CancelAnimation(); + iIsBadContentAnimRunning = EFalse; + } + + // Now, start the animation specified, if it isn't already running. + // If the animation and run flag are NULL, we don't start any animations. + if ( aAnimation && !aAnimRunning ) + { + Log( EFalse, _L("CBavpView::RunAnimation - start new animation") ); + if ( aAnimation->Rect().Size() != iRect.Size() ) + { + TRect animRect( iWindowRect); + aAnimation->SetRect( animRect ); + } + TRAP_IGNORE + ( + aAnimation->StartAnimationL(); + aAnimRunning = ETrue; + ); + } + + } + + +void CBavpView::HandlePointerEventL(const TPointerEvent &aPointerEvent) + { + /* + * Plugin is sending all pointer events to the browser. + * Browser will process them to gesture and return back using + * event() function. (see PluginWin::HandleGesture(), BavpEvent() and + * CBavpPlugin::HandleGesture(). + * Browser expects event position to be in absolute co-ordinates, + * so we convert position of the pointer event here. + */ + TPoint point(aPointerEvent.iPosition + PositionRelativeToScreen()); + NPNetscapeFuncs* funcs = iBavPlugin->getNPNFuncs(); +#ifdef BRDO_MULTITOUCH_ENABLED_FF + if (aPointerEvent.IsAdvancedPointerEvent()) { + TAdvancedPointerEvent tadvp = *(static_cast(&aPointerEvent)); + tadvp.iPosition = point; + if(funcs && funcs->setvalue) { + (funcs->setvalue)(iBavPlugin->getNPP(), + (NPPVariable) NPPVPluginPointerEvent, + (void*) &(tadvp)); + } + + } + else { +#endif + TPointerEvent event(aPointerEvent); + event.iPosition = point; + if(funcs && funcs->setvalue) { + (funcs->setvalue)(iBavPlugin->getNPP(), + (NPPVariable) NPPVPluginPointerEvent, + (void*) &(event)); + } +#ifdef BRDO_MULTITOUCH_ENABLED_FF + } +#endif + + } + +// End of File