diff -r fc42a86c98e3 -r 694fa80c203c textinput/peninputhwrtrui/src/truimainviewcontainer.cpp --- a/textinput/peninputhwrtrui/src/truimainviewcontainer.cpp Wed Jun 23 04:57:58 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1333 +0,0 @@ -/* -* 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#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& 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 - ( toolbar->ControlOrNull( EMainViewButtonIdDelete ) ); - iPreviewBtn = static_cast - ( 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; iMdcaCount(); 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 - ( 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 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& 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 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 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 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 ); - } - } -