filemanager/View/src/CFileManagerGlobalDlgFull.cpp
changeset 0 6a9f87576119
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/src/CFileManagerGlobalDlgFull.cpp	Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,391 @@
+/*
+* Copyright (c) 2006 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:  Global dialog handling
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <AknGlobalNote.h>
+#include <AknGlobalConfirmationQuery.h>
+#include <AknGlobalProgressDialog.h>
+#include <avkon.rsg>
+#include <aknconsts.h>
+#include <avkon.mbg>
+#include "CFileManagerGlobalDlg.h"
+#include "CFileManagerGlobalQueryDlg.h"
+
+
+// CONSTANTS
+const TUint KCountdownTimeout = 1000000; // 1s
+const TInt KCountdownSteps = 30;
+const TInt KCountdownShowSKStep = 3;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::CFileManagerGlobalDlg
+// ---------------------------------------------------------------------------
+//
+CFileManagerGlobalDlg::CFileManagerGlobalDlg() :
+        CActive( EPriorityUserInput )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerGlobalDlg* CFileManagerGlobalDlg::NewL()
+    {
+    CFileManagerGlobalDlg* self =
+        new( ELeave ) CFileManagerGlobalDlg();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::ConstructL
+// ---------------------------------------------------------------------------
+// 
+void CFileManagerGlobalDlg::ConstructL()
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::~CFileManagerGlobalDlg
+// ---------------------------------------------------------------------------
+// 
+EXPORT_C CFileManagerGlobalDlg::~CFileManagerGlobalDlg()
+    {
+    Cancel();
+    delete iQueryDialog;
+    delete iProgressDialog;
+    delete iCountdown;
+    delete iCountdownText;
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::CancelDialog
+// ---------------------------------------------------------------------------
+// 
+EXPORT_C void CFileManagerGlobalDlg::CancelDialog()
+    {
+    delete iCountdown;
+    iCountdown = NULL;
+
+    if ( iQueryDialog )
+        {
+        iQueryDialog->CancelDialog();
+        delete iQueryDialog;
+        iQueryDialog = NULL;
+        }
+
+    if ( iProgressDialog )
+        {
+        iProgressDialog->CancelProgressDialog();
+        delete iProgressDialog;
+        iProgressDialog = NULL;
+        }
+
+    Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::ShowDialogL
+// ---------------------------------------------------------------------------
+// 
+EXPORT_C void CFileManagerGlobalDlg::ShowDialogL(
+        const CFileManagerGlobalDlg::TType aType,
+        const TDesC& aText,
+        const TInt aSkId )
+    {
+    CancelDialog();
+
+    iType = aType;
+
+    switch ( aType )
+        {
+        case ECountdownQuery:
+            {
+            iCountdownText = aText.AllocL();
+            iQueryDialog = CFileManagerGlobalQueryDlg::NewL();
+            iQueryDialog->ShowDialogL(
+                *iCountdownText,
+                R_AVKON_SOFTKEYS_EMPTY );
+            iCountdownSteps = 0;
+            StartCountdownL( KCountdownTimeout );
+            break;
+            }
+        case EQuery:
+            {
+            iQueryDialog = CFileManagerGlobalQueryDlg::NewL();
+            iQueryDialog->SetObserver( this );
+            iQueryDialog->ShowDialogL(
+                aText,
+                aSkId );
+            break;
+            }
+        case EQueryWithWarningIcon:
+            {
+            iQueryDialog = CFileManagerGlobalQueryDlg::NewL();
+            iQueryDialog->SetObserver( this );
+            iQueryDialog->ShowDialogL(
+                aText,
+                aSkId,
+                KAvkonBitmapFile,
+                EMbmAvkonQgn_note_warning,
+                EMbmAvkonQgn_note_warning_mask );
+            break;
+            }
+        case EQueryWithInfoIcon:
+            {
+            iQueryDialog = CFileManagerGlobalQueryDlg::NewL();
+            iQueryDialog->SetObserver( this );
+            iQueryDialog->ShowDialogL(
+                aText,
+                aSkId,
+                KAvkonBitmapFile,
+                EMbmAvkonQgn_note_info,
+                EMbmAvkonQgn_note_info_mask );
+            break;
+            }
+        case EProgressDialog:
+            {
+            iProgressDialog = CAknGlobalProgressDialog::NewL();
+            if ( aSkId )
+                {
+                iProgressDialog->ShowProgressDialogL(
+                    iStatus, aText, aSkId );
+                }
+            else
+                {
+                iProgressDialog->ShowProgressDialogL(
+                    iStatus, aText );
+                }
+            SetActive();
+            iFinalValue = 0;
+            break;
+            }
+        case EErrorNote:
+            {
+            CAknGlobalNote* note = CAknGlobalNote::NewLC();
+            note->SetTone( EAvkonSIDNoSound ); // no tone
+            note->ShowNoteL( EAknGlobalErrorNote, aText );
+            CleanupStack::PopAndDestroy( note );
+            break;
+            }
+        case EInfoNote:
+            {
+            CAknGlobalNote* note = CAknGlobalNote::NewLC();
+            note->SetTone( EAvkonSIDNoSound ); // no tone
+            note->ShowNoteL( EAknGlobalInformationNote, aText );
+            CleanupStack::PopAndDestroy( note );
+            break;
+            }
+        default:
+            {
+            break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::ShowDialogL
+// ---------------------------------------------------------------------------
+// 
+EXPORT_C void CFileManagerGlobalDlg::ShowDialogL(
+        const CFileManagerGlobalDlg::TType aType,
+        const TInt aTextId,
+        const TInt aSkId )
+    {
+    HBufC* text = StringLoader::LoadLC( aTextId );
+    ShowDialogL( aType, *text, aSkId );
+    CleanupStack::PopAndDestroy( text );
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::DoCancel
+// ---------------------------------------------------------------------------
+// 
+void CFileManagerGlobalDlg::DoCancel() 
+	{
+    if ( iQueryDialog )
+        {
+        iQueryDialog->CancelDialog();
+        }
+    if ( iProgressDialog )
+        {
+        iProgressDialog->CancelProgressDialog();
+        }
+	}
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::RunL
+// ---------------------------------------------------------------------------
+// 
+void CFileManagerGlobalDlg::RunL()
+    {
+    CancelDialog();
+    NotifyObserver( iStatus.Int() );
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::SetObserver
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerGlobalDlg::SetObserver(
+        MFileManagerGlobalDlgObserver* aObserver )
+    {
+    // This instance is not allowed to set by client
+    if ( aObserver != this )
+        {
+        iObserver = aObserver;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::StartCountdownL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerGlobalDlg::StartCountdownL( const TUint aTimeout )
+    {
+    delete iCountdown;
+    iCountdown = NULL;
+    iCountdown = CPeriodic::NewL( CActive::EPriorityStandard );
+    iCountdown->Start( aTimeout, aTimeout, TCallBack( CountdownCB, this ) );
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::CountdownCB
+// ---------------------------------------------------------------------------
+// 
+TInt CFileManagerGlobalDlg::CountdownCB( TAny* aPtr )
+    {
+    CFileManagerGlobalDlg* self =
+        static_cast< CFileManagerGlobalDlg* >( aPtr );
+
+    TRAP_IGNORE( self->CountdownL() );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::CountdownL
+// ---------------------------------------------------------------------------
+// 
+void CFileManagerGlobalDlg::CountdownL()
+    {
+    if( iCountdownSteps < KCountdownSteps )
+        {
+        // Countdown in progress
+        ++iCountdownSteps;
+        if ( iCountdownSteps == KCountdownShowSKStep )
+            {
+            iProgressDialog = CAknGlobalProgressDialog::NewL();
+            iProgressDialog->SetImageL(
+                KAvkonBitmapFile,
+                EMbmAvkonQgn_note_query,
+                EMbmAvkonQgn_note_query_mask );
+            iProgressDialog->ShowProgressDialogL(
+                iStatus,
+                *iCountdownText,
+                R_AVKON_SOFTKEYS_YES_NO );
+            SetActive();
+
+            if ( iQueryDialog )
+                {
+                iQueryDialog->CancelDialog();
+                delete iQueryDialog;
+                iQueryDialog = NULL;
+                }
+            }
+
+        if ( iProgressDialog &&
+            iCountdownSteps >= KCountdownShowSKStep )
+            {
+            iProgressDialog->UpdateProgressDialog(
+                iCountdownSteps, KCountdownSteps );
+            }
+        }
+    else
+        {
+        // Countdown expired
+        CancelDialog();
+        NotifyObserver( EAknSoftkeyYes );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::UpdateProgressDialog
+// ---------------------------------------------------------------------------
+// 
+EXPORT_C void CFileManagerGlobalDlg::UpdateProgressDialog(
+        const TInt aValue,
+        const TInt aFinalValue )
+    {
+    if ( iProgressDialog )
+        {
+        if ( aFinalValue >= 0 )
+            {
+            iFinalValue = aFinalValue;
+            }
+        iProgressDialog->UpdateProgressDialog( aValue, iFinalValue );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::ProcessFinished
+// ---------------------------------------------------------------------------
+// 
+EXPORT_C void CFileManagerGlobalDlg::ProcessFinished()
+    {
+    if ( iProgressDialog )
+        {
+        iProgressDialog->ProcessFinished();
+        delete iProgressDialog;
+        iProgressDialog = NULL;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::NotifyObserver
+// ---------------------------------------------------------------------------
+// 
+void CFileManagerGlobalDlg::NotifyObserver( const TInt aValue )
+    {
+    if ( iObserver )
+        {
+        iObserver->HandleGlobalDlgResult( iType, aValue );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::HandleGlobalDlgResult
+// ---------------------------------------------------------------------------
+// 
+void CFileManagerGlobalDlg::HandleGlobalDlgResult(
+        TInt /*aDlgType*/,
+        TInt aDlgResult )
+    {
+    NotifyObserver( aDlgResult );
+    }
+
+//  End of File