diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/GsCamcorderPlugin/src/GSCamcorderPlugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/GsCamcorderPlugin/src/GSCamcorderPlugin.cpp Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,691 @@ +/* +* Copyright (c) 2007 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: Main settings view class +* +*/ + + +// INCLUDE FILES + +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif +#include +#include +#include +#include // cakntitlepane +#include +#include +#include +#include +#include +#include //for stringloader +#include +#include +#include //for kgsmainviewuid +#include +#include // for hlplauncher + +#include +#include "GSCamcorderPlugin.h" +#include "GSCamcorderPluginContainer.h" +#include "GSCamcorderPlugin.hrh" +#include "Cam.hrh" +#include "GSCamPhotoSettingsView.h" +#include "GSCamVideoSettingsView.h" +#include "CamLocalViewIds.h" +#include "MCamAppController.h" +#include "CamUtility.h" +#include "CamAppUid.h" + +#include "camconfiguration.h" + + +// ========================= MEMBER FUNCTIONS ================================ + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::CGSCamcorderPlugin +// C++ constructor +// --------------------------------------------------------------------------- +// +CGSCamcorderPlugin::CGSCamcorderPlugin() + : iResources( *iCoeEnv ), + iSecondaryCameraSettings( EFalse ), iReloadSettings( EFalse ) + { + + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::NewLC +// Symbian OS two-phased constructor +// --------------------------------------------------------------------------- +// +CGSCamcorderPlugin* CGSCamcorderPlugin::NewL( TAny* /*aInitParams*/ ) + { + CGSCamcorderPlugin* self = new(ELeave) CGSCamcorderPlugin(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::ConstructL +// Symbian OS 2nd phase constructor +// --------------------------------------------------------------------------- +// +void CGSCamcorderPlugin::ConstructL() + { + RDebug::Print(_L("[CGSCamcorderPlugin] ConstructL()" )); + + iViewArray = new (ELeave) CArrayPtrFlat( 2 ); + + iConfiguration = CCamConfiguration::NewL(); + iSettingsModel = CCamStaticSettingsModel::NewL( *iConfiguration ); + + RDebug::Print( _L( "[CGSCamcorderPlugin] Loading resource from :" ) ); + if ( CamUtility::IsNhdDevice() ) + { + RDebug::Print( KGSCamcorderPluginResourceFileName ); + OpenLocalizedResourceFileL( KGSCamcorderPluginResourceFileName, + iResources ); + } + else + { + RDebug::Print( KGSCamcorderPluginResourceFileNamev2 ); + OpenLocalizedResourceFileL( KGSCamcorderPluginResourceFileNamev2, + iResources ); + } + + FeatureManager::InitializeLibL(); + // Create needed Local views + CreateLocalViewL(); + BaseConstructL( R_GS_CAM_SETTING_LIST_VIEW ); + } + + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::~CGSCamcorderPlugin +// Destructor +// --------------------------------------------------------------------------- +// +CGSCamcorderPlugin::~CGSCamcorderPlugin() + { + RDebug::Print( _L( " ==> [CGSCamcorderPlugin] ~CGSCamcorderPlugin()" ) ); + FeatureManager::UnInitializeLib(); + + if ( iViewArray ) + { + iViewArray->Reset(); + delete iViewArray; + } + + if ( iSettingsModel ) + { + delete iSettingsModel; + iSettingsModel = NULL; + } + + delete iConfiguration; + iConfiguration = NULL; + + iResources.Close(); + + RDebug::Print( _L( " <==[CGSCamcorderPlugin] ~CGSCamcorderPlugin()" ) ); + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::Id +// Return UID of view +// --------------------------------------------------------------------------- +// +TUid CGSCamcorderPlugin::Id() const + { + return KGSCamcorderGSPluginUid; + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::HandleCommandL +// Handle commands +// --------------------------------------------------------------------------- +// +void CGSCamcorderPlugin::HandleCommandL( TInt aCommand ) + { + + switch ( aCommand ) + { + case ECamMSKCmdAppChange: + case EAknCmdOpen: + HandleListBoxSelectionL(); + break; + + case EAknSoftkeyBack: + iAppUi->ActivateLocalViewL( iParentView.iViewUid ); + iParentView = KNullViewId; + break; + case EAknCmdHelp: +#ifdef __SERIES60_HELP + if( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + HlpLauncher::LaunchHelpApplicationL( + iEikonEnv->WsSession(), iAppUi->AppHelpContextL() ); + } +#endif + break; + case ECamCmdInternalExit: + if ( LaunchedFromGS() ) + { + aCommand = EAknCmdExit; + } + default: + iAppUi->HandleCommandL( aCommand ); + break; + } + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::DoActivate +// Activate this view +// --------------------------------------------------------------------------- +// + +void CGSCamcorderPlugin::DoActivateL( const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage ) + { + RDebug::Print(_L("[CGSCamcorderPlugin] DoActivateL()" )); + + + if ( !iReloadSettings ) + { + if ( aCustomMessageId == TUid::Uid( KGSActivatePhotoSettingsView ) || + aCustomMessageId == TUid::Uid( KGSSecondaryCameraPhotoSettingsView ) ) + { + RDebug::Print(_L("[CGSCamcorderPlugin] DoActivateL()1" )); + iParentView = aPrevViewId; + iAppUi->ActivateLocalViewL( KGSCamImageSettingsViewId ); + return; + } + else if ( aCustomMessageId == TUid::Uid( KGSActivateVideoSettingsView ) || + aCustomMessageId == TUid::Uid( KGSSecondaryCameraVideoSettingsView ) ) + { + RDebug::Print(_L("[CGSCamcorderPlugin] DoActivateL()2" )); + iParentView = aPrevViewId; + iAppUi->ActivateLocalViewL( KGSCamVideoSettingsViewId ); + return; + } + } + + // activate baseview only if not transfered straight to localview + CGSBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage ); + + TInt highlight = KGSCamSettingsListImageIndex; + if ( iPrevViewId.iViewUid == KGSCamVideoSettingsViewId ) + { + highlight = KGSCamSettingsListVideoIndex; + } + if( iParentView == KNullViewId ) + { + // Parent view could be Camcorder internal view or KGSAppsPluginUid + iParentView = aPrevViewId; + if ( aCustomMessageId.iUid ) + { + highlight = KGSCamSettingsListVideoIndex; + } + } + + iContainer->SetSelectedItem( highlight ); + if ( iReloadSettings ) + { + iReloadSettings = EFalse; + HandleListBoxSelectionL(); + } + + + + } + + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::DoDeactivate +// Deactivate this view +// --------------------------------------------------------------------------- +// +void CGSCamcorderPlugin::DoDeactivate() + { + RDebug::Print(_L("[CGSCamcorderPlugin] DoDeactivate()" )); + + CGSBaseView::DoDeactivate(); + if( iContainer ) + { + iAppUi->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer=NULL; + } + } + + +// ----------------------------------------------------------------------------- +// CGSCamcorderPlugin::HandleClientRectChange +// Handle screen size change. +// ----------------------------------------------------------------------------- +// +void CGSCamcorderPlugin::HandleClientRectChange() + { + if ( iContainer ) + { + iContainer->SetRect( ClientRect() ); + } + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::Container +// Return handle to container class. +// --------------------------------------------------------------------------- +// +CGSCamcorderPluginContainer* CGSCamcorderPlugin::Container() + { + return static_cast( iContainer ); + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::HandleListBoxSelectionL +// Handle any user actions while in the list view. +// --------------------------------------------------------------------------- +// +void CGSCamcorderPlugin::HandleListBoxSelectionL() + { + const TInt currentFeatureId = Container()->CurrentFeatureId(); + + switch ( currentFeatureId ) + { + case EImageSettingsFolder: + case EVideoSettingsFolder: + ActivateInternalViewL( currentFeatureId ); + break; + default: + break; + } + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::GetCaptionL +// Caption text for view to be displayed in NaviPane. +// --------------------------------------------------------------------------- +// +void CGSCamcorderPlugin::GetCaptionL( TDes& aCaption ) const + { + RDebug::Print(_L("[CGSCamcorderPlugin] GetCaption() - BEGIN" )); + + // the resource file is already opened. + HBufC* result = StringLoader::LoadL( R_CAM_GS_SETTINGS_TITLE_NAME ); + + aCaption.Copy( *result ); + delete result; + + RDebug::Print(_L("[CGSCamcorderPlugin] GetCaption() - END" )); + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::NewContainerL +// Creates new iContainer. +// --------------------------------------------------------------------------- +// +void CGSCamcorderPlugin::NewContainerL() + { + iContainer = new( ELeave ) CGSCamcorderPluginContainer; + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::ActivateInternalViewL +// Activate local views within this plug-in. +// --------------------------------------------------------------------------- +// +void CGSCamcorderPlugin::ActivateInternalViewL( TInt aFeatureId ) + { + switch ( aFeatureId ) + { + case EVideoSettingsFolder: + iAppUi->ActivateLocalViewL( KGSCamVideoSettingsViewId ); + break; + case EImageSettingsFolder: + iAppUi->ActivateLocalViewL( KGSCamImageSettingsViewId ); + break; + default: + break; + } + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::CreateLocalViewL +// Initializes local views within this plug-in based on the view ID. +// --------------------------------------------------------------------------- +// +void CGSCamcorderPlugin::CreateLocalViewL() + { + CAknView* view; + + view = CGSCamPhotoSettingsView::NewLC( *iSettingsModel, iViewArray ); + iAppUi->AddViewL( view ); + CleanupStack::Pop( view); + + view = CGSCamVideoSettingsView::NewLC( *iSettingsModel, iViewArray ); + iAppUi->AddViewL( view ); + CleanupStack::Pop(view); + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::CreateIconL +// Return the icon, if has one. +// --------------------------------------------------------------------------- +// +CGulIcon* CGSCamcorderPlugin::CreateIconL( const TUid /*aIconType*/ ) + { + TParse* fp = new(ELeave) TParse(); + CleanupStack::PushL( fp ); + TInt err = fp->Set(KDirAndFile, &KDC_APP_BITMAP_DIR, NULL); + + if (err != KErrNone) + { + User::Leave(err); + } + + TBuf fileName = fp->FullName(); + CleanupStack::PopAndDestroy( fp ); //fp + + CGulIcon* icon; + + icon = AknsUtils::CreateGulIconL( + AknsUtils::SkinInstance(), + KAknsIIDQgnPropSetAppsCams, + fileName, + EMbmCamerasettingspluginQgn_prop_set_apps_cams, + EMbmCamerasettingspluginQgn_prop_set_apps_cams_mask ); + + return icon; + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::PluginProviderCategory +// A means to identify the location of this plug-in in the framework. +// --------------------------------------------------------------------------- +// +TInt CGSCamcorderPlugin::PluginProviderCategory() const + { + //To identify internal plug-ins. + return KGSPluginProviderInternal; + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::TabbedViews() +// Returns pointer to tabbed views of application. +// --------------------------------------------------------------------------- +// +CArrayPtrFlat* CGSCamcorderPlugin::TabbedViews() + { + return iViewArray; + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::Visible() +// Method for checking, if plugin should be visible and used in GS. +// --------------------------------------------------------------------------- +// +TBool CGSCamcorderPlugin::Visible() const + { + return ETrue; + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::CustomOperationL() +// Reserved for later use. +// --------------------------------------------------------------------------- +// +TAny* CGSCamcorderPlugin::CustomOperationL( TAny* aParam1, TAny* /*aParam2*/ ) + { + return aParam1; + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::DynInitMenuPaneL +// Dynamically customize menu items +// --------------------------------------------------------------------------- +// +void CGSCamcorderPlugin::DynInitMenuPaneL( TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + if ( aResourceId == R_CAM_SETTINGS_LIST_MENU ) + { +#ifdef __SERIES60_HELP + if ( !FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); + } +#endif + } + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::LaunchedFromGS +// For variating the construction of the setting items +// --------------------------------------------------------------------------- +// +TBool CGSCamcorderPlugin::LaunchedFromGS() const + { + return iAppUi->Application()->AppDllUid().iUid != KCameraappUID; + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::IsSecondaryCameraSettings() +// Returns if we have to lauch secondary camera settings or main camera settings +// --------------------------------------------------------------------------- +// +TBool CGSCamcorderPlugin::IsSecondaryCameraSettings() + { + return iSecondaryCameraSettings; + } + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::SetSecondaryCameraSettings() +// Sets if camera has lauched secondary camera settings or main camera settings +// --------------------------------------------------------------------------- +// +void CGSCamcorderPlugin::SetSecondaryCameraSettings( TBool aSecondarySettings ) + { + iSecondaryCameraSettings = aSecondarySettings; + } + + +// +// CGSCamcorderPlugin::IntegerSettingValue +// +TInt CGSCamcorderPlugin::IntegerSettingValue( const TInt aSettingItem ) + { + if ( LaunchedFromGS() ) + { + TInt settingValue = iSettingsModel->IntegerSettingValue( aSettingItem ); + + if ( ( ECamSettingItemPhotoMediaStorage == aSettingItem || + ECamSettingItemVideoMediaStorage == aSettingItem ) && + ( settingValue == ECamMediaStorageCard ) && + ( CamUtility::MemoryCardStatus() != ECamMemoryCardInserted ) ) + { + if ( CamUtility::MassMemoryDrive() > 0 ) + { + settingValue = ECamMediaStorageMassStorage; + } + else + { + settingValue = iSettingsModel->IntegerSettingValue(ECamSettingItemRemovePhoneMemoryUsage)? + ECamMediaStorageNone: + ECamMediaStoragePhone; + } + } + return settingValue; + } + else + { + CCamAppUiBase* appUi = static_cast( CCoeEnv::Static()->AppUi() ); + MCamAppController& controller = appUi->AppController(); + return controller.IntegerSettingValue( aSettingItem ); + } + } + +// +// CGSCamcorderPlugin::TextValueFromSettingsModel +// +TPtrC CGSCamcorderPlugin::TextSettingValue( const TInt aSettingItem ) + { + if ( LaunchedFromGS() ) + { + return iSettingsModel->TextSettingValue( aSettingItem ); + } + else + { + CCamAppUiBase* appUi = static_cast( CCoeEnv::Static()->AppUi() ); + MCamAppController& controller = appUi->AppController(); + return controller.TextSettingValue( aSettingItem ); + } + } + + +// +// CGSCamcorderPlugin::SetTextSettingValueL +// +void CGSCamcorderPlugin::SetTextSettingValueL( TInt aSettingItem, + const TDesC& aSettingValue ) + { + if ( !LaunchedFromGS() ) + { + CCamAppUiBase* appUi = static_cast( CCoeEnv::Static()->AppUi() ); + MCamAppController& controller = appUi->AppController(); + controller.SetTextSettingValueL( aSettingItem, aSettingValue ); + } + else + { + iSettingsModel->SetTextSettingValueL( aSettingItem, aSettingValue ); + } + } + +// +// CGSCamcorderPlugin::SetIntegerSettingValueL +// +void CGSCamcorderPlugin::SetIntegerSettingValueL( TInt aSettingItem, + TInt aSettingValue ) + { + if ( !LaunchedFromGS() ) + { + CCamAppUiBase* appUi = static_cast( CCoeEnv::Static()->AppUi() ); + MCamAppController& controller = appUi->AppController(); + controller.SetIntegerSettingValueL( aSettingItem, aSettingValue ); + } + else + { + iSettingsModel->SetIntegerSettingValueL( aSettingItem, aSettingValue ); + } + } + + +// +// CGSCamcorderPlugin::LoadVideoStaticSettingsL +// +void CGSCamcorderPlugin::LoadVideoStaticSettingsL( TBool aResetFromGS ) + { + if ( LaunchedFromGS() ) + { + iSettingsModel->LoadVideoStaticSettingsL( aResetFromGS ); + } + else + { + CCamAppUiBase* appUi = static_cast( CCoeEnv::Static()->AppUi() ); + MCamStaticSettings& model = appUi->StaticSettingsModel(); + model.LoadVideoStaticSettingsL( aResetFromGS ); + } + } + + + +// +// CGSCamcorderPlugin::LoadPhotoStaticSettingsL +// +void CGSCamcorderPlugin::LoadPhotoStaticSettingsL( TBool aResetFromGS ) + { + if ( LaunchedFromGS() ) + { + iSettingsModel->LoadPhotoStaticSettingsL( aResetFromGS ); + } + else + { + CCamAppUiBase* appUi = static_cast( CCoeEnv::Static()->AppUi() ); + MCamStaticSettings& model = appUi->StaticSettingsModel(); + model.LoadPhotoStaticSettingsL( aResetFromGS ); + } + } + + +// --------------------------------------------------------------------------- +// CGSCamcorderPlugin::DisplayRestoreSettingsDlgL +// Display restore Camera setting confirmation dialog +// --------------------------------------------------------------------------- +// +TInt CGSCamcorderPlugin::DisplayRestoreSettingsDlgL() + { + HBufC* confirmationText; + confirmationText = StringLoader::LoadLC( R_CAM_RESTORE_SETTINGS_NOTE_TEXT ); + CAknQueryDialog* confirmationDialog = new( ELeave )CAknQueryDialog( *confirmationText ); + CleanupStack::PopAndDestroy( confirmationText ); + TInt response = confirmationDialog->ExecuteLD( R_CAM_RESTORE_SETTINGS_NOTE ); + if ( response ) + { + // since restore camera setting item is visible only when + // launched from camera, we inform the specific view to handle + // this from the camera side, instead doing it here in the plugin + if ( !LaunchedFromGS() ) + { + MCamAppController& controller = + static_cast( + CCoeEnv::Static()->AppUi() )->AppController(); + controller.RestoreFactorySettingsL( EFalse ); + } + else + { + iSettingsModel->ResetRepository(); + iReloadSettings = ETrue; + } + } + return response; + } + +// End of file