clientprovisioning/cpqtsp/src/CWPSaver.cpp
branchRCL_3
changeset 57 6757f1e2efd2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/clientprovisioning/cpqtsp/src/CWPSaver.cpp	Tue Aug 31 15:05:55 2010 +0300
@@ -0,0 +1,179 @@
+/*
+* ============================================================================
+*  Name        : CWPSaver.cpp
+*  Part of     : Provisioning / ProvisioningBC
+*  Description : Helper class for saving Provisioning settings. Provides a progress note.
+*  Version     : %version: 2 % << Don't touch! Updated by Synergy at check-out.
+*
+*  Copyright © 2002-2006 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+// INCLUDE FILES
+#include <commdb.h>
+#include <CWPEngine.h>
+#include <CWPAdapter.h>
+
+#include "CWPSaver.h"
+#include <HbProgressDialog>
+#include <HbAction>
+
+// CONSTANTS
+const TInt KMaxWaitTime = 2000000;
+const TInt KRetryCount = 5;
+
+// CLASS DECLARATION
+
+// ========================== MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// C++ default constructor.
+// ----------------------------------------------------------------------------
+CWPSaver::CWPSaver( CWPEngine& aEngine, TBool aSetAsDefault )
+                  : CActive( EPriorityStandard ),
+                    iEngine( aEngine ), 
+                    iSetAsDefault( aSetAsDefault ),
+                    iCurrentItem( 0 ),
+                    iResult( KErrNone )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CWPSaver::PrepareLC
+// ----------------------------------------------------------------------------
+//
+void CWPSaver::PrepareLC()
+    {
+    // Assume ownership of this.
+    CleanupStack::PushL( this );
+    iProgress = new HbProgressDialog(HbProgressDialog::WaitDialog);
+    iProgress->setText(hbTrId("txt_device_update_setlabel_saving_settings"));
+    iProgress->clearActions();   
+    iProgress->show();
+
+ }
+
+// ----------------------------------------------------------------------------
+// CWPSaver::ExecuteLD
+// ----------------------------------------------------------------------------
+//
+TInt CWPSaver::ExecuteLD( TInt& aNumSaved, TBufC<256>& Value )
+    {
+    PrepareLC();
+
+    // Add us to active scheduler and make sure RunL() gets called.
+    CActiveScheduler::Add( this );
+    CompleteRequest();
+    iWait.Start();
+
+    // Progress note has been finished/cancelled. Cache the result
+    // and delete this.
+    TInt result( iResult );
+    aNumSaved = iCurrentItem;
+    Value = iValue;
+    CleanupStack::PopAndDestroy(); // this
+
+    return result;
+    }
+
+// ----------------------------------------------------------------------------
+// Destructor
+// ----------------------------------------------------------------------------
+CWPSaver::~CWPSaver()
+    {
+    Cancel();
+  }
+
+// ----------------------------------------------------------------------------
+// CWPSaver::DoCancel
+// ----------------------------------------------------------------------------
+//
+void CWPSaver::DoCancel()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CWPSaver::RunL
+// ----------------------------------------------------------------------------
+//
+void CWPSaver::RunL()
+    {
+    // Choose whether to save or set as default
+    TInt err( KErrNone );
+    if( iSetAsDefault )
+        {
+        TRAP( err, 
+            if( iEngine.CanSetAsDefault( iCurrentItem ) )
+                {
+                iEngine.SetAsDefaultL( iCurrentItem );
+                } );
+        }
+    else
+        {
+        TRAP(err, QT_TRYCATCH_LEAVING( iEngine.SaveL( iCurrentItem ) )); 
+        }
+    if( err != KErrNone )
+        {
+        // For all other errors, pass them through.
+        iValue = iEngine.SummaryText(iCurrentItem);
+        delete iProgress;
+        iProgress = NULL;
+        User::LeaveIfError( err );
+        }
+    // Succesful save, so reset retry count
+    iRetryCount = 0;
+
+    // Normal progress
+    if( iCurrentItem == iEngine.ItemCount()-1 )
+        {
+        //iProgress->cancel();
+        //iProgress->close();
+        delete iProgress;
+        iProgress = NULL;
+        iWait.AsyncStop();       
+        }
+    else
+        {
+        //CEikProgressInfo* progressInfo = iDialog->GetProgressInfoL();
+        iCurrentItem++;
+        //progressInfo->SetAndDraw(iCurrentItem);
+        CompleteRequest();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CWPSaver::RunError
+// ----------------------------------------------------------------------------
+//
+TInt CWPSaver::RunError( TInt aError )
+    {
+    // There was a leave in RunL(). Store the error and
+    // stop the dialog.
+    iResult = aError;
+    iWait.AsyncStop();
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// CWPSaver::CompleteRequest
+// ----------------------------------------------------------------------------
+//
+void CWPSaver::CompleteRequest()
+    {
+    // Schedule an immediate complete. Make sure that there
+    // is no timer alive first
+    Cancel();
+    //iRetryTimer->Cancel();
+
+    SetActive();
+    TRequestStatus* sp = &iStatus;
+    User::RequestComplete( sp, KErrNone );
+    }
+