textinput/peninputhwrtrui/src/truimainviewcontainer.cpp
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputhwrtrui/src/truimainviewcontainer.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,1333 @@
+/*
+* 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:  Implement of class CTruiMainViewContainer
+*
+*/
+
+
+#include <eiklabel.h>
+#include <barsread.h>
+#include <aknnavide.h>
+#include <akntabgrp.h>
+#include <eikspane.h>
+#include <aknViewAppUi.h>
+#include <eikedwin.h>
+#include <aknbutton.h>
+#include <aknchoicelist.h>
+#include <aknSctDialog.h>
+#include <trui.rsg>
+#include <StringLoader.h>
+#include <aknnotewrappers.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <AknsBasicBackgroundControlContext.h>
+#include <AknsDrawUtils.h>
+#include <layoutmetadata.cdl.h>
+#include <akntoolbar.h>
+#include <AknPreviewPopUpController.h>
+#include <AknsConstants.h>
+#include <trui_icons.mbg>
+#include <featmgr.h>
+
+#include "truicontainerbase.h"
+#include "truimainviewcontainer.h"
+#include "truihwrbox.h"
+#include "truiengine.h"
+#include "truiappui.h"
+#include "truiapplication.h"
+#include "truihelp.h"
+#include "trui.hrh"
+#include "truimainview.h"
+
+// Max length of text in indicator
+const TInt KIndicatorTextLen = 10;
+
+// Max length of text of silimar message
+const TInt KSimilarMsgLength = 160;
+
+// Delay time of showing tooltip
+const TInt KTooltipShowDelay = 0;
+
+// Delay time of hiding tooltip
+const TInt KTooltipHideDelay = 3000;
+
+// Size for buffer to fill maximum characters from SCT.
+const TInt KSctBufferSize = 32;
+
+const TInt KHwrTooltipY = 20;
+
+const TInt KVarityNaviPaneContents = 0;
+
+//the special gesture characters
+_LIT(KDisplayBackspace, "\x2190");
+_LIT(KDisplaySpace, "\xF800");
+_LIT(KDisplayEnter, "\xF801");
+
+// ======== MEMBER FUNCTIONS ========
+
+CTruiMainViewContainer::CTruiMainViewContainer()
+    {  
+    }
+    
+void CTruiMainViewContainer::ConstructL( const TRect& aRect )
+    {    
+    // Initialize control array
+    InitComponentArrayL();   
+        
+    // Set parent control or owning window
+    CreateWindowL();
+   
+    iBackGround = CAknsBasicBackgroundControlContext::NewL
+                                                      ( KAknsIIDQsnBgAreaMain, 
+                                                        Rect(), 
+                                                        EFalse );
+
+    // Initialize controls
+    InitializeControlsL();
+ 
+    SetRect( aRect );    
+
+    // Set first character of the character set as the default trained character
+    const HBufC* charSet = iEngine->CharacterSet();
+    ASSERT( charSet );
+    SetCurrentCharL( charSet->Mid( 0, 1 ) );
+
+    TInt currentRangeId = iEngine->GetCurrentCharacterRange();    
+    const RArray<TInt>& rangeIdArray = 
+                        iEngine->GetCurrentSupportedRangesId();
+    TInt indexOfMenuItems = rangeIdArray.Find( currentRangeId );
+    if ( indexOfMenuItems != KErrNotFound )
+        {
+        // Set choiclist' selected item to index.
+        iChoicelist->SetSelectedIndex( indexOfMenuItems ); 
+        }
+    else
+        {
+        iChoicelist->SetSelectedIndex( 0 ); 
+        }
+
+    // Set hwrbox's rect to engine and set guiding line to hwrbox
+    iHwrBox->SetDisplayBottomGuideLine( ETrue );
+    if ( iEngine->CurrentLanguageScript() == EMainViewSubmenuHebrew )
+        {
+        iHwrBox->SetDisplayTopGuideLine( ETrue );
+        }
+
+    ActivateL();  
+
+    }
+    
+CTruiMainViewContainer* CTruiMainViewContainer::NewL( const TRect& aRect )
+    {
+    CTruiMainViewContainer* self = CTruiMainViewContainer::NewLC( aRect );
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+CTruiMainViewContainer* CTruiMainViewContainer::NewLC( const TRect& aRect )
+    {
+    CTruiMainViewContainer* self = new (ELeave) CTruiMainViewContainer();
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    return self;
+    }
+    
+CTruiMainViewContainer::~CTruiMainViewContainer()
+    {
+    if ( iBackGround )
+        {
+        delete iBackGround;
+        }
+    delete iWrappedLabelText;
+    delete iLabeltext;
+    iLineWidthArray.Close();
+    }
+  
+// ---------------------------------------------------------------------------
+// Create controls to be displayed in this container.
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::InitializeControlsL()
+    {    
+    CAknToolbar* toolbar = iAppUi->View( KTruiMainViewId )->Toolbar();
+    // Get Clear button from toolbar    
+    if ( toolbar )
+        {
+        iClearBtn = static_cast<CAknButton*>
+                    ( toolbar->ControlOrNull( EMainViewButtonIdDelete ) );
+        iPreviewBtn = static_cast<CAknButton*>
+                    ( toolbar->ControlOrNull( EMainViewButtonIdPreview ) );           
+        }
+            
+    // Create Label for text above writting box
+    iLabel = CreateLabelL( R_MAINVIEW_LABEL_TIP, this, NULL );
+    Components().AppendLC( iLabel );
+    CleanupStack::Pop( iLabel );
+    
+    // Create left button
+    iLeftBtn = CreateButtonL( R_MAINVIEW_BUTTON_LEFT, this, this );
+    Components().AppendLC( iLeftBtn );
+    CleanupStack::Pop( iLeftBtn );
+    
+    // Create indicator
+    iIindicator = CreateLabelL( R_MAINVIEW_LABEL_INDICATOR, this, this );
+    Components().AppendLC( iIindicator );
+    CleanupStack::Pop( iIindicator );
+        
+    // Create right button
+    iRightBtn = CreateButtonL( R_MAINVIEW_BUTTON_RIGHT, this, this );
+    Components().AppendLC( iRightBtn );
+    CleanupStack::Pop( iRightBtn );
+    
+    // Create choicelist
+    TInt buttonResource = ButtonResourceId
+                         ( iEngine->GetCurrentCharacterRange() );
+    CAknButton* rangeButton = CreateButtonL( buttonResource,
+                                             this, NULL );
+    iCurChoiceListBtn = rangeButton;
+    CDesCArray* charRangeArray = iEngine->GetCharacterRangeName();
+    CDesCArray* ownedCharRangeArray = new ( ELeave ) CDesCArrayFlat
+                                          ( charRangeArray->MdcaCount() );
+                                          
+    CleanupStack::PushL( ownedCharRangeArray );
+    for ( TInt i=0; i<charRangeArray->MdcaCount(); i++ )
+        {
+        ownedCharRangeArray->AppendL( charRangeArray->MdcaPoint( i ) );
+        }
+    iChoicelist = CreateChoiceListL( this, this, 
+                                     ownedCharRangeArray,rangeButton );
+    CleanupStack::Pop( ownedCharRangeArray );
+    ownedCharRangeArray = NULL;// Ownership has been transfered to choicelist                                                                                                     
+    Components().AppendLC( iChoicelist );
+    CleanupStack::Pop( iChoicelist );    
+    
+    iHwrBox = CreateHwrBoxL( this, this );
+    iHwrBox->SetHwrBoxFlag( CTruiHwrBox::EFrameHwrBox );
+    Components().AppendLC( iHwrBox );
+    CleanupStack::Pop( iHwrBox );    
+    }
+
+// ---------------------------------------------------------------------------
+// Create label and display it in the container.
+// ---------------------------------------------------------------------------
+//
+CEikLabel* CTruiMainViewContainer::CreateLabelL( const TInt aResourceId,
+                                                 const CCoeControl* aParent,
+                                             MCoeControlObserver* aObserver )
+    {
+    CEikLabel* aknLabel = new (ELeave) CEikLabel();
+    CleanupStack::PushL( aknLabel );
+    if ( aParent )
+        {
+        aknLabel->SetContainerWindowL( *aParent );
+        }
+    if ( aObserver )
+        {
+        aknLabel->SetObserver( aObserver );    
+        }
+    if ( aResourceId != 0 )
+        {
+        TResourceReader reader;
+        iEikonEnv->CreateResourceReaderLC( reader, aResourceId );
+        aknLabel->ConstructFromResourceL( reader );
+        CleanupStack::PopAndDestroy(); // reader
+        }    
+    aknLabel->ActivateL();
+    CleanupStack::Pop( aknLabel ); 
+    return aknLabel;
+    }
+
+// ---------------------------------------------------------------------------
+// Create choicelist and display it in the container.
+// ---------------------------------------------------------------------------
+// 
+ CAknChoiceList* CTruiMainViewContainer::CreateChoiceListL
+                                             ( CCoeControl* aParent,
+                                             MCoeControlObserver* aObserver,
+                                             CDesCArray* aTextArray,
+                                             CAknButton* aButton )
+    {
+    CAknChoiceList* choiceList = CAknChoiceList::NewLC( aParent, 
+                                                        aTextArray,
+                     CAknChoiceList::EAknChoiceListWithoutCurrentSelection,                     
+                                                        aButton );    
+    choiceList->SetObserver( aObserver );   
+    CleanupStack::Pop( choiceList );
+    return choiceList;
+    }
+
+// ---------------------------------------------------------------------------
+// Create HWRBox and display it in the container.
+// ---------------------------------------------------------------------------
+// 
+CTruiHwrBox* CTruiMainViewContainer::CreateHwrBoxL( CCoeControl* aParent,
+                                            MTruiHwrBoxObserver* aObserver )
+    {   
+    return CTruiHwrBox::NewL( aParent, aObserver, iBackGround );
+    }
+    
+// ---------------------------------------------------------------------------
+// Responds to changes to the size and position of the contents of this control.
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::SizeChanged()
+    {        
+    TInt varity = Layout_Meta_Data::IsLandscapeOrientation() ? KLandscapeVarity 
+                                                             : KPortraitVarity;
+    DoSizeChanged( varity );
+    
+    if ( iBackGround )
+        {
+        iBackGround->SetRect( Rect() );
+        }
+    }       
+   
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Handles key event.
+// ---------------------------------------------------------------------------
+//      
+TKeyResponse CTruiMainViewContainer::OfferKeyEventL
+                                     ( const TKeyEvent& aKeyEvent, 
+                                       TEventCode aType )
+    {    
+    if ( aType == EEventKey )
+        {        
+        switch ( aKeyEvent.iCode )
+            {
+            case EKeyLeftArrow:
+                {
+                return EKeyWasConsumed;
+                }
+            case EKeyRightArrow:
+                {       
+                CAknNavigationDecorator* naviDecorator = 
+                                                  iAppUi->GetNaviDecorator();
+                CAknTabGroup* tabGroup = static_cast<CAknTabGroup*>
+                                       ( naviDecorator->DecoratedControl() );
+                return tabGroup->OfferKeyEventL( aKeyEvent, aType );
+                }            
+            default:
+                break;
+            }
+        }    
+    return EKeyWasNotConsumed;    
+    }
+    
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// The region of the control to be redrawn.
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::Draw( const TRect& /*aRect*/ ) const
+    {
+    // Get the standard graphics context
+    CWindowGc& gc = SystemGc();
+    // Gets the control's extent
+    TRect rect( Rect() );
+    // Clears the screen
+    gc.Clear( rect );
+
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    if ( AknsDrawUtils::HasBitmapBackground( skin, iBackGround ) ) 
+        {
+        AknsDrawUtils::Background( skin, iBackGround, gc, rect );
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Handles a change to the control's resources.
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::HandleResourceChange( TInt aType )
+    {
+    CTruiContainerBase::HandleResourceChange( aType );
+    if ( aType == KEikDynamicLayoutVariantSwitch && iHwrBox )
+        {
+        if ( iHwrBox->BoxState() == CTruiHwrBox::ENewModelDraw )
+            {
+            TRAP_IGNORE( iHwrBox->SaveModelByManuallyL() );
+            }        
+        }
+    
+    if ( aType == KAknsMessageSkinChange )
+        {
+        TRgb labelColor = KRgbBlack;
+        TInt error = GetCachedLabelTextColor( labelColor );
+        if ( error == KErrNone )
+            {
+            TRAPD( errLable, iLabel->OverrideColorL( EColorLabelText, 
+                                                     labelColor ) );
+            if ( errLable != KErrNone )
+                {
+                return;
+                }
+            TRAP_IGNORE( iIindicator->OverrideColorL( EColorLabelText, 
+                                                      labelColor ) );            
+            }
+        TRgb iconColor = KRgbBlack;            
+        // Change left icon
+        iLeftBtn->State()->SetIcon( ConstructIconFromResourceL
+                                    ( R_MAINVIEW_BUTTON_LEFT ) );
+        // Change right icon
+        iRightBtn->State()->SetIcon( ConstructIconFromResourceL
+                                    ( R_MAINVIEW_BUTTON_RIGHT ) );
+        
+        // Change choicelist button
+        TInt rangeId = iEngine->GetCurrentCharacterRange();
+        TInt buttonResoureId  = ButtonResourceId( rangeId );
+        iCurChoiceListBtn->State()->SetIcon( ConstructIconFromResourceL
+                                             ( buttonResoureId ) );            
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Handles an event from an observed control.
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::HandleControlEventL(CCoeControl* aControl,
+                                                 TCoeEvent aEventType)
+    {
+    // Handle left button event
+    if ( aControl == iLeftBtn && aEventType == EEventStateChanged )
+        {        
+        //Get character set
+        const HBufC* charSet = iEngine->CharacterSet();
+        ASSERT( charSet );
+        //Locate current position
+        TInt charPos = charSet->Find( iCurrentChar );
+        if ( charPos != KErrNotFound )
+            {
+            //Move left
+            TInt length = charSet->Length();
+            charPos = ( charPos - 1 + length ) % length;
+            SetCurrentCharL( charSet->Mid( charPos, 1 ) );
+            }
+        }
+    // Handle indicator button event
+    else if ( aControl == iIindicator && aEventType == EEventRequestFocus )
+        {	
+        PreviewCharacterModel();
+        }
+    // Handle right button event
+    else if ( aControl == iRightBtn && aEventType == EEventStateChanged )
+        {
+        //Get character set
+        const HBufC* charSet = iEngine->CharacterSet();
+        ASSERT( charSet );
+        //Locate current position
+        TInt charPos = charSet->Find( iCurrentChar );
+        if ( charPos != KErrNotFound )
+            {
+            //Move left
+            TInt length = charSet->Length();
+            charPos = ( charPos + 1 + length ) % length;
+            SetCurrentCharL( charSet->Mid( charPos, 1 ) );
+            }
+        }
+    // Handle choicelist event
+    else if ( aControl == iChoicelist && aEventType == EEventStateChanged )
+        {
+        // Handle character range changing event
+        // Get the selected index            
+        TInt index = iChoicelist->SelectedIndex();
+            
+        // Set current character range by index in Engine
+        iEngine->SetCharacterRangeByIndexL( index );
+            
+        // Get the current character range Id
+        TInt rangeId = iEngine->GetCurrentCharacterRange();
+            
+        // Handle character range changed
+        HandleCharRangeChangedL( index, rangeId );
+        }    
+    }
+         
+// ---------------------------------------------------------------------------
+// From class MTruiHWRBoxObserver.
+// Responds to changes to the size and position of the contents of control.
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::SaveNewModelL()
+    {    
+    TBuf<KSimilarMsgLength> similarMsg;
+    TRAPD( err, iEngine->SetCharacterModelL( iCurrentChar,
+                                             iHwrBox->Model(),
+                                             similarMsg ) );
+    switch ( err )
+        {
+        case KErrNone:
+            {
+            //Dim clear button and preview button
+            if ( iClearBtn )
+                {
+                iClearBtn->SetDimmed( EFalse );
+                iClearBtn->DrawNow();
+                }
+            if ( iPreviewBtn )
+                {
+                iPreviewBtn->SetDimmed( EFalse );
+                iPreviewBtn->DrawNow();                
+                }
+            TPoint hwrPos = iHwrBox->PositionRelativeToScreen();
+            HBufC* tooltipText = 
+                        iEikonEnv->AllocReadResourceLC( R_TRUI_TOOLTIP_SAVED );
+            iHwrBox->ShowTooltipL( *tooltipText, 
+                          hwrPos + TPoint( iHwrBox->Size().iWidth, KHwrTooltipY ),
+                          KTooltipShowDelay, KTooltipHideDelay );
+            CleanupStack::PopAndDestroy( tooltipText );                        
+            break;
+            }
+        case KErrAlreadyExists:
+            {
+            //Clear invalid model
+            ClearCurrentModel();
+            
+            // Transfer some special gesture chars into displayable chars.
+            AdjustDisplayChars( similarMsg );
+            
+            //Popup err message
+            HBufC* errMsg = iEikonEnv->AllocReadResourceLC( R_TRUI_NOTE_SIMILAR_MODEL );
+            HBufC* tooltipText = HBufC::NewLC( errMsg->Length() + similarMsg.Length()
+                                               + KExtraSize );
+            TPtr tooltipTextPtr = tooltipText->Des();
+            tooltipTextPtr.Format( *errMsg, &similarMsg );
+            PopupInformationNoteL( *tooltipText );
+            CleanupStack::PopAndDestroy( tooltipText );
+            CleanupStack::PopAndDestroy( errMsg );
+            break;
+            }
+        default:
+            {
+            //Clear invalid model
+            ClearCurrentModel();
+            //Popup err message
+            HBufC* tooltipText = iEikonEnv->AllocReadResourceLC( R_TRUI_NOTE_SAVE_FAILED );
+            PopupInformationNoteL( *tooltipText );
+            CleanupStack::PopAndDestroy( tooltipText );
+            break;
+            }
+        }
+    };
+    
+// ---------------------------------------------------------------------------
+// From class MTruiHWRBoxObserver.
+// Handle the message event from the HWRBox
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::HandleEventL( TMessageType aMessage )
+    {
+    if ( aMessage == EModelExist )
+        {
+        HBufC* tooltipText = 
+                      iEikonEnv->AllocReadResourceLC( R_TRUI_NOTE_CLEAR_BOX );
+        PopupInformationNoteL( *tooltipText );
+        CleanupStack::PopAndDestroy( tooltipText );        
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// Handles language script changed.
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::HandleLanguageScriptChangedL( TInt aScriptId )
+    {    
+    CTruiEngine* engine = iAppUi->HwrEngine();
+    const RArray<TInt>& languageScriptId = engine->SupportedLanguageScript();
+    TInt index = languageScriptId.Find( aScriptId );
+    if ( index != KErrNotFound )
+        {
+        // Set the language script 
+        engine->SetLanguageScriptByIndexL( aScriptId );        
+    
+        // Copy language script names array        
+        CDesCArray* rangeNames = engine->GetCharacterRangeName();        
+        CDesCArray* itemsInChoiceList = new (ELeave) CDesCArrayFlat
+                                                     ( rangeNames->Count() );
+        CleanupStack::PushL( itemsInChoiceList );
+        for ( TInt i = 0; i < rangeNames->Count(); i++ )
+            {
+            itemsInChoiceList->AppendL( ( *rangeNames )[i] );
+            }
+            
+        // Set the items in choicelist
+        iChoicelist->SetItems( itemsInChoiceList ); // Transfered ownership
+        CleanupStack::Pop( itemsInChoiceList );
+        
+        // Set hwrbox's rect to engine and set guiding line to hwrbox
+        TBool isDisplayTopGuideLine = ( iEngine->CurrentLanguageScript() 
+                                 == EMainViewSubmenuHebrew ) ? ETrue : EFalse;
+        
+        iHwrBox->SetDisplayTopGuideLine( isDisplayTopGuideLine );
+
+        // Get the ative character range's ID.
+        TInt rangeId = engine->GetCurrentCharacterRange();        
+        // Handle char range changed with index 0
+        HandleCharRangeChangedL( 0, rangeId );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Handles character range changed.
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::HandleCharRangeChangedL( TInt aIndex, 
+                                                      TInt aRangeId )
+    {
+    // Get the button's resourceID by char range's ID
+    TInt buttonResoureId  = ButtonResourceId( aRangeId );
+    // Create new button with the reourceID
+    // and add it to the AknChoiceList
+    if ( buttonResoureId )
+        {       
+        CAknButton* rangeButton = CreateButtonL( buttonResoureId, 
+                                               this, NULL );
+        iCurChoiceListBtn = rangeButton;
+        CleanupStack::PushL( rangeButton );
+        iChoicelist->SetButtonL( rangeButton );
+        CleanupStack::Pop( rangeButton );
+        iChoicelist->DrawNow();
+        }   
+    // Set choiclist' selected item to index.
+    iChoicelist->SetSelectedIndex( aIndex );
+    
+    // Refresh the active char with the first char in the character set
+    const HBufC* charSet = iEngine->CharacterSet();
+    ASSERT( charSet );
+    SetCurrentCharL( charSet->Mid( 0, 1 ) );     
+    }
+    
+// ---------------------------------------------------------------------------
+// Handles choosing an active char from SCT.
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::HandleChooseCharEventL()
+    {
+    TInt rangeId = 
+        iAppUi->HwrEngine()->GetCurrentCharacterRange();                        
+    
+    // Get character set id by character range id
+    TInt characterSetId = SctCharacterSetId( rangeId );
+        
+    // Popup SCT dialog
+    TBuf<KSctBufferSize> selectedStr;
+    TInt buttonId = PopupSctDialogL( EAknSCTLowerCase, 
+                                     selectedStr, 
+                                     characterSetId );
+    if ( buttonId != 0 && selectedStr.Length() > 0 )
+        {
+        SetCurrentCharL( selectedStr.Mid( 0, 1 ) );
+        }   
+    }
+            
+// ---------------------------------------------------------------------------
+// Check if clear button has been dimmed.
+// ---------------------------------------------------------------------------
+//
+TBool CTruiMainViewContainer::IsButtonDimmed()
+    {
+    return iClearBtn ? iClearBtn->IsDimmed() : EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// Check if all delete button has been dimmed.
+// ---------------------------------------------------------------------------
+//
+TBool CTruiMainViewContainer::IsAllDelete()
+    {
+    const HBufC* charSet = iEngine->CharacterSet();
+    for ( TInt i = 0; i < charSet->Length(); i++ )
+        {
+        if ( iEngine->CheckCharacterModel( charSet->Mid( i, 1 ) ) )
+            {
+            return EFalse;
+            }
+        }  
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// Return button's resourceId by Character Range Id.
+// Use this resoueceId to create the correct button.
+// ---------------------------------------------------------------------------
+//
+TInt CTruiMainViewContainer::ButtonResourceId( TInt aRangeId ) const
+    {
+    TInt resoureId;
+    switch ( aRangeId )
+        {
+        case ELatinLowerLetters:
+            {
+            resoureId = R_MAINVIEW_BUTTON_CHARRANGE_LATIN_LOWER;
+            }
+            break;
+        case ELatinUpperLetters:
+            {
+            resoureId = R_MAINVIEW_BUTTON_CHARRANGE_LATIN_UPPER;
+            }        
+            break;
+        case ELatinAccent:
+            {
+            resoureId = R_MAINVIEW_BUTTON_CHARRANGE_LATIN_ACCENT;
+            }        
+            break;
+        case ELatinDigital:
+            {
+            resoureId = R_MAINVIEW_BUTTON_CHARRANGE_NUMERIC;
+            }
+            break;
+        case ELatinSymbol:
+            {
+            resoureId = R_MAINVIEW_BUTTON_CHARRANGE_SYMBOL;            
+            }
+            break;
+        case ECyrillicLowerLetters:
+            { //
+            resoureId = R_MAINVIEW_BUTTON_CHARRANGE_CYRILLIC_LOWER;            
+            }
+            break;
+        case ECyrillicUpperLetters:
+            {
+            resoureId = R_MAINVIEW_BUTTON_CHARRANGE_CYRILLIC_UPPER;            
+            }            
+            break;
+        case ECyrillicAccent:
+            {
+            resoureId = R_MAINVIEW_BUTTON_CHARRANGE_CYRILLIC_ACCENT;
+            }        
+            break;
+        case EGreekLowerLetters:
+            {
+            resoureId = R_MAINVIEW_BUTTON_CHARRANGE_GREEK_LOWER;            
+            }            
+            break;
+        case EGreekUpperLetters:
+            {
+            resoureId = R_MAINVIEW_BUTTON_CHARRANGE_GREEK_UPPER;            
+            }            
+            break;
+        case EHebrewLetters:
+            {
+            resoureId = R_MAINVIEW_BUTTON_CHARRANGE_HEBREW_LETTERS;
+            }
+            break;
+        default:
+            {
+            resoureId = 0;
+            }            
+        }
+    return resoureId;        
+    }
+    
+// ---------------------------------------------------------------------------
+// Pop Sct dialog.
+// ---------------------------------------------------------------------------
+//
+TInt CTruiMainViewContainer::PopupSctDialogL( TInt aCharCase, 
+                                              TDes& aSpecialChars, 
+                                              TInt aCharSetResourceId )
+    {    
+    CAknCharMapDialog* sct = new (ELeave) CAknCharMapDialog( aCharCase, 
+                                           aSpecialChars, 
+                                           aCharSetResourceId );    
+    TInt keyboardMode = CurrentKeyBoardModeL();     
+    if ( keyboardMode )
+        {
+        // QWERTY: Lock numeric keys.
+        sct->LockNumericKeys( ETrue );
+        }
+    else
+        {
+        // ITU-T: Unlock numeric keys.
+        sct->LockNumericKeys( EFalse );
+        }    
+
+    sct->DisableRecentCharsRow();
+    TInt retValue = sct->ExecuteLD( R_TRUI_SCT_DIALOG );
+    return retValue;
+    }
+
+// ---------------------------------------------------------------------------
+// Set current trained char
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::SetCurrentCharL( const TPtrC& aChar )
+    {
+    //If previous char's model is not saved, save it before setting new char.
+    if ( iHwrBox->BoxState() == CTruiHwrBox::ENewModelDraw )
+        {
+        //Call save function from hwrbox,
+        //in order to stop periodics in the hwrbox
+        iHwrBox->SaveModelByManuallyL();
+        }
+    // In case of new localization not check-in, temporary    
+    if ( iCurrentChar != aChar )
+        {
+        //Set current char
+        iCurrentChar = aChar;
+        //Set Top Label's text
+ 	    HBufC* teachCharacter = NULL;
+        teachCharacter = StringLoader::LoadLC
+                          ( R_TRUI_MAINVIEW_TEXT_TEACH_CHARACTER, aChar ); 	        
+        if ( !iLabeltext )
+            {
+            delete iLabeltext;
+            iLabeltext = NULL;
+            iLabeltext = HBufC::NewL( teachCharacter->Length() + KExtraSize );
+            }
+        TPtr labelOldPtr = iLabeltext->Des();
+        if ( labelOldPtr.MaxLength() < teachCharacter->Length() )
+            {
+            iLabeltext = iLabeltext->ReAlloc( teachCharacter->Length() + KExtraSize );            
+            }
+        TPtr labelTextPtr = iLabeltext->Des();
+        labelTextPtr.Copy( *teachCharacter );
+        CleanupStack::PopAndDestroy( teachCharacter );
+                
+        delete iWrappedLabelText;
+        iWrappedLabelText = NULL;
+        iWrappedLabelText = HBufC::NewL( iLabeltext->Length() 
+                                         + iLineWidthArray.Count() 
+                                         + KExtraSize );
+        // Be ready to show label
+        const CFont* font = AknLayoutUtils::FontFromId( iMultilineLayout.FontId() );
+        TRAPD( err, WrapLabelTextL( font, *iLabeltext, iLineWidthArray, iWrappedLabelText ) );
+        if ( err == KErrNone )
+            {
+            iLabel->SetTextL( *iWrappedLabelText );
+            }
+        else
+            {
+            iLabel->SetTextL( *iLabeltext );
+            }
+        AknLayoutUtils::LayoutLabel( iLabel, 
+                                     iLabelPaneRect, 
+                                     iMultilineLayout );
+        TRgb labelColor = KRgbBlack;
+        if ( GetCachedLabelTextColor( labelColor ) == KErrNone )
+            {
+            iLabel->OverrideColorL( EColorLabelText, labelColor );
+            }
+    
+        //Set Indicator's text
+        const HBufC* charIndicator = iEikonEnv->AllocReadResourceL
+                                      ( R_TRUI_MAINVIEW_ACTIVE_CHAR_INDICATOR );
+        TBuf<KIndicatorTextLen> indicatortext;
+        indicatortext.Format( *charIndicator, &aChar );
+        delete charIndicator;
+        charIndicator = NULL;
+        iIindicator->SetTextL( indicatortext );
+        }
+
+    iHwrBox->ClearExistModel();
+    //Load existing model and dim clear button
+    if ( iEngine->CheckCharacterModel( iCurrentChar ) )
+        {
+        //Get model from engine
+        TRAPD( err, iEngine->GetCharacterModelL( iCurrentChar, iHwrBox->Model() ) );
+        if ( err == KErrNone )
+            {
+            iHwrBox->ModelIsReady();
+            //Activate clear button and preview button
+            if ( iClearBtn )
+                {
+                iClearBtn->SetDimmed( EFalse );
+                iClearBtn->DrawNow();
+                }
+            if ( iPreviewBtn )
+                {
+                iPreviewBtn->SetDimmed( EFalse );
+                iPreviewBtn->DrawNow();
+                }
+            }
+        //Preview    
+        iHwrBox->PlayAnimation( EFalse );
+        }
+    else
+        {
+        iHwrBox->ModelIsReady( EFalse );
+        if ( iClearBtn )
+            {
+            //Dim clear button and preview button       
+            iClearBtn->SetDimmed( ETrue );
+            iClearBtn->DrawNow();
+            }
+        if ( iPreviewBtn )
+            {
+            iPreviewBtn->SetDimmed( ETrue );
+            iPreviewBtn->DrawNow();            
+            }
+        } 
+    }
+    
+// ---------------------------------------------------------------------------
+// Preview character model
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::PreviewCharacterModel()
+    {
+    if ( iEngine->CheckCharacterModel( iCurrentChar ) )
+        {
+        iHwrBox->PlayAnimation( EFalse );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Clear current model
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::ClearCurrentModel()
+    {
+    if ( iClearBtn )
+        {
+        iClearBtn->SetDimmed( ETrue );
+        iClearBtn->DrawNow();
+        }
+    if ( iPreviewBtn )
+        {
+        iPreviewBtn->SetDimmed( ETrue );
+        iPreviewBtn->DrawNow();        
+        }
+    iHwrBox->ClearExistModel();
+    }
+    
+// ---------------------------------------------------------------------------
+// Popup information note
+// ---------------------------------------------------------------------------
+//    
+void CTruiMainViewContainer::PopupInformationNoteL( const TDesC& aText )
+    {         
+    CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue );
+    note->ExecuteLD( aText );
+    }
+// ---------------------------------------------------------------------------
+// Adjust special behavior characters to displayable characters.
+// ---------------------------------------------------------------------------
+// 
+void CTruiMainViewContainer::AdjustDisplayChars( TDes& aResult )
+    {
+    if ( aResult.Length() > 0 && aResult.Length() <= 1 )
+        {
+        switch ( aResult[0] )
+            {
+            case EKeyEnter:
+                {
+                aResult.Replace( 0, 1, KDisplayEnter );
+                break;
+                }
+            case EKeySpace:
+                {
+                aResult.Replace( 0, 1, KDisplaySpace );
+                break;
+                }
+            case EKeyBackspace:
+                {
+                aResult.Replace( 0, 1, KDisplayBackspace );
+                break;
+                }
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Delete model of the shortcut
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::DeleteModelL()
+    {
+    // Delete shortcut from engine
+    if ( iEngine->DeleteCharacterModel( *iIindicator->Text() )
+        == KErrNone )
+        {
+        ClearCurrentModel();
+
+        // Pop tooltip        
+        HBufC* tooltipText = 
+                     iEikonEnv->AllocReadResourceLC( R_TRUI_TOOLTIP_DELETED );
+        TPoint hwrPos = iHwrBox->PositionRelativeToScreen();
+        iHwrBox->ShowTooltipL( *tooltipText, 
+                      hwrPos + TPoint( iHwrBox->Size().iWidth, KHwrTooltipY ),
+                      KTooltipShowDelay, KTooltipHideDelay );        
+        CleanupStack::PopAndDestroy( tooltipText );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Delete all models of current character
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::DeleteAllModelL()
+    {
+    // Popup note dialog
+    CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+    if ( dlg->ExecuteLD( R_TRUI_QUERYDIALOG_DELETE_ALL_MODELS ) )
+        {
+        // press yes 
+        const HBufC* charSet = iEngine->CharacterSet();
+        for ( TInt i = 0; i < charSet->Length(); i++ )
+            {
+            if ( iEngine->CheckCharacterModel( charSet->Mid( i, 1 ) ) )
+                {
+                if ( *iIindicator->Text() == charSet->Mid( i, 1 ) )
+                    {
+                    DeleteModelL();
+                    }
+                else
+                    {
+                    iEngine->DeleteCharacterModel( charSet->Mid( i, 1 ) );
+                    }
+                }
+            }    
+        }    
+    }
+    
+// ---------------------------------------------------------------------------
+// Get character set Id, 
+// used to choose which characters will be displayed in SCT
+// ---------------------------------------------------------------------------
+//
+TInt CTruiMainViewContainer::SctCharacterSetId( TInt aRangeId )
+    {
+    TInt characterSetId;
+    switch ( aRangeId )
+        {
+        case EMainViewSubmenuLatinLowerLetter:
+            {
+            characterSetId = R_TRUI_SCT_CHARSET_LATIN_LOWER;
+            break;
+            }            
+        case EMainViewSubmenuCyrillicLowerLetters:
+            {
+            characterSetId = SctCyrillicLowerCharacterSetId
+                                            ( iEngine->InputLanguage() );
+            break;
+            }
+        case EMainViewSubmenuGreekLowerLetters:
+            {
+            characterSetId = R_TRUI_SCT_CHARSET_GREEK_LOWER;
+            break;
+            }        
+        case EMainViewSubmenuHebrewLetters:
+            {
+            characterSetId = R_TRUI_SCT_CHARSET_HEBREW_LETTERS;
+            break;
+            }        
+        case EMainViewSubmenuLatinAccent:
+            {
+            characterSetId = R_TRUI_SCT_CHARSET_LATIN_ACCENT;
+            break;
+            }            
+        case EMainViewSubmenuLatinUpperLetter:
+            {            
+            characterSetId = R_TRUI_SCT_CHARSET_LATIN_UPPER;
+            break;            
+            }
+        case EMainViewSubmenuCyrillicUpperLetters:
+            {            
+            characterSetId = SctCyrillicUpperCharacterSetId
+                                           ( iEngine->InputLanguage() );
+            break;
+            }
+        case EMainViewSubmenuCyrillicAccent:
+            {
+            characterSetId = R_TRUI_SCT_CHARSET_CYRILLIC_ACCENT;
+            break;
+            }                    
+        case EMainViewSubmenuGreekUpperLetters:
+            {
+            characterSetId = R_TRUI_SCT_CHARSET_GREEK_UPPER;
+            break;
+            }        
+        case EMainViewSubmenuDigital:
+            {
+            characterSetId = R_TRUI_SCT_CHARSET_LATIN_NUMERIC;
+            break;
+            }
+        case EMainViewSubmenuSymbols:
+            {
+            if ( FeatureManager::FeatureSupported(KFeatureIdChinese) )
+                {
+                characterSetId = R_TRUI_SCT_CHARSET_LATIN_SYMBOL_CHINESE;
+                }
+            else
+                {
+                characterSetId = R_TRUI_SCT_CHARSET_LATIN_SYMBOL;
+                }
+            break;
+            }
+        default:
+            {
+            characterSetId = 0;
+            }
+        }
+    return characterSetId;        
+    }
+
+// ---------------------------------------------------------------------------
+// Get cyrillic lower character set Id.
+// ---------------------------------------------------------------------------
+//
+TInt CTruiMainViewContainer::SctCyrillicLowerCharacterSetId
+                                                  ( TLanguage aInputLanguage )
+    {
+    if ( aInputLanguage == ELangBulgarian )
+        {
+        return R_TRUI_SCT_CHARSET_CYRILLIC_LOWER_BULGARIAN;
+        }
+    else if ( aInputLanguage == ELangRussian )
+        {
+        return R_TRUI_SCT_CHARSET_CYRILLIC_LOWER_RUSSIAN;
+        }
+    else if ( aInputLanguage == ELangUkrainian )
+        {
+        return R_TRUI_SCT_CHARSET_CYRILLIC_LOWER_UKRAINE;
+        }
+    else
+        {
+        return R_TRUI_SCT_CHARSET_CYRILLIC_LOWER;
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// Get cyrillic upper character set Id.
+// ---------------------------------------------------------------------------
+//
+TInt CTruiMainViewContainer::SctCyrillicUpperCharacterSetId
+                                                  ( TLanguage aInputLanguage )
+    {
+    if ( aInputLanguage == ELangBulgarian )
+        {
+        return R_TRUI_SCT_CHARSET_CYRILLIC_UPPER_BULGARIAN;
+        }
+    else if ( aInputLanguage == ELangRussian )
+        {
+        return R_TRUI_SCT_CHARSET_CYRILLIC_UPPER_RUSSIAN;
+        }
+    else if ( aInputLanguage == ELangUkrainian )
+        {
+        return R_TRUI_SCT_CHARSET_CYRILLIC_UPPER_UKRAINE;
+        }
+    else
+        {
+        return R_TRUI_SCT_CHARSET_CYRILLIC_UPPER;
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// Before exit, do some necessary operation
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::PrepareToExitL()
+    {
+    //If previous char's model is not saved, save it before exit.
+    if ( iHwrBox->BoxState() == CTruiHwrBox::ENewModelDraw )
+        {
+        //Call save function from hwrbox,
+        //in order to stop periodics in the hwrbox
+        iHwrBox->SaveModelByManuallyL();
+        }
+    iHwrBox->HideInfoPopupNote();
+    }
+
+// ---------------------------------------------------------------------------
+// This is called whenever the control gains or loses focus, 
+// ---------------------------------------------------------------------------
+// 
+void CTruiMainViewContainer::FocusChanged( TDrawNow /*aDrawNow*/ )
+    {    
+    if ( IsFocused() )
+        {        
+        if ( iHwrBox->BoxState() == CTruiHwrBox::EExistModelStop )
+            {
+            iHwrBox->ResumePlaying();
+            }
+        }
+    else
+        {
+        if ( iHwrBox->BoxState() == CTruiHwrBox::EExistModelDraw )
+            {
+            iHwrBox->PausePlaying();
+            }
+        }
+    iHwrBox->SetFocus( IsFocused() );
+    }
+        
+// ---------------------------------------------------------------------------
+// Gets the control's help context. Returns a NULL context by default.
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+    {    
+    aContext.iMajor = KUidtruiApp;
+    aContext.iContext = HWRT_HLP_MAIN_VIEW;
+    }
+
+// ---------------------------------------------------------------------------
+// Handle size changed.
+// ---------------------------------------------------------------------------
+//
+void CTruiMainViewContainer::DoSizeChanged( TInt aVarity )
+    {    
+    TRect rect = Rect();
+    
+    TAknWindowComponentLayout main_pane_layout = 
+                            AknLayoutScalable_Apps::main_hwr_training_pane();
+    TAknLayoutRect main_pane_layout_rect;
+    main_pane_layout_rect.LayoutRect( rect, main_pane_layout );
+    TRect main_pane_rect = main_pane_layout_rect.Rect();
+    
+    // Caculate hwr_training_navi_pane
+    TAknWindowComponentLayout navi_pane_layout = 
+               AknLayoutScalable_Apps::hwr_training_navi_pane( aVarity );
+    TAknLayoutRect navi_pane_layout_rect;
+    navi_pane_layout_rect.LayoutRect( main_pane_rect, navi_pane_layout );
+    TRect navi_pane_rect = navi_pane_layout_rect.Rect();
+    // Caculate navi pane contents
+    // hwr_training_navi_pane_g1
+    TAknWindowComponentLayout navi_pane_g1_layout = 
+               AknLayoutScalable_Apps::hwr_training_navi_pane_g1
+                                                  ( KVarityNaviPaneContents );
+    TAknLayoutRect navi_pane_g1_layout_rect;
+    navi_pane_g1_layout_rect.LayoutRect( navi_pane_rect, navi_pane_g1_layout );    
+    TRect choicelistRect = navi_pane_g1_layout_rect.Rect();    
+    iChoicelist->SetRect( choicelistRect );
+    
+    // hwr_training_navi_pane_g2
+    // hwr_training_navi_pane_g3
+    TAknWindowComponentLayout navi_pane_g3_layout = 
+               AknLayoutScalable_Apps::hwr_training_navi_pane_g3
+                                                  ( KVarityNaviPaneContents );       
+    TAknLayoutRect navi_pane_g3_layout_rect;
+    navi_pane_g3_layout_rect.LayoutRect( navi_pane_rect, navi_pane_g3_layout );    
+    iLeftBtn->SetRect( navi_pane_g3_layout_rect.Rect() );
+    // hwr_training_navi_pane_g4
+    TAknWindowComponentLayout navi_pane_g4_layout = 
+               AknLayoutScalable_Apps::hwr_training_navi_pane_g4
+                                                  ( KVarityNaviPaneContents );       
+    TAknLayoutRect navi_pane_g4_layout_rect;
+    navi_pane_g4_layout_rect.LayoutRect( navi_pane_rect, navi_pane_g4_layout );
+    iRightBtn->SetRect( navi_pane_g4_layout_rect.Rect() );
+    // hwr_training_navi_pane_g5
+    TAknWindowComponentLayout navi_pane_g5_layout = 
+               AknLayoutScalable_Apps::hwr_training_navi_pane_g5
+                                                  ( KVarityNaviPaneContents );
+    TAknLayoutRect navi_pane_g5_layout_rect;
+    navi_pane_g5_layout_rect.LayoutRect( navi_pane_rect, navi_pane_g5_layout );
+    TRect indicator_rect = navi_pane_g5_layout_rect.Rect();
+    iIindicator->SetRect( indicator_rect );
+    // hwr_training_navi_pane_t1    
+    TAknTextComponentLayout nave_pane_t1_layout = 
+               AknLayoutScalable_Apps::hwr_training_navi_pane_t1
+                                                  ( KVarityNaviPaneContents );
+    TAknLayoutText navi_pane_t1_layout_text;
+    navi_pane_t1_layout_text.LayoutText( indicator_rect, nave_pane_t1_layout );
+    iIindicator->SetFont( navi_pane_t1_layout_text.Font() );
+    iIindicator->SetLabelAlignment( navi_pane_t1_layout_text.Align() );
+    
+    // hwr_training_write_pane
+    TAknWindowComponentLayout write_pane_layout = 
+               AknLayoutScalable_Apps::hwr_training_write_pane( aVarity );       
+    TAknLayoutRect write_pane_layout_rect;
+    write_pane_layout_rect.LayoutRect( main_pane_rect, write_pane_layout );
+    iHwrBox->SetRect( write_pane_layout_rect.Rect() );
+    
+    TPoint hwrPos = iHwrBox->PositionRelativeToScreen();
+    iHwrBox->SetTooltipPosition( hwrPos + TPoint( iHwrBox->Size().iWidth, KHwrTooltipY ) );
+    
+    // hwr_training_instruct_pane
+    TAknWindowComponentLayout instruct_pane_layout = 
+               AknLayoutScalable_Apps::hwr_training_instruct_pane( aVarity );       
+    TAknLayoutRect instruct_pane_layout_rect;
+    instruct_pane_layout_rect.LayoutRect( main_pane_rect, instruct_pane_layout );    
+    iLabelPaneRect = instruct_pane_layout_rect.Rect();
+    
+    // count of text rows
+    TInt count = AknLayoutScalable_Apps::
+                 list_single_hwr_training_instruct_pane_ParamLimits().LastRow() + 1;
+
+    // array contains all text rows in help screen
+    RArray<TAknTextComponentLayout> textLayoutArray; 
+    iLineWidthArray.Reset();
+    for( TInt i = 0; i < count; i++ )
+        {
+        // pane area for each row
+        TAknWindowComponentLayout each_row_layout =  
+            AknLayoutScalable_Apps::list_single_hwr_training_instruct_pane( 0, 0, i );
+        TAknLayoutRect each_row_layout_rect;
+        each_row_layout_rect.LayoutRect( iLabelPaneRect, 
+                                         each_row_layout );
+        iLineWidthArray.Append( each_row_layout_rect.Rect().Width() );
+        // smaller pane for text itself
+        TAknTextComponentLayout each_row_text_layout =  
+            AknLayoutScalable_Apps::list_single_hwr_training_instruct_pane_t1();
+             
+        // composition of two latter componets
+        TAknTextComponentLayout textCompCompositionWiz = 
+            TAknWindowComponentLayout::ComposeText(
+                each_row_layout, each_row_text_layout );
+ 
+        TRAPD(error, textLayoutArray.AppendL( textCompCompositionWiz ) );
+        // if error in append function, then just exit the loop      
+        if ( error != KErrNone )
+            {
+            
+            break;
+            }
+        }       
+        
+    iMultilineLayout = TAknTextComponentLayout::Multiline( textLayoutArray );        
+    if ( iLabeltext && iWrappedLabelText )
+        {
+        // Be ready to show label
+        TAknLayoutText multilineTextLayout;
+        multilineTextLayout.LayoutText( iLabelPaneRect, iMultilineLayout );    
+        const CFont* font = AknLayoutUtils::FontFromId( iMultilineLayout.FontId() );
+        TRAPD( err, WrapLabelTextL( font, *iLabeltext, iLineWidthArray, iWrappedLabelText ) );
+        if ( err == KErrNone )
+            {
+            TRAP_IGNORE( iLabel->SetTextL( *iWrappedLabelText ) );
+            }
+        else
+            {
+            TRAP_IGNORE( iLabel->SetTextL( *iLabeltext ) );
+            }        
+        AknLayoutUtils::LayoutLabel( iLabel, 
+                                     iLabelPaneRect, 
+                                     iMultilineLayout );
+        }
+    textLayoutArray.Close();
+    
+    TRgb labelColor = KRgbBlack;
+    TInt error = GetCachedLabelTextColor( labelColor );
+    if ( error == KErrNone )
+        {
+        TRAP_IGNORE( iLabel->OverrideColorL( EColorLabelText, labelColor ) );
+        TRAP_IGNORE( iIindicator->OverrideColorL( EColorLabelText, labelColor ) );
+        }
+    }
+    
+void CTruiMainViewContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+    {    
+    if ( iHwrBox->BoxState() == CTruiHwrBox::ENewModelDraw )
+        {
+        //Call save function from hwrbox,
+        //in order to stop periodics in the hwrbox
+        iHwrBox->HandlePointerEventL( aPointerEvent );       
+        }
+    else
+        {
+        CCoeControl::HandlePointerEventL( aPointerEvent );
+        }    
+    }
+