controlpanelplugins/langandregplugin/src/cplanguageview.cpp
changeset 42 3487b2ea501a
child 43 aae8b749572d
equal deleted inserted replaced
39:5aa7c7ec6b8e 42:3487b2ea501a
       
     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: Language plugin view class
       
    15  *
       
    16  */
       
    17 
       
    18 #include "cplanguageview.h"
       
    19 #include <QDebug>
       
    20 #include <QStringList>
       
    21 #include <QLocale>
       
    22 #include <QDir>
       
    23 #include <QPluginLoader>
       
    24 #include <hbdataform.h>
       
    25 #include <hbdataformmodel.h>
       
    26 #include <hbmessagebox.h>
       
    27 #include <cpsettingformentryitemdata.h>
       
    28 #include <ClockSettingsViewInterface>
       
    29 #include <hbinpututils.h>
       
    30 #include <hbinputsettingproxy>
       
    31 #include <hblocaleutil.h>
       
    32 #include <starterclient.h>
       
    33 #include <hbdevicemessagebox>
       
    34 #include <hbaction.h>
       
    35 #include "cplanguageplugin.h"
       
    36 #include "cplanguagepluginlog.h"
       
    37 
       
    38 static int PRIMARY_INPUT_ITEM_INDEX   = 0;
       
    39 static int SECONDARY_INPUT_ITEM_INDEX = 1;
       
    40 static int REGION_ITEM_INDEX          = 2;
       
    41 
       
    42 /*
       
    43  * Constructor
       
    44  */
       
    45 CpLanguageView::CpLanguageView(QGraphicsItem *parent) :
       
    46     CpBaseSettingView(0,parent),
       
    47     mModel(0),
       
    48     mCurrentLanguagePage(0), 
       
    49     mCurrentRegionItem(0),
       
    50     mCurrentPrimaryInputLanguageItem(0),
       
    51     mCurrentSecondaryInputLanguageItem(0),
       
    52     mClockPluginLoader(0)
       
    53 {
       
    54     CPLANG_LOG_FUNC_ENTRY("CpLanguageView::CpLanguageView")
       
    55     
       
    56     mChineseVariant = CpLanguagePluginUtil::isChineseVariant();
       
    57     if (mChineseVariant) {
       
    58         PRIMARY_INPUT_ITEM_INDEX = 0;
       
    59         SECONDARY_INPUT_ITEM_INDEX = -1; // no secondary writing language in Chinese variant
       
    60         REGION_ITEM_INDEX = 1;
       
    61     }
       
    62     
       
    63     HbDataForm *form = qobject_cast<HbDataForm*>(widget());
       
    64     if (form) {        
       
    65         mModel = new HbDataFormModel;
       
    66         
       
    67         form->setHeading(hbTrId("txt_cp_subhead_display_language"));
       
    68         form->setDescription(hbTrId("txt_cp_info_after_changign_deivce_language_device"));  
       
    69         
       
    70         mLanguageRegionMapping = ExtendedLocaleUtil::localeMappings(true);  
       
    71          
       
    72         mSupportedLanguages = HbLocaleUtil::supportedLanguages();
       
    73         QStringList localizedLanguages = CpLanguagePluginUtil::localizedLanguageNames(mSupportedLanguages);
       
    74                
       
    75         mSupportedRegions = HbLocaleUtil::supportedRegions();
       
    76         QStringList localizedRegions = CpLanguagePluginUtil::localizedRegionNames(mSupportedRegions);
       
    77         
       
    78         CPLANG_LOG ( QString("map count:%1").arg(mLanguageRegionMapping.count()) );
       
    79         CPLANG_LOG ( QString("support language count:%1").arg(mSupportedLanguages.count()) );
       
    80         CPLANG_LOG ( QString("support region count:%1").arg(mSupportedRegions.count()) );
       
    81            
       
    82         HbInputUtils::listSupportedInputLanguages(mPrimaryInputLanguages);
       
    83         QStringList localizedInputLanguages = CpLanguagePluginUtil::localizedInputLanguageNames(mPrimaryInputLanguages);
       
    84         
       
    85         QString currentLanguage = HbLocaleUtil::currentLanguage();
       
    86         
       
    87         //prvious setting
       
    88         mPreviousSetting.languageId = currentLanguage;
       
    89         mPreviousSetting.regionId = HbLocaleUtil::currentRegion();
       
    90         mPreviousSetting.primaryWritingLan = HbInputSettingProxy::instance()->globalInputLanguage();
       
    91         mPreviousSetting.secondaryWritingLan = HbInputSettingProxy::instance()->globalSecondaryInputLanguage();
       
    92         
       
    93         mCurrentSetting = mPreviousSetting;
       
    94         
       
    95         //update with current setting
       
    96         if (LanguageRegionMapping *setting = languageRegionMapping(currentLanguage)) {
       
    97             *setting = mCurrentSetting;
       
    98         }
       
    99               
       
   100         for (int index = 0; index < mLanguageRegionMapping.count();index++) {
       
   101             const LanguageRegionMapping &setting = mLanguageRegionMapping.at(index);
       
   102             HbDataFormModelItem *languageAndRegionPage = mModel->appendDataFormPage( HbLocaleUtil::localisedLanguageName(setting.languageId) );
       
   103             mLanguagePages.append(languageAndRegionPage);
       
   104                          
       
   105             /*
       
   106              * Create primary writing language item.
       
   107              */
       
   108             HbDataFormModelItem *primaryInputLanguageItem = new HbDataFormModelItem(HbDataFormModelItem::ComboBoxItem, 
       
   109                 hbTrId("txt_cp_setlabel_primary_writing_language"));
       
   110             
       
   111                 
       
   112             int primaryInputLanguageIndex = mPrimaryInputLanguages.indexOf(setting.primaryWritingLan);
       
   113             
       
   114             CPLANG_LOG(QLatin1String("Primary input Language:") + setting.primaryWritingLan.asString());
       
   115             CPLANG_LOG(QString("Index of primary input language: %1").arg(primaryInputLanguageIndex));
       
   116             
       
   117             fillDataFormComboBoxItem(primaryInputLanguageItem,localizedInputLanguages,primaryInputLanguageIndex);
       
   118             
       
   119             form->addConnection(primaryInputLanguageItem, SIGNAL(currentIndexChanged (int)),
       
   120                 this,SLOT(onPrimaryInputLanguageChanged(int)));
       
   121             languageAndRegionPage->appendChild(primaryInputLanguageItem);
       
   122             
       
   123             /*
       
   124              * Create secondary writing language item.
       
   125              * (No secondary writing language for Chinese variant)
       
   126              */
       
   127             if (!mChineseVariant) {        
       
   128                 HbDataFormModelItem *secondaryInputLanguageItem = new HbDataFormModelItem(HbDataFormModelItem::ComboBoxItem,
       
   129                     hbTrId("txt_cp_setlabel_secondary_writing_language"));
       
   130                              
       
   131                 form->addConnection(secondaryInputLanguageItem, SIGNAL(currentIndexChanged (int)),
       
   132                     this,SLOT(onSecondaryInputLanguageChanged(int)));
       
   133                 languageAndRegionPage->appendChild(secondaryInputLanguageItem);
       
   134             }
       
   135             
       
   136             /*
       
   137              * Create region item.
       
   138              */
       
   139             HbDataFormModelItem *regionItem = new HbDataFormModelItem(HbDataFormModelItem::ComboBoxItem,
       
   140                 hbTrId("Region"));
       
   141  
       
   142             int regionIndex = mSupportedRegions.indexOf(setting.regionId);
       
   143             
       
   144             CPLANG_LOG(QLatin1String("Current region:") + setting.regionId);
       
   145             CPLANG_LOG(QString("Index of current region: %1").arg(regionIndex));
       
   146             
       
   147             fillDataFormComboBoxItem(regionItem,localizedRegions,regionIndex); 
       
   148             
       
   149             form->addConnection(regionItem, SIGNAL(currentIndexChanged (int)),
       
   150                 this,SLOT(onRegionChanged(int)));
       
   151             languageAndRegionPage->appendChild(regionItem);   
       
   152             
       
   153             if (mSupportedLanguages.at(index) == currentLanguage) {
       
   154                 mCurrentLanguagePage = languageAndRegionPage;
       
   155                 mCurrentRegionItem = mCurrentLanguagePage->childAt(REGION_ITEM_INDEX);
       
   156                 mCurrentPrimaryInputLanguageItem = mCurrentLanguagePage->childAt(PRIMARY_INPUT_ITEM_INDEX);
       
   157                 mCurrentSecondaryInputLanguageItem = mCurrentLanguagePage->childAt(SECONDARY_INPUT_ITEM_INDEX);
       
   158             }
       
   159         }
       
   160         
       
   161         // update secondary input language item according to primary input language
       
   162         updateSecondaryInputLanguageItem();
       
   163         
       
   164         /*
       
   165          * Create region settings item.
       
   166          */ 
       
   167         HbDataFormModelItem *regionalSettingsItem = new HbDataFormModelItem(
       
   168             static_cast<HbDataFormModelItem::DataItemType>(CpSettingFormEntryItemData::ButtonEntryItem));
       
   169         regionalSettingsItem->setContentWidgetData("text",hbTrId("txt_cp_button_regional_settings"));
       
   170         regionalSettingsItem->setContentWidgetData("textAlignment", 
       
   171             QVariant(Qt::AlignHCenter | Qt::AlignVCenter));
       
   172         form->addConnection(regionalSettingsItem,SIGNAL(clicked()),
       
   173             this,SLOT(launchRegionalSettingsView()));
       
   174         
       
   175         mModel->appendDataFormItem(regionalSettingsItem);
       
   176         
       
   177         form->setModel(mModel);
       
   178         // active current language page
       
   179         form->setExpanded(mModel->indexFromItem(mCurrentLanguagePage),true);
       
   180         
       
   181         
       
   182         /*
       
   183          * observe input language changed event
       
   184          */
       
   185         connect(HbInputSettingProxy::instance(),
       
   186             SIGNAL(globalInputLanguageChanged(HbInputLanguage)),
       
   187             this,
       
   188             SLOT(onPrimaryInputLanguageChanged(HbInputLanguage)));
       
   189         
       
   190         connect(HbInputSettingProxy::instance(),
       
   191             SIGNAL(globalSecondaryInputLanguageChanged(HbInputLanguage)),
       
   192             this,
       
   193             SLOT(onSecondaryInputLanguageChanged(HbInputLanguage)));    
       
   194         
       
   195         connect(form,
       
   196             SIGNAL(activated(QModelIndex)),
       
   197             this,
       
   198             SLOT(onDataFormItemActivated(QModelIndex)));
       
   199         
       
   200     }
       
   201 }
       
   202 
       
   203 /*
       
   204  * Destructor
       
   205  */
       
   206 CpLanguageView::~CpLanguageView()
       
   207 {
       
   208     CPLANG_LOG_FUNC_ENTRY("CpLanguageView::~CpLanguageView")
       
   209 	// Unload RegionalSettingsView plugin
       
   210     if (mClockPluginLoader) {
       
   211         mClockPluginLoader->unload();
       
   212         delete mClockPluginLoader;
       
   213     }
       
   214     delete mModel;
       
   215 }
       
   216 
       
   217 /*!
       
   218  * Handle region changed
       
   219  */
       
   220 void CpLanguageView::onRegionChanged(int index)
       
   221 {
       
   222     CPLANG_LOG_FUNC_ENTRY("CpLanguageView::onRegionChanged")
       
   223     
       
   224     CPLANG_LOG(QLatin1String("Before change region:") + HbLocaleUtil::currentRegion());
       
   225     
       
   226     if (index >= 0 && index < mSupportedRegions.count()) {
       
   227 		HbLocaleUtil::changeRegion( mSupportedRegions.at(index) );	
       
   228 		mCurrentSetting.regionId = mSupportedRegions.at(index);
       
   229         if (LanguageRegionMapping *setting = languageRegionMapping(mCurrentSetting.languageId)) {
       
   230             setting->regionId = mCurrentSetting.regionId;
       
   231         }
       
   232 		
       
   233 		CPLANG_LOG(QLatin1String("After change region:") + HbLocaleUtil::currentRegion());
       
   234     }
       
   235 }
       
   236 
       
   237 
       
   238 /*
       
   239  * prompt user to restart device.
       
   240  */
       
   241 bool CpLanguageView::promptRestart()
       
   242 {
       
   243     HbDeviceMessageBox messageBox( 
       
   244         hbTrId("txt_cp_text_edit_device_will_be_restarted_to_chang"), 
       
   245         HbMessageBox::MessageTypeQuestion, this);
       
   246 
       
   247     QString okText = hbTrId("txt_cp_button_restart");
       
   248     QString cancelText = hbTrId("txt_cp_button_discard_changes");
       
   249     messageBox.setAction(new QAction(okText,&messageBox), 
       
   250         HbDeviceMessageBox::AcceptButtonRole);
       
   251     messageBox.setAction(new QAction(cancelText,&messageBox), 
       
   252         HbDeviceMessageBox::RejectButtonRole);
       
   253     messageBox.setIconVisible(false);
       
   254     
       
   255     return (messageBox.exec() 
       
   256             == messageBox.action(HbDeviceMessageBox::AcceptButtonRole) );
       
   257 }
       
   258 
       
   259 /*!
       
   260  * Handle primary language changed.
       
   261  */
       
   262 void CpLanguageView::onPrimaryInputLanguageChanged(int index)
       
   263 {
       
   264     CPLANG_LOG_FUNC_ENTRY("CpLanguageView::onPrimaryInputLanguageChanged(int index)")
       
   265     
       
   266     CPLANG_LOG(QLatin1String("Before change primary input language:") + HbInputSettingProxy::instance()->globalInputLanguage().asString());
       
   267     
       
   268     if (index >= 0 && index < mPrimaryInputLanguages.count()) {
       
   269         HbInputLanguage inputLanguage = mPrimaryInputLanguages.at(index);
       
   270         if (inputLanguage != HbInputSettingProxy::instance()->globalInputLanguage()) {
       
   271             HbInputSettingProxy::instance()->setGlobalInputLanguage(inputLanguage);
       
   272             mCurrentSetting.primaryWritingLan = inputLanguage;
       
   273             if (LanguageRegionMapping *setting = languageRegionMapping(mCurrentSetting.languageId)) {
       
   274                 setting->primaryWritingLan = mCurrentSetting.primaryWritingLan;
       
   275             }
       
   276             
       
   277             updateSecondaryInputLanguageItem();
       
   278             CPLANG_LOG(QLatin1String("After change primary input language:") + HbInputSettingProxy::instance()->globalInputLanguage().asString());
       
   279         }
       
   280     }
       
   281 }
       
   282 
       
   283 /*!
       
   284  * Handle secondary language changed.
       
   285  */
       
   286 void CpLanguageView::onSecondaryInputLanguageChanged(int index)
       
   287 {
       
   288     CPLANG_LOG_FUNC_ENTRY("CpLanguageView::onSecondaryInputLanguageChanged(int index)")
       
   289     
       
   290     CPLANG_LOG(QLatin1String("Before change secondary input language:") + HbInputSettingProxy::instance()->globalSecondaryInputLanguage().asString());
       
   291     
       
   292     if (index >= 0 && index < mSecondaryInputLanguages.count()) {
       
   293         HbInputLanguage inputLanguage = mSecondaryInputLanguages.at(index);
       
   294         if (inputLanguage != HbInputSettingProxy::instance()->globalSecondaryInputLanguage() ) {
       
   295             HbInputSettingProxy::instance()->setGlobalSecondaryInputLanguage(inputLanguage);
       
   296             mCurrentSetting.secondaryWritingLan = inputLanguage;
       
   297             if (LanguageRegionMapping *setting = languageRegionMapping(mCurrentSetting.languageId)) {
       
   298                 setting->secondaryWritingLan = mCurrentSetting.secondaryWritingLan;
       
   299             }
       
   300             
       
   301             CPLANG_LOG(QLatin1String("After change secondary input language:") + HbInputSettingProxy::instance()->globalSecondaryInputLanguage().asString());
       
   302         }
       
   303     }
       
   304 }
       
   305 
       
   306 /*!
       
   307  * Observe primary input language changed event and update the ui, if it is being changed from outside of this plugin
       
   308  */
       
   309 void CpLanguageView::onPrimaryInputLanguageChanged(const HbInputLanguage &inputLanguage)
       
   310 {
       
   311     CPLANG_LOG_FUNC_ENTRY("CpLanguageView::onPrimaryInputLanguageChanged(const HbInputLanguage &inputLanguage)")
       
   312     if (mCurrentPrimaryInputLanguageItem) {
       
   313         int index = mPrimaryInputLanguages.indexOf(inputLanguage);
       
   314         if (index != mCurrentPrimaryInputLanguageItem->contentWidgetData("currentIndex").toInt() ) {
       
   315             CPLANG_LOG( QString("New Index: %1").arg(index) )
       
   316                 
       
   317             mCurrentSetting.primaryWritingLan = inputLanguage;
       
   318             mCurrentPrimaryInputLanguageItem->setContentWidgetData("currentIndex",index);
       
   319             updateSecondaryInputLanguageItem();
       
   320         }
       
   321     }
       
   322 }
       
   323 
       
   324 /*!
       
   325  * Observe secondary input language changed event and update the ui, if it is being changed from outside of this plugin
       
   326  */
       
   327 void CpLanguageView::onSecondaryInputLanguageChanged(const HbInputLanguage &inputLanguage)
       
   328 {
       
   329     CPLANG_LOG_FUNC_ENTRY("CpLanguageView::onSecondaryInputLanguageChanged(const HbInputLanguage &inputLanguage)")
       
   330         
       
   331     if (mCurrentSecondaryInputLanguageItem) {
       
   332         int index = mSecondaryInputLanguages.indexOf(inputLanguage);
       
   333         if (index != mCurrentSecondaryInputLanguageItem->contentWidgetData("currentIndex").toInt()) {
       
   334             CPLANG_LOG( QString("New Index: %1").arg(index) )
       
   335             mCurrentSetting.secondaryWritingLan = inputLanguage;
       
   336             mCurrentSecondaryInputLanguageItem->setContentWidgetData("currentIndex",index);
       
   337         }
       
   338     }
       
   339 }
       
   340 
       
   341 
       
   342 /*!
       
   343  * Fill contents in the data form model items.
       
   344  * \param comboBoxItem a data form model item whose type is HbDataFormModelItem::ComboBoxItem
       
   345  * \param items items showing in the combobox
       
   346  * \param currentIndex index of the selected item
       
   347  */
       
   348 void CpLanguageView::fillDataFormComboBoxItem(HbDataFormModelItem *comboBoxItem,
       
   349                                       const QStringList &items,
       
   350                                       int currentIndex /*= -1*/)
       
   351 {
       
   352     Q_ASSERT(comboBoxItem);
       
   353     Q_ASSERT(comboBoxItem->type() == HbDataFormModelItem::ComboBoxItem);
       
   354     
       
   355     comboBoxItem->setContentWidgetData("items", items);
       
   356     comboBoxItem->setContentWidgetData("currentIndex",currentIndex);
       
   357 }
       
   358 
       
   359 /*!
       
   360  *  Update secondary input language item according to primary input language
       
   361  */
       
   362 void CpLanguageView::updateSecondaryInputLanguageItem()
       
   363 {
       
   364     CPLANG_LOG_FUNC_ENTRY("CpLanguageView::updateSecondaryInputLanguageItem")
       
   365            
       
   366     // no secondary writing language in Chinese variant.
       
   367     if (mChineseVariant) {
       
   368         return;
       
   369     }
       
   370     
       
   371     HbInputLanguage primaryInputLanguage = HbInputSettingProxy::instance()->globalInputLanguage();
       
   372  
       
   373     mSecondaryInputLanguages.clear();
       
   374     // append a "none set" item
       
   375     mSecondaryInputLanguages.append(HbInputLanguage());
       
   376     
       
   377     // Chinese input doesn't have secondary input language
       
   378     if (primaryInputLanguage.language() == QLocale::Chinese) {
       
   379         HbInputSettingProxy::instance()->setGlobalSecondaryInputLanguage(HbInputLanguage());
       
   380         CPLANG_LOG("Primary input language: Chinese");
       
   381     }
       
   382     else {
       
   383         foreach(const HbInputLanguage &inputLanguage,mPrimaryInputLanguages) {
       
   384             if ( inputLanguage != primaryInputLanguage   // Secondary input language can't be set the same as primary input language
       
   385                 && inputLanguage.language() != QLocale::Chinese) {  // Chinese input can't be set as secondary input language
       
   386                 mSecondaryInputLanguages.append(inputLanguage);
       
   387             }
       
   388         }
       
   389     }
       
   390        
       
   391     QStringList localisedNames = CpLanguagePluginUtil::localizedInputLanguageNames(mSecondaryInputLanguages);
       
   392     
       
   393     // if the secondary input language is the same as primary input language, set it as "none set"
       
   394     HbInputLanguage secondaryInputLanguage = HbInputSettingProxy::instance()->globalSecondaryInputLanguage();
       
   395     
       
   396     if (secondaryInputLanguage == primaryInputLanguage) {
       
   397         secondaryInputLanguage = HbInputLanguage();
       
   398         HbInputSettingProxy::instance()->setGlobalSecondaryInputLanguage(HbInputLanguage());  
       
   399         
       
   400         CPLANG_LOG("secondary == primary, set secondary input as \"None\"");
       
   401     }
       
   402     
       
   403     mCurrentSetting.secondaryWritingLan = secondaryInputLanguage;
       
   404     if (LanguageRegionMapping *setting = languageRegionMapping(mCurrentSetting.languageId)) {
       
   405         setting->secondaryWritingLan = mCurrentSetting.secondaryWritingLan;
       
   406     }
       
   407     
       
   408     fillDataFormComboBoxItem(mCurrentSecondaryInputLanguageItem,localisedNames,mSecondaryInputLanguages.indexOf(secondaryInputLanguage)); 
       
   409 }
       
   410 
       
   411 /*!
       
   412  * Restart the device.
       
   413  */
       
   414 int CpLanguageView::restartDevice() 
       
   415 {
       
   416     CPLANG_LOG_FUNC_ENTRY("CpLanguageView::restartDevice")
       
   417 #ifdef Q_OS_SYMBIAN
       
   418     RStarterSession session;
       
   419     TInt error = session.Connect();
       
   420 
       
   421     if (error == KErrNone) {
       
   422         session.Reset( RStarterSession::ELanguageSwitchReset );
       
   423         session.Close();
       
   424     }
       
   425     
       
   426     return error;
       
   427 #else
       
   428     return 0;
       
   429 #endif
       
   430 }
       
   431 
       
   432 /*!
       
   433     Launch the regional settings view.
       
   434  */
       
   435 void CpLanguageView::launchRegionalSettingsView()
       
   436 {    
       
   437     CPLANG_LOG_FUNC_ENTRY("CpLanguageView::launchRegionalSettingsView")
       
   438     
       
   439     //Load the clock settings view plugin if it is not loaded
       
   440     if (!mClockPluginLoader) {
       
   441         QDir dir(CLOCK_SETTINGSVIEW_PLUGIN_PATH);
       
   442         QString pluginName = dir.absoluteFilePath(CLOCK_SETTINGSVIEW_PLUGIN_NAME);
       
   443         mClockPluginLoader = new QPluginLoader(pluginName);
       
   444         mClockPluginLoader->load();
       
   445     }
       
   446     
       
   447     //Launch the settings view
       
   448     ClockSettingsViewInterface *clockSettingsViewInterface 
       
   449         = qobject_cast<ClockSettingsViewInterface*>(mClockPluginLoader->instance());
       
   450     if (clockSettingsViewInterface) {
       
   451         clockSettingsViewInterface->launchRegionalSettingsView();
       
   452     }
       
   453     else {
       
   454         CPLANG_LOG("Load clocksettingsviewplugin failed.");
       
   455     }
       
   456 }
       
   457 
       
   458 /*!
       
   459  *  handle data form page changed event
       
   460  */
       
   461 void CpLanguageView::onDataFormItemActivated(const QModelIndex &modelIndex)
       
   462 {
       
   463     CPLANG_LOG_FUNC_ENTRY("CpLanguageView::onDataFormItemActivated")
       
   464         
       
   465     mCurrentLanguagePage = mModel->itemFromIndex(modelIndex);
       
   466     
       
   467     mCurrentRegionItem = mCurrentLanguagePage->childAt(REGION_ITEM_INDEX);
       
   468     mCurrentPrimaryInputLanguageItem = mCurrentLanguagePage->childAt(PRIMARY_INPUT_ITEM_INDEX);
       
   469     mCurrentSecondaryInputLanguageItem = mCurrentLanguagePage->childAt(SECONDARY_INPUT_ITEM_INDEX);
       
   470        
       
   471     int index = mLanguagePages.indexOf(mCurrentLanguagePage);
       
   472     
       
   473     if (index >= 0) {
       
   474         QString newLanguage = mSupportedLanguages.at(index);
       
   475         LanguageRegionMapping *setting = languageRegionMapping(newLanguage);
       
   476         if (setting) {
       
   477             setting->secondaryWritingLan = HbInputSettingProxy::instance()->globalSecondaryInputLanguage();
       
   478             mCurrentSetting = *setting;  
       
   479             
       
   480             HbLocaleUtil::changeRegion(mCurrentSetting.regionId);
       
   481             HbInputSettingProxy::instance()->setGlobalInputLanguage(mCurrentSetting.primaryWritingLan);
       
   482             
       
   483             //update combobox
       
   484             mCurrentPrimaryInputLanguageItem->setContentWidgetData("currentIndex",mPrimaryInputLanguages.indexOf(mCurrentSetting.primaryWritingLan));
       
   485             mCurrentRegionItem->setContentWidgetData("currentIndex",mSupportedRegions.indexOf(mCurrentSetting.regionId)); 
       
   486             
       
   487             CPLANG_LOG(QString("Primary writing:") + HbInputSettingProxy::instance()->globalInputLanguage().asString());
       
   488             CPLANG_LOG(QString("Secondary writing:") + HbInputSettingProxy::instance()->globalSecondaryInputLanguage().asString());
       
   489             
       
   490             updateSecondaryInputLanguageItem();
       
   491         }
       
   492     }  
       
   493  
       
   494 }
       
   495 
       
   496 /*!
       
   497  * From CpBaseSettingView, prompt user to restart device before exiting the view
       
   498  */
       
   499 void CpLanguageView::close()
       
   500 {
       
   501     CPLANG_LOG_FUNC_ENTRY("CpLanguageView::close()")
       
   502         
       
   503     CPLANG_LOG( QString("mCurrentSetting.languageId :") + mCurrentSetting.languageId )
       
   504     CPLANG_LOG( QString("HbLocaleUtil::currentLanguage():") + HbLocaleUtil::currentLanguage() )
       
   505     
       
   506     if (mCurrentSetting.languageId != HbLocaleUtil::currentLanguage()) {      
       
   507         // apply new settings
       
   508         if (promptRestart()) {
       
   509             HbLocaleUtil::changeLocale(mCurrentSetting.languageId);
       
   510             
       
   511             /*
       
   512              * change other settings.
       
   513              */
       
   514             if (mSupportedRegions.contains(mCurrentSetting.regionId,Qt::CaseInsensitive)) {
       
   515                 HbLocaleUtil::changeRegion(mCurrentSetting.regionId);
       
   516             }
       
   517             CpLanguagePlugin::updateEntryItem();
       
   518             HbInputSettingProxy::instance()->setGlobalInputLanguage(mCurrentSetting.primaryWritingLan);
       
   519             HbInputSettingProxy::instance()->setGlobalSecondaryInputLanguage(mCurrentSetting.secondaryWritingLan);
       
   520             
       
   521             restartDevice();
       
   522         }
       
   523         // restore previous values
       
   524         else {
       
   525             if (mCurrentSetting.regionId != mPreviousSetting.regionId) {
       
   526                 HbLocaleUtil::changeRegion(mPreviousSetting.regionId);
       
   527             }
       
   528             if (mCurrentSetting.primaryWritingLan != mPreviousSetting.primaryWritingLan) {
       
   529                 HbInputSettingProxy::instance()->setGlobalInputLanguage(mPreviousSetting.primaryWritingLan);
       
   530             }
       
   531             if (mCurrentSetting.secondaryWritingLan != mPreviousSetting.secondaryWritingLan) {
       
   532                 HbInputSettingProxy::instance()->setGlobalSecondaryInputLanguage(mPreviousSetting.secondaryWritingLan);
       
   533             }
       
   534         }
       
   535     }
       
   536     
       
   537     CpBaseSettingView::close();
       
   538 }
       
   539 
       
   540 /*!
       
   541  * get the language-region mapping table
       
   542  */
       
   543 LanguageRegionMapping *CpLanguageView::languageRegionMapping(const QString &language)
       
   544 {
       
   545     CPLANG_LOG_FUNC_ENTRY("CpLanguageView::languageRegionMapping(const QString &language)")
       
   546     
       
   547     foreach(const LanguageRegionMapping &setting,mLanguageRegionMapping) {
       
   548         if (setting.languageId.compare(language,Qt::CaseInsensitive) == 0) {
       
   549             return const_cast<LanguageRegionMapping*>(&setting);
       
   550         }
       
   551     }
       
   552     
       
   553     CPLANG_LOG("Not found.")
       
   554     
       
   555     return 0;
       
   556 }
       
   557 
       
   558 //End of File