memspyui/ui/avkon/src/MemSpyDeviceWideOperationDialog.cpp
changeset 31 e7a04a6385be
parent 17 4f2773374eff
--- a/memspyui/ui/avkon/src/MemSpyDeviceWideOperationDialog.cpp	Thu Jun 17 15:34:52 2010 +0300
+++ b/memspyui/ui/avkon/src/MemSpyDeviceWideOperationDialog.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -26,12 +26,25 @@
 #include <avkon.hrh>
 #include <memspyui.rsg>
 
+#include <memspysession.h>
 
+/*
 CMemSpyDeviceWideOperationDialog::CMemSpyDeviceWideOperationDialog( CMemSpyEngine& aEngine, MMemSpyDeviceWideOperationDialogObserver& aObserver )
 :   iEngine( aEngine ), iObserver( aObserver )
     {
     }
 
+CMemSpyDeviceWideOperationDialog::CMemSpyDeviceWideOperationDialog( RMemSpySession& aSession, MMemSpyDeviceWideOperationDialogObserver& aObserver )
+:   iSession( aSession ), iObserver( aObserver )
+    {
+    }    
+*/
+
+CMemSpyDeviceWideOperationDialog::CMemSpyDeviceWideOperationDialog( RMemSpySession& aSession )
+:   iSession( aSession )
+    {
+    }    
+
 
 CMemSpyDeviceWideOperationDialog::~CMemSpyDeviceWideOperationDialog()
     {
@@ -54,7 +67,7 @@
     RDebug::Printf("[MemSpy] CMemSpyDeviceWideOperationDialog::~CMemSpyDeviceWideOperationDialog() - sending EDialogDismissed to observer..." );
 #endif
 
-    iObserver.DWOperationCompleted();
+    //iObserver.DWOperationCompleted(); //TODO
 
 #ifdef _DEBUG
     RDebug::Printf("[MemSpy] CMemSpyDeviceWideOperationDialog::~CMemSpyDeviceWideOperationDialog() - END" );
@@ -62,8 +75,10 @@
     }
 
 
-void CMemSpyDeviceWideOperationDialog::ExecuteL( CMemSpyDeviceWideOperations::TOperation aOperation )
+//void CMemSpyDeviceWideOperationDialog::ExecuteL( CMemSpyDeviceWideOperations::TOperation aOperation )
+void CMemSpyDeviceWideOperationDialog::ExecuteL( TDeviceWideOperation aOp )
     {
+	/*
 #ifdef _DEBUG
     RDebug::Printf("[MemSpy] CMemSpyDeviceWideOperationDialog::ExecuteL() - START" );
 #endif
@@ -88,13 +103,15 @@
 #ifdef _DEBUG
     RDebug::Printf("[MemSpy] CMemSpyDeviceWideOperationDialog::ExecuteL() - END" );
 #endif
+	*/
     }
 
-void CMemSpyDeviceWideOperationDialog::ExecuteLD( CMemSpyEngine& aEngine, MMemSpyDeviceWideOperationDialogObserver& aObserver, CMemSpyDeviceWideOperations::TOperation aOperation )
+void CMemSpyDeviceWideOperationDialog::ExecuteLD( RMemSpySession& aSession, TDeviceWideOperation aOp )
     {
-    CMemSpyDeviceWideOperationDialog* self = new(ELeave) CMemSpyDeviceWideOperationDialog( aEngine, aObserver );
+    //CMemSpyDeviceWideOperationDialog* self = new(ELeave) CMemSpyDeviceWideOperationDialog( aSession, aObserver );
+	CMemSpyDeviceWideOperationDialog* self = new(ELeave) CMemSpyDeviceWideOperationDialog( aSession );
     CleanupStack::PushL( self );
-    self->ExecuteL( aOperation );
+    self->ExecuteL( aOp );
     CleanupStack::PopAndDestroy( self );
     }
 
@@ -112,7 +129,7 @@
         iOperation->Cancel();
         }
     //
-    iObserver.DWOperationCancelled();
+    //iObserver.DWOperationCancelled();
 
 #ifdef _DEBUG
     RDebug::Printf("[MemSpy] CMemSpyDeviceWideOperationDialog::Cancel() - END" );
@@ -147,7 +164,7 @@
     case MMemSpyDeviceWideOperationsObserver::EOperationSized:
         break;
     case MMemSpyDeviceWideOperationsObserver::EOperationStarting:
-        iObserver.DWOperationStarted();
+        //iObserver.DWOperationStarted();
         break;
     case MMemSpyDeviceWideOperationsObserver::EOperationProgressStart:
         ASSERT( iProgressDialog != NULL );
@@ -191,7 +208,180 @@
         }
     }
 
+CMemSpyDwoTracker* CMemSpyDeviceWideOperationDialog::CreateDeviceWideOperation( RMemSpySession& aSession, TDeviceWideOperation aOp )
+{
+	return new CMemSpyDwoTracker( aSession, aOp );
+}
+
+
+
+
+
+
+
+
+
 
 
 
 
+CMemSpyDwoProgressTracker::CMemSpyDwoProgressTracker(RMemSpySession &aSession) 
+	: CActive( EPriorityStandard ), iSession( aSession )
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CMemSpyDwoProgressTracker::~CMemSpyDwoProgressTracker()
+	{
+	Cancel();	
+	}
+
+void CMemSpyDwoProgressTracker::Start()
+	{
+	ASSERT( iProgressDialog == NULL );
+	iProgressDialog = new( ELeave ) CAknProgressDialog( reinterpret_cast< CEikDialog** >( &iProgressDialog ), ETrue );
+	iProgressDialog->PrepareLC( R_MEMSPY_DEVICE_WIDE_OPERATION_PROGRESS_DIALOG );
+	iProgressDialog->SetCallback( this );
+	iProgressDialog->SetGloballyCapturing( ETrue );
+	iProgressInfo = iProgressDialog->GetProgressInfoL();	
+	
+	iSession.NotifyDeviceWideOperationProgress( iProgress, iStatus );
+	
+	UpdateProcessDialogL( iProgress.Progress(), iProgress.Description() );
+	
+	SetActive();
+	
+	iProgressDialog->RunLD();
+	}
+
+void CMemSpyDwoProgressTracker::Cancel()
+	{	
+	}
+
+void CMemSpyDwoProgressTracker::RunL()
+    { 		
+    // If an error occurred handle it in RunError().
+    User::LeaveIfError(iStatus.Int());
+ 
+    // Resubmit the request immediately    
+    iSession.NotifyDeviceWideOperationProgress( iProgress, iStatus );     
+    
+    SetActive();            
+    
+    UpdateProcessDialogL( iProgress.Progress(), iProgress.Description() );    
+    }
+ 
+void CMemSpyDwoProgressTracker::DoCancel()
+	{ 	
+	}
+ 
+TInt CMemSpyDwoProgressTracker::RunError(TInt aError)
+	{ 
+	// KErrNotReady and KErrCancel errors are OK, they just notify 
+	// us about the outstanding notification request that won't be 
+	// processed.		
+    return KErrNone;
+	}
+
+void CMemSpyDwoProgressTracker::UpdateProcessDialogL( TInt aProgress, const TDesC& aProgressText )
+	{
+	if(iProgressDialog)
+		{
+		iProgressDialog->SetTextL( aProgressText );
+	    }
+	 
+	if(iProgressInfo)
+		{
+	    iProgressInfo->SetAndDraw( aProgress );	
+		}
+	}
+
+void CMemSpyDwoProgressTracker::DialogDismissedL(TInt aButtonId)
+	{
+	iProgressDialog = NULL;
+	iProgressInfo = NULL;	
+	 
+	Cancel();
+	}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+CMemSpyDwoTracker::CMemSpyDwoTracker( RMemSpySession &aSession, TDeviceWideOperation aOperation )
+:	CActive( EPriorityStandard ), 
+	iSession( aSession ),
+	iProgressTracker(new CMemSpyDwoProgressTracker( aSession )),
+	iOperation( aOperation )
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CMemSpyDwoTracker::~CMemSpyDwoTracker()
+	{		
+	Cancel();
+	
+	delete iProgressTracker;
+	}
+
+void CMemSpyDwoTracker::Start()
+{	
+	void (RMemSpySession::*functions[])(TRequestStatus&) = { 
+		&RMemSpySession::OutputPhoneInfo,
+		&RMemSpySession::OutputDetailedPhoneInfo,
+		&RMemSpySession::OutputHeapInfo,
+		&RMemSpySession::OutputCompactHeapInfo,
+		&RMemSpySession::OutputHeapCellListing,
+		&RMemSpySession::OutputHeapData,
+		&RMemSpySession::OutputStackInfo,
+		&RMemSpySession::OutputCompactStackInfo,
+		&RMemSpySession::OutputUserStackData,
+		&RMemSpySession::OutputKernelStackData };
+		
+	(iSession.*functions[iOperation])(iStatus);			
+	
+	SetActive();
+	
+	iProgressTracker->Start();				
+}
+
+void CMemSpyDwoTracker::Cancel()
+{
+}
+ 
+void CMemSpyDwoTracker::RunL()
+    { 
+    // If an error occurred handle it in RunError().
+    User::LeaveIfError(iStatus.Int());
+ 
+    if( !IsActive() )
+    	{
+		iProgressTracker->ProgressDialog()->ProcessFinishedL();
+    	}
+    }
+ 
+void CMemSpyDwoTracker::DoCancel()
+{ 
+	// Cancel progress tracker
+	iProgressTracker->Cancel();
+	
+	iSession.CancelDeviceWideOperationL();	
+}
+ 
+TInt CMemSpyDwoTracker::RunError(TInt aError)
+{ 
+	// Emit the finished(false) signal to notify user 
+	// operation was canceled
+	//emit finished(false); //TODO:
+	
+    return KErrNone;
+}