filemanager/App/src/CFileManagerRestoreView.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:31:07 +0100
branchRCL_3
changeset 21 65326cf895ed
child 22 f5c50b8af68c
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2006-2008 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:  View for restore settings
*
*/



// INCLUDE FILES
#include <StringLoader.h>
#include <aknlists.h>
#include <akntitle.h>
#include <CFileManagerEngine.h>
#include <filemanager.rsg>
#include <FileManagerDlgUtils.h>
#include <CFileManagerRestoreSettings.h>
#include <FileManagerDebug.h>
#include "CFileManagerRestoreView.h"
#include "CFileManagerSettingListContainer.h"
#include "CFileManagerDocument.h"
#include "CFileManagerAppUi.h"
#include "FileManager.hrh"

// CONSTANTS
const TUid CFileManagerRestoreView::KDeleteBackups = { EDeleteBackups };
const TInt KMaxSelection = 64;

// ======== MEMBER FUNCTIONS ========

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::CFileManagerRestoreView
// ----------------------------------------------------------------------------
//
CFileManagerRestoreView::CFileManagerRestoreView()
    {
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::NewLC
// ----------------------------------------------------------------------------
//
CFileManagerRestoreView* CFileManagerRestoreView::NewLC()
    {
    CFileManagerRestoreView* self = new( ELeave ) CFileManagerRestoreView();
    CleanupStack::PushL( self );
    self->ConstructL( R_FILEMANAGER_RESTORE_VIEW );
    return self;
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::~CFileManagerRestoreView
// ----------------------------------------------------------------------------
// 
CFileManagerRestoreView::~CFileManagerRestoreView()
    {
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::DoActivateL
// ----------------------------------------------------------------------------
// 
void CFileManagerRestoreView::DoActivateL(
        const TVwsViewId& aPrevViewId,
        TUid aCustomMessageId,
        const TDesC8& aCustomMessage )
    {
    FUNC_LOG

    iSelection = 0; // Reset stored list selection
    iDeleteBackups = ( aCustomMessageId == KDeleteBackups );

    CFileManagerViewBase::DoActivateL(
        aPrevViewId, aCustomMessageId, aCustomMessage );

    static_cast< CFileManagerAppUi* >( AppUi() )->SetTitleL(
        iDeleteBackups ?
        R_QTN_FMGR_DELETE_BACKUP_TITLE : R_QTN_FMGR_RESTORE_TITLE );

    CFileManagerRestoreSettings& settings( iEngine.RestoreSettingsL() );
    settings.RefreshL();

    iContainer->RefreshListL( iIndex );

    CEikButtonGroupContainer* cba = Cba();
    cba->SetCommandSetL(R_AVKON_SOFTKEYS_OK_CANCEL__MARK );
    cba->MakeCommandVisible( EAknSoftkeyOk, EFalse );
    cba->MakeCommandVisible( EAknSoftkeyMark, ETrue );

    if ( !iContainer->ListBoxNumberOfItems() )
        {
        cba->MakeCommandVisible( EAknSoftkeyMark, EFalse );
        }
    cba->DrawDeferred();
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::DoDeactivate
// ----------------------------------------------------------------------------
// 
void CFileManagerRestoreView::DoDeactivate()
    {
    FUNC_LOG

    CFileManagerViewBase::DoDeactivate();
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::DirectoryChangedL
// ----------------------------------------------------------------------------
// 
void CFileManagerRestoreView::DirectoryChangedL()
    {
    FUNC_LOG

    if ( iContainer )
        {
        CFileManagerRestoreSettings& settings( iEngine.RestoreSettingsL() );
        settings.RefreshL();
        iContainer->RefreshListL( iIndex );
        RestoreSelectionL();
        }
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::Id
// ----------------------------------------------------------------------------
// 
TUid CFileManagerRestoreView::Id() const
    {
    return CFileManagerAppUi::KFileManagerRestoreViewId;
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::CreateContainerL
// ----------------------------------------------------------------------------
// 
CFileManagerContainerBase* CFileManagerRestoreView::CreateContainerL()
    {
    CFileManagerRestoreSettings& settings( iEngine.RestoreSettingsL() );
    CFileManagerContainerBase* container =
        CFileManagerSettingListContainer::NewL(
            ClientRect(),
            iIndex,
            CFileManagerSettingListContainer::EListRestore,
            &settings );
    container->SetEmptyTextL( R_QTN_FMGR_RESTORE_NO_BACKUPS );
    return container;
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::HandleCommandL
// ----------------------------------------------------------------------------
// 
void CFileManagerRestoreView::HandleCommandL( TInt aCommand )
    {
    switch( aCommand )
        {
        case EAknSoftkeySelect: // FALLTHROUGH
        case EAknSoftkeyMark: // FALLTHROUGH
        case EAknSoftkeyUnmark: // FALLTHROUGH
        case EFileManagerSelectionKey: // FALLTHROUGH
        case EFileManagerToggleMark: // FALLTHROUGH
        case EFileManagerOpen:
            {
            CmdSelectL();
            break;
            }
        case EAknSoftkeyOk:
            {
            CmdOkL();
            break;
            }
        case EAknSoftkeyCancel: // FALLTHROUGH
        case EAknSoftkeyBack:
            {
            CmdCancelL();
            break;
            }
        case EFileManagerCheckMark:
            {
            CmdCheckMarkL();
            break;
            }
        default:
            {
            break;
            }
        }
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::CmdOkL
// ----------------------------------------------------------------------------
// 
void CFileManagerRestoreView::CmdOkL()
    {
    if ( !iContainer )
        {
        return;
        }

    TBool isSystemStateNormal = static_cast< CFileManagerAppUi* >( AppUi() )->IsSystemStateNormal();
    if ( !isSystemStateNormal )
        {
        FileManagerDlgUtils::ShowErrorNoteL( R_QTN_FMGR_SYSTEM_NOT_READY );
        return;
        }

    const CArrayFix< TInt >* items = iContainer->ListBoxSelectionIndexes();

    TInt count( items->Count() );

    if ( count )
        {
        if( FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
                iDeleteBackups ?
                R_QTN_FMGR_DELETE_BACKUP_QUERY : R_QTN_FMGR_RESTORE_QUERY ) )
            {
            if ( !CheckPhoneState() )
                {
                FileManagerDlgUtils::ShowErrorNoteL( R_QTN_CRITICAL_ERROR );
                }
            else
                {
                TUint64 selection( 0 );
                for ( TInt i( 0 ); i < count; ++i )
                    {
                    selection |= ( ( TUint64 ) 1 ) << ( ( *items )[ i ] );
                    }
    
                CFileManagerRestoreSettings& settings(
                    iEngine.RestoreSettingsL() );
                settings.SetSelection( selection );
    
                if ( iDeleteBackups )
                    {
                    // Delete selected backups and close this view
                    iEngine.DeleteBackupsL();
                    iIndex = 0;
                    static_cast< CFileManagerAppUi* >(
                        AppUi() )->CloseRestoreViewL();
                    }
                else
                    {
                    // Start restoring selected backups
                    TRAPD( err, StartProcessL( ERestoreProcess ) );
                    if ( err == KErrCorrupt )
                        {
                        FileManagerDlgUtils::ShowErrorNoteL(
                            R_QTN_FMGR_ERROR_CORRUPTED_BACKUP_FILE );
                        }
                    else
                        {
                        User::LeaveIfError( err );
                        }
                    }
                }
            }
        }
    else
        {
        CmdCancelL();
        }
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::CmdCancelL
// ----------------------------------------------------------------------------
// 
void CFileManagerRestoreView::CmdCancelL()
    {
    iIndex = 0;
    static_cast< CFileManagerAppUi* >( AppUi() )->CloseRestoreViewL();
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::CmdSelectL
// ----------------------------------------------------------------------------
// 
void CFileManagerRestoreView::CmdSelectL()
    {
    if ( !iContainer )
        {
        return;
        }
    if ( !iContainer->ListBoxNumberOfItems() )
        {
        return;
        }
    TInt index( iContainer->ListBoxCurrentItemIndex() );
    iContainer->ListBoxToggleItemL( index );
    iSelection ^= ( ( TUint64 ) 1 ) << index; // Toggle stored list selection
    UpdateCbaFromSelectionL();
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::CmdCheckMarkL
// ----------------------------------------------------------------------------
// 
void CFileManagerRestoreView::CmdCheckMarkL()
    {
    if ( !iContainer )
        {
        return;
        }
    TInt mskTextId( R_QTN_MSK_MARK );
    if ( iContainer->ListBoxIsItemSelected(
            iContainer->ListBoxCurrentItemIndex() ) )
        {
        mskTextId = R_QTN_MSK_UNMARK;
        }
    
    SetCbaMskTextL( mskTextId );
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::ProcessFinishedL
// ----------------------------------------------------------------------------
// 
void CFileManagerRestoreView::ProcessFinishedL(
        TInt aError, const TDesC& aName )
    {
    TBool isRestore( iActiveProcess == ERestoreProcess );

    CFileManagerViewBase::ProcessFinishedL( aError, aName );

    // Exit when restore finished
    if ( isRestore )
        {
        CmdCancelL();
        }
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::NotifyForegroundStatusChange
// ----------------------------------------------------------------------------
//
void CFileManagerRestoreView::NotifyForegroundStatusChange(
        TBool aForeground )
    {
    FUNC_LOG

    if ( aForeground )
        {
        TRAP_IGNORE( RefreshSettingsL() );
        }
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::RefreshSettingsL
// ----------------------------------------------------------------------------
//
void CFileManagerRestoreView::RefreshSettingsL()
    {
    FUNC_LOG

    DirectoryChangedL();
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::RestoreSelectionL
// ----------------------------------------------------------------------------
//
void CFileManagerRestoreView::RestoreSelectionL()
    {
    if ( !iContainer )
        {
        return;
        }
    const CArrayFix< TInt >* items = iContainer->ListBoxSelectionIndexes();
    for ( TInt i( 0 ); i < KMaxSelection; ++i )
        {
        if ( iSelection & ( ( ( TUint64 ) 1 ) << i ) )
            {
            iContainer->ListBoxSelectItemL( i );
            }
        else
            {
            iContainer->ListBoxDeselectItem( i );
            }
        }
    UpdateCbaFromSelectionL();
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::UpdateCbaFromSelectionL
// ----------------------------------------------------------------------------
//
void CFileManagerRestoreView::UpdateCbaFromSelectionL()
    {
    if ( !iContainer )
        {
        return;
        }
    CmdCheckMarkL();
    CEikButtonGroupContainer* cba = Cba();
    TBool hasItem(iContainer->ListBoxNumberOfItems());
    const CArrayFix< TInt >* items = iContainer->ListBoxSelectionIndexes();
    if ( hasItem && items->Count() )
        {
        cba->MakeCommandVisible( EAknSoftkeyOk, ETrue );
        }
    else
        {
        cba->MakeCommandVisible( EAknSoftkeyOk, EFalse );
        }
    cba->DrawDeferred();
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreView::UpdateCbaL
// ----------------------------------------------------------------------------
//
void CFileManagerRestoreView::UpdateCbaL()
    {
    CEikButtonGroupContainer* cba = Cba();
    TBool hasItem(iContainer->ListBoxNumberOfItems());
    cba->MakeCommandVisible( EAknSoftkeyMark, hasItem );
    TBool hasSelecttionItem( hasItem && ( iContainer->ListBoxSelectionIndexesCount() ) );
    cba->MakeCommandVisible( EAknSoftkeyOk, hasSelecttionItem );
    cba->DrawDeferred();
    }
    
//  End of File