profilesservices/ProfileEngine/EngSrc/CProfileNameImpl.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:20:44 +0100
branchRCL_3
changeset 25 7e0eff37aedb
parent 24 8ee96d21d9bf
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2002 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:  Implementation of the CProfileNameImpl.
*
*/



// INCLUDE FILES
#include "CProfileNameImpl.h"
#include <s32strm.h>
#include <MProfilesNamesArray.h>
#include <ProfileEngineConstants.h>
#include <centralrepository.h>
#include "ProfileEnginePrivateCRKeys.h"
#include "ProfileEngUtils.h"

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

// -----------------------------------------------------------------------------
// CProfileNameImpl::CProfileNameImpl
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CProfileNameImpl::CProfileNameImpl(
    TInt aProfileId )
    : iId( aProfileId )
    {
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CProfileNameImpl::ConstructL(
    const TDesC& aProfileName )
    {
    iProfileName = aProfileName.AllocL();
    iShortName = NULL;
    iNaviName = NULL;
    iTitleName = NULL;
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CProfileNameImpl::ConstructL(
    const CProfileNameImpl& aProfileNameImpl )
    {
    iId = aProfileNameImpl.iId;
    iProfileName = aProfileNameImpl.iProfileName->AllocL();
    if( aProfileNameImpl.iShortName &&
        aProfileNameImpl.iNaviName &&
        aProfileNameImpl.iTitleName )
        {
        iShortName = aProfileNameImpl.iShortName->AllocL(); 
        iNaviName = aProfileNameImpl.iNaviName->AllocL(); 
        iTitleName = aProfileNameImpl.iTitleName->AllocL(); 
        }
    else
        {
        iShortName = NULL;
        iNaviName = NULL;
        iTitleName = NULL;
        iNameChanged = ETrue;
        }
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CProfileNameImpl::ConstructL(
    const TDesC& aProfileName,
    const TDesC& aShortName,
    const TDesC& aNaviName,
    const TDesC& aTitleName )
    {
    iProfileName = aProfileName.AllocL();
    iShortName = aShortName.AllocL();
    iNaviName = aNaviName.AllocL();
    iTitleName = aTitleName.AllocL();
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CProfileNameImpl* CProfileNameImpl::NewL()
    {
    CProfileNameImpl* self = NewLC( 0, KNullDesC );

    CleanupStack::Pop();

    return self;
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::NewLC
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CProfileNameImpl* CProfileNameImpl::NewLC(
    TInt aProfileId,
    const TDesC& aProfileName )
    {
    CProfileNameImpl* self = new ( ELeave ) CProfileNameImpl( aProfileId );
    CleanupStack::PushL( self );
    self->ConstructL( aProfileName );
    return self;
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::NewLC
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CProfileNameImpl* CProfileNameImpl::NewLC(
    TInt aProfileId,
    const TDesC& aProfileName,
    const TDesC& aShortName,
    const TDesC& aNaviName,
    const TDesC& aTitleName )
    {
    CProfileNameImpl* self = new ( ELeave ) CProfileNameImpl( aProfileId );
    CleanupStack::PushL( self );
    self->ConstructL( aProfileName, aShortName, aNaviName, aTitleName );
    return self;
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::NewLC
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CProfileNameImpl* CProfileNameImpl::NewLC(
    const CProfileNameImpl& aProfileNameImpl )
    {
    CProfileNameImpl* self = 
        new ( ELeave ) CProfileNameImpl( aProfileNameImpl.iId );
    CleanupStack::PushL( self );
    self->ConstructL( aProfileNameImpl );
    return self;
    }

// Destructor
CProfileNameImpl::~CProfileNameImpl()
    {
    delete iTitleName;
    delete iNaviName;
    delete iShortName;
    delete iProfileName;
    }


// -----------------------------------------------------------------------------
// CProfileNameImpl::IsProfileNameChanged
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TBool CProfileNameImpl::IsProfileNameChanged() const
    {
    return iNameChanged;
    }

// -----------------------------------------------------------------------------
// CProfileImpl::SetLocalizedProfileNameL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CProfileNameImpl::SetLocalizedProfileNameL(
    const MProfilesNamesArray& aNameArray )
    {
    SetNameInternalL( iProfileName,
                      aNameArray.MdcaPoint( aNameArray.FindById( iId ) ) );
    SetNameInternalL( iShortName,
            aNameArray.ProfileName( aNameArray.FindById( iId ) )->ShortName() );
    SetNameInternalL( iNaviName,
            aNameArray.ProfileName( aNameArray.FindById( iId ) )->NaviName() );
    SetNameInternalL( iTitleName,
            aNameArray.ProfileName( aNameArray.FindById( iId ) )->TitleName() );
    iNameChanged = EFalse;
    }

// -----------------------------------------------------------------------------
// CProfileImpl::SetLocalizedProfileNameL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CProfileNameImpl::SetLocalizedProfileNameL(
    const CProfileNameImpl& aNameImpl, const TDesC& aUniquePart )
    {
    TBuf<KProfileMaxNameLength> nameBuf;

    nameBuf.Copy( aNameImpl.Name() );
    nameBuf.Append( aUniquePart );
    SetNameInternalL( iProfileName, nameBuf );

    nameBuf.Copy( aNameImpl.ShortName() );
    nameBuf.Append( aUniquePart );
    SetNameInternalL( iShortName, nameBuf );

    nameBuf.Copy( aNameImpl.NaviName() );
    nameBuf.Append( aUniquePart );
    SetNameInternalL( iNaviName, nameBuf );

    nameBuf.Copy( aNameImpl.TitleName() );
    nameBuf.Append( aUniquePart );
    SetNameInternalL( iTitleName, nameBuf );

    iNameChanged = EFalse;
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::InternalizeL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CProfileNameImpl::InternalizeL( CRepository& aCenRep, TInt aProfileId )
    {
    delete iShortName;
    iShortName = NULL;

    delete iNaviName;
    iNaviName = NULL;

    delete iTitleName;
    iTitleName = NULL;

    TInt tmp( 0 );
    User::LeaveIfError(
            aCenRep.Get( ProfileEngUtils::ResolveKey(
            KProEngNameChanged, aProfileId ), tmp ) );

    TBuf< KProfileMaxNameLength > nameBuf;
    User::LeaveIfError(
            aCenRep.Get( ProfileEngUtils::ResolveKey(
            KProEngProfileName, aProfileId ), nameBuf ) );
    HBufC* tmpName = nameBuf.AllocL();
    delete iProfileName;

    iId = aProfileId;
    iProfileName = tmpName;
    iNameChanged = tmp;
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::ExternalizeL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CProfileNameImpl::ExternalizeL( CRepository& aCenRep ) const
    {
    if( iNameChanged )
        {
        User::LeaveIfError(
                aCenRep.Set( ProfileEngUtils::ResolveKey(
                        KProEngNameChanged, iId ),
                        iNameChanged ) );
        User::LeaveIfError(
                aCenRep.Set( ProfileEngUtils::ResolveKey(
                        KProEngProfileName, iId ),
                        *iProfileName ) );
        }
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::SetNameL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CProfileNameImpl::SetNameL(
    const TDesC& aName )
    {
    SetNameInternalL( iProfileName, aName );
    // User changed the name, iShortName,iNaviName,iTitleName are not needed
    // anymore:
    delete iShortName;
    iShortName = NULL;

    delete iNaviName;
    iNaviName = NULL;

    delete iTitleName;
    iTitleName = NULL;

    iNameChanged = ETrue;
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::Name
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
const TDesC& CProfileNameImpl::Name() const
    {
    return *iProfileName;
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::Id
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CProfileNameImpl::Id() const
    {
    return iId;
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::ShortName
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
const TDesC& CProfileNameImpl::ShortName() const
    {
    if( iShortName )
        {
        return *iShortName;
        }
    return *iProfileName;
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::NaviName
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
const TDesC& CProfileNameImpl::NaviName() const
    {
    if( iNaviName )
        {
        return *iNaviName;
        }
    return *iProfileName;
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::TitleName
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
const TDesC& CProfileNameImpl::TitleName() const
    {
    if( iTitleName )
        {
        return *iTitleName;
        }
    return *iProfileName;
    }

// -----------------------------------------------------------------------------
// CProfileNameImpl::SetNameInternalL
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CProfileNameImpl::SetNameInternalL( HBufC*& aNameFieldRef,
    const TDesC& aName )
    {
    HBufC* tmp = aName.Left( KProfileMaxNameLength ).AllocL();
    delete aNameFieldRef;
    aNameFieldRef = tmp;
    }

//  End of File