--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/basiclocationinfodisplay/blid/ui/src/CBlidSettingsView.cpp Tue Feb 02 00:16:03 2010 +0200
@@ -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 <aknlists.h>
+#include <aknViewAppUi.h>
+#include <akntextsettingpage.h>
+#include <Blid.rsg>
+#include <aknradiobuttonsettingpage.h>
+#include <sysutil.h>
+#include <driveinfo.h>
+#include <CFLDFileListContainer.h>
+#include <aknnotedialog.h>
+
+#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<CBlidDocument*>(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<CBlidAppUi*>(AppUi())->HandleCommandL( aCommand );
+ break;
+ }
+ }// switch
+ }
+
+// ---------------------------------------------------------
+// CBlidSettingsView::DynInitMenuPaneL
+// ---------------------------------------------------------
+//
+void CBlidSettingsView::DynInitMenuPaneL( TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+ switch( aResourceId )
+ {
+ case R_BLID_MAIN_MENU:
+ {
+ CBlidBaseView::HandleHelpFeature( 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<TReal32>(AltCalibration);
+
+ if ( iSettingsModel->UnitOfMeasurement() != EUnitsMetric )
+ {
+ newCalibration /= static_cast<TReal32>(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<CBlidAppUi*>(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