srsf/speechsynthesis/tsrc/texttospeech/src/texttospeechsettingitemlistview.cpp
branchRCL_3
changeset 19 e36f3802f733
parent 0 bf1d17376201
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srsf/speechsynthesis/tsrc/texttospeech/src/texttospeechsettingitemlistview.cpp	Wed Sep 01 12:29:17 2010 +0100
@@ -0,0 +1,335 @@
+/*
+* Copyright (c) 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 <aknnavide.h> 
+#include <texttospeech.rsg>
+
+#include "texttospeechappui.h"
+#include "texttospeechengine.h"
+#include "texttospeechsettingitemlistview.h"
+#include "texttospeechsettingitemlist.h"
+#include "texttospeechsettingitemlistsettings.h"
+
+#include "texttospeech.hrh"
+
+const TInt KMaxVolumeInUI = 10;
+
+/**
+ * First phase of Symbian two-phase construction. Should not contain any
+ * code that could leave.
+ */
+CTextToSpeechSettingItemListView::CTextToSpeechSettingItemListView()
+    {
+    }
+    
+/** 
+ * The view's destructor removes the container from the control
+ * stack and destroys it.
+ */
+CTextToSpeechSettingItemListView::~CTextToSpeechSettingItemListView()
+    {
+    }
+
+/**
+ * Symbian two-phase constructor.
+ * This creates an instance then calls the second-phase constructor
+ * without leaving the instance on the cleanup stack.
+ * @return new instance of CTextToSpeechSettingItemListView
+ */
+CTextToSpeechSettingItemListView* CTextToSpeechSettingItemListView::NewL()
+    {
+    CTextToSpeechSettingItemListView* self = 
+        CTextToSpeechSettingItemListView::NewLC();
+        
+    CleanupStack::Pop( self );
+    
+    return self;
+    }
+
+/**
+ * Symbian two-phase constructor.
+ * This creates an instance, pushes it on the cleanup stack,
+ * then calls the second-phase constructor.
+ * @return new instance of CTextToSpeechSettingItemListView
+ */
+CTextToSpeechSettingItemListView* CTextToSpeechSettingItemListView::NewLC()
+    {
+    CTextToSpeechSettingItemListView* self = 
+        new (ELeave) CTextToSpeechSettingItemListView();
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    
+    return self;
+    }
+
+/**
+ * Second-phase constructor for view.  
+ * Initialize contents from resource.
+ */ 
+void CTextToSpeechSettingItemListView::ConstructL()
+    {
+    BaseConstructL( 
+        R_TEXT_TO_SPEECH_SETTING_ITEM_LIST_TEXT_TO_SPEECH_SETTING_ITEM_LIST_VIEW );        
+    }
+    
+/**
+ * @return The UID for this view
+ */
+TUid CTextToSpeechSettingItemListView::Id() const
+    {
+    return TUid::Uid( ETextToSpeechSettingItemListViewId );
+    }
+
+/**
+ * Handle a command for this view (override)
+ * @param aCommand command id to be handled
+ */
+void CTextToSpeechSettingItemListView::HandleCommandL( TInt aCommand )
+    {   
+    TBool commandHandled( ETrue );
+    CAknVolumeControl* control( NULL );
+    
+    switch ( aCommand )
+        { // code to dispatch to the AknView's menu and CBA commands is generated here
+        
+        case ETextToSpeechSettingItemListViewMenuItem1Command:
+        case EAknSoftkeyChange:
+        
+            iTextToSpeechSettingItemList->ChangeSelectedItemL();
+        
+            break;
+        
+        case ETextToSpeechSettingItemListViewSynthesiseMenuItemCommand:
+            
+            iEngine->SetSpeakingRateL( iSettings->Slider1() );
+            iEngine->SetVoiceL( iSettings->iVoice ); 
+            iEngine->InitAndPlayText( iSettings->Edit1() ); 
+            
+            break;
+            
+        case ETextToSpeechSettingItemListViewExitMenuItemCommand:
+        
+            AppUi()->HandleCommandL( EEikCmdExit );
+            
+            break;
+        
+        case EKeyIncVolume:
+            
+            iEngine->SetVolumeL( iSettings->iVolume + 
+                                 iSettings->iMaxVolume / KMaxVolumeInUI );
+            
+            iSettings->iVolume = iSettings->iVolume + 
+                                 iSettings->iMaxVolume / KMaxVolumeInUI;
+            
+            control = static_cast< CAknVolumeControl* >( 
+                        iVolumeControl->DecoratedControl() );
+            
+            control->SetValue( KMaxVolumeInUI * 
+                               iSettings->iVolume / iSettings->iMaxVolume );
+            
+            break;
+            
+        case EKeyDecVolume:
+            
+            iEngine->SetVolumeL( iSettings->iVolume - 
+                                 iSettings->iMaxVolume / KMaxVolumeInUI );
+            
+            iSettings->iVolume = iSettings->iVolume - 
+                                 iSettings->iMaxVolume / KMaxVolumeInUI;
+            
+            control = static_cast< CAknVolumeControl* >( 
+                        iVolumeControl->DecoratedControl() );
+                        
+            control->SetValue( KMaxVolumeInUI * 
+                               iSettings->iVolume / iSettings->iMaxVolume );
+            
+            break;
+            
+        default:
+            
+            commandHandled = EFalse;
+            
+            break;
+            
+        }
+        
+    if ( !commandHandled && aCommand == EAknSoftkeyExit )
+        {
+        AppUi()->HandleCommandL( EEikCmdExit );
+        }
+    }
+
+/**
+ * Handles Navidecorator events (Arrow left and arrow right)
+ * @param aEventID ID of event to be handled
+ */
+void CTextToSpeechSettingItemListView::HandleNaviDecoratorEventL( TInt aEventID )
+    {
+    CAknVolumeControl* control( NULL );
+    
+    switch ( aEventID )
+        {
+        case EAknNaviDecoratorEventRightTabArrow: 
+            
+            HandleCommandL( EKeyIncVolume );
+            
+            break;
+            
+        case EAknNaviDecoratorEventLeftTabArrow:
+            
+            HandleCommandL( EKeyDecVolume );
+            
+            break;
+            
+        case EAknNaviDecoratorEventNaviLabel:
+            
+            control = static_cast< CAknVolumeControl* >( 
+                        iVolumeControl->DecoratedControl() );
+    
+            if ( control )
+                {
+                TInt value = control->Value();
+
+                iEngine->SetVolumeL( value * 
+                                     iSettings->iMaxVolume / KMaxVolumeInUI );
+                
+                iSettings->iVolume = value * 
+                                     iSettings->iMaxVolume / KMaxVolumeInUI ;
+                }
+                
+            break;
+
+        }
+    }
+    
+/**
+ * Activate view
+ * @param aPrevViewId 
+ * @param aCustomMessageId 
+ * @param aCustomMessage
+ */
+void CTextToSpeechSettingItemListView::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
+                                                    TUid /*aCustomMessageId*/,
+                                                    const TDesC8& /*aCustomMessage*/ )
+    {
+    CEikButtonGroupContainer *cba = AppUi()->Cba();
+    if ( cba ) 
+        {
+        cba->MakeVisible( EFalse );
+        }
+    
+    if ( !iTextToSpeechSettingItemList )
+        {
+        iEngine = (((CTextToSpeechAppUi*)AppUi())->AppEngine());
+        
+        iSettings = CTextToSpeechSettingItemListSettings::NewL();
+
+        iTextToSpeechSettingItemList = 
+            new (ELeave) CTextToSpeechSettingItemList( *iSettings, this );
+        
+        iTextToSpeechSettingItemList->SetMopParent( this );
+        iTextToSpeechSettingItemList->ConstructFromResourceL( 
+            R_TEXT_TO_SPEECH_SETTING_ITEM_LIST_TEXT_TO_SPEECH_SETTING_ITEM_LIST );
+        
+        iTextToSpeechSettingItemList->ActivateL();
+        iTextToSpeechSettingItemList->LoadSettingValuesL();
+        iTextToSpeechSettingItemList->LoadSettingsL();
+        
+        AppUi()->AddToStackL( *this, iTextToSpeechSettingItemList );
+        
+        SetupStatusPaneL(); 
+        }
+    }
+
+/**
+ * Deactivate view
+ */
+void CTextToSpeechSettingItemListView::DoDeactivate()
+    {
+    CleanupStatusPane();
+    
+    CEikButtonGroupContainer *cba = AppUi()->Cba();
+    if ( cba ) 
+        {
+        cba->MakeVisible( ETrue );
+        cba->DrawDeferred();
+        }
+    
+    if ( iTextToSpeechSettingItemList )
+        {
+        AppUi()->RemoveFromStack( iTextToSpeechSettingItemList );
+        
+        delete iTextToSpeechSettingItemList;
+        iTextToSpeechSettingItemList = NULL;
+        
+        delete iSettings;
+        iSettings = NULL;
+        }    
+    }
+
+/**
+ * Show volume indicator in status pane
+ */
+void CTextToSpeechSettingItemListView::SetupStatusPaneL()
+    {
+    if ( !iVolumeControl )
+        {
+        CAknNavigationControlContainer* naviPane = 
+            static_cast< CAknNavigationControlContainer* >( 
+                iEikonEnv->AppUiFactory()->StatusPane()->ControlL( 
+                    TUid::Uid( EEikStatusPaneUidNavi ) ) );
+
+        iVolumeControl = 
+            naviPane->CreateVolumeIndicatorL( R_AVKON_NAVI_PANE_VOLUME_INDICATOR );
+        
+        // Subscribe for changes in volume indicator 
+        iVolumeControl->SetNaviDecoratorObserver( this );
+        iVolumeControl->SetControlType( CAknNavigationDecorator::ENaviLabel );
+        
+        CAknVolumeControl* control = 
+            static_cast< CAknVolumeControl* >( iVolumeControl->DecoratedControl() );
+        
+        control->SetValue( KMaxVolumeInUI * 
+                           iSettings->iVolume / iSettings->iMaxVolume );
+
+        naviPane->PushL( *iVolumeControl );
+        } 
+    }
+
+/**
+ * Delete volume indicator
+ */
+void CTextToSpeechSettingItemListView::CleanupStatusPane()
+    {
+    delete iVolumeControl;
+    iVolumeControl = NULL;
+    }
+
+/** 
+ * Handle status pane size change for this view (override)
+ */
+void CTextToSpeechSettingItemListView::HandleStatusPaneSizeChange()
+    {
+    CAknView::HandleStatusPaneSizeChange();
+    
+    // this may fail, but we're not able to propagate exceptions here
+    TRAP_IGNORE( SetupStatusPaneL() ); 
+    }
+    
+// End of file