landmarksui/engine/src/CLmkEncodeUnsavedLandmarksOp.cpp
branchRCL_3
changeset 18 870918037e16
parent 0 522cd55cc3d7
--- /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 <EPos_CPosLmCategoryManager.h>
+#include <EPos_CPosLmOperation.h>
+#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<CLmkLandmark>&  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<CLmkLandmark>&  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