--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/CamViewBase.cpp Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,1042 @@
+/*
+* 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: Base class for all views used in the Camera application*
+*/
+
+
+// INCLUDE FILES
+
+#include "CamAppUi.h"
+#include "CamViewBase.h"
+#include "CamContainerBase.h"
+#include "CamStandbyContainer.h"
+#include "CamUtility.h"
+#include "CamPanic.h"
+#include <eikmenub.h>
+
+
+#include <StringLoader.h>
+#include <AknQueryDialog.h>
+#include <aknnotewrappers.h>
+
+#include <cameraapp.rsg>
+#include <vgacamsettings.rsg>
+#include <akntoolbar.h>
+
+#include "CamUtility.h"
+#include <AknWaitDialog.h>
+#include "CamWaitDialog.h"
+#include "CamCommandHandlerAo.h"
+#include "CameraUiConfigManager.h"
+
+
+static const TRect KCamCbaHiddenRect = TRect(640,640,640,640);
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+
+// ---------------------------------------------------------------------------
+// CCamViewBase destructor
+//
+// ---------------------------------------------------------------------------
+//
+CCamViewBase::~CCamViewBase()
+ {
+ PRINT( _L("Camera => ~CCamViewBase" ))
+ if ( iStandbyContainer )
+ {
+ CAknViewAppUi* appUi = AppUi();
+
+ if ( appUi )
+ {
+ appUi->RemoveFromStack( iStandbyContainer );
+ }
+
+ delete iStandbyContainer;
+ iStandbyContainer = NULL;
+ }
+
+ delete iContainer;
+ iContainer = NULL;
+
+ delete iCommandHandlerAo;
+ iCommandHandlerAo = NULL;
+
+ PRINT( _L("Camera <= ~CCamViewBase" ))
+ }
+
+// -----------------------------------------------------------------------------
+// CCamViewBase::HandleFocusLossL
+// Handle focus loss
+// -----------------------------------------------------------------------------
+//
+void CCamViewBase::HandleFocusLossL()
+ {
+ // intentionally doing nothing
+ }
+
+// ---------------------------------------------------------------------------
+// HandleAppEvent <<virtual>>
+//
+// ---------------------------------------------------------------------------
+//
+void
+CCamViewBase::HandleAppEvent( const TCamAppEvent& aEvent )
+ {
+ PRINT1( _L("Camera => CCamViewBase::HandleAppEvent, event:%d"), aEvent );
+ if( iContainer )
+ {
+ iContainer->HandleAppEvent( aEvent );
+ }
+ PRINT( _L("Camera <= CCamViewBase::HandleAppEvent") );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCamViewBase::PrepareForModeChange
+// Prepare for mode change
+// -----------------------------------------------------------------------------
+//
+void CCamViewBase::PrepareForModeChange()
+ {
+ // intentionally doing nothing
+ }
+
+// -----------------------------------------------------------------------------
+// CCamViewBase::HandleCommandL
+// Handle commands
+// -----------------------------------------------------------------------------
+//
+void CCamViewBase::HandleCommandL( TInt aCommand )
+ {
+ PRINT( _L("Camera => CCamViewBase::HandleCommandL"))
+ switch(aCommand)
+ {
+ case ECamCmdInternalExit:
+ {
+ TInt standbyError = KErrNone;
+ if ( iStandbyModeActive && iStandbyContainer )
+ {
+ standbyError = iStandbyContainer->GetStandbyError();
+ ExitStandbyModeL();
+ }
+
+ if ( standbyError != KErrNone )
+ {
+ AppUi()->HandleCommandL( EEikCmdExit );
+ }
+ else
+ {
+ AppUi()->HandleCommandL( aCommand );
+ }
+
+ // dismiss menu - if open
+ StopDisplayingMenuBar();
+ }
+ break;
+
+ case ECamCmdRedrawScreen:
+ {
+ if( iContainer )
+ {
+ iContainer->DrawDeferred();
+ }
+ }
+ break;
+
+ default:
+ {
+ AppUi()->HandleCommandL( aCommand );
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCamViewBase::HandleForegroundEventL
+// Handle foreground event
+// -----------------------------------------------------------------------------
+//
+void CCamViewBase::HandleForegroundEventL( TBool /*aForeground*/ )
+ {
+ PRINT( _L("CCamViewBase::HandleForegroundEventL") );
+ CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
+ iEmbedded = appUi->IsEmbedded();
+ PRINT1( _L("CCamViewBase::HandleForegroundEventL embedded %d"), iEmbedded );
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::DoActivateL
+// Activate this view
+// ---------------------------------------------------------------------------
+//
+void
+CCamViewBase::DoActivateL( const TVwsViewId& /*aPostvViewId*/,
+ TUid aCustomMessageId,
+ const TDesC8& /*aCustomMessage*/ )
+ {
+ PRINT( _L("Camera => CCamViewBase::DoActivateL"));
+
+ CCamContainerBase::DestroyActivePalette();
+
+
+ if(ECamViewMessageDeactivateFirst == aCustomMessageId.iUid)
+ {
+ PRINT( _L("CCamViewBase::DoActivateL call deactivate"));
+ TBool wasCameraUser = IsCameraUser();
+
+ DoDeactivate();
+ // since we still use it
+ if( wasCameraUser )
+ {
+ IncrementCameraUsers();
+ }
+ }
+
+ CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
+ iEmbedded = appUi->IsEmbedded();
+
+ PRINT1( _L("CCamViewBase::DoActivateL Embedded %d"), iEmbedded);
+ if ( !iContainer )
+ {
+ CreateContainerL();
+ AppUi()->AddToStackL( *this, iContainer );
+ iContainer->ActivateL();
+ }
+
+ SetTitlePaneTextL();
+
+ TInt orientation;
+ TCamPsiKey queryValue = ECamPsiOrientation;
+ CCameraUiConfigManager* configManager = iController.UiConfigManagerPtr();
+
+ if ( configManager && configManager->IsSecondaryCameraSupported() )
+ {
+ if ( appUi->IsSecondCameraEnabled() && !appUi->IsQwerty2ndCamera() ) // if front camera is active
+ {
+ queryValue = ECamPsiSecondaryCameraOrientation;
+ }
+ else // back camera is active
+ {
+ queryValue = ECamPsiPrimaryCameraOrientation;
+ }
+ }
+
+ CamUtility::GetPsiInt( queryValue, orientation );
+
+ AppUi()->SetOrientationL( ( CAknAppUiBase::TAppUiOrientation ) orientation );
+
+ TCamOrientation camOrientation = appUi->CamOrientation();
+
+ // if in camcorder mode need to show navi-ctr
+ if( camOrientation == ECamOrientationCamcorder ||
+ camOrientation == ECamOrientationCamcorderLeft ||
+ camOrientation == ECamOrientationPortrait )
+ {
+ iContainer->SetupNaviPanesL( CCamContainerBase::ECamPaneCounter );
+ }
+ PRINT( _L("Camera <= CCamViewBase::DoActivateL"));
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::DoDeactivate
+// Deactivate this view
+// ---------------------------------------------------------------------------
+//
+void CCamViewBase::DoDeactivate()
+ {
+ PRINT( _L("Camera => CCamViewBase::DoDeactivate" ))
+ // Both standard container and standby container should be deactivated
+ if ( iStandbyContainer ) // implies IsInStandbyMode
+ {
+ AppUi()->RemoveFromStack( iStandbyContainer );
+ delete iStandbyContainer;
+ iStandbyContainer = NULL;
+ SetStandbyModeActive( EFalse );
+ }
+
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromStack( iContainer );
+ delete iContainer;
+ iContainer = NULL;
+ }
+
+ PRINT( _L("Camera <= CCamViewBase::DoDeactivate" ))
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::CCamViewBase
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CCamViewBase::CCamViewBase( CCamAppController& aController )
+ : iController( aController )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::UpdateCbaL
+// Update softkeys to reflect current state
+// ---------------------------------------------------------------------------
+//
+void CCamViewBase::UpdateCbaL()
+ {
+ }
+
+
+// ----------------------------------------------------
+// CCamViewBase::BlankSoftKeysL
+// Blank the softkeys
+// ----------------------------------------------------
+//
+void CCamViewBase::BlankSoftkeysL()
+ {
+ // blank the cba
+ SetSoftKeysL( R_CAM_SOFTKEYS_BLANK );
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::SwitchToStandbyModeL
+// Switches to standby mode
+// ---------------------------------------------------------------------------
+//
+void CCamViewBase::SwitchToStandbyModeL( TCamAppViewIds aViewId, TInt aError )
+ {
+ PRINT( _L("Camera => CCamViewBase::SwitchToStandbyModeL") );
+ // check if already in standby mode
+ if( iStandbyModeActive )
+ {
+ PRINT( _L("Camera <= CCamViewBase::SwitchToStandbyModeL: already in standby") );
+ return;
+ }
+
+ StatusPane()->MakeVisible( ETrue );
+ delete iStandbyContainer;
+ iStandbyContainer = NULL;
+ iStandbyContainer = CCamStandbyContainer::NewL( AppUi()->ClientRect(),
+ *this, iController, aError );
+ // dismiss menu - if open
+ StopDisplayingMenuBar();
+
+ // save options menu id for reactivation
+ if ( aViewId == ECamViewIdStillPreCapture )
+ {
+ if ( iEmbedded )
+ {
+ iPreviousMenuResourceId = ROID(R_CAM_STILL_EMBEDDED_PRE_CAPTURE_MENUBAR_ID);
+ }
+ else
+ {
+ iPreviousMenuResourceId = ROID(R_CAM_STILL_PRE_CAPTURE_MENUBAR_ID);
+ }
+ }
+ else if ( aViewId == ECamViewIdVideoPreCapture )
+ {
+ if ( iEmbedded )
+ {
+ iPreviousMenuResourceId = ROID(R_CAM_VIDEO_EMBEDDED_PRE_CAPTURE_MENUBAR_ID);
+ }
+ else
+ {
+ iPreviousMenuResourceId = ROID(R_CAM_VIDEO_PRE_CAPTURE_MENUBAR_ID);
+ }
+ }
+ else if ( aViewId == ECamViewIdVideoSettings )
+ {
+ iPreviousMenuResourceId = ROID(R_CAM_SETTINGS_LIST_MENUBAR_ID);
+ }
+ else if ( aViewId == ECamViewIdPhotoSettings )
+ {
+ iPreviousMenuResourceId = ROID(R_CAM_SETTINGS_LIST_MENUBAR_ID);
+ }
+ else
+ {
+ // remove Lint error
+ }
+
+ // activate standby container and deactivate current container
+ iStandbyContainer->SetMopParent( this );
+
+ CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
+ appUi->AddToStackL( *this, iStandbyContainer );
+ iStandbyContainer->ActivateL();
+ appUi->RemoveFromStack( iContainer );
+ iContainer->MakeVisible( EFalse );
+ iStandbyContainer->MakeVisible( ETrue );
+ iStandbyContainer->DrawNow();
+
+ UnsetCourtesySoftKeysL();
+
+ // update softkeys
+ if ( !appUi->IsConstructionComplete() )
+ {
+ BlankSoftkeysL();
+ }
+ else if ( appUi->StandbyStatus() == KErrInUse
+ || appUi->StandbyStatus() == KErrPermissionDenied )
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_EXIT );
+ }
+ else if ( iEmbedded )
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_BACK__CONTINUE );
+ }
+ else
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_EXIT__CONTINUE );
+ }
+
+ // change options menu
+ CEikMenuBar* menuBar = MenuBar();
+ if ( menuBar )
+ {
+ menuBar->SetMenuTitleResourceId( R_CAM_STANDBY_MENUBAR );
+ }
+
+// if ( iStandbyError != KErrNone )
+ if ( appUi->StandbyStatus() != KErrNone )
+ {
+ // stop idle timer - non recoverable error
+ iController.StopIdleTimer();
+ }
+
+ SetStandbyModeActive(ETrue);
+
+ // Release the camera hardware
+ iController.ReleaseCamera();
+
+
+ // cancel self timer mode if active
+ if ( appUi->SelfTimerEnabled() )
+ {
+ appUi->SelfTimerEnableL( ECamSelfTimerDisabled );
+ }
+ PRINT( _L("Camera <= CCamViewBase::SwitchToStandbyModeL") );
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::ExitStandbyModeL
+// Exits standby mode
+// ---------------------------------------------------------------------------
+//
+void CCamViewBase::ExitStandbyModeL()
+ {
+ PRINT( _L("Camera => CCamViewBase::ExitStandbyModeL") );
+ if ( !iStandbyModeActive )
+ {
+ return;
+ }
+
+ // delete standby container and reactivate previous container
+ TRAPD( err, AppUi()->AddToStackL( *this, iContainer ) )
+ iStandbyContainer->MakeVisible( EFalse );
+ AppUi()->RemoveFromStack( iStandbyContainer );
+ delete iStandbyContainer;
+ iStandbyContainer = NULL;
+ User::LeaveIfError( err );
+
+ CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
+
+
+ iContainer->MakeVisible( ETrue );
+ SetStandbyModeActive( EFalse );
+
+ if ( appUi->IsSecondCameraEnabled() && !appUi->IsQwerty2ndCamera() )
+ {
+ StatusPane()->MakeVisible( ETrue );
+ }
+ else
+ {
+ StatusPane()->MakeVisible( EFalse );
+ }
+
+ CCameraUiConfigManager* configManager = iController.UiConfigManagerPtr();
+ if ( !( configManager && configManager->IsUIOrientationOverrideSupported() ) )
+ {
+ appUi->RaisePreCaptureCourtesyUI(ETrue);
+ }
+
+ if ( iPreviousMenuResourceId == ROID(R_CAM_SETTINGS_LIST_MENUBAR_ID)
+ || iPreviousMenuResourceId == ROID(R_CAM_STILL_EMBEDDED_PRE_CAPTURE_MENUBAR_ID)
+ || iPreviousMenuResourceId == ROID(R_CAM_VIDEO_EMBEDDED_PRE_CAPTURE_MENUBAR_ID))
+ {
+ if ( iController.CaptureModeTransitionInProgress() )
+ {
+ SetSoftKeysL( R_AVKON_SOFTKEYS_BACK );
+ }
+ else
+ {
+ SetSoftKeysL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
+ }
+ }
+ else
+ {
+ SetSoftKeysL( R_CAM_SOFTKEYS_OPTIONS_EXIT );
+ }
+
+ // restore options menu
+ CEikMenuBar* menuBar = MenuBar();
+ if ( menuBar )
+ {
+ menuBar->SetMenuTitleResourceId( iPreviousMenuResourceId );
+ }
+
+ //SetStandbyModeActive(EFalse);
+ SetTitlePaneTextL();
+
+ // restart idle timer
+ iController.StartIdleTimer();
+ PRINT( _L("Camera <= CCamViewBase::ExitStandbyModeL") );
+ }
+
+
+// ---------------------------------------------------------------------------
+// ExitAllModesL <<virtual>>
+// ---------------------------------------------------------------------------
+//
+void
+CCamViewBase::ExitAllModesL()
+ {
+ // Empty default implementation.
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::GetHelpContext
+// Called to identify the help context for this view
+// ---------------------------------------------------------------------------
+//
+void CCamViewBase::GetHelpContext( TCoeHelpContext& /*aContext*/ ) const
+ {
+ // No context
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::QueryRenameL
+// Switches orientation if required - calls DoQueryRenameL
+// ---------------------------------------------------------------------------
+//
+void CCamViewBase::QueryRenameL( TCamCameraMode aMode )
+ {
+ // Ensure application is in editing orientation
+ TInt error = KErrNone;
+ CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
+ TInt editingOrientation = CAknAppUiBase::EAppUiOrientationUnspecified;
+
+ error = CamUtility::GetPsiInt( ECamPsiOrientation, editingOrientation );
+
+ if ( !error )
+ {
+ appUi->SwitchOrientationIfRequiredL( editingOrientation );
+ }
+ // Trap this to make sure the orientation is reverted back to normal
+ TRAPD( leaveErr, DoQueryRenameL( aMode ) )
+ appUi->SwitchOrientationIfRequiredL( CAknAppUiBase::EAppUiOrientationUnspecified );
+ User::LeaveIfError( leaveErr );
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase:DoQueryRenameL
+// Show rename query and rename file.
+// ---------------------------------------------------------------------------
+//
+void CCamViewBase::DoQueryRenameL( TCamCameraMode aMode )
+ {
+ TBool done = EFalse;
+ HBufC* lastFilePath = HBufC::NewLC( iController.CurrentFullFileName().Length() );
+ TBuf<KMaxNameBaseLengthPlusNumbering> filename( iController.CurrentImageName() );
+
+ // Repeat until successfully renamed or cancelled
+ while ( !done )
+ {
+ // Show rename query
+ if ( ShowRenameQueryL( filename, aMode ) )
+ {
+ // Try to rename file
+ TRAPD( err, done = RenameCurrentFileL( filename, aMode ) );
+ if ( KErrAlreadyExists == err )
+ {
+ // File exists -> show overwrite confirmation query
+ if ( ShowOverwriteConfirmationQueryL( filename ) )
+ {
+ // Yes, overwrite
+ TPtr lastFilePathPtr = lastFilePath->Des();
+ lastFilePathPtr = iController.CurrentFullFileName();
+ TParsePtr parseptr( lastFilePathPtr );
+ TFileName fullpath = parseptr.DriveAndPath();
+ fullpath.Append( filename );
+ fullpath.Append( parseptr.Ext() );
+
+ // Delete the file that gets overwritten.
+ if ( ECamControllerVideo != aMode )
+ {
+ CamUtility::DeleteStillImageL( fullpath );
+ }
+ else
+ {
+ CamUtility::DeleteVideoL( fullpath );
+ }
+
+ // Rename
+ RenameCurrentFileL( filename, aMode );
+ done = ETrue;
+ }
+ else // No, don't overwrite
+ {
+ // Generate a suitable suggestion for an unique name
+ TInt key = ( ECamControllerVideo == aMode )
+ ? ECamSettingItemVideoNumber
+ : ECamSettingItemPhotoNumber;
+ TInt fileNameCounter = iController.IntegerSettingValue( key );
+
+ TParsePtrC parse( iController.CurrentFullFileName() );
+ TFileName filePath = parse.DriveAndPath();
+
+ const TUint KMax3Digits = 999;
+
+ //if 0 < fileNameCounter <= 999, formatted file name like "Photo001", the length of number part ("001") is fixed 3
+ const TUint KFixedNumberLength = 3;
+
+ TBool exceedMaxFileNameLength = EFalse;
+ //if 0 < fileNameCounter <= 999, formatted file name like "Photo001"
+ if ( fileNameCounter > 0 &&
+ fileNameCounter <= KMax3Digits &&
+ filename.Length() + KFixedNumberLength > filename.MaxLength() )
+ {
+ exceedMaxFileNameLength = ETrue;
+ }
+ //if fileNameCounter > 999, formatted file name like "Photo1234"
+ else if ( fileNameCounter > KMax3Digits )
+ {
+ _LIT( KCamNameFormatFileNameCounter, "%d" );
+ TBuf<KMaxNameBaseLengthPlusNumbering> strFileNameCounter;
+ strFileNameCounter.Format( KCamNameFormatFileNameCounter, fileNameCounter );
+ if ( filename.Length() + strFileNameCounter.Length() > filename.MaxLength() )
+ {
+ exceedMaxFileNameLength = ETrue;
+ }
+ }
+
+ if ( !exceedMaxFileNameLength )
+ {
+ CamUtility::GetUniqueNameL( filePath, filename, fileNameCounter, parse.Ext() );
+ }
+
+
+ }
+ }
+ else
+ {
+ // If unknown error
+ User::LeaveIfError( err );
+ }
+ }
+ else
+ {
+ // User cancelled (ShowRenameQueryL() returned false)
+ done = ETrue;
+ }
+ }
+ CleanupStack::PopAndDestroy(); // lastFilePath
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::ShowOverwriteConfirmationQueryL
+// Show an overwrite confirmation query. This is used
+// when trying to overwrite a file using rename.
+// ---------------------------------------------------------------------------
+//
+TBool CCamViewBase::ShowOverwriteConfirmationQueryL(
+ const TDesC& aFilename )
+ {
+ HBufC* prompt = StringLoader::LoadLC( R_QTN_FLDR_OVERWRITE_QUERY,
+ aFilename, CEikonEnv::Static() );
+
+ CAknQueryDialog* overwriteQuery =
+ new ( ELeave ) CAknQueryDialog( *prompt );
+ TBool result = overwriteQuery->ExecuteLD( R_CAM_OVERWRITE_QUERY );
+
+ CleanupStack::PopAndDestroy(); // prompt
+
+ return result;
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::ShowRenameQueryL
+// Show rename query.
+// ---------------------------------------------------------------------------
+//
+TBool CCamViewBase::ShowRenameQueryL( TDes& aFilename, TCamCameraMode aMode )
+ {
+ TBool done = EFalse;
+ TBool res = ETrue;
+
+ while ( !done )
+ {
+ // Show data query
+ HBufC* prompt = NULL;
+ if ( ECamControllerVideo == aMode )
+ {
+ prompt =
+ StringLoader::LoadLC( R_CAM_QUERY_VIDEO_NAME );
+ }
+ else
+ {
+ prompt =
+ StringLoader::LoadLC( R_CAM_QUERY_IMAGE_NAME );
+ }
+
+ CAknTextQueryDialog* nameQuery =
+ CAknTextQueryDialog::NewL( aFilename );
+ nameQuery->SetMaxLength( KMaxNameBaseLengthPlusNumbering );
+ nameQuery->PrepareLC( R_CAM_RENAME_QUERY );
+ nameQuery->SetPromptL( *prompt );
+
+ TBool dialogRes = ( nameQuery->RunLD() == EAknSoftkeyOk );
+ if ( dialogRes )
+ {
+ if ( !IsNewNameValidL( aFilename ) )
+ {
+ // New name is not valid for another reason.
+ // In practise, the user has attempted to overwrite
+ // an image already existing in the burst grid.
+
+ HBufC* text = StringLoader::LoadLC(
+ R_QTN_FLDR_CANT_RENAME_ITEM,
+ iController.CurrentImageName() );
+
+ CAknNoteWrapper* note = new ( ELeave ) CAknNoteWrapper();
+ note->ExecuteLD( R_CAM_UNABLE_TO_RENAME, *text );
+
+ CleanupStack::PopAndDestroy(); // text
+
+ // Don't show dialog again
+ res = EFalse;
+ done = ETrue;
+ }
+ else if ( CamUtility::CheckFileNameValidityL( aFilename ) )
+ {
+ // New file name seems ok
+ res = ETrue;
+ done = ETrue;
+ }
+ else
+ {
+ // File name is not suitable, ask again
+ }
+ }
+ else
+ {
+ // User cancelled rename
+ res = EFalse;
+ done = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy(); // prompt
+ }
+
+ return res;
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::IsNewNameValidL
+// Check if renaming to the given name is valid.
+// ---------------------------------------------------------------------------
+//
+TBool CCamViewBase::IsNewNameValidL( const TDesC& /* aFilename */ )
+ {
+ // This should be overridden in derived classes if needed
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::RenameCurrentFileL
+// Renames the current capture array file.
+// ---------------------------------------------------------------------------
+//
+TBool
+CCamViewBase::RenameCurrentFileL( const TDesC& aNewName,
+ TCamCameraMode aMode )
+ {
+ return iController.RenameCurrentFileL( aNewName, aMode );
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::Container
+// Returns the currently used container in the view.
+// ---------------------------------------------------------------------------
+//
+CCamContainerBase* CCamViewBase::Container()
+ {
+ if ( iStandbyContainer )
+ {
+ return iStandbyContainer;
+ }
+ else
+ {
+ return iContainer;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::SetSoftKeysL
+// Sets the softkeys to the specified Resource ID
+// ---------------------------------------------------------------------------
+//
+void CCamViewBase::SetSoftKeysL(TInt aResource)
+ {
+ CCamAppUi* appUi = static_cast<CCamAppUi*>( AppUi() );
+ // If courtesy softkeys are enabled, check whether the UI can be drawn without being explicitly raised
+ // (rare, but possible: e.g. when video recording starts
+ if(aResource == R_CAM_SOFTKEYS_BLANK &&
+ appUi->IsSecondCameraEnabled() &&
+ !appUi->IsQwerty2ndCamera())
+ {
+ aResource = R_CAM_SOFTKEYS_BLANK_SECONDARY;
+ }
+ if ( iCourtesySoftkeys )
+ {
+ if ( appUi )
+ {
+ if ( (IsPreCapture() && appUi->DrawPreCaptureCourtesyUI())
+ || (IsPostCapture() && appUi->DrawPostCaptureCourtesyUI()) )
+ {
+ // Disable the courtesy softkeys, otherwise nothing will be drawn when the rest of the
+ // courtesy UI has been turned back on
+ iCourtesySoftkeys = EFalse;
+
+ //when disabling the courtesy softkeys, Cba should be recovered to be visible
+ Cba()->MakeVisible( ETrue );
+ }
+ }
+ }
+
+ if ( iCourtesySoftkeys || !Cba() )
+ {
+ // If the courtesy (blank) softkeys are being shown, make a note of what to change back to.
+ iPreviousCbaResource = aResource;
+ }
+ else if ( iCurrentCbaResource != aResource )
+ {
+ iPreviousCbaResource = iCurrentCbaResource;
+ iCurrentCbaResource = aResource;
+
+ Cba()->SetCommandSetL( aResource );
+ Cba()->DrawDeferred();
+
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::SetCourtesySoftKeysL
+// Blanks the softkeys for the Courtesy UI Off state.
+// ---------------------------------------------------------------------------
+//
+void CCamViewBase::SetCourtesySoftKeysL()
+ {
+ if ( !iCourtesySoftkeys )
+ {
+ Cba()->MakeVisible( EFalse );
+ iPreviousCbaResource = iCurrentCbaResource;
+ iCourtesySoftkeys = ETrue;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::UnsetCourtesySoftKeysL
+// Returns the softkeys to their previous state after UI has been turned back on
+// ---------------------------------------------------------------------------
+//
+void CCamViewBase::UnsetCourtesySoftKeysL()
+ {
+ if ( iCourtesySoftkeys )
+ {
+ iCourtesySoftkeys = EFalse;
+ SetSoftKeysL(iPreviousCbaResource);
+ Cba()->MakeVisible( ETrue );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::IsPreCapture
+// Returns whether the view is a precapture view
+// ---------------------------------------------------------------------------
+//
+TBool CCamViewBase::IsPreCapture()
+ {
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::IsPostCapture
+// Returns whether the view is a postcapture view
+// ---------------------------------------------------------------------------
+//
+TBool CCamViewBase::IsPostCapture()
+ {
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::IsBurstPostCapture
+// Returns whether the view is a burst mode postcapture view
+// ---------------------------------------------------------------------------
+//
+TBool CCamViewBase::IsBurstPostCapture()
+ {
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::IsInStandbyMode
+// Returns whether the view is in standby mode
+// ---------------------------------------------------------------------------
+//
+TBool CCamViewBase::IsInStandbyMode()
+ {
+ return iStandbyModeActive;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::SetStandbyModeActive
+// Sets the iStandbyModeActive flag
+// ---------------------------------------------------------------------------
+//
+void CCamViewBase::SetStandbyModeActive(TBool aActive)
+ {
+ // This should be the only place iStandbyModeActive is set!
+ // We need to inform the AppUi
+ iStandbyModeActive = aActive;
+ if( iController.IsAppUiAvailable() )
+ {
+ CCamAppUiBase* appUi = static_cast<CCamAppUiBase*>( AppUi() );
+
+ if ( appUi)
+ {
+ if ( aActive )
+ {
+ appUi->SetPreCaptureMode(ECamPreCapStandby);
+ }
+ else
+ {
+ appUi->SetPreCaptureMode(ECamPreCapViewfinder);
+ }
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::IncrementCameraUsers
+//
+// ---------------------------------------------------------------------------
+//
+void
+CCamViewBase::IncrementCameraUsers()
+ {
+ if( !iIncEngineCount )
+ {
+ PRINT( _L("Camera == CCamViewBase::IncrementCameraUsers - incrementing") );
+ iIncEngineCount = ETrue;
+ iController.IncCameraUsers();
+ }
+ else
+ {
+ PRINT( _L("Camera == CCamViewBase::IncrementCameraUsers - already incremented, skipping") );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::DecrementCameraUsers
+//
+// ---------------------------------------------------------------------------
+//
+void
+CCamViewBase::DecrementCameraUsers()
+ {
+ if( iIncEngineCount )
+ {
+ PRINT( _L("Camera == CCamViewBase::DecrementCameraUsers - decrementing") );
+ iIncEngineCount = EFalse;
+ iController.DecCameraUsers();
+ }
+ else
+ {
+ PRINT( _L("Camera == CCamViewBase::DecrementCameraUsers - not using camera, skipped") );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCamViewBase::IsCameraUser
+//
+// ---------------------------------------------------------------------------
+//
+TBool
+CCamViewBase::IsCameraUser() const
+ {
+ return iIncEngineCount;
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CCamViewBase::RedrawAPArea
+// -----------------------------------------------------------------------------
+void CCamViewBase::RedrawAPArea(const TRect& aArea)
+ {
+ if ( iContainer )
+ {
+ iContainer->Redraw(aArea);
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCamViewBase::ViewCba
+// -----------------------------------------------------------------------------
+CEikButtonGroupContainer* CCamViewBase::ViewCba()
+ {
+ return Cba();
+ }
+
+// -----------------------------------------------------------------------------
+// CCamViewBase::UpdateToolbarIconsL
+//
+void CCamViewBase::UpdateToolbarIconsL()
+ {
+
+ }
+// -----------------------------------------------------------------------------
+// CCamViewBase::HandleCommandAoL
+// -----------------------------------------------------------------------------
+
+void CCamViewBase::HandleCommandAoL( TInt aCommand )
+ {
+ if ( !iCommandHandlerAo )
+ {
+ iCommandHandlerAo = CCamCommandHandlerAo::NewL( this );
+ }
+ iCommandHandlerAo->HandleCommandL( aCommand );
+ }
+
+// End of File