textinput/AknInputLanguage/src/ptiInputLanguageInfo.cpp
changeset 0 eb1f2e154e89
child 7 6defe5d1bd39
--- /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<TInt>* aLanguageCodeList, 
+													 TAknInputLanguageCapabilities& aCapabilityFilter) 
+	{
+    // Provide new arrays for the call 
+	CArrayFixFlat<TInt>* langCodes = new (ELeave) CArrayFixFlat<TInt>( 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<TInt>* 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