camerauis/cameraapp/generic/src/CamVideoPostCaptureView.cpp
changeset 0 1ddebce53859
child 12 8c55c525d5d7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/CamVideoPostCaptureView.cpp	Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,573 @@
+/*
+* Copyright (c) 2007-2009 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:  Video Post-capture view class for Camera application*
+*/
+
+
+// INCLUDE FILES
+
+#include <eikmenub.h>
+#include <StringLoader.h>
+#include <AknQueryDialog.h>
+#include <AiwCommon.hrh>
+#include <sendnorm.rsg>
+#include <sendui.h>
+#include <akntoolbar.h>
+#ifndef __WINS__
+  //#include <SFIUtilsAppInterface.h>
+  #include <aknnotewrappers.h>  // CAknInformationNote
+#endif
+
+#include <cameraapp.rsg>
+#include <vgacamsettings.rsg>
+
+#include "CamAppUiBase.h"
+#include "CamAppController.h"
+#include "CamVideoPostCaptureView.h"
+#include "CamPostCaptureContainer.h"
+#include "CamLogger.h"
+#include "CamAppUi.h"
+#include "CamAppUiBase.h"
+#include "CamUtility.h"
+#include "Cam.hrh"
+#include "camactivepalettehandler.h"
+#include "camoneclickuploadutility.h"
+#include "CameraUiConfigManager.h"
+
+
+
+//CONSTANTS
+
+// ========================= MEMBER FUNCTIONS ================================
+
+
+// ---------------------------------------------------------------------------
+// CCamVideoPostCaptureView::NewLC
+// Symbian OS two-phased constructor
+// ---------------------------------------------------------------------------
+//
+CCamVideoPostCaptureView* CCamVideoPostCaptureView::NewLC( CCamAppController& aController )
+    {
+    CCamVideoPostCaptureView* self = 
+        new( ELeave ) CCamVideoPostCaptureView( aController );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CCamVideoPostCaptureView destructor
+// 
+// ---------------------------------------------------------------------------
+//
+CCamVideoPostCaptureView::~CCamVideoPostCaptureView()
+    {     
+    }
+
+// ---------------------------------------------------------------------------
+// CCamVideoPostCaptureView::Id
+// Returns UID of view
+// ---------------------------------------------------------------------------
+//
+TUid CCamVideoPostCaptureView::Id() const
+    {
+    return TUid::Uid( ECamViewIdVideoPostCapture );
+    }
+  
+// -----------------------------------------------------------------------------
+// CCamVideoPostCaptureView::HandleCommandL
+// Handle commands
+// -----------------------------------------------------------------------------
+//
+void CCamVideoPostCaptureView::HandleCommandL( TInt aCommand )
+    {
+    switch ( aCommand )
+        {
+        case ECamCmdRenameVideo:
+            {
+            CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
+            QueryRenameL( ECamControllerVideo );
+
+            // inform the Media gallery of name change
+            TRAPD( ignore,
+                appUi->HandleControllerEventL( ECamEventMediaFileChanged, KErrNone ) );
+            if ( ignore )
+                {
+                // Do nothing (removes build warning)
+                }
+            break;
+            }
+        case EAknSoftkeySelect: 
+            {
+            // In post-capture select key is disabled when embedded 
+            if ( !iEmbedded )
+                {
+                CEikMenuBar* menuBar = MenuBar();
+                if ( menuBar )
+                    {
+                    menuBar->SetMenuTitleResourceId( ROID(R_CAM_VIDEO_POST_CAPTURE_OK_MENUBAR_ID));
+                    menuBar->TryDisplayMenuBarL();
+                    menuBar->SetMenuTitleResourceId( ROID(R_CAM_VIDEO_POST_CAPTURE_MENUBAR_ID));
+                    }
+                CCamPostCaptureViewBase::HandleCommandL( aCommand );
+                }
+            else
+                {
+                AppUi()->HandleCommandL( ECamCmdSelect );
+                }
+            }
+            break;
+        case ECamCmdSend:
+        case ECamCmdSendToCallerMultimedia:
+        case ECamCmdQuickSend:
+            {
+            CCamPostCaptureViewBase::HandleCommandL( aCommand );
+            }
+            break;
+        default:
+            {
+            PRINT1( _L("Camera => CCamVideoPostCaptureView::HandleCommandL default cmd (%d)"), aCommand )
+            // Handle AIW commands
+            TInt aiwServiceCmd = iAiwServiceHandler->ServiceCmdByMenuCmd( aCommand );
+            if ( aiwServiceCmd != KAiwCmdNone )
+                {
+                PRINT1( _L("Camera => CCamVideoPostCaptureView::HandleCommandL default handle AIW cmd (%d)" ), aiwServiceCmd)
+                CAiwGenericParamList& inParams  = iAiwServiceHandler->InParamListL();
+                CAiwGenericParamList& outParams = iAiwServiceHandler->OutParamListL();
+                // Add file path to AIW parameters
+                TAiwVariant variant( iController.CurrentFullFileName() );
+                TAiwGenericParam param( EGenericParamFile, variant );
+                inParams.AppendL( param );
+                
+                // Don't add the mime type if uploading, since Share client 
+                // will figure it out from the file
+                if ( aiwServiceCmd != KAiwCmdUpload ) 
+                    {
+                    TAiwGenericParam param2( EGenericParamMIMEType, _L("video/*") );
+                    inParams.AppendL( param2 );
+                    }
+
+                iAiwServiceHandler->ExecuteMenuCmdL( aCommand, inParams, outParams, 0, this );
+                // we are 'embedding' Edit app
+                static_cast<CCamAppUiBase*>( AppUi() )->SetEmbedding( ETrue );
+                }
+            else
+                {
+                CCamPostCaptureViewBase::HandleCommandL( aCommand );
+                }
+            
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCamVideoPostCaptureView::DisplayDeleteNoteL()
+// Delete the current file
+// -----------------------------------------------------------------------------
+//
+TBool CCamVideoPostCaptureView::DisplayDeleteNoteL()
+    {
+    // Display the delete confirmation note
+    TInt err = KErrNone;
+    HBufC* confirmationText;
+    confirmationText = StringLoader::LoadLC( R_CAM_VIDEO_POST_CAPTURE_DELETE_NOTE_TEXT );
+    CAknQueryDialog* confirmationDialog = 
+                            new( ELeave )CAknQueryDialog( *confirmationText );
+    CleanupStack::PopAndDestroy( confirmationText );
+    if ( confirmationDialog->ExecuteLD( R_CAM_VIDEO_POST_CAPTURE_DELETE_NOTE ) )
+        {
+        if ( iEmbedded )
+            {
+            BlankSoftkeysL();
+            Cba()->DrawNow();
+            SetSoftKeysL( R_CAM_SOFTKEYS_SELECT_DELETE__SELECT );
+            }
+        err = iController.DeleteCurrentFile();
+        if ( err ) 
+            {
+            User::Leave( err );
+            }
+        return ETrue;
+        }                
+    else
+        {
+        if ( iEmbedded )
+            {
+            BlankSoftkeysL();
+            Cba()->DrawNow();
+            SetSoftKeysL( R_CAM_SOFTKEYS_SELECT_DELETE__SELECT );
+            }
+        return EFalse;
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// CCamVideoPostCaptureView::DoActivateL()
+// Activate this view
+// -----------------------------------------------------------------------------
+//
+void CCamVideoPostCaptureView::DoActivateL(
+        const TVwsViewId& aPreViewId,
+        TUid aCustomMessageId,
+        const TDesC8& aCustomMessage )
+    {
+    // Ensure the correct menu is used for the current mode.
+    CEikMenuBar* menuBar = MenuBar();
+    if ( menuBar )
+        {
+        menuBar->SetMenuTitleResourceId(
+                ROID( R_CAM_VIDEO_POST_CAPTURE_MENUBAR_ID ) );
+        }
+
+    CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
+
+    if ( iController.IsTouchScreenSupported() )
+        {
+        if ( appUi->IsSecondCameraEnabled() )
+            {
+            if ( iOneClickUploadUtility->OneClickUploadSupported() )
+                {
+                TInt resourceId = appUi->IsQwerty2ndCamera()? 
+                              R_CAM_VIDEO_POSTCAPTURE_TOOLBAR_LANDSCAPE_UPLOAD:
+                              R_CAM_VIDEO_POSTCAPTURE_TOOLBAR_PORTRAIT_UPLOAD; 
+                CreateAndSetToolbarL( resourceId );
+                }
+            else
+                {
+                TInt resourceId = appUi->IsQwerty2ndCamera()? 
+                              R_CAM_VIDEO_POSTCAPTURE_TOOLBAR_LANDSCAPE:
+                              R_CAM_VIDEO_POSTCAPTURE_TOOLBAR_PORTRAIT; 
+                CreateAndSetToolbarL( resourceId );
+                }
+            }
+        else
+            {
+            if ( iOneClickUploadUtility->OneClickUploadSupported() )
+                {
+                CreateAndSetToolbarL( R_CAM_VIDEO_POSTCAPTURE_TOOLBAR_UPLOAD );
+                }
+            else
+                {
+                CreateAndSetToolbarL( R_CAM_VIDEO_POSTCAPTURE_TOOLBAR );
+                }
+            }
+        }
+
+    iAiwServiceHandler->Reset();
+    iAiwServiceHandler->AttachMenuL( ROID( R_CAM_VIDEO_POST_CAPTURE_MENU_ID ),
+            R_CAM_SHARE_ON_OVI_INTEREST );
+
+    CCamPostCaptureViewBase::DoActivateL(
+            aPreViewId, aCustomMessageId, aCustomMessage );
+
+    if ( !iController.IsTouchScreenSupported() )
+        {
+        TCamOrientation orientation = appUi->CamOrientation();
+
+        CCamActivePaletteHandler* apHandler = appUi->APHandler();
+        if( !iEmbedded && ( orientation == ECamOrientationCamcorder ||
+                orientation == ECamOrientationCamcorderLeft ) )
+            {
+            iContainer->CreateActivePaletteL();
+            MActivePalette2UI* activePalette =
+            appUi->APHandler()->ActivePalette();
+
+            if(activePalette)
+                {
+                activePalette->SetGc();
+                }        
+
+            // install still pre-capture items     
+            apHandler->InstallAPItemsL( R_CAM_VIDEO_POST_CAPTURE_AP_ITEMS );
+
+            // Hide Send or Send to caller
+            ResetSendAvailabilityL( apHandler );
+            apHandler->SetView( this );
+
+            // Make AP visible
+            appUi->SetAlwaysDrawPostCaptureCourtesyUI( ETrue );
+            }
+        else
+            {   
+            }
+        }
+    iAiwServiceHandler->AttachMenuL( ROID( R_CAM_VIDEO_POST_CAPTURE_MENU_ID ), 
+            R_CAM_SET_AS_RING_TONE_INTEREST );
+    }
+
+// ---------------------------------------------------------------------------
+// CCamVideoPostCaptureView::CCamVideoPostCaptureView
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CCamVideoPostCaptureView::CCamVideoPostCaptureView( CCamAppController& aController )
+    : CCamPostCaptureViewBase( aController )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CCamVideoPostCaptureView::ConstructL
+// Symbian OS 2nd phase constructor
+// ---------------------------------------------------------------------------
+//
+void CCamVideoPostCaptureView::ConstructL()
+    {
+    PRINT( _L("Camera => CCamVideoPostCaptureView::ConstructL"))
+    BaseConstructL( ROID(R_CAM_VIDEO_POST_CAPTURE_VIEW_ID));
+    CCamPostCaptureViewBase::ConstructL();
+
+    iAiwServiceHandler->AttachMenuL( ROID( R_CAM_VIDEO_POST_CAPTURE_MENU_ID ), R_CAM_SHARE_ON_OVI_INTEREST );
+
+    PRINT( _L("Camera <= CCamVideoPostCaptureView::ConstructL"))
+    }
+
+// ---------------------------------------------------------------------------
+// CCamVideoPostCaptureView::DoDeactivate
+// Deactivate this view
+// ---------------------------------------------------------------------------
+//
+void CCamVideoPostCaptureView::DoDeactivate()
+    {
+    CCamPostCaptureViewBase::DoDeactivate();
+    }
+
+// ---------------------------------------------------------------------------
+// CCamVideoPostCaptureView::SetTitlePaneTextL
+// Set the view's title text
+// ---------------------------------------------------------------------------
+//
+void CCamVideoPostCaptureView::SetTitlePaneTextL()
+    {
+    TBool titleAlwaysShowsFileName = EFalse;
+    CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
+
+    if ( appUi->CamOrientation() == ECamOrientationViewMode ||
+              titleAlwaysShowsFileName )
+        {
+        appUi->SetTitleL( iController.CurrentImageName() );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCamVideoPostCaptureView::ProcessCommandL
+// Handling ECamCmdToggleActiveToolbar from any of the PostCaptureView's
+// either Image/Video. 
+// ---------------------------------------------------------------------------
+//
+void CCamVideoPostCaptureView::ProcessCommandL( TInt aCommand )
+    {
+    CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
+    TCamOrientation orientation = appUi->CamOrientation();
+    if( orientation == ECamOrientationCamcorder || 
+        orientation == ECamOrientationCamcorderLeft ||
+		orientation == ECamOrientationPortrait )
+        {
+        if ( aCommand == ECamCmdToggleActiveToolbar )
+            {
+            CCamPostCaptureViewBase::HandleCommandL( aCommand );
+            }
+         else
+            {
+			CAknView::ProcessCommandL( aCommand );	            
+            }
+        }
+    else 
+        {
+        if ( aCommand == EAknSoftkeyContextOptions )
+            {
+            iRockerKeyPress = ETrue;
+            MenuBar()->SetContextMenuTitleResourceId( 
+            				ROID(R_CAM_VIDEO_POST_CAPTURE_MENU_ID ) );
+            MenuBar()->SetMenuType( CEikMenuBar::EMenuContext );
+            MenuBar()->TryDisplayMenuBarL();
+            MenuBar()->SetMenuType( CEikMenuBar::EMenuOptions );
+            }
+        else
+            {
+            CAknView::ProcessCommandL( aCommand );
+            }
+        
+        }
+    // CALL THE BASE CLASS
+    
+    }
+    
+// ---------------------------------------------------------------------------
+// CCamVideoPostCaptureView::DynInitMenuPaneL
+// Changes MenuPane dynamically
+// ---------------------------------------------------------------------------
+//
+void CCamVideoPostCaptureView::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
+    {
+    PRINT( _L("Camera => CCamVideoPostCaptureView::DynInitMenuPaneL"))
+    
+    if ( iAiwServiceHandler )
+    	{
+    	PRINT( _L("Camera => CCamVideoPostCaptureView::DynInitMenuPaneL aiw"))
+
+    	// let AIW handle it's own submenus
+    	if ( iAiwServiceHandler->HandleSubmenuL( *aMenuPane ) )
+    		{
+    		PRINT( _L("Camera => CCamVideoPostCaptureView::DynInitMenuPaneL aiw handle sub"))
+    		return;
+    		}
+    	}
+    
+    CCamPostCaptureViewBase::DynInitMenuPaneL( aResourceId, aMenuPane );
+    
+    PRINT( _L("Camera => CCamVideoPostCaptureView::DynInitMenuPaneL A"))
+    if ( iAiwServiceHandler && iAiwServiceHandler->IsAiwMenu( aResourceId ) )
+        {
+        PRINT1( _L("Camera => CCamVideoPostCaptureView::DynInitMenuPaneL res ID (%d)"),aResourceId )
+        CAiwGenericParamList& paramList = iAiwServiceHandler->InParamListL();
+        TAiwVariant variant( iController.CurrentFullFileName() );
+        TAiwGenericParam param( EGenericParamFile, variant );
+        paramList.AppendL( param );
+        
+        TAiwVariant variant2(  _L("video/*") );
+        TAiwGenericParam param2( EGenericParamMIMEType, variant2 );
+        paramList.AppendL( param2 );
+        
+        PRINT( _L("Camera => CCamVideoPostCaptureView::DynInitMenuPaneL C"))
+        iAiwServiceHandler->InitializeMenuPaneL(
+            *aMenuPane, 
+            aResourceId, 
+            ECamCmdAIWCommands, 
+            paramList );
+            
+        PRINT( _L("Camera => CCamVideoPostCaptureView::DynInitMenuPaneL D"))     
+        }
+
+    TInt itemPos(0);
+
+    if ( aResourceId == ROID( R_CAM_VIDEO_POST_CAPTURE_MENU_ID ) ||
+         aResourceId == ROID( R_CAM_VIDEO_POST_CAPTURE_OK_MENU_ID ) )
+        {
+        TBool showSend = ETrue;
+        TBool showSendToCaller = EFalse;
+
+/*#ifndef __WINS__
+        if ( iSFIUtils->IsCLIValidL() )
+            {
+            showSend = EFalse;
+            showSendToCaller = ETrue;
+
+            if ( iController.IntegerSettingValue( ECamSettingItemVideoQuality ) 
+                == ECamVideoQualityHigh )
+                {
+                showSendToCaller = EFalse;
+                }
+            }
+#endif*/
+
+        if ( !iController.IsTouchScreenSupported() ||
+             !iOneClickUploadUtility->OneClickUploadSupported() )
+            {
+            // In non-touch UI Send/Send to caller are always in AP.
+            // No need for Options menu items.
+
+            // If 1-click upload is not supported in touch UI, then there is
+            // a send button in the fixed toolbar. There is no need to
+            // have it in Options menu.
+            showSend = EFalse;
+            showSendToCaller = EFalse;
+            }
+
+        if( aMenuPane->MenuItemExists( ECamCmdSendToCallerMultimedia, itemPos ) )
+            {
+            aMenuPane->SetItemDimmed(
+                ECamCmdSendToCallerMultimedia, !showSendToCaller );
+            }
+
+        if( aMenuPane->MenuItemExists( ECamCmdSend, itemPos ) )
+            {
+            aMenuPane->SetItemDimmed(
+                ECamCmdSend, !showSend );
+            }
+
+        /*
+         * MSK : ContextOptions --> We just hide Help and Exit from the Options Menu when
+         *       the MSK is pressed in the postcapture still view
+         *       iRockerKeyPress represents MSK key event in still postcapture view
+         */
+        if ( aMenuPane->MenuItemExists( EAknCmdHelp, itemPos ) &&
+             aMenuPane->MenuItemExists( ECamCmdInternalExit, itemPos ) )
+            {
+            if ( iRockerKeyPress )
+                { // We hide Help and Exit
+                aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+                aMenuPane->SetItemDimmed( ECamCmdInternalExit, ETrue );
+                iRockerKeyPress = EFalse;
+                }
+            else
+                { // We show Help and Exit
+                aMenuPane->SetItemDimmed( EAknCmdHelp, EFalse );
+                aMenuPane->SetItemDimmed( ECamCmdInternalExit, EFalse );	
+                }
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCamVideoPostCaptureView::HandleNotifyL
+// Handles any notification caused by asynchronous ExecuteCommandL
+// or event.
+// ---------------------------------------------------------------------------
+//
+TInt CCamVideoPostCaptureView::HandleNotifyL(
+    TInt /*aCmdId*/,
+    TInt aEventId,
+    CAiwGenericParamList& /*aEventParamList*/,
+    const CAiwGenericParamList& /*aInParamList*/ )
+    {
+    //AIW fails to assign. eg. the contact is locked for being used now.    
+    if ( aEventId == KAiwEventError && iController.IsAppUiAvailable() )
+      {
+      CCamAppUi* appUi =  static_cast<CCamAppUi*>( AppUi() );
+      TRAP_IGNORE( appUi->HandleCameraErrorL( KErrInUse ) );
+      }
+    
+    return 0;
+    }
+
+// ---------------------------------------------------------------------------
+// CCamVideoPostCaptureView::DynInitToolbarL
+// Dynamically initialize toolbar contents
+// ---------------------------------------------------------------------------
+//
+void CCamVideoPostCaptureView::DynInitToolbarL( TInt aResourceId, 
+                                                CAknToolbar* aToolbar )
+    {
+    PRINT2( _L("Camera => CCamVideoPostCaptureView::DynInitToolbarL(%d, 0x%X)" ), aResourceId, aToolbar );
+    (void)aResourceId; // remove compiler warning
+
+    // fixed toolbar is used only with touch devices
+    if ( iController.IsTouchScreenSupported() && iEmbedded && aToolbar )
+        {
+        // HideItem will not do anything if a button for the given
+        // command ID is not found.
+        aToolbar->HideItem( ECamCmdSend, ETrue, EFalse );
+        aToolbar->HideItem( ECamCmdDelete, ETrue, EFalse );
+        aToolbar->HideItem( ECamCmdOneClickUpload, ETrue, EFalse );
+        aToolbar->HideItem( ECamCmdPlay, ETrue, EFalse );
+        }
+
+    PRINT2( _L("Camera <= CCamVideoPostCaptureView::DynInitToolbarL(%d, 0x%X)" ), aResourceId, aToolbar );
+    }
+
+    
+//  End of File