srsf/ttscustomcommands/src/nssttscustomcommandparser.cpp
branchRCL_3
changeset 19 e36f3802f733
--- /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 <e32std.h>
+#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<TLanguage> languages = *rArrayLanguagePtrPckg();
+    
+    RArray<TLanguage> 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<TLanguage> 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<TTtsStyle> voices = *rArrayTtsStylePtrPckg();
+    
+    RArray<TTtsStyle> 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<TTtsStyle> voices;
+    CleanupClosePushL( voices ); 
+    iImplementor.MttscGetSupportedVoicesL( language, voices );
+    *voiceCount = voices.Count();
+
+    CleanupStack::PopAndDestroy( );
+    }
+// End of File