diff -r 4baee4f15982 -r 6385c4c93049 pushmtm/MtmUiSrc/PushSettingsDialog.cpp --- a/pushmtm/MtmUiSrc/PushSettingsDialog.cpp Thu Aug 19 09:57:56 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,726 +0,0 @@ -/* -* 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 the License "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: Member definitions of CPushSettingsDialog. -* -*/ - - - -// INCLUDES -#include "browser_platform_variant.hrh" -#include "PushSettingsDialog.h" -#include "PushMtmUiDef.h" -#include "PushMtmUiPanic.h" -#include -#include "PushMtmUi.hrh" -#include "PushMtmDef.hrh" -#include -#include -#include -#include -#include -#include -#ifdef __SERIES60_HELP -// Context-Sensitve Help File -#include -#include -#endif // __SERIES60_HELP -#include -#include -#include -#include "PushMtmPrivateCRKeys.h" -#include -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------- -// CPushSettingsDialog::CPushSettingsDialog -// --------------------------------------------------------- -// -CPushSettingsDialog::CPushSettingsDialog( CMsvSession& aMsvSession ) -: CAknDialog(), - iMsvSession( aMsvSession ), - iResourceLoader( *iCoeEnv ), - iNewTitleTextUsed( EFalse ), - iRestoreSP( ETrue ) - { - } - -// --------------------------------------------------------- -// CPushSettingsDialog::ExecuteLD -// --------------------------------------------------------- -// -void CPushSettingsDialog::ExecuteLD() - { - CleanupStack::PushL( this ); - ConstructL(); - CAknDialog::ConstructL( R_PUSHSD_MENU ); - CleanupStack::Pop( this ); - CAknDialog::ExecuteLD( R_PUSHSD_DIALOG ); - } - -// --------------------------------------------------------- -// CPushSettingsDialog::ConstructL -// --------------------------------------------------------- -// -void CPushSettingsDialog::ConstructL() - { - // Add resource file. - CRepository* PushSL = CRepository::NewL( KCRUidPushMtm ); - CleanupStack::PushL( PushSL ); - User::LeaveIfError( PushSL->Get( KPushMtmServiceEnabled , iPushSLEnabled ) ); - CleanupStack::PopAndDestroy( PushSL ); - - TParse* fileParser = new (ELeave) TParse; - // Unnecessary to call CleanupStack::PushL( fileParser ); - fileParser->Set( KPushMtmUiResourceFileAndDrive, &KDC_MTM_RESOURCE_DIR, NULL ); - iResourceFile = fileParser->FullName(); - delete fileParser; - fileParser = NULL; - iResourceLoader.OpenL( iResourceFile ); - - // Construct model. - ConstructModelL(); - - // Now model is ready for view. - const TInt KGranularity( 8 ); - iSettingType = new (ELeave) CArrayFixFlat( KGranularity ); - - // Set up Title Pane and Context Pane. - SetUpStatusPaneL(); - } - -// --------------------------------------------------------- -// CPushSettingsDialog::~CPushSettingsDialog -// --------------------------------------------------------- -// -CPushSettingsDialog::~CPushSettingsDialog() - { - if ( iRestoreSP ) - { - TRAP_IGNORE( RestoreStatusPaneL() ); - } - iResourceLoader.Close(); - delete iPreviousTitleText; - delete iModel; - delete iSettingType; - iSettingListBox = NULL; - iSettingListBoxItemTextArray = NULL; - } - -// --------------------------------------------------------- -// CPushSettingsDialog::SetUpStatusPaneL -// --------------------------------------------------------- -// -void CPushSettingsDialog::SetUpStatusPaneL() - { - if ( !iNewTitleTextUsed ) - { - __ASSERT_DEBUG( !iPreviousTitleText, - UiPanic( EPushMtmUiPanAlreadyExistingTitle ) ); - // Set up Title Pane. - CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane(); - CAknTitlePane* titlePane = - STATIC_CAST( CAknTitlePane*, - statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); - // Save content. - iPreviousTitleText = titlePane->Text()->AllocL(); - // Set new content. - TResourceReader reader; - iCoeEnv->CreateResourceReaderLC( reader, R_PUSHSD_TITLE_PANE ); - titlePane->SetFromResourceL( reader ); - CleanupStack::PopAndDestroy(); // reader - iNewTitleTextUsed = ETrue; - } - } - -// --------------------------------------------------------- -// CPushSettingsDialog::RestoreStatusPaneL -// --------------------------------------------------------- -// -void CPushSettingsDialog::RestoreStatusPaneL() - { - if ( iNewTitleTextUsed ) - { - __ASSERT_DEBUG( iPreviousTitleText, - UiPanic( EPushMtmUiPanMissingTitle ) ); - // Restore Title Pane. - CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane(); - CAknTitlePane* titlePane = - STATIC_CAST( CAknTitlePane*, - statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); - titlePane->SetTextL( *iPreviousTitleText ); - delete iPreviousTitleText; - iPreviousTitleText = NULL; - iNewTitleTextUsed = EFalse; - } - } - -// --------------------------------------------------------- -// CPushSettingsDialog::ConstructModelL -// --------------------------------------------------------- -// -void CPushSettingsDialog::ConstructModelL() - { - __ASSERT_DEBUG( !iModel, UiPanic( EPushMtmUiPanAlreadyExistingModel ) ); - - // This will be the model. - iModel = CPushMtmSettings::NewL(); - } - -// --------------------------------------------------------- -// CPushSettingsDialog::UpdateSettingListBoxModelL -// --------------------------------------------------------- -// -void CPushSettingsDialog::UpdateSettingListBoxModelL() - { - __ASSERT_DEBUG( iModel && - iSettingListBox && - iSettingListBoxItemTextArray && - iSettingType, UiPanic( EPushMtmUiPanNotInitialized ) ); - - // Reset the list box' item text array and the setting type array. - iSettingListBoxItemTextArray->Reset(); - iSettingType->Reset(); - - // Service reception. - ConstructAndAppendItemTextL - ( EServiceReception, R_PUSHSD_RECEPT, - iModel->ServiceReception() ? R_PUSHSD_RECEP_ON : R_PUSHSD_RECEP_OFF ); - - -if(iPushSLEnabled) - { - // Service loading (SL specific). - ConstructAndAppendItemTextL - ( EServiceLoadingType, R_PUSHSD_LOADING, - ( iModel->ServiceLoadingType() == CPushMtmSettings::EAutomatic ) ? - R_PUSHSD_LOAD_AUTOM : R_PUSHSD_LOAD_MAN ); - } - } - -// --------------------------------------------------------- -// CPushSettingsDialog::UpdateSettingListBoxViewL -// --------------------------------------------------------- -// -void CPushSettingsDialog::UpdateSettingListBoxViewL() const - { - __ASSERT_DEBUG( iSettingListBox, UiPanic( EPushMtmUiPanMissingListBox ) ); - //iSettingListBox->DrawItem( iSettingListBox->CurrentItemIndex() ); - TInt currentItemIndex( iSettingListBox->CurrentItemIndex() ); - iSettingListBox->DrawNow(); - iSettingListBox->SetCurrentItemIndex( currentItemIndex ); - } - -// --------------------------------------------------------- -// CPushSettingsDialog::ApplyModelChangesL -// --------------------------------------------------------- -// -void CPushSettingsDialog::ApplyModelChangesL() - { - UpdateSettingListBoxModelL(); - UpdateSettingListBoxViewL(); - } - -// --------------------------------------------------------- -// CPushSettingsDialog::ShowRadioButtonSettingPageL -// --------------------------------------------------------- -// -void CPushSettingsDialog::ShowRadioButtonSettingPageL - ( const TSettingType aSettingType ) - { - __ASSERT_DEBUG( iModel, UiPanic( EPushMtmUiPanMissingModel ) ); - - TInt index; - HBufC* settingTitle = ConstructSettingTitleL( aSettingType ); - CleanupStack::PushL( settingTitle ); - CDesCArrayFlat* itemArray = - ConstructSettingValueArrayL( aSettingType, index ); - CleanupStack::PushL( itemArray ); - CAknRadioButtonSettingPage* settingPage = - new (ELeave) CAknRadioButtonSettingPage - ( R_PUSHSD_SP_RADIOBUTTON, index, itemArray ); - CleanupStack::PushL( settingPage ); - settingPage->SetSettingTextL( *settingTitle ); - - const TInt previousIndex = index; - CleanupStack::Pop(); // settingPage - if ( settingPage->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) - { - if ( previousIndex != index ) - { - // Set the changes in the model. - UpdateSettingL( aSettingType, index ); - } - } - - CleanupStack::PopAndDestroy( 2 ); // itemArray, settingTitle - } - -// --------------------------------------------------------- -// CPushSettingsDialog::ShowServiceLoadingTypeConfirmationL -// --------------------------------------------------------- -// -TBool CPushSettingsDialog::ShowServiceLoadingTypeConfirmationL() const - { - CAknQueryDialog* dlg = CAknQueryDialog::NewL(); - return dlg->ExecuteLD( R_PUSHSD_AUTOLOAD_SETT_CONFIRM ) == EAknSoftkeyYes; - } - -// --------------------------------------------------------- -// CPushSettingsDialog::ChangeCurrentSettingWithoutSettingPageL -// --------------------------------------------------------- -// -void CPushSettingsDialog::ChangeCurrentSettingWithoutSettingPageL() - { - __ASSERT_DEBUG( iModel && iSettingListBox, - UiPanic( EPushMtmUiPanNotInitialized ) ); - - switch ( iSettingType->At( iSettingListBox->CurrentItemIndex() ) ) - { - case EServiceReception: - { - iModel->SetServiceReception( !iModel->ServiceReception() ); - break; - } - - case EServiceLoadingType: - { - if(iPushSLEnabled){ - if ( iModel->ServiceLoadingType() == CPushMtmSettings::EManual ) - { - // Display a confirmation dialog first. - if ( ShowServiceLoadingTypeConfirmationL() ) - { - iModel->SetServiceLoadingType - ( CPushMtmSettings::EAutomatic ); - } - } - else - { - // Do not show confirmation dialog. - iModel->SetServiceLoadingType( CPushMtmSettings::EManual ); - } - }//End iPushSLEnabled - break; - } - - - default: - { - __ASSERT_DEBUG( EFalse, - UiPanic( EPushMtmUiPanCommandNotSupported ) ); - break; - } - } - - // Apply changes. - iModel->SaveL(); - ApplyModelChangesL(); - } - -// --------------------------------------------------------- -// CPushSettingsDialog::ChangeCurrentSettingL -// --------------------------------------------------------- -// -void CPushSettingsDialog::ChangeCurrentSettingL() - { - __ASSERT_DEBUG( iModel && iSettingListBox, - UiPanic( EPushMtmUiPanNotInitialized ) ); - ShowRadioButtonSettingPageL - ( iSettingType->At( iSettingListBox->CurrentItemIndex() ) ); - // Apply changes. - iModel->SaveL(); - ApplyModelChangesL(); - } - -// --------------------------------------------------------- -// CPushSettingsDialog::ConstructAndAppendItemTextL -// --------------------------------------------------------- -// -void CPushSettingsDialog::ConstructAndAppendItemTextL -( const TSettingType aSettingType, - const TInt aTitleResId, const TInt aValueResId, - const TDesC& aTitleText, const TDesC& aValueText ) - { - __ASSERT_DEBUG( iSettingListBoxItemTextArray && iSettingType, - UiPanic( EPushMtmUiPanNotInitialized ) ); - - // Define separator text. - _LIT( KHeadOfItemText, " \t" ); - // Define separator text. - _LIT( KSeparatorOfItemText, "\t\t" ); - - HBufC* titleText = ( aTitleResId != KErrNotFound ) ? - iEikonEnv->AllocReadResourceLC( aTitleResId ) : aTitleText.AllocLC(); - HBufC* valueText = ( aValueResId != KErrNotFound ) ? - iEikonEnv->AllocReadResourceLC( aValueResId ) : aValueText.AllocLC(); - - // Define a heap descriptor to hold all the item text. - HBufC* itemText = HBufC::NewMaxLC( - KHeadOfItemText().Length() + titleText->Length() + - KSeparatorOfItemText().Length() + valueText->Length() ); - TPtr itemTextPtr = itemText->Des(); - itemTextPtr = KHeadOfItemText; - itemTextPtr += *titleText; - itemTextPtr += KSeparatorOfItemText; - itemTextPtr += *valueText; - iSettingListBoxItemTextArray->AppendL( itemTextPtr ); - iSettingType->AppendL( aSettingType ); - - CleanupStack::PopAndDestroy( 3 ); // itemText, valueText, titleText - } - -// --------------------------------------------------------- -// CPushSettingsDialog::ConstructSettingTitleL -// --------------------------------------------------------- -// -HBufC* CPushSettingsDialog::ConstructSettingTitleL -( const TSettingType aSettingType ) const - { - TInt titleResId = 0; - - if(aSettingType == EServiceReception ) - titleResId = R_PUSHSD_RECEPT; - - else if (aSettingType == EServiceLoadingType) - { - if(iPushSLEnabled ) - titleResId = R_PUSHSD_LOADING; - } - - else - titleResId = KErrNotFound; - - - __ASSERT_DEBUG( titleResId != KErrNotFound, - UiPanic( EPushMtmUiPanNotInitialized ) ); - - return iEikonEnv->AllocReadResourceL( titleResId ); - } - -// --------------------------------------------------------- -// CPushSettingsDialog::ConstructSettingValueArray -// --------------------------------------------------------- -// -void CPushSettingsDialog::ConstructSettingValueArray - ( - const TSettingType aSettingType, - TInt& aVal1ResId, - TInt& aVal2ResId - ) const - { - if( aSettingType == EServiceReception) - aVal1ResId = R_PUSHSD_RECEP_ON; - - else if((aSettingType == EServiceLoadingType) && iPushSLEnabled ) - { - aVal1ResId = R_PUSHSD_LOAD_AUTOM; - } - else - aVal1ResId = KErrNotFound; - - - if( aSettingType == EServiceReception ) - aVal2ResId = R_PUSHSD_RECEP_OFF; - else if( aSettingType == EServiceLoadingType && iPushSLEnabled) - aVal2ResId = R_PUSHSD_LOAD_MAN; - else - aVal2ResId = KErrNotFound; - - - __ASSERT_DEBUG( aVal1ResId != KErrNotFound && - aVal2ResId != KErrNotFound, - UiPanic( EPushMtmUiPanNotInitialized ) ); - } - -// --------------------------------------------------------- -// CPushSettingsDialog::CurrentlySelectedSettingValueResId -// --------------------------------------------------------- -// -TInt CPushSettingsDialog::CurrentlySelectedSettingValueResId -( const TSettingType aSettingType, TInt& aIndex ) const - { - TInt val1ResId( KErrNotFound ); - TInt val2ResId( KErrNotFound ); - ConstructSettingValueArray( aSettingType, val1ResId, val2ResId ); - - TBool firstSelected; - - if(aSettingType == EServiceReception ) - firstSelected = iModel->ServiceReception(); - - else if( aSettingType == EServiceLoadingType && iPushSLEnabled ) - { - firstSelected = (iModel->ServiceLoadingType() == CPushMtmSettings::EAutomatic); - } - else - firstSelected = EFalse; - - - - aIndex = firstSelected ? 0 : 1; - return firstSelected ? val1ResId : val2ResId; - } - -// --------------------------------------------------------- -// CPushSettingsDialog::ConstructSettingValueArrayL -// --------------------------------------------------------- -// -CDesCArrayFlat* CPushSettingsDialog::ConstructSettingValueArrayL -( const TSettingType aSettingType, TInt& aIndex ) const - { - CDesCArrayFlat* valueArray = new (ELeave) CDesCArrayFlat( 2 ); - CleanupStack::PushL( valueArray ); - - TInt val1ResId( KErrNotFound ); - TInt val2ResId( KErrNotFound ); - ConstructSettingValueArray( aSettingType, val1ResId, val2ResId ); - HBufC* value1Text = iEikonEnv->AllocReadResourceLC( val1ResId ); - HBufC* value2Text = iEikonEnv->AllocReadResourceLC( val2ResId ); - valueArray->AppendL( *value1Text ); - valueArray->AppendL( *value2Text ); - CleanupStack::PopAndDestroy( 2 ); // value2Text, value1Text - - // Returned val. is ignored. - CurrentlySelectedSettingValueResId( aSettingType, aIndex ); - - CleanupStack::Pop(); // valueArray - return valueArray; - } - -// --------------------------------------------------------- -// CPushSettingsDialog::UpdateSettingL -// --------------------------------------------------------- -// -void CPushSettingsDialog::UpdateSettingL -( const TSettingType aSettingType, const TInt aIndex ) const - { - switch ( aSettingType ) - { - case EServiceReception: - { - iModel->SetServiceReception( aIndex == 0 ? ETrue : EFalse ); - break; - } - - case EServiceLoadingType: - { - if(iPushSLEnabled) - { - if ( aIndex == 0 ) - // iModel->ServiceLoadingType() == CPushMtmSettings::EManual - { - // Display a confirmation dialog first. - if ( ShowServiceLoadingTypeConfirmationL() ) - { - iModel->SetServiceLoadingType - ( CPushMtmSettings::EAutomatic ); - } - } - else - { - // Do not show confirmation dialog. - iModel->SetServiceLoadingType( CPushMtmSettings::EManual ); - } - } - break; - } - - default: - { - __ASSERT_DEBUG( EFalse, - UiPanic( EPushMtmUiPanCommandNotSupported ) ); - break; - } - } - } - -// --------------------------------------------------------- -// CPushSettingsDialog::OfferKeyEventL -// --------------------------------------------------------- -// -TKeyResponse CPushSettingsDialog::OfferKeyEventL -( const TKeyEvent& aKeyEvent, TEventCode aType ) - { - if ( aType == EEventKey && aKeyEvent.iCode == EKeyEscape ) - { - // Shutting down. Do not restore SP. - iRestoreSP = EFalse; - } - return CAknDialog::OfferKeyEventL( aKeyEvent, aType ); - } - -// --------------------------------------------------------- -// CPushSettingsDialog::DynInitMenuPaneL -// --------------------------------------------------------- -// -void CPushSettingsDialog::DynInitMenuPaneL - ( TInt /*aResourceId*/, CEikMenuPane* /*aMenuPane*/ ) - { - } - -// --------------------------------------------------------- -// CPushSettingsDialog::PreLayoutDynInitL -// --------------------------------------------------------- -// -void CPushSettingsDialog::PreLayoutDynInitL() - { - __ASSERT_DEBUG( !iSettingListBox && - !iSettingListBoxItemTextArray, - UiPanic( EPushMtmUiPanAlreadyInitialized ) ); - - iSettingListBox = STATIC_CAST( CAknSettingStyleListBox*, - Control( EPushSettingsDialogCntrlListBox ) ); - iSettingListBoxItemTextArray = STATIC_CAST( CDesCArrayFlat*, - iSettingListBox->Model()->ItemTextArray() ); - iSettingListBox->SetListBoxObserver( this ); - TRect rect = Rect(); - iSettingListBox->SetRect( rect ); - // Set up scroll bar. - iSettingListBox->CreateScrollBarFrameL( ETrue ); - iSettingListBox->ScrollBarFrame()->SetScrollBarVisibilityL - ( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto ); - - // Update setting list box model. - UpdateSettingListBoxModelL(); - } - -// --------------------------------------------------------- -// CPushSettingsDialog::ProcessCommandL -// --------------------------------------------------------- -// -void CPushSettingsDialog::ProcessCommandL( TInt aCommand ) - { - HideMenu(); - - switch ( aCommand ) - { - case EPushSettingsDialogCmdChangeWithoutSettingPage: - { - ChangeCurrentSettingWithoutSettingPageL(); - break; - } - - case EPushSettingsDialogCmdChange: - { - ChangeCurrentSettingL(); - break; - } - -#ifdef __SERIES60_HELP - - case EPushSettingsDialogCmdHelp: - { - HlpLauncher::LaunchHelpApplicationL - ( iEikonEnv->WsSession(), - iEikonEnv->EikAppUi()->AppHelpContextL() ); - break; - } - -#endif //__SERIES60_HELP - - case EPushSettingsDialogCmdBack: - case EPushSettingsDialogCmdExit: - { - TryExitL( EPushSettingsDialogCmdAknExit ); - break; - } - - case EPushSettingsDialogCmdAknExit: - { - STATIC_CAST( MEikCommandObserver*, iEikonEnv->EikAppUi() )-> - ProcessCommandL( EPushSettingsDialogCmdAknExit ); - break; - } - - default: - { - break; - } - } - } - -// --------------------------------------------------------- -// CPushSettingsDialog::OkToExitL -// --------------------------------------------------------- -// -TBool CPushSettingsDialog::OkToExitL( TInt aButtonId ) - { - TBool ret( EFalse ); - - switch ( aButtonId ) - { - case EPushSettingsDialogCmdOptions: - { - if ( !MenuShowing() ) - { - DisplayMenuL(); - } - break; - } - case EPushSettingsDialogCmdChangeWithoutSettingPage: - { - ChangeCurrentSettingWithoutSettingPageL(); - break; - } - case EPushSettingsDialogCmdBack: - case EPushSettingsDialogCmdExit: - case EPushSettingsDialogCmdAknExit: - { - RestoreStatusPaneL(); - ret = ETrue; - break; - } - default: - { - break; - } - } - - return ret; - } - -// --------------------------------------------------------- -// CPushSettingsDialog::HandleListBoxEventL -// --------------------------------------------------------- -// -void CPushSettingsDialog::HandleListBoxEventL -( CEikListBox* /*aListBox*/, TListBoxEvent aEventType ) - { - // Generate change command only if double tapped/center key is pressed. - //Removed single tap check from here - if ( aEventType == EEventEnterKeyPressed || - aEventType == EEventItemDoubleClicked -#ifdef BRDO_SINGLE_CLICK_ENABLED_FF - || aEventType == EEventItemSingleClicked -#endif - ) - { - ProcessCommandL( EPushSettingsDialogCmdChangeWithoutSettingPage ); - } - } - -#ifdef __SERIES60_HELP -// --------------------------------------------------------- -// CPushSettingsDialog::GetHelpContext -// --------------------------------------------------------- -// -void CPushSettingsDialog::GetHelpContext( TCoeHelpContext& aContext ) const - { - aContext.iMajor = TUid::Uid( EUidPushViewerApp ); - aContext.iContext = KWPUSH_HLP_SETTINGS; - } -#endif //__SERIES60_HELP - -// End of file.