fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlDualLanguageSettingDialog.cpp
changeset 36 a7632c26d895
parent 35 0f326f2e628e
child 42 b3eaa440ab06
equal deleted inserted replaced
35:0f326f2e628e 36:a7632c26d895
     1 /*
       
     2 * Copyright (c) 2009 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:          
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 
       
    22 
       
    23 
       
    24 
       
    25 
       
    26 
       
    27 #include <CentralRepository.h>
       
    28 #include <AknQueryDialog.h>
       
    29 #include <AknFepInternalCRKeys.h>
       
    30 #include <PtiDefs.h>
       
    31 #include <e32property.h>
       
    32 #include <AvkonInternalCRKeys.h>
       
    33 #include <AknFepGlobalEnums.h>
       
    34 #include <aknnotewrappers.h>
       
    35 #include <aknfep.rsg>
       
    36 #include "AknFepUIAvkonCtrlDualLanguageSettingDialog.h"
       
    37 #include "AknFepUIAvkonCtrlDualLanguageSettingModel.h"
       
    38 #include "AknFepUIAvkonCtrlDualLanguageSettingData.h"
       
    39 
       
    40 CAknFepDualLanguageSettingDialog *CAknFepDualLanguageSettingDialog::NewL(TInt aMenuResId)
       
    41     {
       
    42     CAknFepDualLanguageSettingDialog* self = CAknFepDualLanguageSettingDialog::NewLC(aMenuResId);      
       
    43     CleanupStack::Pop(self);
       
    44     return self;
       
    45     }
       
    46 
       
    47 CAknFepDualLanguageSettingDialog *CAknFepDualLanguageSettingDialog::NewLC(TInt aMenuResId)
       
    48     {
       
    49     CAknFepDualLanguageSettingDialog* self = new (ELeave) CAknFepDualLanguageSettingDialog();
       
    50     CleanupStack::PushL(self);
       
    51     self->ConstructL(aMenuResId);
       
    52     return self;
       
    53     }
       
    54 
       
    55 CAknFepDualLanguageSettingDialog::CAknFepDualLanguageSettingDialog()    
       
    56     {
       
    57     }
       
    58     
       
    59 CAknFepDualLanguageSettingDialog::~CAknFepDualLanguageSettingDialog()
       
    60     {
       
    61     delete iLangData;
       
    62     delete iLanguages;
       
    63     delete iSecondaryLanguages;
       
    64     delete iModel;
       
    65     }
       
    66 
       
    67 SEikControlInfo CAknFepDualLanguageSettingDialog::CreateCustomControlL(TInt /*aControlType*/)
       
    68 {
       
    69     iModel = CAknFepDualLanguageSettingModel::NewL();
       
    70     // construct the data object the settings list will use
       
    71     ReadSettingsDataL();
       
    72         
       
    73     iSettingsList = CAknFepDualLanguageSettingList::NewL(iLangData, this);
       
    74     
       
    75     SEikControlInfo controlInfo;
       
    76     controlInfo.iFlags = EEikControlHasEars;
       
    77     controlInfo.iTrailerTextId = 0;
       
    78     controlInfo.iControl = iSettingsList;
       
    79     STATIC_CAST(CAknFepDualLanguageSettingList*, controlInfo.iControl)->SetContainerWindowL(*this);
       
    80     
       
    81     return controlInfo;
       
    82 }
       
    83 
       
    84 CAknFepDualLanguageSettingDialog::TFormControlTypes CAknFepDualLanguageSettingDialog::ConvertCustomControlTypeToBaseControlType(TInt /*aControlType*/) const
       
    85 {
       
    86     return EPopfieldDerived;
       
    87 }
       
    88 
       
    89 TBool CAknFepDualLanguageSettingDialog::OkToExitL(TInt aButtonId)
       
    90 {
       
    91     TBool retValue = EFalse;
       
    92     switch(aButtonId)
       
    93     {
       
    94     case EAknSoftkeyBack:        
       
    95         retValue = ETrue;
       
    96         break;
       
    97     
       
    98     case EAknSoftkeyOptions:
       
    99         DisplayMenuL();
       
   100         break;
       
   101     
       
   102     case EAknSoftkeyChange:
       
   103         EditItemL(EFalse);
       
   104         break;
       
   105     }
       
   106     return retValue;
       
   107 }
       
   108 
       
   109 
       
   110 void CAknFepDualLanguageSettingDialog::ProcessCommandL(TInt aCommandId)
       
   111     {
       
   112     if(MenuShowing())
       
   113         HideMenu();   
       
   114     
       
   115     switch(aCommandId) 
       
   116         {
       
   117         case EAknFepCmdPredSettingChange:
       
   118             EditItemL(ETrue);
       
   119             break;
       
   120         case EAknCmdHelp:
       
   121             break;
       
   122         case EAknCmdExit:
       
   123 			// Pass the EAknCmdExit command to Avkon 
       
   124 			// Framework 
       
   125 			iAvkonAppUi->ProcessCommandL(aCommandId);
       
   126             break;
       
   127         }
       
   128     }
       
   129 
       
   130 void CAknFepDualLanguageSettingDialog::ReadSettingsDataL()
       
   131     {
       
   132     if(iLangData == NULL)
       
   133         {
       
   134         iLangData = CAknFepDualLanguageSettingData::NewL();
       
   135         }
       
   136     
       
   137     // If the setting page has a list create array which contains all
       
   138     // the items of the list in the setting page:
       
   139 
       
   140     //some dummy size of 10
       
   141     iLanguages = new( ELeave )CArrayFixFlat<TInt>(10);
       
   142 
       
   143     iSecondaryLanguages = new( ELeave )CArrayFixFlat<TInt>(10);
       
   144 
       
   145     //some dummy size of 10
       
   146     CDesCArrayFlat* items = new( ELeave )CDesCArrayFlat(10);
       
   147     CleanupStack::PushL( items );
       
   148 
       
   149     CDesCArrayFlat* secondaryItems = new( ELeave )CDesCArrayFlat(10);
       
   150     CleanupStack::PushL( secondaryItems );
       
   151     
       
   152     //TODO: Adding the GetLanguage and GetSecondaryLanguage APIs
       
   153     iModel->GetLanguagesFromPtiL( NULL, iLanguages, items );
       
   154     iModel->GetSecondaryInputLanguagesL(iSecondaryLanguages, secondaryItems,
       
   155             iCoeEnv);
       
   156     
       
   157     TInt i;
       
   158     TInt currentItem = 0;
       
   159     TInt currentItemSecondary = 0;
       
   160 
       
   161     //fetch the current value from model:
       
   162     // current item is the decimal value of T9 language code from shared data
       
   163     TInt currentInputLanguage =
       
   164     iModel->LanguageL( CAknFepDualLanguageSettingModel::EAknFepDualLanguageSettingInputLanguage );
       
   165 
       
   166     TInt currentInputLanguageSecondary =
       
   167     iModel->LanguageL( CAknFepDualLanguageSettingModel::EAknFepDualLanguageSettingInputLanguageSecondary );
       
   168     
       
   169     // total sum of available T9 dictionaries
       
   170     TInt count = iLanguages->Count();
       
   171 
       
   172     // compare sharedata languageCode with PtiLanguageCode array
       
   173     // Ptilanguage <-> listindex converter
       
   174 
       
   175     for ( i=0;i<count;i++ )
       
   176         {
       
   177         if ((*iLanguages)[i] == currentInputLanguage)
       
   178             {
       
   179             currentItem = i;
       
   180             break;
       
   181             }
       
   182         }
       
   183     
       
   184     count = iSecondaryLanguages->Count();
       
   185 
       
   186     // compare sharedata languageCode with PtiLanguageCode array
       
   187     // Ptilanguage <-> listindex converter
       
   188 
       
   189     for ( i=0;i<count;i++ )
       
   190         {
       
   191         if ((*iSecondaryLanguages)[i] == currentInputLanguageSecondary)
       
   192             {
       
   193             currentItemSecondary = i;
       
   194             break;
       
   195             }
       
   196         }
       
   197 
       
   198     iLangData->LoadL(items, secondaryItems, currentItem, currentItemSecondary);
       
   199     
       
   200     CleanupStack::Pop(secondaryItems);
       
   201     CleanupStack::Pop(items);
       
   202     }
       
   203 
       
   204 void CAknFepDualLanguageSettingDialog::SaveSettingsDataL() const
       
   205     {    
       
   206     TInt index = iSettingsList->SettingItemArray()->ItemIndexFromVisibleIndex(iSettingsList->ListBox()->CurrentItemIndex());
       
   207     TInt curLang = (*iLanguages)[iLangData->CurrentValue()]; 
       
   208        
       
   209     if(0 == index)
       
   210         iModel->SetLanguageL( CAknFepDualLanguageSettingModel::EAknFepDualLanguageSettingInputLanguage, curLang );
       
   211     else
       
   212         {        
       
   213          if(curLang == ELangTaiwanChinese ||
       
   214          curLang == ELangHongKongChinese ||
       
   215          curLang == ELangPrcChinese ||
       
   216          curLang == ELangJapanese ||
       
   217          curLang == ELangKorean )
       
   218              {
       
   219              iModel->SetLanguageL( CAknFepDualLanguageSettingModel::EAknFepDualLanguageSettingInputLanguageSecondary, 0);
       
   220              }
       
   221          else
       
   222              {
       
   223              iModel->SetLanguageL( CAknFepDualLanguageSettingModel::EAknFepDualLanguageSettingInputLanguageSecondary,
       
   224                                (*iSecondaryLanguages)[iLangData->CurrentSecondaryValue()]);
       
   225              }
       
   226          }
       
   227     }
       
   228     
       
   229 void CAknFepDualLanguageSettingDialog::EditItemL(TBool aCalledFromMenu)
       
   230     {
       
   231     iSettingsList->EditCurrentItemL(aCalledFromMenu);
       
   232     TInt curLang = (*iLanguages)[iLangData->CurrentValue()]; 
       
   233     if(curLang == ELangTaiwanChinese ||
       
   234        curLang == ELangHongKongChinese ||
       
   235        curLang == ELangPrcChinese ||
       
   236        curLang == ELangJapanese ||
       
   237        curLang == ELangKorean )
       
   238         {
       
   239         iSettingsList->HideSecondaryInputL(ETrue);
       
   240         }
       
   241     else
       
   242         {
       
   243         iSettingsList->HideSecondaryInputL(EFalse);
       
   244         }
       
   245     
       
   246     iSettingsList->StoreSettingsL();
       
   247     SaveSettingsDataL();
       
   248     }