diff -r cad71a31b7fc -r e36f3802f733 srsf/ttscustomcommands/src/nssttscustomcommandparser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/srsf/ttscustomcommands/src/nssttscustomcommandparser.cpp Wed Sep 01 12:29:17 2010 +0100 @@ -0,0 +1,494 @@ +/* +* Copyright (c) 2004-2007 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: +* +*/ + + +// INCLUDE FILES +#include +#include "nssttscustomcommandparser.h" +#include "nssttscustomcommandcommon.h" +#include "rubydebug.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::CTtsCustomCommandParser +// C++ constructor. +// ----------------------------------------------------------------------------- +// +CTtsCustomCommandParser::CTtsCustomCommandParser( MTtsCustomCommandImplementor& aImplementor ) : + CMMFCustomCommandParserBase( KUidInterfaceTts ), + iImplementor( aImplementor ) + { + // Nothing + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CTtsCustomCommandParser* CTtsCustomCommandParser::NewL( + MTtsCustomCommandImplementor& aImplementor ) + { + return new ( ELeave ) CTtsCustomCommandParser(aImplementor); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::~CTtsCustomCommandParser +// Destructor for CTtsCustomCommandParser class +// ----------------------------------------------------------------------------- +// +EXPORT_C CTtsCustomCommandParser::~CTtsCustomCommandParser() + { + // Nothing + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::HandleRequest +// Handles the client side request. +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::HandleRequest( TMMFMessage& aMessage ) + { + ASSERT( aMessage.Destination().InterfaceId() == KUidInterfaceTts ); + TRAPD( error, DoHandleRequestL( aMessage ) ); + if ( error ) + { + aMessage.Complete( error ); + } + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoHandleRequestL +// Decodes aMessage and calls the correct function. This function is trapped by +// HandleRequest() and the leave code, if any, sent to the client. +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoHandleRequestL( TMMFMessage& aMessage ) + { + + // Call required function to do the requested operation + switch( aMessage.Function() ) + { + case ETtsAddStyle: + DoAddStyleL( aMessage ); + break; + + case ETtsDeleteStyle: + DoDeleteStyleL( aMessage ); + break; + + case ETtsGetPosition: + DoGetPositionL( aMessage ); + break; + + case ETtsNumberOfStyles: + DoNumberOfStylesL( aMessage ); + break; + + case ETtsOpenParsedText: + DoOpenParsedTextL( aMessage ); + break; + + case ETtsSetPosition: + DoSetPositionL( aMessage ); + break; + + case ETtsStyleID: + DoStyleIDL( aMessage ); + break; + + case ETtsStyleIndex: + DoStyleIndexL( aMessage ); + break; + + case ETtsSetDefaultStyle: + DoSetDefaultStyleL( aMessage ); + break; + + case ETtsGetDefaultStyle: + DoGetDefaultStyleL( aMessage ); + break; + + case ETtsSetSpeakingRate: + DoSetSpeakingRateL( aMessage ); + break; + + case ETtsGetSpeakingRate: + DoGetSpeakingRateL( aMessage ); + break; + + case ETtsSupportedLanguages: + DoGetSupportedLanguagesL( aMessage ); + break; + + case ETtsSupportedLanguagesCount: + DoGetSupportedLanguagesCountL( aMessage ); + break; + + case ETtsSupportedVoices: + DoGetSupportedVoicesL( aMessage ); + break; + + case ETtsSupportedVoicesCount: + DoGetSupportedVoicesCountL( aMessage ); + break; + + default: + User::Leave( KErrNotSupported ); + + } // End of switch + + aMessage.Complete( KErrNone ); + + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoAddStyleL +// Calls the controller plugin to add a style. +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoAddStyleL( TMMFMessage& aMessage ) + { + TTtsStylePtrPckg stylePtrPckg; + TTtsStyleIDPtrPckg styleIDPtrPckg; + + aMessage.ReadData1FromClientL( stylePtrPckg ); + aMessage.ReadData2FromClientL( styleIDPtrPckg ); + + TTtsStyle* style = stylePtrPckg(); + TTtsStyleID* ID = styleIDPtrPckg(); + + *ID = iImplementor.MttscAddStyleL( *style ); + + RUBY_DEBUG2( "CTtsCustomCommandParser::DoAddStyleL: %d, %x", *ID, style ); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoDeleteStyleL +// Calls the controller plugin to delete a style. +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoDeleteStyleL( TMMFMessage& aMessage ) + { + TTtsStyleIDPckg styleIDPckg; + + aMessage.ReadData1FromClientL( styleIDPckg ); + + TTtsStyleID ID = styleIDPckg(); + + User::LeaveIfError( iImplementor.MttscDeleteStyle( ID ) ); + + RUBY_DEBUG1( "CTtsCustomCommandParser::DoDeleteStyleL: %d", ID ); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoGetPositionL +// Calls the controller plugin to get the synthesis position. +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoGetPositionL( TMMFMessage& aMessage ) + { + TTtsIntPtrPckg intPtrPckg; + + aMessage.ReadData1FromClientL( intPtrPckg ); + + TInt* wordIndex = intPtrPckg(); + + iImplementor.MttscGetPositionL( *wordIndex ); + + RUBY_DEBUG1( "CTtsCustomCommandParser::DoGetPositionL: %d", *wordIndex ); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoNumberOfStylesL +// Calls the controller plugin to get the number of styles. +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoNumberOfStylesL( TMMFMessage& aMessage ) + { + TTtsUintPtrPckg uintPtrPckg; + + aMessage.ReadData1FromClientL( uintPtrPckg ); + + TUint16* count = uintPtrPckg(); + + *count = iImplementor.MttscNumberOfStyles(); + + RUBY_DEBUG1( "CTtsCustomCommandParser::DoNumberOfStylesL: %d", *count ); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoOpenParsedTextL +// Calls the controller plugin to open a parsed text source. +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoOpenParsedTextL( TMMFMessage& aMessage ) + { + TTtsParsedTextPckg parsedTextPckg; + + aMessage.ReadData1FromClientL( parsedTextPckg ); + + CTtsParsedText* parsedText = parsedTextPckg().iParsedText; + + iImplementor.MttscOpenParsedTextL( *parsedText ); + + RUBY_DEBUG1( "CTtsCustomCommandParser::DoOpenParsedTextL: %x", parsedText ); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoSetPositionL +// Calls the controller plugin to set the synthesis position. +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoSetPositionL( TMMFMessage& aMessage ) + { + TTtsIntPckg intPckg; + + aMessage.ReadData1FromClientL( intPckg ); + + TInt index = intPckg(); + + iImplementor.MttscSetPositionL( index ); + + RUBY_DEBUG1( "CTtsCustomCommandParser::DoSetPositionL: %d", index ); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoStyleIDL +// Calls the controller plugin to get the style based on ID. +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoStyleIDL( TMMFMessage& aMessage ) + { + TTtsStyleIDPckg styleIDPckg; + TTtsStylePtrPckg stylePckg; + + aMessage.ReadData1FromClientL( styleIDPckg ); + aMessage.ReadData2FromClientL( stylePckg ); + + TTtsStyleID ID = styleIDPckg(); + TTtsStyle* style = stylePckg(); + + style = &( iImplementor.MttscStyleL( ID ) ); + + RUBY_DEBUG2( "CTtsCustomCommandParser::DoStyleIDL: %d, %x", ID, style ); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoStyleIndexL +// Calls the controller plugin to get the style based on ID. +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoStyleIndexL( TMMFMessage& aMessage ) + { + TTtsUintPckg uintPckg; + TTtsStylePtrPckg stylePckg; + + aMessage.ReadData1FromClientL( uintPckg ); + aMessage.ReadData2FromClientL( stylePckg ); + + TUint16 index = uintPckg(); + TTtsStyle* style = stylePckg(); + + style = &( iImplementor.MttscStyleL( index ) ); + + RUBY_DEBUG2( "CTtsCustomCommandParser::DoStyleIndexL: %d, %x", index, style ); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoSetDefaultStyleL +// Calls the controller plugin to set the default style +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoSetDefaultStyleL( TMMFMessage& aMessage ) + { + TTtsStylePtrPckg stylePtrPckg; + + aMessage.ReadData1FromClientL( stylePtrPckg ); + + TTtsStyle* style = stylePtrPckg(); + + iImplementor.MttscSetDefaultStyleL( *style ); + + RUBY_DEBUG0( "CTtsCustomCommandParser::DoSetDefaultStyleL" ); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoGetDefaultStyleL +// Calls the controller plugin to get the default style +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoGetDefaultStyleL( TMMFMessage& aMessage ) + { + TTtsStylePtrPckg stylePtrPckg; + + aMessage.ReadData1FromClientL( stylePtrPckg ); + + TTtsStyle* style = stylePtrPckg(); + + *style = iImplementor.MttscDefaultStyleL(); + + RUBY_DEBUG1( "CTtsCustomCommandParser::DoGetDefaultStyleL: %x", style ); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoSetSpeakingRateL +// Calls the controller plugin to set the speaking rate +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoSetSpeakingRateL( TMMFMessage& aMessage ) + { + TTtsIntPckg intPckg; + + aMessage.ReadData1FromClientL( intPckg ); + + TInt rate = intPckg(); + + iImplementor.MttscSetSpeakingRateL( rate ); + + RUBY_DEBUG1( "CTtsCustomCommandParser::DoSetSpeakingRateL: %d", rate ); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoGetSpeakingRateL +// Calls the controller plugin to get the current speaking rate setting +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoGetSpeakingRateL( TMMFMessage& aMessage ) + { + TTtsIntPtrPckg intPtrPckg; + + aMessage.ReadData1FromClientL( intPtrPckg ); + + TInt* rate = intPtrPckg(); + + *rate = iImplementor.MttscSpeakingRateL(); + + RUBY_DEBUG1( "CTtsCustomCommandParser::DoGetSpeakingRateL: %d", *rate ); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoGetSupportedLanguagesL +// Calls the controller plugin to get the supported languages +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoGetSupportedLanguagesL( TMMFMessage& aMessage ) + { + TTtsRArrayLanguagePtrPckg rArrayLanguagePtrPckg; + + aMessage.ReadData1FromClientL( rArrayLanguagePtrPckg ); + + RArray languages = *rArrayLanguagePtrPckg(); + + RArray tmp; + CleanupClosePushL( tmp ); + + iImplementor.MttscGetSupportedLanguagesL( tmp ); + + if ( languages.Count() == tmp.Count() ) + { + for ( TInt i( 0 ); i < languages.Count(); i++ ) + { + languages[i] = tmp[i]; + } + } + CleanupStack::PopAndDestroy( &tmp ); + + RUBY_DEBUG1( "CTtsCustomCommandParser::DoGetSupportedLanguagesL: Number of languages %d", + languages.Count() ); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoGetSupportedLanguagesCountL +// Calls the controller plugin to get the number of supported languages +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoGetSupportedLanguagesCountL( TMMFMessage& aMessage ) + { + TTtsIntPtrPckg intPtrPckg; + + aMessage.ReadData1FromClientL( intPtrPckg ); + + TInt* languageCount = intPtrPckg(); + + RArray languages; + CleanupClosePushL( languages ); + iImplementor.MttscGetSupportedLanguagesL( languages ); + *languageCount = languages.Count(); + + CleanupStack::PopAndDestroy(); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoGetSupportedVoicesL +// Calls the controller plugin to get the voices of specified language +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoGetSupportedVoicesL( TMMFMessage& aMessage ) + { + TTtsLanguagePckg languagePckg; + TTtsRArrayTtsStylePtrPckg rArrayTtsStylePtrPckg; + + aMessage.ReadData1FromClientL( languagePckg ); + aMessage.ReadData2FromClientL( rArrayTtsStylePtrPckg ); + + TLanguage language = languagePckg(); + RArray voices = *rArrayTtsStylePtrPckg(); + + RArray tmp; + CleanupClosePushL( tmp ); + + iImplementor.MttscGetSupportedVoicesL( language, tmp ); + + if ( voices.Count() == tmp.Count() ) + { + for ( TInt i( 0 ); i < voices.Count(); i++ ) + { + voices[i] = tmp[i]; + } + } + CleanupStack::PopAndDestroy( &tmp ); + + RUBY_DEBUG2( "CTtsCustomCommandParser::DoGetSupportedVoicesL: %d voices for language %d", + voices.Count(), (TInt)language ); + } + +// ----------------------------------------------------------------------------- +// CTtsCustomCommandParser::DoGetSupportedVoicesCountL +// Calls the controller plugin to get the number of voices of specified language +// ----------------------------------------------------------------------------- +// +void CTtsCustomCommandParser::DoGetSupportedVoicesCountL( TMMFMessage& aMessage ) + { + TTtsLanguagePckg languagePckg; + TTtsIntPtrPckg intPtrPckg; + + aMessage.ReadData1FromClientL( languagePckg ); + aMessage.ReadData2FromClientL( intPtrPckg ); + + TLanguage language = languagePckg(); + TInt* voiceCount = intPtrPckg(); + + RArray voices; + CleanupClosePushL( voices ); + iImplementor.MttscGetSupportedVoicesL( language, voices ); + *voiceCount = voices.Count(); + + CleanupStack::PopAndDestroy( ); + } +// End of File