diff -r 000000000000 -r 4e91876724a2 photosgallery/controllers/fetcher/src/glxfetcher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/controllers/fetcher/src/glxfetcher.cpp Thu Dec 17 08:45:44 2009 +0200 @@ -0,0 +1,270 @@ +/* +* Copyright (c) 2008-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: provide synchronized access to file systema and metadata source +* +*/ + + + + +#include // CAknViewAppUi +#include +#include // KDC_APP_RESOURCE_DIR +#include // CEikApplication +#include // FOR GETTING VIEW ID AND RESOURCE ID +#include // All item collection plugin id +#include // Logging macros +#include // for CGlxResourceUtilities +#include +#include // MGlxMediaList, CMPXCollectionPath + +#include "glxfetcher.hrh" // For implementation id +#include "glxfetcherdialog.h" // CGlxFetcherDialog +#include "glxfetcher.h" // CGlxFetcher +#include "glxtracer.h" +#include "glxlog.h" + +_LIT(KFetcherGridViewResource,"glxfetcherdialog.rsc"); //FetcherGridDialog Resource File + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CGlxFetcher* CGlxFetcher::NewL() + { + TRACER("CGlxFetcher::NewL"); + CGlxFetcher* self = new( ELeave ) CGlxFetcher(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------- +// +void CGlxFetcher::ConstructL() + { + TRACER("CGlxFetcher::ConstructL"); + // No implementation required + } + +// --------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that might leave. +// --------------------------------------------------------------------------- +// +CGlxFetcher::CGlxFetcher() + { + TRACER("CGlxFetcher::CGlxFetcher"); + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CGlxFetcher::~CGlxFetcher() + { + TRACER("CGlxFetcher::~CGlxFetcher"); + + if ( iResourceOffset ) + { + CCoeEnv::Static()->DeleteResourceFile(iResourceOffset); + } + if(iDialog) + { + iDialog = NULL; + } + delete iSelectionSoftkey; + delete iTitle; + + } + +// --------------------------------------------------------------------------- +// SetMultiSelectionL +// --------------------------------------------------------------------------- +// +void CGlxFetcher::SetMultiSelectionL( TBool aMultiSelect ) + { + TRACER("CGlxFetcher::SetMultiSelectionL"); + iIsMultiSelection = aMultiSelect; + } + +// --------------------------------------------------------------------------- +// SetMimeTypesL +// --------------------------------------------------------------------------- +// +void CGlxFetcher::SetMimeTypesL( const MDesCArray& /*aMimeTypes*/ ) + { + TRACER("CGlxFetcher::SetMimeTypesL (not supported)"); + // No implementation required (not supported) + } + +// --------------------------------------------------------------------------- +// SetSelectionSoftkeyL +// --------------------------------------------------------------------------- +// +void CGlxFetcher::SetSelectionSoftkeyL( const TDesC& aSelectionSoftkey ) + { + TRACER("CGlxFetcher::SetSelectionSoftkeyL"); + + HBufC* tmp = aSelectionSoftkey.AllocL(); + delete iSelectionSoftkey; + iSelectionSoftkey = tmp; + } + +// --------------------------------------------------------------------------- +// SetHeadingL +// --------------------------------------------------------------------------- +// +void CGlxFetcher::SetHeadingL( const TDesC& aTitle ) + { + TRACER("CGlxFetcher::SetHeadingL"); + + HBufC* tmp = aTitle.AllocL(); + delete iTitle; + iTitle = tmp; + } + +// --------------------------------------------------------------------------- +// SetVerifierL +// --------------------------------------------------------------------------- +// +void CGlxFetcher::SetVerifierL( MMGFetchVerifier& aVerifier ) + { + TRACER("CGlxFetcher::SetVerifierL"); + + iVerifier = &aVerifier; + } + +// --------------------------------------------------------------------------- +// GetCancelerL +// --------------------------------------------------------------------------- +// +void CGlxFetcher::GetCancelerL( MMGFetchCanceler*& aCanceler ) + { + TRACER("CGlxFetcher::GetCancelerL"); + + aCanceler = this; + } + + +// --------------------------------------------------------------------------- +// LaunchL +// --------------------------------------------------------------------------- +// +TBool CGlxFetcher::LaunchL( CDesCArray& aSelectedFiles, + TMediaFileType aMediaType ) + { + TRACER("CGlxFetcher::LaunchL"); + TInt buttonId; + TFileName resFile; + TParse parse; + parse.Set(KFetcherGridViewResource, &KDC_APP_RESOURCE_DIR, NULL); + + resFile.Append(parse.FullName()); + CGlxResourceUtilities::GetResourceFilenameL(resFile); + iResourceOffset = CCoeEnv::Static()->AddResourceFileL(resFile); + + // Configure heading and filter type + switch ( aMediaType ) + { + case EImageFile: + { + iTitle = TitleForImageFetcherL(); + iFilterType = EGlxFilterImage; + break; + } + case EVideoFile: + { + iTitle = TitleForVideoFetcherL(); + iFilterType = EGlxFilterVideo; + break; + } + default: + { + GLX_LOG_INFO("CGlxFetcher::LaunchL - Error: Unsupported media type, Leaving"); + User::Leave( KErrNotSupported ); + } + } + // create the dialog first + iDialog = + CGlxFetcherDialog::NewL( aSelectedFiles, iVerifier ,iFilterType ,*iTitle, iIsMultiSelection ); + // Returns zero when Fetcher is cancelled by User. + + if( iIsMultiSelection ) + { + buttonId = iDialog->ExecuteLD( R_MODAL_MULTI_DIALOG ); + } + else + { + buttonId = iDialog->ExecuteLD( R_MODAL_SINGLE_DIALOG ); + } + // Return false if the fetcher was canceled by user + return ( 0 != buttonId && aSelectedFiles.Count()!=0); + } + +// --------------------------------------------------------------------------- +// Return Dialog title +// --------------------------------------------------------------------------- +// +HBufC* CGlxFetcher::TitleForImageFetcherL() const + { + TRACER("CGlxFetcher::TitleForImageFetcherL()"); + return TitleL( R_FETCHER_DIALOG_TITLE_IMAGE, R_FETCHER_DIALOG_TITLE_IMAGES ); + } + +// --------------------------------------------------------------------------- +// Return Dialog title +// --------------------------------------------------------------------------- +// +HBufC* CGlxFetcher::TitleForVideoFetcherL() const + { + TRACER("CGlxFetcher::TitleForVideoFetcherL()"); + return TitleL( R_FETCHER_DIALOG_TITLE_VIDEO, R_FETCHER_DIALOG_TITLE_VIDEOS ); + } + +// --------------------------------------------------------------------------- +// Return Dialog title +// --------------------------------------------------------------------------- +// +HBufC* CGlxFetcher::TitleL( TInt aSingleSelectionTitleResourceId, + TInt aMultiSelectionTitleResourceId ) const + { + TRACER("CGlxFetcher::TitleL()"); + if( !iTitle ) + { + TInt resourceId = aSingleSelectionTitleResourceId; + if ( iIsMultiSelection ) + { + resourceId = aMultiSelectionTitleResourceId; + } + return CCoeEnv::Static()->AllocReadResourceL( resourceId ); + } + return iTitle; + } + +// ----------------------------------------------------------------------------- +// From MMGFetchCanceler +// ----------------------------------------------------------------------------- +// +void CGlxFetcher::CancelFetcherL() + { + TRACER("CGlxFetcher::CancelFetcherL"); + //pass EAknCmdExit as parameter to exit the fetcher dialog + if(iDialog) + { + iDialog->CallCancelFetcherL(EAknCmdExit ); + } + }