diff -r 1fc85118c3ae -r 870918037e16 landmarksui/engine/src/CLmkEncodeUnsavedLandmarksOp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/landmarksui/engine/src/CLmkEncodeUnsavedLandmarksOp.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,183 @@ +/* +* 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: This class provides functionality of encoding landmarks +* both saved and unsaved landmarks (In Landmarks DB). +* +*/ + + + + + + + +// INCLUDE FILES +#include "CLmkEncodeUnsavedLandmarksOp.h" +#include "CLmkAOOperation.h" +#include +#include +#include "CLmkDbUtils.h" + + +//CONSTANTS +const TReal32 KOperationDone = 1; +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CLmkEncodeUnsavedLandmarksOp::CLmkEncodeUnsavedLandmarksOp +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CLmkEncodeUnsavedLandmarksOp::CLmkEncodeUnsavedLandmarksOp( + CPosLandmarkEncoder& aLandmarkEncoder, + CPosLandmarkDatabase::TTransferOptions aTransferOptions) + :iEncoder(aLandmarkEncoder), + iTransferOptions(aTransferOptions), + iCurrentIsLm(ETrue), + iStatusFlag(KPosLmOperationNotComplete) + + { + iNrOfSubOperations = 1; + } + +// ----------------------------------------------------------------------------- +// CLmkEncodeUnsavedLandmarksOp::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CLmkEncodeUnsavedLandmarksOp::ConstructL(const RPointerArray& aLandmarks) + { + for (TInt i = 0; i < aLandmarks.Count(); i++) + { + CLmkLandmark* landmark = CLmkLandmark::NewL(*aLandmarks[i]); + CleanupStack::PushL(landmark); + User::LeaveIfError(iLandmarks.Append(landmark)); + CleanupStack::Pop();//landmark + } + } + + +// ----------------------------------------------------------------------------- +// CLmkEncodeUnsavedLandmarksOp::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CLmkEncodeUnsavedLandmarksOp* CLmkEncodeUnsavedLandmarksOp::NewL( + CPosLandmarkEncoder& aLandmarkEncoder, + const RPointerArray& aLandmarks, + CPosLandmarkDatabase::TTransferOptions aTransferOptions ) + { + CLmkEncodeUnsavedLandmarksOp* self = + new ( ELeave ) CLmkEncodeUnsavedLandmarksOp(aLandmarkEncoder, + aTransferOptions); + + CleanupStack::PushL( self ); + self->ConstructL(aLandmarks ); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CLmkEncodeUnsavedLandmarksOp::~CLmkEncodeUnsavedLandmarksOp +// ----------------------------------------------------------------------------- +// +CLmkEncodeUnsavedLandmarksOp::~CLmkEncodeUnsavedLandmarksOp() + { + iLandmarks.ResetAndDestroy(); + } + +// ----------------------------------------------------------------------------- +// CLmkEncodeUnsavedLandmarksOp::NextStep +// ----------------------------------------------------------------------------- +// +void CLmkEncodeUnsavedLandmarksOp::NextStep( TRequestStatus& aStatus, + TReal32& aProgress ) + { + aStatus = KRequestPending; + iStatus = &aStatus; + iProgress = &aProgress; + TInt err(KErrNone); + if (iCurrentIsLm) + { + CLmkLandmark* lmkLm = iLandmarks[iCurrentLm++]; + CPosLandmark* lm = lmkLm->PosLandmark(); + TRAP(err,CLmkDbUtils::AddDefaultProtocolL(lm)); + if (iTransferOptions & CPosLandmarkDatabase::EIncludeCategories) + { + iCurrentCategory = 0; + iCategories = lmkLm->Categories(); + if (iCategories.Count() != 0) + { + iCurrentIsLm = EFalse; + } + } + + TRAP(err,iEncoder.AddLandmarkL(*lm)); + } + else + { + for (TInt i = 0; + i < iNrOfSubOperations && + iCurrentCategory < iCategories.Count(); i++) + { + CPosLandmarkCategory* category =iCategories[iCurrentCategory++]; + if (iCurrentCategory == iCategories.Count()) + { + iCurrentIsLm = ETrue; + } + TRAP(err,iEncoder.AddCategoryForLatestLandmarkL(*category)); + } + } + + if(!err) + { + if (iCurrentLm == iLandmarks.Count() && + iCurrentCategory == iCategories.Count()) + { + iStatusFlag = KErrNone; + aProgress = KOperationDone; + } + else if (iCurrentIsLm) + { + aProgress = TReal32(iCurrentLm) / iLandmarks.Count(); + } + else + { + aProgress = TReal32(iCurrentLm - 1) / iLandmarks.Count() + + TReal32(iCurrentCategory + 1) / + (iCategories.Count() + 1) / + iLandmarks.Count(); + } + } + else + { + iStatusFlag = err; + aProgress = KOperationDone; + } + + User::RequestComplete( iStatus,iStatusFlag); + } + +// ----------------------------------------------------------------------------- +// CLmkEncodeUnsavedLandmarksOp::ExecuteL +// ----------------------------------------------------------------------------- +// +void CLmkEncodeUnsavedLandmarksOp::ExecuteL() + { + // We never use asynchronous methods in synchronous way and therefore + // don't need to support this method + User::Leave( KErrNotSupported ); + } +// End of File