--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/src/AknFepUiManagerWestern.cpp Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,710 @@
+/*
+* Copyright (c) 2003-2004 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:
+* Provides the CAknFepUIManagerWestern methods.
+*
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+// INCLUDE FILES
+#include <e32svr.h> // RDebug stuff...
+#include <e32keys.h>
+#include <AknsUtils.h>
+
+#include "AknFepGlobalEnums.h"
+#include "AknFepManagerUIInterface.h"
+#include "AknFepManagerInterface.h"
+#include "AknFepUIManagerStateInterface.h"
+#include "AknFepUiManagerBase.h"
+#include "AknFepUiManagerWestern.h"
+
+// Western input
+#include "AknFepUiInputStateInitialLatinMultitap.h"
+#include "AknFepUiInputStateInitialNumber.h"
+#include "AknFepUiInputStateInitialWesternPredictive.h"
+#include "AknFepUiInputStateEntryWesternPredictive.h"
+#include "AknFepUiInputStateInitialHalfQwertyWesternPredictive.h"
+#include "AknFepUiInputStateEntryHalfQwertyWesternPredictive.h"
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+// Predictive QWERTY changes ---->
+#include "AknFepUiInputStateInitialQwertyWesternPredictive.h"
+#include "AknFepUiInputStateEntryQwertyWesternPredictive.h"
+// Predictive QWERTY changes <----
+#endif //RD_INTELLIGENT_TEXT_INPUT
+#include "AknFepPluginManager.h"
+
+// Arabic & Hebrew input
+#include "AknFepUiInputStateInitialArabicHebrewMultitap.h"
+#include "AknFepUiInputStateInitialArabicHebrewPredictive.h"
+#include "AknFepUiInputStateEntryArabicHebrewPredictive.h"
+
+// Thai input
+#include "AknFepUIInputStateInitialThaiMultitap.h"
+#include "AknFepUiInputStateInitialThaiPredictive.h"
+#include "AknFepUiInputStateEntryThaiPredictive.h"
+
+#include "AknFepThaiSCTSelector.h"
+
+//Hindi Input
+#include "AknFepUIInputStateInitialIndicMultitap.h"
+#include "AknFepUiInputStateInitialIndicPredictive.h"
+#include "AknFepUiInputStateEntryIndicPredictive.h"
+#include "AknFepUiIndicInputManager.h"
+
+// Qwerty input
+#include "AknFepUiInputStateQwerty.h"
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+#include "AknFepUiInputStateHalfQwerty.h"
+#endif
+
+#ifdef RD_HINDI_PHONETIC_INPUT
+#include "aknfepuiinputstateinitialindicphoneticmultitap.h"
+#include "aknfepuiinputstateindicphoneticqwerty.h"
+#endif
+// Vietnamese input
+#include "AknFepUIInputStateInitialVietnameseMultitap.h"
+#include "AknFepVietnameseToneManager.h"
+#include "AknFepUiInputStateEntryVietnamesePredictive.h"
+#include "AknFepCaseManager.h"
+#include "AknFepPanic.h"
+
+// Japanese input
+#include "AknFepUiInputStateEntryWesternPredictiveJp.h"
+
+#include <AknIndicatorContainer.h> // CAknIndicatorContainer::TIndicatorContext
+#include <PtiEngine.h>
+#include <PtiDefs.h>
+#include <PtiUserDicEntry.h>
+#include <AknFep.rsg>
+// CONSTANTS
+
+/**
+ * CAknFepUIManagerWestern class.
+ *
+ */
+
+//============================ MEMBER FUNCTIONS ==============================
+
+
+// ---------------------------------------------------------------------------
+// CAknFepUIManagerWestern::NewL
+//
+//
+// ---------------------------------------------------------------------------
+//
+CAknFepUIManagerWestern* CAknFepUIManagerWestern::NewL(MAknFepManagerUIInterface* aFepMan,
+ CAknFepCaseManager* aCaseMan,
+ TLanguage aLanguage)
+ {
+ CAknFepUIManagerWestern* self = new(ELeave)CAknFepUIManagerWestern(aFepMan, aCaseMan);
+ CleanupStack::PushL(self);
+ self->ConstructL(aLanguage);
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepUIManagerWestern::~CAknFepUIManagerWestern
+//
+//
+// ---------------------------------------------------------------------------
+//
+CAknFepUIManagerWestern::~CAknFepUIManagerWestern()
+ {
+ delete iAknFepThaiSCTSelector;
+ delete iVietToneMarkMgr;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepUIManagerWestern::HandleKeyL
+//
+//
+// ---------------------------------------------------------------------------
+//
+TBool CAknFepUIManagerWestern::HandleKeyL( TInt aKey, TKeyPressLength aLength,
+ TEventCode /*aEventCode*/ )
+ {
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+ // The implementation is anyway identical with the base class, so we can
+ // as well call the base implementation.
+ return CAknFepUIManagerBase::HandleKeyL(aKey, aLength);
+#else
+ TUIState currentState = iFepUiState.State();
+ if (aLength == EShortKeyPress)
+ {
+ iInitialFepUIState = currentState;
+ }
+
+ if(!iStatePtr->HandleKeyL(aKey, aLength))
+ {
+ if(currentState != iStatePtr->State()) //Check to see if we've changed state.
+ {
+ return iStatePtr->HandleKeyL(aKey, aLength);
+ }
+ return EFalse; // we've failed to handle it..
+ }
+ return ETrue; //we're ok.
+#endif // RD_INTELLIGENT_TEXT_INPUT
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepUIManagerWestern::CloseUI
+//
+//
+// ---------------------------------------------------------------------------
+//
+void CAknFepUIManagerWestern::CloseUI()
+ {
+ ChangeState(EInitial);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAknFepUIManagerWestern::AddTextToUserDictionaryL
+//
+//
+// ---------------------------------------------------------------------------
+//
+void CAknFepUIManagerWestern::AddTextToUserDictionaryL(const TDesC& aText)
+ {
+ HBufC* udbTextBuf = HBufC::NewLC(CAknFepManager::EMaximumFepWordLength); // buffer for text
+ TPtr udbText=udbTextBuf->Des();
+ TChar ch;
+
+ TInt textLengthToAdd = Min((TInt)CAknFepManager::EMaximumFepWordLength, aText.Length());
+
+ for (TInt ii=0; ii < textLengthToAdd; ii++)
+ {
+ ch = STATIC_CAST(TChar, aText[ii]);
+ udbText.Append(ch);
+ if (ch.IsSpace() || ii == textLengthToAdd-1)
+ {
+ if (ch.IsSpace())
+ {
+ udbText.Delete(udbText.Length()-1, CAknFepManager::ESingleCharacter);
+ }
+ if (udbText.Length())
+ {
+ // add the contents of udbText to the user dictionary.
+ CPtiEngine* ptiengine = PtiEngine();
+ TPtiUserDictionaryEntry newUdbEntry(udbText);
+ TPtiEngineInputMode currentInputMode = ptiengine->InputMode();
+ // PtiEngine needs to be in predictive mode when the word is added to UDB.
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+ if(iQwertyInputMode)
+ {
+#ifdef __HALF_QWERTY_KEYPAD
+ if( EPtiKeyboardHalfQwerty == iFepMan->KeyboardLayout())
+ {
+ ptiengine->SetInputMode( EPtiEngineHalfQwertyPredictive );
+ }
+ else
+#endif //__HALF_QWERTY_KEYPAD
+ {
+ ptiengine->SetInputMode(EPtiEngineQwertyPredictive );
+ }
+ }
+ else
+#endif //RD_INTELLIGENT_TEXT_INPUT
+ {
+ ptiengine->SetInputMode(EPtiEnginePredictive);
+ }
+ ptiengine->AddUserDictionaryEntry(newUdbEntry);
+ ptiengine->SetInputMode(currentInputMode);
+ }
+ udbText.Zero();
+ }
+ }
+ CleanupStack::PopAndDestroy(); // udbTextBuf
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepUIManagerWestern::GetFormatOfFepInlineText
+//
+//
+// ---------------------------------------------------------------------------
+//
+void CAknFepUIManagerWestern::GetFormatOfFepInlineText(TCharFormat& aFormat,
+ TInt& aNumberOfCharactersWithSameFormat,
+ TInt aPositionOfCharacter) const
+ {
+ if ( (iPredictive && iFepUiState.State() == EEntry )
+#ifdef RD_HINDI_PHONETIC_INPUT
+//adding condition to underline uncommitted text for hindi phonetic
+ || TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage( ( TLanguage )iLanguage )
+#endif
+ ) // EInitial???
+ {
+ aFormat.iFontPresentation.iUnderline = EUnderlineOn;
+ if (iFepMan->IsFlagSet(CAknFepManager::EFlagNoMatches))
+ {
+ aFormat.iFontPresentation.iHighlightStyle =
+ TFontPresentation::EFontHighlightNoMatchesIndicator;
+ }
+ TCursorSelection uncommit = iFepMan->UncommittedText();
+ TInt lengthOfRemainderOfInlineText = uncommit.Length()-aPositionOfCharacter;
+#ifndef RD_INTELLIGENT_TEXT_INPUT
+ if(iFepMan->IsAutoCompleteOn())
+ {
+ // For AutoWord Completion - the suggested completion has to be gray slated
+ CPtiEngine* ptiengine = PtiEngine();
+ TInt actualLength = (ptiengine->CurrentInputSequence()).Length();
+
+ if(lengthOfRemainderOfInlineText>0)
+ {
+ if(actualLength < lengthOfRemainderOfInlineText)
+ {
+ if(iLanguage == ELangHindi)
+ {
+ TBuf<CAknFepManager::EMaximumFepWordLength> currentWord(ptiengine->CurrentWord()); //
+ // AutoComplete - Fix - Begin
+ if(actualLength < currentWord.Length())
+ {
+ TUint currentchar = TUint(currentWord[actualLength]);
+ while((TAknFepUiIndicInputManager::IsIndicDependantCharacter(currentchar, iLanguage)))
+ {
+ actualLength++;
+ if(!(actualLength < currentWord.Length()))
+ break;
+ currentchar = TUint(currentWord[actualLength]);
+ }
+ // AutoComplete - Fix - Begin
+ }
+ }
+ }
+
+ if (aPositionOfCharacter<actualLength && (lengthOfRemainderOfInlineText>0))
+ {
+ aFormat.iFontPresentation.iUnderline = EUnderlineOn;
+ aNumberOfCharactersWithSameFormat = actualLength;
+ }
+ else
+ {
+ // Display the autocompleted text in gray colour
+ TRgb autoTextColor;
+ MAknsSkinInstance *skin = AknsUtils::SkinInstance();
+ TInt err = AknsUtils::GetCachedColor( skin, autoTextColor, KAknsIIDQsnTextColors,
+ EAknsCIQsnTextColorsCG64 );
+ if (!err)
+ {
+ aFormat.iFontPresentation.iTextColor = autoTextColor;
+ }
+ else
+ {
+ // In case of error occurs, display text in hardcoded slate gray color
+ aFormat.iFontPresentation.iTextColor = KSLATEGRAY;
+ }
+
+ aNumberOfCharactersWithSameFormat=lengthOfRemainderOfInlineText;
+ }
+ }
+ }
+ else
+#endif
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+// Predictive QWERTY (XT9) changes ---->
+ TInt wordLength = uncommit.Length();
+ if ( lengthOfRemainderOfInlineText > 0 )
+ {
+ TInt tailLength = 0;
+ //TInt err = PtiEngine()->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength );
+ TRAP_IGNORE( PtiEngine()->HandleCommandL(
+ EPtiCommandGetAutoCompletionTailLength,
+ &tailLength ));
+
+ if ( aPositionOfCharacter < wordLength-tailLength )
+ {
+ aFormat.iFontPresentation.iUnderline = EUnderlineOn;
+ aNumberOfCharactersWithSameFormat = lengthOfRemainderOfInlineText-tailLength;
+ }
+ else
+ {
+ aFormat.iFontPresentation.iUnderline = EUnderlineOff;
+ aFormat.iFontPresentation.iTextColor = KSLATEGRAY;
+ aNumberOfCharactersWithSameFormat=lengthOfRemainderOfInlineText;
+ }
+ }
+#else
+#ifdef RD_HINDI_PHONETIC_INPUT
+ //for phonetic, space character needs to be checked explicitly so that it is not underlined
+ //for predictive when space is entered it gets committed and changes to initial state, hence check is not present
+ if(TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage( ( TLanguage )iLanguage ) )
+ {
+ TChar tempChar(0);
+ iFepUiState.GetPhoneticLatinChar(tempChar);
+ if(tempChar.IsSpace())
+ aFormat.iFontPresentation.iUnderline = EUnderlineOff;
+ }
+ #else
+ if (lengthOfRemainderOfInlineText>0)
+ {
+ aFormat.iFontPresentation.iUnderline = EUnderlineOn;
+ aNumberOfCharactersWithSameFormat=lengthOfRemainderOfInlineText;
+ }
+ #endif
+// Predictive QWERTY (XT9) changes <----
+#endif //RD_INTELLIGENT_TEXT_INPUT
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAknFepUIManagerWestern::SupportLanguage
+//
+//
+// ---------------------------------------------------------------------------
+//
+TInt CAknFepUIManagerWestern::SupportLanguage(TInt aMode) const
+ {
+ TInt lang = iLanguage;
+ switch (aMode)
+ {
+ case ELatin:
+ {
+ if ( iLanguage == ELangTaiwanChinese ||
+ iLanguage == ELangHongKongChinese ||
+ iLanguage == ELangPrcChinese ||
+ iLanguage == ELangJapanese ||
+ iLanguage == ELangHindi )
+ {
+ // Chinese and Japanese languages uses always English as a latin language.
+ lang = ELangEnglish;
+ }
+ else
+ {
+ lang = iLanguage;
+ }
+ }
+ break;
+ case ENumber:
+ {
+ if ( iLanguage == ELangJapanese )
+ {
+ // Japanese languages uses always English as a number language for qwerty.
+ lang = ELangEnglish;
+ }
+ else
+ {
+ lang = iLanguage;
+ }
+ }
+ break;
+ case EHindi:
+ case ENativeNumber:
+ lang = iLanguage;
+ break;
+
+
+ default:
+ break;
+ }
+ return lang;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepUIManagerWestern::ActivateUI
+//
+//
+// ---------------------------------------------------------------------------
+//
+void CAknFepUIManagerWestern::ActivateUI()
+ {
+ ChangeState(EEntry);
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepUIManagerWestern::ChangeState
+//
+//
+// ---------------------------------------------------------------------------
+// MAknFepUIManagerStateInterface
+TUIState CAknFepUIManagerWestern::ChangeState(TUIState aState)
+ {
+#ifdef RD_SCALABLE_UI_V2
+ if (iFepMan->PluginUIManager() &&
+ iFepMan->PluginUIManager()->IsMatchState() &&
+ !iFepMan->PluginUIManager()->IsSpellVisible())
+ {
+ //TRAP_IGNORE(iFepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_FINGER));
+ iFepMan->PluginUIManager()->SetFingerMatchSelectionState(EFalse);
+ }
+
+ // For addition of ITI features on FSQ
+ // When candidate list on FSQ is opened, some HW keys may cause state change,
+ // e.g. left/right keys, need to hide candidate list
+ if ( iFepMan->PluginUIManager()
+ && iFepMan->PluginUIManager()->EnableITIOnFSQ() )
+ {
+ TRAP_IGNORE( iFepMan->PluginUIManager()->HideCandidateListL() );
+ }
+
+#endif //RD_SCALABLE_UI_V2
+ switch(aState)
+ {
+ case EInitial:
+ {
+ switch(iMode)
+ {
+ case ELatin:
+ {
+ if (iPredictive)
+ {
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+ // Predictive QWERTY (XT9) changes ---->
+ if (iQwertyInputMode)
+ {
+#ifdef __HALF_QWERTY_KEYPAD
+ if( EPtiKeyboardHalfQwerty == iFepMan->KeyboardLayout())
+ {
+ iFepUiState = TAknFepUiInputStateInitialHalfQwertyWesternPredictive( this );
+ }
+ else
+#endif // Half Qwerty
+ iFepUiState = TAknFepInputStateInitialQwertyWesternPredictive(this);
+ } // Predictive QWERTY (XT9) changes <----
+ else
+#endif // RD_INTELLIGENT_TEXT_INPUT
+ if ( iLanguage == ELangArabic || iLanguage == ELangHebrew
+ || iLanguage == ELangFarsi || iLanguage == ELangUrdu )
+ {
+ iFepUiState = TAknFepInputStateInitialArabicHebrewPredictive(this);
+ }
+ else if (iLanguage == ELangThai)
+ {
+ iFepUiState = TAknFepInputStateInitialThaiPredictive(this);
+ }
+ // Indic Script
+ else
+ {
+ iFepUiState = TAknFepInputStateInitialWesternPredictive(this);
+ }
+ }
+ else
+ {
+ if ( iLanguage == ELangArabic || iLanguage == ELangHebrew
+ || iLanguage == ELangFarsi || iLanguage == ELangUrdu )
+ {
+ iFepUiState = TAknFepInputStateInitialArabicHebrewMultitap(this);
+ }
+ else if (iLanguage == ELangThai)
+ {
+ iFepUiState = TAknFepInputStateInitialThaiMultitap(this);
+ }
+ /* Indic Script */
+
+#ifdef RD_HINDI_PHONETIC_INPUT
+
+ else if(TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage(
+ ( TLanguage )iLanguage ) )
+ {
+ iFepUiState = TAknFepInputStateInitialIndicPhoneticMultitap(
+ this, KLangHindiPhonetic);
+ }
+#endif
+ else if(iLanguage == ELangVietnamese)
+ {
+ iFepUiState = TAknFepInputStateInitialVietnameseMultitap(this);
+ }
+ else
+ {
+ iFepUiState = TAknFepInputStateInitialLatinMultitap(this);
+ }
+ }
+ }
+ break;
+ case EHindi:
+ iFepUiState = TAknFepInputStateInitialIndicMultitap(this, iLanguage);
+ break;
+ case ENumber:
+ case ENativeNumber:
+ {
+ // Map directly to the resources...
+ iFepUiState = TAknFepInputStateInitialNumber(this);
+ break;
+ }
+ default:
+ AknFepPanic(EAknFepPanicBadInputState);
+ }
+ break;
+ }
+ case EEntry:
+ {
+ switch(iMode)
+ {
+ case ELatin:
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+ // Predictive QWERTY (XT9) changes ---->
+ if (iQwertyInputMode)
+ {
+#ifdef __HALF_QWERTY_KEYPAD
+ if( EPtiKeyboardHalfQwerty == iFepMan->KeyboardLayout())
+ {
+ iFepUiState = TAknFepUiInputStateEntryHalfQwertyWesternPredictive( this );
+ }
+ else
+#endif // Half Qwerty
+ iFepUiState = TAknFepInputStateEntryQwertyWesternPredictive(this);
+ } // Predictive QWERTY (XT9) changes <----
+ else
+#endif // RD_INTELLIGENT_TEXT_INPUT
+ if ( iLanguage == ELangArabic || iLanguage == ELangHebrew
+ || iLanguage == ELangFarsi || iLanguage == ELangUrdu)
+ {
+ iFepUiState = TAknFepInputStateEntryArabicHebrewPredictive(this);
+ }
+ else if (iLanguage == ELangThai)
+ {
+ iFepUiState = TAknFepInputStateEntryThaiPredictive(this);
+ }
+ /* Indic Script */
+ else if (iLanguage == ELangVietnamese)
+ {
+ iFepUiState = TAknFepInputStateEntryVietnamesePredictive(this);
+ }
+ else if (iLanguage == ELangJapanese)
+ {
+ iFepUiState = TAknFepInputStateEntryWesternPredictiveJp(this);
+ }
+ else
+ {
+ iFepUiState = TAknFepInputStateEntryWesternPredictive(this);
+ }
+ break;
+ case EHindi:
+ iFepUiState = TAknFepInputStateEntryIndicPredictive(this, iLanguage);
+ break;
+ default:
+ AknFepPanic(EAknFepPanicBadInputState);
+ break;
+ }
+ }
+ break;
+ case EQwerty:
+#ifdef RD_HINDI_PHONETIC_INPUT
+
+ if(iLanguage == KLangHindiPhonetic)
+ {
+ iFepUiState = TAknFepInputStateIndicPhoneticQwerty(this);
+ }
+ else
+ {
+#endif
+ iFepUiState = TAknFepInputStateQwerty(this);
+#ifdef RD_HINDI_PHONETIC_INPUT
+
+ }
+#endif
+ break;
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+ case EHalfQwerty:
+ iFepUiState = TAknFepInputStateHalfQwerty(this);
+ break;
+#endif
+ case ECandidate:
+ AknFepPanic(EAknFepPanicBadInputState);
+ break;
+ case EPredictiveCandidate:
+ {
+ AknFepPanic(EAknFepPanicBadInputState);
+ }
+ break;
+ case EPredictiveInput:
+ AknFepPanic(EAknFepPanicBadInputState);
+ break;
+ default:
+ AknFepPanic(EAknFepPanicBadInputState);
+ }
+
+ iPtiEngine->SetObserver(&iFepUiState);
+#ifdef _DEBUG
+ RDebug::Print(_L("UI Manager: New State: %d"), iFepUiState.State());
+#endif
+ return iStatePtr->State();
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepUIManagerWestern::ThaiSCTResourceId
+//
+//
+// ---------------------------------------------------------------------------
+//
+TInt CAknFepUIManagerWestern::ThaiSCTResourceId(TUint aPrewChar,TInt aKey)
+ {
+ TInt resourceId = 0;
+ if (iAknFepThaiSCTSelector)
+ {
+ resourceId = iAknFepThaiSCTSelector->ThaiSCRResourceId(aPrewChar,aKey);
+ }
+ return resourceId;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepUIManagerWestern::VietnameseToneManager
+//
+//
+// ---------------------------------------------------------------------------
+//
+CAknFepVietnameseToneManager* CAknFepUIManagerWestern::VietnameseToneManager() const
+ {
+ return iVietToneMarkMgr;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepUIManagerWestern::CAknFepUIManagerWestern
+//
+//
+// ---------------------------------------------------------------------------
+//
+CAknFepUIManagerWestern::CAknFepUIManagerWestern(MAknFepManagerUIInterface* aFepMan,
+ CAknFepCaseManager* aCaseMan)
+ : CAknFepUIManagerBase(aFepMan, aCaseMan),
+ iFepUiState(NULL)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepUIManagerWestern::ConstructL
+//
+//
+// ---------------------------------------------------------------------------
+//
+void CAknFepUIManagerWestern::ConstructL(TLanguage aLanguage)
+ {
+ CAknFepUIManagerBase::ConstructL(aLanguage);
+ iAknFepThaiSCTSelector = CAknFepThaiSCTSelector::NewL();
+ iVietToneMarkMgr = CAknFepVietnameseToneManager::NewL();
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepUIManagerWestern::FepUIState
+//
+//
+// ---------------------------------------------------------------------------
+//
+TAknFepInputStateBase* CAknFepUIManagerWestern::FepUIState()
+ {
+ return &iFepUiState;
+ }
+
+// End of file