profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileStruct.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:30:29 +0100
branchRCL_3
changeset 19 cd54903d48da
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:  Data structure class for profile settings.
*
*/



// CLASS HEADER
#include "CProfileStruct.h"
#include "ProfileInternal.hrh"

// EXTERNAL INCLUDES
#include <MProfileExtended.h>
#include <MProfileName.h>
#include <MProfileSetName.h>
#include <MProfileTones.h>
#include <MProfileSetTones.h>
#include <MProfileExtraTones.h>
#include <MProfileSetExtraTones.h>
#include <MProfileExtraSettings.h>
#include <MProfileSetExtraSettings.h>
#include <MProfilePttSettings.h>
#include <MProfileSetPttSettings.h>
#include <AknUtils.h> // AknTextUtils
#include <MProfileFeedbackSettings.h>
#include <MProfileSetFeedbackSettings.h>
#include <MProfile3DToneSettings.h>
#include <MProfileSet3DToneSettings.h>

#include <TProfileToneSettings.h>

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

// -----------------------------------------------------------------------------
// CProfileStruct::CProfileStruct
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CProfileStruct::CProfileStruct(  )
    {
    }
    
// -----------------------------------------------------------------------------
// CProfileStruct::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CProfileStruct* CProfileStruct::NewL( )
    {
    CProfileStruct* self = new (ELeave) CProfileStruct( );
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }
    
// -----------------------------------------------------------------------------
// CProfileStruct::ConstructL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
void CProfileStruct::ConstructL()
	{
	iRingingTone = new( ELeave ) TFileName();
	iRingingToneLine2 = new( ELeave ) TFileName();
	iVideoCallTone = new( ELeave ) TFileName();
	iMessageAlertTone = new( ELeave ) TFileName();
	iEmailAlertTone = new( ELeave ) TFileName();
	iPTTRingingTone = new( ELeave ) TFileName();
	}
	    
// Destructor
CProfileStruct::~CProfileStruct()
    {
    iContactList.Close();
    delete iRingingTone;
    delete iRingingToneLine2;
	delete iVideoCallTone;
	delete iMessageAlertTone;
    delete iEmailAlertTone;
	delete iPTTRingingTone;
    }

// -----------------------------------------------------------------------------
// CProfileStruct::LoadL
// -----------------------------------------------------------------------------
//
void CProfileStruct::LoadL( MProfileExtended* aProfile )
    {
    TArray<TContactItemId> array( aProfile->AlertForL() );
    iContactList.Reset();
    TInt count( array.Count() );
    for( TInt index( 0 ); index < count; index++ )
        {
        iContactList.Append( array[ index ] );
        }
    const MProfileName& name = aProfile->ProfileName();
    iProfileId = name.Id();
    iProfileName.Copy( name.Name() );
    AknTextUtils::DisplayTextLanguageSpecificNumberConversion( iProfileName );
    iTitleName.Copy( name.TitleName() );
    AknTextUtils::DisplayTextLanguageSpecificNumberConversion( iTitleName );
    const MProfileTones& tones = aProfile->ProfileTones();
    iRingingTone->Copy( tones.RingingTone1() );
    iRingingToneLine2->Copy( tones.RingingTone2() );
    iMessageAlertTone->Copy( tones.MessageAlertTone() );
    const TProfileToneSettings& toneSettings = tones.ToneSettings();
    iRingingType = toneSettings.iRingingType;
    iKeypadVolume = toneSettings.iKeypadVolume;
    iRingingVolume = toneSettings.iRingingVolume;
	iMediaVolume = toneSettings.iMediaVolume;
    iVibratingAlert = toneSettings.iVibratingAlert;
 iEmailVibratingAlert = toneSettings.iEmailVibratingAlert;
    iWarningAndGameTones = toneSettings.iWarningAndGameTones;
	iTextToSpeech = toneSettings.iTextToSpeech;
    const MProfileExtraTones& extra = aProfile->ProfileExtraTones();
    iEmailAlertTone->Copy( extra.EmailAlertTone() );
    iVideoCallTone->Copy( extra.VideoCallRingingTone() );
    const MProfileExtraSettings& extraSettings = aProfile->ProfileExtraSettings();
    const MProfilePttSettings& pttSettings = extraSettings.ProfilePttSettings();
    iPTTRingingTone->Copy( pttSettings.PttRingingTone() );
	iPTTStatus = pttSettings.PttStatus();

    const MProfileFeedbackSettings& feedbackSettings = extraSettings.ProfileFeedbackSettings();
    iTactileFeedback = feedbackSettings.TactileFeedback();
    iAudioFeedback = feedbackSettings.AudioFeedback();
	
    const MProfile3DToneSettings& threeDSettings = extraSettings.Profile3DToneSettings();
    i3DEffect = threeDSettings.Effect();
    i3DEcho = threeDSettings.Echo();
    }

// -----------------------------------------------------------------------------
// CProfileStruct::StoreL
// -----------------------------------------------------------------------------
//
void CProfileStruct::StoreL( MProfileExtended* aProfile )
    {
    aProfile->SetAlertForL( iContactList.Array() );
    const MProfileName& name = aProfile->ProfileName();
    TBuf<KProfileMaxProfileNameLength> profileNameHelperBuffer;
    profileNameHelperBuffer.Copy( name.Name() );
    AknTextUtils::DisplayTextLanguageSpecificNumberConversion(
            profileNameHelperBuffer );
    if( iProfileName.Compare( profileNameHelperBuffer ) )
        {
        // Store profile name only if it has changed in order to
        // preserve localisation.
        aProfile->ProfileSetName().SetNameL( iProfileName );
        iTitleName.Copy( iProfileName );
        }
    MProfileSetTones& setTones = aProfile->ProfileSetTones();
    setTones.SetRingingTone1L( *iRingingTone );
    setTones.SetRingingTone2L( *iRingingToneLine2 );
    setTones.SetMessageAlertToneL( *iMessageAlertTone );
    TProfileToneSettings& toneSettings = setTones.SetToneSettings();
    toneSettings.iRingingType = TProfileRingingType( iRingingType );
    toneSettings.iKeypadVolume = TProfileKeypadVolume( iKeypadVolume );
    toneSettings.iRingingVolume = iRingingVolume;
	toneSettings.iMediaVolume = iMediaVolume;
    toneSettings.iVibratingAlert = iVibratingAlert;
    toneSettings.iEmailVibratingAlert = iEmailVibratingAlert;
    toneSettings.iWarningAndGameTones = iWarningAndGameTones;
	toneSettings.iTextToSpeech = iTextToSpeech;
    MProfileSetExtraTones& setExtra = aProfile->ProfileSetExtraTones();
    setExtra.SetEmailAlertToneL( *iEmailAlertTone );
    setExtra.SetVideoCallRingingToneL( *iVideoCallTone );

    MProfileSetExtraSettings& setExtraSettings = aProfile->ProfileSetExtraSettings();
    MProfileSetPttSettings& setPttSettings = setExtraSettings.ProfileSetPttSettings();
	setPttSettings.SetPttRingingToneL( *iPTTRingingTone );
	TProfilePttStatus KPttStatus = TProfilePttStatus( iPTTStatus );
	setPttSettings.SetPttStatus( KPttStatus );
    
    MProfileSetFeedbackSettings& setFeedbackSettings =
        setExtraSettings.ProfileSetFeedbackSettings();
    TProfileTactileFeedback tactileFeedback = TProfileTactileFeedback( iTactileFeedback );
    TProfileAudioFeedback audioFeedback = TProfileAudioFeedback( iAudioFeedback );
    setFeedbackSettings.SetTactileFeedback( tactileFeedback );
    setFeedbackSettings.SetAudioFeedback( audioFeedback );
    
    MProfileSet3DToneSettings& set3dSettings =
        setExtraSettings.ProfileSet3DToneSettings();
    TProfile3DToneEffect threeDEffect = TProfile3DToneEffect( i3DEffect );
    TProfile3DToneEcho threeDEcho = TProfile3DToneEcho( i3DEcho );
    set3dSettings.SetEffect( threeDEffect );
    set3dSettings.SetEcho( threeDEcho );
    }

// -----------------------------------------------------------------------------
// CProfileStruct::CompareL
// -----------------------------------------------------------------------------
//
TBool CProfileStruct::CompareL( MProfileExtended* aProfile ) const
	{
    const MProfileTones& tones = aProfile->ProfileTones();
    const MProfileName& name = aProfile->ProfileName();
    const TProfileToneSettings& toneSettings = tones.ToneSettings();
    const MProfileExtraTones& extra = aProfile->ProfileExtraTones();
	const MProfileExtraSettings& extraSettings = aProfile->ProfileExtraSettings();
    const MProfilePttSettings& pttSettings = extraSettings.ProfilePttSettings();
    const MProfileFeedbackSettings& feedbackSettings = extraSettings.ProfileFeedbackSettings();    
    const MProfile3DToneSettings& threeDSettings = extraSettings.Profile3DToneSettings();
	
    TArray<TContactItemId> array( aProfile->AlertForL() );
    TInt contactArrayCount( array.Count() );
	TInt ownContactArrayCount( iContactList.Count() );

    if( ( iProfileId != name.Id() ) ||
		( iRingingTone->Compare( tones.RingingTone1() ) ) ||
	    ( iRingingToneLine2->Compare( tones.RingingTone2() ) ) ||
        ( iVideoCallTone->Compare( extra.VideoCallRingingTone() ) ) ||
		( iMessageAlertTone->Compare( tones.MessageAlertTone() ) ) ||
		( iProfileName.Compare( name.Name() ) ) ||
		( iRingingType != toneSettings.iRingingType ) ||
		( iKeypadVolume != toneSettings.iKeypadVolume ) ||
		( iRingingVolume != toneSettings.iRingingVolume ) ||
		( iMediaVolume != toneSettings.iMediaVolume ) ||
		( iVibratingAlert != toneSettings.iVibratingAlert ) ||
		( iEmailVibratingAlert != toneSettings.iEmailVibratingAlert ) ||
		( iWarningAndGameTones != toneSettings.iWarningAndGameTones ) ||
		( iTextToSpeech != toneSettings.iTextToSpeech ) ||
        ( iEmailAlertTone->Compare( extra.EmailAlertTone() ) ) ||
		( ownContactArrayCount != contactArrayCount ) ||
		( iTactileFeedback != feedbackSettings.TactileFeedback() ) ||
		( iAudioFeedback != feedbackSettings.AudioFeedback() ) ||
    	( i3DEffect != threeDSettings.Effect() ) ||
		( i3DEcho != threeDSettings.Echo() ) ||
		( iPTTRingingTone->Compare( pttSettings.PttRingingTone() ) ) ||
		( iPTTStatus != pttSettings.PttStatus() ) )
		{
		return EFalse;
		}

    for( TInt index( 0 ); index < contactArrayCount; index++ )
        {
        if( iContactList[ index ] != array[ index ] )
			{
			return EFalse;
			}
        }
	return ETrue;
	}

// End of File