diff -r 1fc85118c3ae -r 870918037e16 basiclocationinfodisplay/blid/ui/src/CBlidSettingsView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/basiclocationinfodisplay/blid/ui/src/CBlidSettingsView.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,576 @@ +/* +* Copyright (c) 2005 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: Provides Blid request view class methods. +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "CBlidSettingsView.h" +#include "Blid.hrh" +#include "CBlidSettingsContainer.h" +#include "CBlidDocument.h" +#include "CBlidEng.h" +#include "MBlidSettings.h" +#include "bliduiconsts.h" +#include "Blidutils.h" +#include "CBlidAppUi.h" + +// CONSTANTS +enum TPanicCode + { + KBlidNullPointer = 1 + }; + + +// ================= MEMBER FUNCTIONS ======================= +// --------------------------------------------------------- +// CBlidSettingsView::NewLC +// --------------------------------------------------------- +// +CBlidSettingsView* CBlidSettingsView::NewLC( MKeyProcessor& aKeyProcessor ) + { + CBlidSettingsView* self = new (ELeave) CBlidSettingsView( aKeyProcessor ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------- +// CBlidSettingsView::CBlidSettingsView +// --------------------------------------------------------- +// +CBlidSettingsView::CBlidSettingsView( MKeyProcessor& aKeyProcessor ): + CBlidBaseView( aKeyProcessor ) + { + } + +// --------------------------------------------------------- +// CBlidSettingsView::ConstructL +// Symbian two-phased constructor +// --------------------------------------------------------- +// +void CBlidSettingsView::ConstructL() + { + CBlidEng* eng = static_cast(AppUi()->Document())->Engine(); + BaseConstructL( R_BLID_SETTINGS_VIEW ); + iLocale = new(ELeave)TLocale(); + + eng->CreateModelL( CBlidEng::EBlidSettings ); + iSettingsModel = eng->SettingsModel(); + __ASSERT_DEBUG(iSettingsModel,User::Panic(_L("CBlidMainView"), + KBlidNullPointer)); + iBlidBacklightNormal = iCoeEnv->AllocReadResourceL( + R_BLID_BACKLIGHT_NORMAL); + iBlidBacklightOn = iCoeEnv->AllocReadResourceL( + R_BLID_BACKLIGHT_ON); + } + +// --------------------------------------------------------- +// CBlidSettingsView::~CBlidSettingsView +// --------------------------------------------------------- +// +CBlidSettingsView::~CBlidSettingsView() + { + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + } + + delete iContainer; + delete iLocale; + delete iBlidBacklightNormal; + delete iBlidBacklightOn; + } + +// --------------------------------------------------------- +// CBlidSettingsView::Id +// --------------------------------------------------------- +// +TUid CBlidSettingsView::Id() const + { + return TUid::Uid(EBlidSettingsView); + } + +// --------------------------------------------------------- +// CBlidSettingsView::HandleCommandL +// --------------------------------------------------------- +// +void CBlidSettingsView::HandleCommandL(TInt aCommand) + { + switch (aCommand) + { + case EBlidCmdChangeSetting: + case EBlidCmdResetSetting: + { + // Get the index in location functionality settings view + TInt indexLocationSetting=iContainer->ListBox()->CurrentItemIndex(); + switch( indexLocationSetting ) + { + case EBlidSettingsCalibration: + { + ChangeAltitudeCalibrationL(); + break; + } + case EBlidSettingsBacklight: + { + ChangeBacklightSettingsL(); + break; + } + case EBlidSettingsArrivalTone: + { + OpenArrivalToneDialogL(); + break; + } + case EBlidSettingsResetOdometer: + { + CheckResetOdometerOptionL(); + break; + } + default: + { + User::Leave( KErrBadHandle ); + break; + } + } + break; + } + case EBlidCmdMskChangeSetting: + case EBlidCmdMskResetSetting: + { + // Get the index in location functionality settings view + TInt indexLocationSetting=iContainer->ListBox()->CurrentItemIndex(); + switch( indexLocationSetting ) + { + case EBlidSettingsCalibration: + { + ChangeAltitudeCalibrationL(); + break; + } + case EBlidSettingsBacklight: + { + if ( iSettingsModel->GetBacklightOption() == EBlidBackLightNormal ) + { + ChangeBacklightSettingsValueL(EBlidBackLightOnDuringNavigation); + } + else + { + ChangeBacklightSettingsValueL(EBlidBackLightNormal); + } + break; + } + case EBlidSettingsArrivalTone: + { + OpenArrivalToneDialogL(); + break; + } + case EBlidSettingsResetOdometer: + { + CheckResetOdometerOptionL(); + break; + } + default: + { + User::Leave( KErrBadHandle ); + break; + } + } + break; + } + case EBlidSettingsArrivalTone: + { + OpenArrivalToneDialogL(); + break; + } + case EBlidSettingsResetOdometer: + { + CheckResetOdometerOptionL(); + break; + } + case EBlidSettingsCalibration: + { + ChangeAltitudeCalibrationL(); + break; + } + case EAknSoftkeyBack: + { + AppUi()->ActivateLocalViewL(TUid::Uid(iPrevViewId) ); + break; + } + default: + { + static_cast(AppUi())->HandleCommandL( aCommand ); + break; + } + }// switch + } + +// --------------------------------------------------------- +// CBlidSettingsView::DynInitMenuPaneL +// --------------------------------------------------------- +// +void CBlidSettingsView::DynInitMenuPaneL( TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + switch( aResourceId ) + { + case R_BLID_MAIN_MENU: + { + CBlidBaseView::HandleHelpFeatureL( aMenuPane ); + break; + } + case R_BLID_SETTINGS_MENU: + { + // Get the index in location functionality settings view + TInt indexLocationSetting= + iContainer->ListBox()->CurrentItemIndex(); + switch( indexLocationSetting ) + { + case EBlidSettingsResetOdometer: + { + aMenuPane->SetItemDimmed( EBlidCmdChangeSetting, ETrue ); + break; + } + // Other values are not accepted. + default: + { + aMenuPane->SetItemDimmed( EBlidCmdResetSetting, ETrue ); + break; + } + } + break; + } + default: + { + break; + } + } + } + +// --------------------------------------------------------- +// CBlidSettingsView::ProcessKeyEventL +// --------------------------------------------------------- +// +TBool CBlidSettingsView::ProcessKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + if( (aType == EEventKey) ) + { + if ( aKeyEvent.iCode == EKeyOK ) + { + // Get the index in location functionality settings view + TInt indexLocationSetting= + iContainer->ListBox()->CurrentItemIndex(); + switch( indexLocationSetting ) + { + case EBlidSettingsCalibration: + { + HandleCommandL( EBlidSettingsCalibration ); + break; + } + // Other values are not accepted. + default: + { + break; + } + } + return ETrue; + } + } + + return CBlidBaseView::ProcessKeyEventL( aKeyEvent,aType ); + } + +// --------------------------------------------------------- +// CBlidSettingsView::DoActivateL +// --------------------------------------------------------- +// +void CBlidSettingsView::DoActivateL( + const TVwsViewId& aPrevViewId,TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/) + { + iPrevViewId = aPrevViewId.iViewUid.iUid; + if (!iContainer) + { + iContainer = CBlidSettingsContainer::NewL(*this, this, ClientRect(), + iSettingsModel, *this); + AppUi()->AddToStackL( *this, iContainer ); + SetMiddleSoftKeyLabelL(R_BLID_MSK_CHANGE,EBlidCmdMskChangeSetting); + + #ifdef RD_SCALABLE_UI_V2 + iContainer->SetListBoxObserver(this); + #endif //RD_SCALABLE_UI_V2 + } + } + +// --------------------------------------------------------- +// CBlidSettingsView::DoDeactivate +// --------------------------------------------------------- +// +void CBlidSettingsView::DoDeactivate() + { + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + } + + delete iContainer; + iContainer = NULL; + } + +// --------------------------------------------------------- +// CBlidSettingsView::ChangeAltitudeCalibrationL +// --------------------------------------------------------- +// +void CBlidSettingsView::ChangeAltitudeCalibrationL() + { + TInt AltCalibration( 0 ); + TInt error(0); + TReal altitude( iSettingsModel->AltCalibration() ); + if ( iSettingsModel->UnitOfMeasurement() != EUnitsMetric ) + { + altitude *= KMetreToFoot; + } + + error = BlidUtils::TRealToTInt( altitude, AltCalibration ); + User::LeaveIfError( error ); + + /*CBlidSettingsPage* dlg = new ( ELeave ) + CBlidSettingsPage( *(AppUi()->EventMonitor()), + R_BLID_ALTITUDE_CALIBRATION_SETTINGS_PAGE, AltCalibration );*/ + + TInt resourceId; + if(iSettingsModel->UnitOfMeasurement() == EUnitsMetric) + { + resourceId = R_BLID_ALTITUDE_CALIBRATION_METRIC_SETTINGS_PAGE; + } + else + { + resourceId = R_BLID_ALTITUDE_CALIBRATION_IMPERIAL_SETTINGS_PAGE; + } + + CAknIntegerSettingPage* dlg = new (ELeave) + CAknIntegerSettingPage(resourceId, + AltCalibration, + 0); + + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) + { + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL( fs ); + + if ( SysUtil::DiskSpaceBelowCriticalLevelL( &fs, 0, DriveInfo::EDefaultPhoneMemory ) ) + { + BlidNotes::OutOfMemoryNoteL(); + } + else + { + TReal32 newCalibration = static_cast(AltCalibration); + + if ( iSettingsModel->UnitOfMeasurement() != EUnitsMetric ) + { + newCalibration /= static_cast(KMetreToFoot); + } + iSettingsModel->SetAltCalibration(newCalibration); + iContainer->DrawNow(); + } + CleanupStack::PopAndDestroy(); //fs + } + } + +// ----------------------------------------------------------------------------- +// CBlidSettingsView::ChangeBacklightSettingsL +// Change the backlight option in between Normal/On During Navigation +// ----------------------------------------------------------------------------- +// +void CBlidSettingsView::ChangeBacklightSettingsL() + { + // number of options in query + CDesCArrayFlat* items = + new( ELeave ) CDesCArrayFlat( 2 ); + CleanupStack::PushL( items ); + items->AppendL( *(iBlidBacklightNormal) ); + items->AppendL( *(iBlidBacklightOn )); + + TInt indexForNewValue; + if ( iSettingsModel->GetBacklightOption() == EBlidBackLightNormal ) + { + indexForNewValue = 0; + } + else + { + indexForNewValue = 1; + } + CAknRadioButtonSettingPage* dlg = new ( ELeave ) + CAknRadioButtonSettingPage( R_BLID_SETTINGS_BACKLIGHT_PAGE, + indexForNewValue, + items ); + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) + { + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL( fs ); + + if ( SysUtil::DiskSpaceBelowCriticalLevelL( &fs, 0, DriveInfo::EDefaultPhoneMemory ) ) + { + BlidNotes::OutOfMemoryNoteL(); + } + else + { + // Change value if a new value given in radio button page. + iSettingsModel->SetBacklightOption(indexForNewValue); + iContainer->DrawNow(); + } + CleanupStack::PopAndDestroy();// fs + } + CleanupStack::PopAndDestroy(); // items + } + + +// --------------------------------------------------------------------------- +// CBlidSettingsView::ChangeBacklightSettingsValue +// --------------------------------------------------------------------------- +// +void CBlidSettingsView::ChangeBacklightSettingsValueL(TInt aValue) + { + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL( fs ); + + if ( SysUtil::DiskSpaceBelowCriticalLevelL( &fs, 0, DriveInfo::EDefaultPhoneMemory ) ) + { + BlidNotes::OutOfMemoryNoteL(); + } + else + { + // Change value if a new value given in radio button page. + iSettingsModel->SetBacklightOption(aValue); + iContainer->DrawNow(); + } + CleanupStack::PopAndDestroy();// fs + } + +// --------------------------------------------------------------------------- +// CBlidSettingsView::OpenArrivalToneDialogL +// --------------------------------------------------------------------------- +// +void CBlidSettingsView::OpenArrivalToneDialogL( ) + { + TFileName iToneFile; + // Create instance of FileList using new FileList API + CFLDFileListContainer* filelist = CFLDFileListContainer::NewLC(); + + filelist->InsertEndNullItemL( _L( "Off" ) ); + // Do not show videos, use new FileList API + filelist->AddExclusiveMediaTypeL( ECLFMediaTypeVideo ); + + if( iSettingsModel->GetArrivedToneName().Length() > 0 ) + { + iToneFile.Copy( iSettingsModel->GetArrivedToneName() ); + } + + TBool ok( filelist->LaunchL( iToneFile ) ); + + if( ok ) + { + HBufC8* lFileName = HBufC8::NewLC( iToneFile.Length() + 1 ); + lFileName->Des().Copy( iToneFile ); + // Change value if a new value given in radio button page. + iSettingsModel->SetArrivedToneName( *lFileName ); + iContainer->DrawNow(); + CleanupStack::PopAndDestroy( lFileName ); + } + + CleanupStack::PopAndDestroy( filelist ); // filelist + } + +// --------------------------------------------------------------------------- +// CBlidSettingsView::CheckResetOdometerOptionL +// --------------------------------------------------------------------------- +// +void CBlidSettingsView::CheckResetOdometerOptionL( ) + { + CAknNoteDialog* dlg; + dlg = new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone,CAknNoteDialog::ENoTimeout); + TBool result = dlg->ExecuteLD( R_SETTINGS_ODOMETER_RESET_CONFIRMATION_NOTE ); + if( result ) + { + // Change value if a new value given in radio button page. + iSettingsModel->SetResetOdometerOption( result ); + static_cast(AppUi())->ResetOdoMeterValueL( ); + iContainer->DrawNow(); + } + dlg = NULL; + } + +#ifdef RD_SCALABLE_UI_V2 +// --------------------------------------------------------------------------- +// CBlidSettingsView::HandleListBoxSelectionL +// --------------------------------------------------------------------------- +// +void CBlidSettingsView::HandleListBoxSelectionL() + { + // Get the index in location functionality settings view + TInt indexLocationSetting=iContainer->ListBox()->CurrentItemIndex(); + switch( indexLocationSetting ) + { + case EBlidSettingsCalibration: + { + ChangeAltitudeCalibrationL(); + break; + } + case EBlidSettingsBacklight: + { + if ( iSettingsModel->GetBacklightOption() == EBlidBackLightNormal ) + { + ChangeBacklightSettingsValueL(EBlidBackLightOnDuringNavigation); + } + else + { + ChangeBacklightSettingsValueL(EBlidBackLightNormal); + } + break; + } + case EBlidSettingsArrivalTone: + { + OpenArrivalToneDialogL(); + break; + } + case EBlidSettingsResetOdometer: + { + CheckResetOdometerOptionL(); + break; + } + default: + { + User::Leave( KErrBadHandle ); + break; + } + } + } + +#endif //RD_SCALABLE_UI_V2 + +// End of File