eventsui/eventsengine/src/evttoneaction.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:31:27 +0100
branchRCL_3
changeset 18 870918037e16
parent 0 522cd55cc3d7
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 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:  Tone class definition.
*
*/


// System Includes
#include <e32math.h>
#include <s32mem.h>

// User Includes
#include "evttoneaction.h"
#include "evtdebug.h"

// ================ Member funtions for CEvtToneAction class ======================

// ---------------------------------------------------------------------------
// CEvtToneAction::CEvtToneAction
// ---------------------------------------------------------------------------
//
EXPORT_C CEvtToneAction::CEvtToneAction():
	iToneLoop( EFalse )
    {    
    }
    
// ---------------------------------------------------------------------------
// CEvtToneAction::~CEvtToneAction
// ---------------------------------------------------------------------------
//
EXPORT_C CEvtToneAction::~CEvtToneAction()
    {
    delete iFileName;
    } 
    
// ---------------------------------------------------------------------------
// CEvtToneAction::NewL
// ---------------------------------------------------------------------------
//
EXPORT_C CEvtToneAction* CEvtToneAction::NewL()
    {
	CEvtToneAction* self = NewLC( );
	CleanupStack::Pop( self );
	return self;
    }

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

// ---------------------------------------------------------------------------
// CEvtToneAction::ConstructL
// ---------------------------------------------------------------------------
//
EXPORT_C void CEvtToneAction::ConstructL()
    {
    // Allocate the Null string by default
    iFileName = KNullDesC().AllocL();
    } 

// ---------------------------------------------------------------------------
// CEvtToneAction::Tone
// ---------------------------------------------------------------------------
//

EXPORT_C TPtrC CEvtToneAction::FileName() const
    {
    return iFileName->Des();
    } 
    
// ---------------------------------------------------------------------------
// CEvtToneAction::SetToneL
// ---------------------------------------------------------------------------
//

EXPORT_C void CEvtToneAction::SetFileNameL( const TDesC& aFileName )
    {
    delete iFileName;
	iFileName = NULL;
    iFileName = aFileName.AllocL();
    } 
    
// ---------------------------------------------------------------------------
// CEvtToneAction::ToneLoop
// ---------------------------------------------------------------------------
//

EXPORT_C TBool CEvtToneAction::ToneLoop() const
    {
    return iToneLoop;
    } 
    
// ---------------------------------------------------------------------------
// CEvtToneAction::SetToneLoop
// ---------------------------------------------------------------------------
//

EXPORT_C void CEvtToneAction::SetToneLoop( const TBool aToneLoop )
    {
    iToneLoop = aToneLoop;
    } 
    
// ---------------------------------------------------------------------------
// CEvtToneAction::ExternalizeL
// ---------------------------------------------------------------------------
//
EXPORT_C void CEvtToneAction::ExternalizeL( CEvtAction&   aAction )
    {
    CBufFlat* buffer = CBufFlat::NewL( TotalSize() );
    CleanupStack::PushL( buffer );
    
    // Allocate a common buffer for both read and write streams
    RBufWriteStream writestream( *buffer, 0 );
    
    // Externalize from CEvtToneAction
    ExternalizeL( writestream );
    
    // Covert the 8 bit Stream to 16 bit descriptor.
    TPtr8 bufPtr = buffer->Ptr(0);
    TPtrC display;
    display.Set( (TUint16*)bufPtr.Ptr(), (bufPtr.Length()>>1) );

    // Internalize from CEvtAction
    aAction.SetActionL( display );
    
    CleanupStack::PopAndDestroy( buffer );
    } 
    
// ---------------------------------------------------------------------------
// CEvtToneAction::InternalizeL
// ---------------------------------------------------------------------------
//
EXPORT_C void CEvtToneAction::InternalizeL( CEvtAction&   aAction )
    {
    // Internalize from CEvtAction
    TPtrC ptr = aAction.Action( );
    
    // Create a buffer of ptr's size granularity
    CBufFlat* buffer = CBufFlat::NewL( ptr.Size() );
    CleanupStack::PushL( buffer );
	
	// Insert the action String into buffer
    buffer->InsertL( 0, (TAny*)ptr.Ptr(), (ptr.Length()<<1) );
    
    // Allocate a common buffer for both read and write streams
    RBufReadStream readstream( *buffer, 0 );
        
    // Internalize from CEvtToneAction
    InternalizeL( readstream );
    
    CleanupStack::PopAndDestroy( buffer );
    } 

// ---------------------------------------------------------------------------
// CEvtToneAction::ExternalizeL
// ---------------------------------------------------------------------------
//
void CEvtToneAction::ExternalizeL( RWriteStream&   aWriteStream )
    {
    // Externalize will happen in the order of
    // - Action Type
    // - Tone String length
    // - Tone String
    // - Tone Loop
    TInt length = iFileName->Length();
    aWriteStream.WriteUint8L( EAlarm );
    aWriteStream.WriteUint32L( length );
    
    // Avoid WriteL, if the Tone String length is 0.
    if( 0 != length )
        aWriteStream.WriteL( iFileName->Des(), length );
    aWriteStream.WriteUint8L( iToneLoop );
    
    } 
    
// ---------------------------------------------------------------------------
// CEvtToneAction::InternalizeL
// ---------------------------------------------------------------------------
//
void CEvtToneAction::InternalizeL( RReadStream&    aReadStream )
    {
    // Internalize will happen in the order of
    // - Action Type
    // - Tone String length
    // - Tone String
    // - Tone Loop
    TEvtActionType type;    
    type = static_cast<TEvtActionType>(aReadStream.ReadUint8L());
    
    // Leave if the Action type is not EAlarm
    if( EAlarm != type )
        User::Leave( KErrArgument );
    
    // Get the length of tone String.
    TInt length = aReadStream.ReadUint32L();
    if( iFileName )
        delete iFileName;
    
    // Avoid ReadL, if the Tone String length is 0.
    if( 0 != length )
        {
        iFileName = HBufC::NewL( length );
        TPtr actn( iFileName->Des() );
    
	    // ReadL can leave if we try to read any intermediate 8 bit 
	    // descriptor. So we can ignore it.
        TRAP_IGNORE( aReadStream.ReadL(actn, length));
        }
    else
        {
        iFileName = KNullDesC().AllocL();
        }
    
    // Get the Toon Loop
    iToneLoop = static_cast<TBool>( aReadStream.ReadUint8L() );
    } 
    
// ---------------------------------------------------------------------------
// CEvtToneAction::TotalSize
// ---------------------------------------------------------------------------
//
TInt CEvtToneAction::TotalSize( )
    {
    TInt size=0;
    size += sizeof( TUint8 );                   // Type Size
    size += sizeof( TUint32 );                  // Tone Length Size
    size += iFileName->Des().MaxSize();       // Tone Size
    size += sizeof( TUint8 );                   // Loop Size
    
	return size;
    } 

// End of File