diff -r 000000000000 -r eb1f2e154e89 textinput/AknInputLanguage/src/ptiInputLanguageInfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/AknInputLanguage/src/ptiInputLanguageInfo.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,189 @@ +/* +* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0"" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +* +*/ + + +// INCLUDE FILES + +#include "AknInputLanguageInfo.h" +#include "ptiInputLanguageInfo.h" + +// CONSTANTS +const TInt KInputLanguageArrayGranularity = 10; + +// CLASS IMPLEMENTATION + +CT9InputLanguageInfo::CT9InputLanguageInfo() + {} + + +CT9InputLanguageInfo* CT9InputLanguageInfo::NewL() + { + CT9InputLanguageInfo* self = new(ELeave)CT9InputLanguageInfo(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); //self + return self; + } + +void CT9InputLanguageInfo::ConstructL() + { + // This implementation uses english dictionary by default + iPtiEngineInterface = CPtiEngine::NewL(); + iPtiEngineInterface->ActivateLanguageL(ELangEnglish); + } + +EXPORT_C CT9InputLanguageInfo::~CT9InputLanguageInfo() + { + if(iPtiEngineInterface) + { + TRAP_IGNORE( iPtiEngineInterface->CloseCurrentLanguageL()); + } + delete iPtiEngineInterface; + } + + +EXPORT_C void CT9InputLanguageInfo::AppendAvailableLanguagesL( CAknInputLanguageList* aList ) + { + TAknInputLanguageCapabilities capabilityFilter; + capabilityFilter.SetAllCapabilities(); + // Implemented by calling the more generic method with all filtering off: + AppendLanguagesL( aList, NULL, capabilityFilter ); + } + +EXPORT_C void CT9InputLanguageInfo::AppendLanguagesL( + CAknInputLanguageList* aList, + CArrayFix* aLanguageCodeList, + TAknInputLanguageCapabilities& aCapabilityFilter) + { + // Provide new arrays for the call + CArrayFixFlat* langCodes = new (ELeave) CArrayFixFlat( KInputLanguageArrayGranularity ); + CleanupStack::PushL( langCodes ); + + iPtiEngineInterface->GetAvailableLanguagesL( langCodes ); + + TInt count = langCodes->Count(); + + // Loop over the codes, appending them into the existing array; + for ( TInt index = 0; index < count; ++index ) + { + TLanguage langCode = (TLanguage)langCodes->At(index); + + // Filter by language code if array exists + if ( !( aLanguageCodeList && !IsInLanguageCodeList(aLanguageCodeList, langCode ) ) ) + { + TBool chineseLanguage = (langCode == ELangTaiwanChinese || langCode == ELangHongKongChinese || langCode == ELangPrcChinese); + + // Temporary solution for Chinese variants. + // All Chinese languages are shown in the input language list. + // In western functionality we strip out secondary languages. + if ( chineseLanguage || !(!aLanguageCodeList && 0) ) // missing secondary language functionality + { + TAknInputLanguageCapabilities capabilities = LanguageCapabilitiesFromLanguage( langCode ); + // Test is passed if the filter has no support at all (no filtering to be done) + // or there is a filter, but the language supports it + if ( !aCapabilityFilter.HasAnySupport() || (capabilities.FilteredCapabilities( aCapabilityFilter )).HasAnySupport() ) + { + CAknInputLanguageItem* inputItem = CAknInputLanguageItem::NewL( langCode, LanguageName(langCode), capabilities ); + CleanupStack::PushL( inputItem ); + aList->AppendL( inputItem ); // Takes full ownership + CleanupStack::Pop(); // inputItem + } + } + } + } + + CleanupStack::PopAndDestroy(1); // langcodes + } + +TBool CT9InputLanguageInfo::IsInLanguageCodeList( CArrayFix* aLanguageList, TLanguage aLanguageCode ) + { + TBool retVal = EFalse; + + TInt index; + TInt count = aLanguageList->Count(); + for (index = 0; index < count; ++index ) + { + TInt language = aLanguageList->At( index ); + language &= 0x03FF; + if (language == ELangOther) + { + language = ELangEnglish; + } + if (language == aLanguageCode) + { + retVal = ETrue; + break; + } + } + return retVal; + } + + +EXPORT_C TAknInputLanguageCapabilities CT9InputLanguageInfo::LanguageCapabilitiesFromLanguage( TLanguage aLanguageId ) + { + // essentially this is to map the capabilities to the non-t9 defined ones: + + MPtiLanguage* lang = iPtiEngineInterface->GetLanguage(aLanguageId); + + TAknInputLanguageCapabilities returnCapabilities; + + if ( lang ) + { + returnCapabilities.AssignCapability( TAknInputLanguageCapabilities::EMultitap, ETrue ); + + if (!lang->HasInputMode(EPtiEngineMultitapping)) + { + returnCapabilities.AssignCapability( TAknInputLanguageCapabilities::EMultitap, EFalse ); + } + + if (lang->HasInputMode(EPtiEnginePredictive)) + { + returnCapabilities.AssignCapability( TAknInputLanguageCapabilities::EPredictive, ETrue ); + } + } + else + { + returnCapabilities.AssignCapability( TAknInputLanguageCapabilities::EMultitap, EFalse ); + } + + return returnCapabilities; + } + +EXPORT_C TAknLanguageName CT9InputLanguageInfo::LanguageName( TLanguage aLanguageCode ) const + { + MPtiLanguage* lang = iPtiEngineInterface->GetLanguage(aLanguageCode); + return lang->LocalizedName(); + } + +EXPORT_C TLanguage CT9InputLanguageInfo::UrlLanguage() const + { + // English returned for default implementation + return ELangEnglish; + } + +// +// Class CAknInputLanguageInfoFactory +// + +EXPORT_C CAknInputLanguageInfo* AknInputLanguageInfoFactory::CreateInputLanguageInfoL() + { + CAknInputLanguageInfo* info = CT9InputLanguageInfo::NewL(); + return info; + } + +// End of File