appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogselectlanguage_symbian.cpp
branchRCL_3
changeset 25 7333d7932ef7
equal deleted inserted replaced
24:5cc91383ab1e 25:7333d7932ef7
       
     1 /*
       
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: Symbian-specific part of the language selection dialog in SifUi
       
    15 *
       
    16 */
       
    17 
       
    18 #include "sifuidialogselectlanguage.h"  // SifUiDialogSelectLanguage
       
    19 #include <languages.hrh>                // S60 language definitions
       
    20 #include <hb/hbcore/hblocaleutil.h>     // HbLocaleUtil
       
    21 #include <s32mem.h>                     // RMemReadStream
       
    22 
       
    23 //
       
    24 // String array to convert Symbian TLanguage enums to ISO 639-1 language codes.
       
    25 //
       
    26 struct SLangString
       
    27     {
       
    28     TInt iId;
       
    29     const TText8* iCode;
       
    30     };
       
    31 
       
    32 const TInt KLangCodeLength = 2;
       
    33 const SLangString KLangStrings[] =
       
    34     {
       
    35     { ELangEnglish,                 _S8( "en" ) },
       
    36     { ELangFrench,                  _S8( "fr" ) },
       
    37     { ELangGerman,                  _S8( "de" ) },
       
    38     { ELangSpanish,                 _S8( "es" ) },
       
    39     { ELangItalian,                 _S8( "it" ) },
       
    40     { ELangSwedish,                 _S8( "sv" ) },
       
    41     { ELangDanish,                  _S8( "da" ) },
       
    42     { ELangNorwegian,               _S8( "no" ) },
       
    43     { ELangFinnish,                 _S8( "fi" ) },
       
    44     { ELangAmerican,                _S8( "en" ) },
       
    45     { ELangSwissFrench,             _S8( "fr" ) },
       
    46     { ELangSwissGerman,             _S8( "de" ) },
       
    47     { ELangPortuguese,              _S8( "pt" ) },
       
    48     { ELangTurkish,                 _S8( "tr" ) },
       
    49     { ELangIcelandic,               _S8( "is" ) },
       
    50     { ELangRussian,                 _S8( "ru" ) },
       
    51     { ELangHungarian,               _S8( "hu" ) },
       
    52     { ELangDutch,                   _S8( "nl" ) },
       
    53     { ELangBelgianFlemish,          _S8( "nl" ) },
       
    54     { ELangAustralian,              _S8( "en" ) },
       
    55     { ELangBelgianFrench,           _S8( "fr" ) },
       
    56     { ELangAustrian,                _S8( "de" ) },
       
    57     { ELangNewZealand,              _S8( "en" ) },
       
    58     { ELangInternationalFrench,     _S8( "fr" ) },
       
    59     { ELangCzech,                   _S8( "cs" ) },
       
    60     { ELangSlovak,                  _S8( "sk" ) },
       
    61     { ELangPolish,                  _S8( "pl" ) },
       
    62     { ELangSlovenian,               _S8( "sl" ) },
       
    63     { ELangTaiwanChinese,           _S8( "zh" ) },
       
    64     { ELangHongKongChinese,         _S8( "zh" ) },
       
    65     { ELangPrcChinese,              _S8( "zh" ) },
       
    66     { ELangJapanese,                _S8( "ja" ) },
       
    67     { ELangThai,                    _S8( "th" ) },
       
    68     { ELangAfrikaans,               _S8( "af" ) },
       
    69     { ELangAlbanian,                _S8( "sq" ) },
       
    70     { ELangAmharic,                 _S8( "am" ) },
       
    71     { ELangArabic,                  _S8( "ar" ) },
       
    72     { ELangArmenian,                _S8( "hy" ) },
       
    73     { ELangTagalog,                 _S8( "tl" ) },
       
    74     { ELangBelarussian,             _S8( "be" ) },
       
    75     { ELangBengali,                 _S8( "bn" ) },
       
    76     { ELangBulgarian,               _S8( "bg" ) },
       
    77     { ELangBurmese,                 _S8( "my" ) },
       
    78     { ELangCatalan,                 _S8( "ca" ) },
       
    79     { ELangCroatian,                _S8( "hr" ) },
       
    80     { ELangCanadianEnglish,         _S8( "en" ) },
       
    81     { ELangInternationalEnglish,    _S8( "en" ) },
       
    82     { ELangSouthAfricanEnglish,     _S8( "en" ) },
       
    83     { ELangEstonian,                _S8( "et" ) },
       
    84     { ELangFarsi,                   _S8( "fa" ) },
       
    85     { ELangCanadianFrench,          _S8( "fr" ) },
       
    86     { ELangScotsGaelic,             _S8( "gd" ) },
       
    87     { ELangGeorgian,                _S8( "ka" ) },
       
    88     { ELangGreek,                   _S8( "el" ) },
       
    89     { ELangCyprusGreek,             _S8( "el" ) },
       
    90     { ELangGujarati,                _S8( "gu" ) },
       
    91     { ELangHebrew,                  _S8( "he" ) },
       
    92     { ELangHindi,                   _S8( "hi" ) },
       
    93     { ELangIndonesian,              _S8( "id" ) },
       
    94     { ELangIrish,                   _S8( "ga" ) },
       
    95     { ELangSwissItalian,            _S8( "it" ) },
       
    96     { ELangKannada,                 _S8( "kn" ) },
       
    97     { ELangKazakh,                  _S8( "kk" ) },
       
    98     { ELangKhmer,                   _S8( "km" ) },
       
    99     { ELangKorean,                  _S8( "ko" ) },
       
   100     { ELangLao,                     _S8( "lo" ) },
       
   101     { ELangLatvian,                 _S8( "lv" ) },
       
   102     { ELangLithuanian,              _S8( "lt" ) },
       
   103     { ELangMacedonian,              _S8( "mk" ) },
       
   104     { ELangMalay,                   _S8( "ms" ) },
       
   105     { ELangMalayalam,               _S8( "ml" ) },
       
   106     { ELangMarathi,                 _S8( "mr" ) },
       
   107     { ELangMoldavian,               _S8( "mo" ) },
       
   108     { ELangMongolian,               _S8( "mn" ) },
       
   109     { ELangNorwegianNynorsk,        _S8( "nn" ) },
       
   110     { ELangBrazilianPortuguese,     _S8( "pt" ) },
       
   111     { ELangPunjabi,                 _S8( "pa" ) },
       
   112     { ELangRomanian,                _S8( "ro" ) },
       
   113     { ELangSerbian,                 _S8( "sr" ) },
       
   114     { ELangSinhalese,               _S8( "si" ) },
       
   115     { ELangSomali,                  _S8( "so" ) },
       
   116     { ELangInternationalSpanish,    _S8( "es" ) },
       
   117     { ELangLatinAmericanSpanish,    _S8( "es" ) },
       
   118     { ELangSwahili,                 _S8( "sw" ) },
       
   119     { ELangFinlandSwedish,          _S8( "sv" ) },
       
   120     { ELangReserved1,               _S8( "en" ) },
       
   121     { ELangTamil,                   _S8( "ta" ) },
       
   122     { ELangTelugu,                  _S8( "te" ) },
       
   123     { ELangTibetan,                 _S8( "bo" ) },
       
   124     { ELangTigrinya,                _S8( "ti" ) },
       
   125     { ELangCyprusTurkish,           _S8( "tr" ) },
       
   126     { ELangTurkmen,                 _S8( "tk" ) },
       
   127     { ELangUkrainian,               _S8( "uk" ) },
       
   128     { ELangUrdu,                    _S8( "ur" ) },
       
   129     { ELangReserved2,               _S8( "en" ) },
       
   130     { ELangVietnamese,              _S8( "vi" ) },
       
   131     { ELangWelsh,                   _S8( "cy" ) },
       
   132     { ELangZulu,                    _S8( "zu" ) },
       
   133     { KLangTaiwanEnglish,           _S8( "en" ) },
       
   134     { KLangHongKongEnglish,         _S8( "en" ) },
       
   135     { KLangPrcEnglish,              _S8( "en" ) },
       
   136     { KLangJapaneseEnglish,         _S8( "en" ) },
       
   137     { KLangThaiEnglish,             _S8( "en" ) }
       
   138     };
       
   139 
       
   140 #define KNUMLANGSTRINGS ( sizeof( KLangStrings ) / sizeof( SLangString ) )
       
   141 
       
   142 
       
   143 // ======== LOCAL FUNCTIONS ========
       
   144 
       
   145 // ----------------------------------------------------------------------------
       
   146 // LanguageCode()
       
   147 // ----------------------------------------------------------------------------
       
   148 //
       
   149 QString LanguageCode( const TLanguage aLanguage )
       
   150 {
       
   151     for( TInt index = 0; index < KNUMLANGSTRINGS; ++index )
       
   152         {
       
   153         SLangString lang = KLangStrings[ index ];
       
   154         if( lang.iId == aLanguage )
       
   155             {
       
   156             return QString::fromAscii( reinterpret_cast<const char*>( lang.iCode ),
       
   157                 KLangCodeLength );
       
   158             }
       
   159         }
       
   160     return QString("");
       
   161 }
       
   162 
       
   163 // ----------------------------------------------------------------------------
       
   164 // LanguageName()
       
   165 // ----------------------------------------------------------------------------
       
   166 //
       
   167 QString LanguageName( const TLanguage aLanguage )
       
   168 {
       
   169     QString langCode = LanguageCode( aLanguage );
       
   170     if( langCode.isEmpty() ) {
       
   171         return hbTrId("txt_installer_list_unknown_language");
       
   172     }
       
   173     QString langName = HbLocaleUtil::localisedLanguageName( langCode );
       
   174     if( langName.isEmpty() ) {
       
   175         return hbTrId("txt_installer_list_unknown_language");
       
   176     }
       
   177     return langName;
       
   178 }
       
   179 
       
   180 // ----------------------------------------------------------------------------
       
   181 // LanguageNamesL()
       
   182 // ----------------------------------------------------------------------------
       
   183 //
       
   184 QStringList LanguageNamesL( const TDesC8& aBuf )
       
   185 {
       
   186     RMemReadStream readStream( aBuf.Ptr(), aBuf.Size() );
       
   187     CleanupClosePushL( readStream );
       
   188     RArray<TLanguage> langArray;
       
   189     TPckg< RArray<TLanguage> > langArrayPckg( langArray );
       
   190     readStream.ReadL( langArrayPckg );
       
   191     CleanupStack::PopAndDestroy( &readStream );
       
   192 
       
   193     QStringList langNames;
       
   194     for( TInt index = 0; index < langArray.Count(); index++ ) {
       
   195         QT_TRYCATCH_LEAVING( langNames.append( LanguageName( langArray[index] ) ) );
       
   196     }
       
   197     return langNames;
       
   198 }
       
   199 
       
   200 
       
   201 // ======== MEMBER FUNCTIONS ========
       
   202 
       
   203 // ----------------------------------------------------------------------------
       
   204 // SifUiDialogSelectLanguage::languageNames()
       
   205 // ----------------------------------------------------------------------------
       
   206 //
       
   207 QStringList SifUiDialogSelectLanguage::languageNames(const QVariant& languages)
       
   208 {
       
   209     QByteArray byteArray = languages.toByteArray();
       
   210     QStringList names;
       
   211 
       
   212     const TPtrC8 ptr(reinterpret_cast<const TText8*>(byteArray.constData()), byteArray.length());
       
   213     QT_TRAP_THROWING( names = LanguageNamesL( ptr ) );
       
   214 
       
   215     return names;
       
   216 }
       
   217