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

/*
* 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:  Restore settings
*
*/



// INCLUDE FILES
#include <StringLoader.h>
#include <filemanagerengine.rsg>
#include <AknUtils.h>
#include "FileManagerEngine.hrh"
#include "CFileManagerEngine.h"
#include "CFileManagerRestoreSettings.h"
#include "CFileManagerBackupSettings.h"
#include "TFileManagerDriveInfo.h"
#include "FileManagerPrivateCRKeys.h"
#include "FileManagerDebug.h"


// CONSTANTS
_LIT( KDateFormat1, "%1" );
_LIT( KDateFormat2, "%2" );
_LIT( KDateFormat3, "%3" );
_LIT( KTimeFormatBefore, " %-B %J:%T" );
_LIT( KTimeFormatAfter, " %J:%T %+B" );
_LIT( KEmptyChar, " " );
const TUint KSecondSeparator = 1;
const TUint KThirdSeparator = 2;
const TInt KTimeStrMax = 20;
_LIT( KSeparator, "\t" );
const TInt KSeparatorSpace = 9;
_LIT( KIconFormat, "%d" );
const TInt KIconIdStrMax = 3;
_LIT( KTimeSeparatorPlaceHolder, ":" );
const TInt KHourMinSeparator = 1;


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

// ----------------------------------------------------------------------------
// CFileManagerRestoreSettings::CFileManagerRestoreSettings
// ----------------------------------------------------------------------------
//
CFileManagerRestoreSettings::CFileManagerRestoreSettings(
        CFileManagerEngine& aEngine ) :
    iEngine( aEngine )
    {
    FUNC_LOG
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreSettings::~CFileManagerRestoreSettings
// ----------------------------------------------------------------------------
//
CFileManagerRestoreSettings::~CFileManagerRestoreSettings()
    {
    FUNC_LOG

    iList.ResetAndDestroy();
    iList.Close();
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreSettings::NewL
// ----------------------------------------------------------------------------
//
CFileManagerRestoreSettings* CFileManagerRestoreSettings::NewL(
        CFileManagerEngine& aEngine )
    {
    CFileManagerRestoreSettings* self =
        new ( ELeave ) CFileManagerRestoreSettings(
            aEngine );
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreSettings::ConstructL
// ----------------------------------------------------------------------------
//
void CFileManagerRestoreSettings::ConstructL()
    {
    FUNC_LOG

    RefreshL();
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreSettings::SetSelection
// ----------------------------------------------------------------------------
//
EXPORT_C void CFileManagerRestoreSettings::SetSelection(
        const TUint64& aSelection )
    {
    iSelection = aSelection;
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreSettings::RefreshL
// ----------------------------------------------------------------------------
//
EXPORT_C void CFileManagerRestoreSettings::RefreshL()
    {
    FUNC_LOG
    
    iList.ResetAndDestroy();

    RArray< TInfo > infoArray;
    CleanupClosePushL( infoArray );
    iEngine.GetRestoreInfoArrayL( infoArray );
 
    TInt count( infoArray.Count() );
    TUint32 mask( EFileManagerBackupContentFirst);
    while ( mask <= EFileManagerBackupContentLast )
        {
        for ( TInt i( 0 ); i < count; ++i )
            {
            TInfo& info( infoArray[ i ] );
            if ( info.iContent & mask )
                {
                CEntry* entry = CreateEntryLC( info );
                iList.AppendL( entry );
                CleanupStack::Pop( entry );
                }
            }
        mask <<= 1;
        }
    CleanupStack::PopAndDestroy( &infoArray );

    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreSettings::CEntry::MdcaCount
// ----------------------------------------------------------------------------
//
TInt CFileManagerRestoreSettings::MdcaCount() const
    {
    return iList.Count();
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreSettings::CEntry::MdcaPoint
// ----------------------------------------------------------------------------
//
TPtrC CFileManagerRestoreSettings::MdcaPoint( TInt aIndex ) const
    {
    return TPtrC( *( iList[ aIndex ]->iText ) );
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreSettings::CEntry::CreateEntryLC
// ----------------------------------------------------------------------------
//
CFileManagerRestoreSettings::CEntry*
    CFileManagerRestoreSettings::CreateEntryLC(
        const TInfo& aInfo )
    {
    TBuf< KIconIdStrMax > iconStr;
    CEntry* entry = new ( ELeave ) CEntry;
    CleanupStack::PushL( entry );

    TInt titleId( CFileManagerBackupSettings::ContentToTextId( aInfo.iContent ) );
    HBufC* title = StringLoader::LoadLC( titleId );
    HBufC* timeAndDate = DateTimeStringLC( aInfo.iTime );
    entry->iText = HBufC::NewL(
        title->Length() + timeAndDate->Length() + KSeparatorSpace );

    // "0\tFirstLabel\tSecondLabel\t0"
    TPtr ptr( entry->iText->Des() );
    iconStr.Copy( KIconFormat );
    iconStr.Format( KIconFormat, EIconCheckBoxOff );
    ptr.Append( iconStr );
    ptr.Append( KSeparator );
    ptr.Append( *title );
    ptr.Append( KSeparator );
    ptr.Append( *timeAndDate );
    ptr.Append( KSeparator );

    TUint32 drvState( 0 );
    if ( iEngine.DriveState( drvState, aInfo.iDrive ) == KErrNone )
        {
        TInt icon( KErrNotFound );
        if ( drvState & TFileManagerDriveInfo::EDriveUsbMemory )
            {
            icon = EIconUsbMemory;
            }
        else if ( drvState & TFileManagerDriveInfo::EDriveRemovable )
            {
            icon = EIconMemoryCard;
            }
        if ( icon >= 0 )
            {
            iconStr.Copy( KIconFormat );
            iconStr.Format( KIconFormat, icon );
            ptr.Append( iconStr );
            }
        }
    entry->iInfo = aInfo;

    CleanupStack::PopAndDestroy( timeAndDate );
    CleanupStack::PopAndDestroy( title );
    return entry;
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreSettings::CEntry::~CEntry
// ----------------------------------------------------------------------------
//
CFileManagerRestoreSettings::CEntry::~CEntry()
    {
    delete iText;
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreSettings::GetSelectionL
// ----------------------------------------------------------------------------
//
void CFileManagerRestoreSettings::GetSelectionL(
        RArray< TInfo >& aInfoArray ) const
    {
    CleanupClosePushL( aInfoArray );
    aInfoArray.Reset();

    TInt count( iList.Count() );

    for ( TInt i( 0 ); i < count; ++i )
        {
        if ( ( ( ( TUint64 ) 1 ) << i ) & iSelection )
            {
            aInfoArray.AppendL( iList[ i ]->iInfo );
            }
        }
    CleanupStack::Pop( &aInfoArray );
    }

// ----------------------------------------------------------------------------
// CFileManagerRestoreSettings::DateTimeStringLC
// ----------------------------------------------------------------------------
//
HBufC* CFileManagerRestoreSettings::DateTimeStringLC( const TTime& aTime )
    {
    TBuf< KTimeStrMax > dateStr;
    TBuf< KTimeStrMax > dateStrFormat;

    // Localized date separator form
    TLocale local;
    dateStrFormat.Append( KDateFormat1 );
    dateStrFormat.Append( local.DateSeparator( KSecondSeparator ) );
    dateStrFormat.Append( KDateFormat2 );
    dateStrFormat.Append( local.DateSeparator( KThirdSeparator ) );
    dateStrFormat.Append( KDateFormat3 );
    aTime.FormatL( dateStr, dateStrFormat );

    TBuf< KTimeStrMax > timeFormatStr;
    if ( local.AmPmSymbolPosition() == ELocaleBefore )
        {
        timeFormatStr.Copy( KTimeFormatBefore );
        }
    else
        {
        timeFormatStr.Copy( KTimeFormatAfter );
        }

    TChar timeSeparator( local.TimeSeparator( KHourMinSeparator ) );
    AknTextUtils::ReplaceCharacters(
        timeFormatStr, KTimeSeparatorPlaceHolder, timeSeparator );
    TBuf< KTimeStrMax > timeStr;
    aTime.FormatL( timeStr, timeFormatStr );

    HBufC* buf = HBufC::NewLC( dateStr.Length() +
                               KEmptyChar().Length() +
                               timeStr.Length() );
    TPtr ptrBuffer( buf->Des() );
    ptrBuffer.Append( timeStr );
    ptrBuffer.Append( KEmptyChar );
    ptrBuffer.Append( dateStr );

    return buf;
    }

// End of File