diff -r 1fc85118c3ae -r 870918037e16 landmarksui/engine/src/CLmkParseAllWrapper.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/landmarksui/engine/src/CLmkParseAllWrapper.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,263 @@ +/* +* Copyright (c) 2002 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: LandmarksUi Content File - +* +*/ + + +// INCLUDE FILES +#include "EPos_CPosLandmarkDatabase.h" +#include +#include "CLmkParseAllWrapper.h" +#include +#include +#include +#include +#include "CLmkAOOperation.h" +#include "CLmkLandMarkCategoriesName.h" +#include + +#if defined(_DEBUG) +// CONSTANTS +/// Unnamed namespace for local definitions +namespace { + +_LIT( KPanicMsg, "CLmkParseAllWrapper" ); + +void Panic( TPanicCode aReason ) + { + User::Panic( KPanicMsg, aReason ); + } +} // namespace +#endif +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CLmkParseAllWrapper::CLmkParseAllWrapper +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CLmkParseAllWrapper::CLmkParseAllWrapper( + CPosLandmarkParser& aParser, + MLmkAOOperationObserver& aObserver, + CPosLandmarkDatabase& aDb ) + : iParser( aParser ), + iObserver( aObserver), + iDb(aDb) + { + } + +// ----------------------------------------------------------------------------- +// CLmkParseAllWrapper::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CLmkParseAllWrapper::ConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CLmkParseAllWrapper::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CLmkParseAllWrapper* CLmkParseAllWrapper::NewL( + CPosLandmarkParser& aParser, + MLmkAOOperationObserver& aObserver, + CPosLandmarkDatabase& aDb ) + { + CLmkParseAllWrapper* self = + new ( ELeave ) CLmkParseAllWrapper( aParser, aObserver, aDb ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + } + +// ----------------------------------------------------------------------------- +// CLmkParseAllWrapper::~CLmkParseAllWrapper +// ----------------------------------------------------------------------------- +// +CLmkParseAllWrapper::~CLmkParseAllWrapper() + { + iLmkLandmarks.ResetAndDestroy(); + iCategoriesNames.ResetAndDestroy(); + delete iAOOperation; + } + +// ----------------------------------------------------------------------------- +// CLmkParseAllWrapper::ParseAllL +// ----------------------------------------------------------------------------- +// +void CLmkParseAllWrapper::ParseAllL() + { + CPosLmOperation* operation = iParser.ParseContentL(); + + __ASSERT_DEBUG( !iAOOperation, Panic( KLmkPanicAlreadyActive ) ); + + iAOOperation = + CLmkAOOperation::NewL( operation, + *this, + MLmkAOOperationObserver::EParse, + ETrue ); + iAOOperation->StartOperation(); + } + +// ----------------------------------------------------------------------------- +// CLmkParseAllWrapper::LandmarkLC +// ----------------------------------------------------------------------------- +// +CPosLandmark* CLmkParseAllWrapper::LandmarkLC( TUint aLandmarkIndex ) + { + __ASSERT_DEBUG( aLandmarkIndex < TUint( iLmkLandmarks.Count() ), + Panic( KLmkPanicInvalidIndex ) ); + + CLmkLandmark* lmkLandmarks = iLmkLandmarks[aLandmarkIndex]; + CPosLandmark* landmark = lmkLandmarks->PosLandmark(); + return CPosLandmark::NewLC( *landmark ); + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// CLmkParseAllWrapper::CategoryNameLC +// ----------------------------------------------------------------------------- +// +CLmkLandMarkCategoriesName* CLmkParseAllWrapper::CategoryNameLC( TUint aLandmarkIndex ) + { + __ASSERT_DEBUG( aLandmarkIndex < TUint( iCategoriesNames.Count() ), + Panic( KLmkPanicInvalidIndex ) ); + + CLmkLandMarkCategoriesName* category = CLmkLandMarkCategoriesName::NewL( *iCategoriesNames[aLandmarkIndex]); + CleanupStack::PushL(category); + return category; + } +// CLmkParseAllWrapper::HandleOperationL +// ----------------------------------------------------------------------------- +// +void CLmkParseAllWrapper::HandleOperationL( + TOperationTypes aType, + TReal32 aProgress, + TInt aStatus ) + { + __ASSERT_DEBUG( aType == EParse, Panic( KLmkPanicUnknownOperation ) ); + + if ( aStatus == KPosLmOperationNotComplete || + aStatus == KErrNone ) + { + CPosLandmark* landmark = iParser.LandmarkLC(); + CLmkLandMarkCategoriesName* categoryNames = CLmkLandMarkCategoriesName::NewL(); + CleanupStack::PushL(categoryNames); + + RArray* categoryIdArray = new(ELeave) RArray; + CleanupClosePushL(*categoryIdArray); + landmark->GetCategoriesL( *categoryIdArray ); + HBufC* catName = HBufC::NewLC( KPosLmMaxCategoryNameLength ); + TPtrC categoryPtr(catName->Des()); + RPointerArray* categories = new(ELeave) RPointerArray; + CleanupClosePushL(*categories); + for( TInt cnt = 0; cnt < categoryIdArray->Count(); cnt++ ) + { + CPosLandmarkCategory *category = iParser.LandmarkCategoryLC((*categoryIdArray)[cnt]); + category->GetCategoryName( categoryPtr ); + /* + * For predefined category, find the name from local database and + * display the localised names to the user + * If received predefined category does not exist in the local db, + * then treat is as a newly received category + */ + if ( category->GlobalCategory() != KPosLmNullGlobalCategory ) // global category + { + // Get the name from db (localised name for predefined category is stored in db) + HBufC* globCatName = NULL; + CPosLmCategoryManager* categoryMgr = CPosLmCategoryManager::NewL( iDb ); + CleanupStack::PushL( categoryMgr ); + globCatName = categoryMgr->GlobalCategoryNameL( category->GlobalCategory() ); + if ( globCatName == NULL ) + { + categoryNames->AddCategoryName( categoryPtr ); + } + else + { + CleanupStack::PushL( globCatName ); + if ( globCatName->Length() > 0 ) + { + // Add it to categories to be shown + categoryNames->AddCategoryName( *globCatName ); + } + CleanupStack::PopAndDestroy( globCatName ); + } + CleanupStack::PopAndDestroy( categoryMgr ); + } + else // User defined categories + { + categoryNames->AddCategoryName( categoryPtr ); + } + User::LeaveIfError(categories->Append(category)); + CleanupStack::Pop(category); + } + //categoryIdArray->Close(); + CLmkLandmark* lmkLandmarks = CLmkLandmark::NewL(landmark,*categories); + CleanupStack::PushL(lmkLandmarks); + User::LeaveIfError( iLmkLandmarks.Append( lmkLandmarks ) ); + User::LeaveIfError( iCategoriesNames.Append( categoryNames ) ); //Owner ship transferred to array + CleanupStack::Pop();//lmkLandmarks + CleanupStack::Pop( );//categories + categories->ResetAndDestroy(); + delete categories; + CleanupStack::PopAndDestroy( 2 ); //catName,categoryIdArray + delete categoryIdArray; + CleanupStack::Pop();//categoryNames + CleanupStack::PopAndDestroy();//landmark + + } + + if ( aStatus != KPosLmOperationNotComplete ) + { // parsing finished or error occured + __ASSERT_DEBUG( iAOOperation, Panic( KLmkPanicNullMember ) ); + + delete iAOOperation; + iAOOperation = NULL; + + iObserver.HandleOperationL( aType, aProgress, aStatus ); + } + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// CLmkParseAllWrapper::NumOfLandmarks +// ----------------------------------------------------------------------------- +// +TInt CLmkParseAllWrapper::NumOfLandmarks() + { + return iLmkLandmarks.Count(); + } + +// ----------------------------------------------------------------------------- +// CLmkParseAllWrapper::LmkLandmarkLC +// ----------------------------------------------------------------------------- +// +CLmkLandmark* CLmkParseAllWrapper::LmkLandmarkLC( TInt aLandmarkIndex ) + { + __ASSERT_DEBUG( aLandmarkIndex < TUint( iLmkLandmarks.Count() ), + Panic( KLmkPanicInvalidIndex ) ); + + CLmkLandmark* landmark = iLmkLandmarks[aLandmarkIndex]; + CLmkLandmark* lmkLandmarks = CLmkLandmark::NewL( *landmark ); + CleanupStack::PushL(lmkLandmarks); + return lmkLandmarks; + } +// End of File