diff -r 1fc85118c3ae -r 870918037e16 basiclocationinfodisplay/blid/ui/src/CBlidTripMeterView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/basiclocationinfodisplay/blid/ui/src/CBlidTripMeterView.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,502 @@ +/* +* Copyright (c) 2005-2008 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 main view class methods. +* +*/ + +// SYSTEM INCLUDES +#include +//Added for HTK toolkit support +#include +#include +#include +#include +#include +//End of addition + +#include +#include + +// USER INCLUDES +#include "cblidnotedialog.h" +#include "CBlidTripMeterView.h" +#include "Blid.hrh" +#include "CHtkTripMeterControl.h" +#include "MBlidLocation.h" +#include "MBlidRouter.h" +#include "MBlidSettings.h" +#include "CBlidEng.h" +#include "CBlidDocument.h" +#include "CBlidAppUi.h" +#include "bliduiconsts.h" +#include "CBlidLocSettingLauncher.h" +#include "BlidUID.h" + +#include +#include + + +// ================= MEMBER FUNCTIONS ======================= +// ---------------------------------------------------------------------------- +// CBlidTripMeterView::NewLC +// Two-phased constructor. +// ---------------------------------------------------------------------------- +// +CBlidTripMeterView* CBlidTripMeterView::NewLC( MKeyProcessor& aKeyProcessor, + CAlfEnv& aEnv ) + { + CBlidTripMeterView* self = new (ELeave) CBlidTripMeterView(aKeyProcessor, aEnv ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } +// ---------------------------------------------------------------------------- +// CBlidTripMeterView::CBlidTripMeterView +// C++ default constructor can NOT contain any code, that +// might leave. +// ---------------------------------------------------------------------------- +// +CBlidTripMeterView::CBlidTripMeterView( MKeyProcessor& aKeyProcessor, + CAlfEnv& aEnv ): + CBlidBaseView( aKeyProcessor ), + iEnv(aEnv) + { + } + +// ---------------------------------------------------------------------------- +// CBlidTripMeterView::ConstructL +// Symbian 2nd phase constructor can leave. +// ---------------------------------------------------------------------------- +// +void CBlidTripMeterView::ConstructL() + { + BaseConstructL( R_BLID_TRIPMETER_VIEW ); + + // Create an instance of our list control. + iTripCtrl = CHtkTripMeterControl::NewL(iEnv, + *this, + this, + ClientRect(), + iLocation, + iRouter, + *iEngine, + *this); + + // Create a control group. + iTripCtrlGroup = &( iEnv.NewControlGroupL( KPrimaryTripGroup ) ); + + // pass ownership of the list control to the control group + iTripCtrlGroup->AppendL(iTripCtrl); + + iCtrlDisplay = &( iEnv.NewDisplayL( ClientRect(), CAlfEnv::ENewDisplayAsCoeControl ) ); + // Use the Avkon skin background as the display background. + iCtrlDisplay->SetClearBackgroundL(CAlfDisplay::EClearWithSkinBackground); + + iNoteDialog = CBlidNoteDialog::NewL(); + + iLauncher = NULL; + } + +// ---------------------------------------------------------------------------- +// CBlidMainView::~CBlidMainView +// ---------------------------------------------------------------------------- +// +CBlidTripMeterView::~CBlidTripMeterView() + { + delete iNoteDialog; + delete iLauncher; + } + +// --------------------------------------------------------- +// CBlidTripMeterView::NotifyL +// --------------------------------------------------------- +// +void CBlidTripMeterView::NotifyL( const TBool aOnlineMode ) + { + if(iTripCtrl->HasTripStarted()) + { + if(aOnlineMode) + { + if(iTripCtrl->WasGPSDataLost()) + { + if(static_cast(AppUi())->IsForeground()) + { + iTripCtrl->SetGPSDataAvailability(EFalse); + iNoteDialog->ExecuteNoteDialog(); + } + } + } + } + + if( iTripCtrl ) + { + iTripCtrl->UpdateL(); + } + CBlidBaseView::NotifyL( aOnlineMode ); + } + +// --------------------------------------------------------- +// CBlidTripMeterView::NotifyErrorL +// --------------------------------------------------------- +// +void CBlidTripMeterView::NotifyErrorL( TInt aErrorCode ) + { + CBlidBaseView::NotifyErrorL( aErrorCode ); + + if( iTripCtrl ) + { + iTripCtrl->UpdateL(); + } + } + +// ---------------------------------------------------------------------------- +// TUid CBlidTripMeterView::Id +// ---------------------------------------------------------------------------- +// +TUid CBlidTripMeterView::Id() const + { + return TUid::Uid(EBlidTripMeterView); + } + +// ---------------------------------------------------------------------------- +// CBlidTripMeterView::HandleCommandL +// ---------------------------------------------------------------------------- +// +void CBlidTripMeterView::HandleCommandL(TInt aCommand) + { + switch ( aCommand ) + { + case EBlidCmdTripStart: + case EBlidCmdTripStop: + case EBlidCmdTripReset: + case EBlidCmdTripClear: + { + iTripCtrl->ProcessCommandL(aCommand); + break; + } + case EBlidCmdTripResume: + { + iTripCtrl->ProcessCommandL(aCommand); + break; + } + case EBlidCmdSavedWaypoints: + { + AppUi()->ActivateLocalViewL( TUid::Uid( EBlidSavedWayptsView ) ); + break; + } + case EBlidCmdLmk: + { + LaunchLandmarksDialogL(); + break; + } + case EBlidCmdWaypoint: + { + TInt index(0); + + if ( iRouter->Count() > 0 ) + { + index = SelectWaypointL(); + if ( index != KErrCancel ) + { + iRouter->SetWaypoint( index ); + } + } + break; + } + case EBlidCmdSaveLocation: + { + if ( !FeatureManager::FeatureSupported( KFeatureIdLandmarks ) ) + { + if ( InsertWaypointL() ) + { + static_cast(AppUi()->Document())->SaveL(); + } + } + else + { + SaveCurrentPositionAsLandmarkL(); + } + break; + } + case EBlidCmdShowDetails: + { + ShowCurrentPositionInfoL(); + break; + } + case EBlidCmdLaunchPositionSettings: + { + if(!iLauncher) + { + iLauncher = CBlidLocSettingsLauncher::NewL(); + } + iLauncher->LaunchL(); + break; + } + case EBlidNavigationMskInfo: + { + iTripCtrl->DisplayInfoPopUpMsgL(); + break; + } + case EBlidCmdSatelliteStatus: + { + TBool lBacklightNormal = EFalse; + MBlidSettings* setting = iEngine->SettingsModel(); + if(setting->GetBacklightOption() == EBlidBackLightOnDuringNavigation) + { + setting->SetBacklightOption(EBlidBackLightNormal); + iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightNormal); + lBacklightNormal = ETrue; + } + (static_cast(AppUi()))->HandleCommandL( aCommand ); + if(lBacklightNormal) + { + iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightAlwaysOn); + setting->SetBacklightOption(EBlidBackLightOnDuringNavigation); + } + break; + } + case EBlidCmdSettings: + { + iIsSettingsViewActive = ETrue; + (static_cast(AppUi()))->HandleCommandL( aCommand ); + break; + } + case EAknCmdHelp: + { + TCoeHelpContext context( TUid::Uid(KBLIDUID3), KHLP_BLID_TRIPMETER ); + CArrayFix* tripHelp = new CArrayFixFlat(1); + CleanupStack::PushL( tripHelp ); + tripHelp->AppendL(context); + HlpLauncher::LaunchHelpApplicationL(iCoeEnv->WsSession(), tripHelp ); + CleanupStack::Pop( tripHelp ); + break; + } + default: + { + static_cast(AppUi())->HandleCommandL( aCommand ); + break; + } + } //switch + } + +// ---------------------------------------------------------------------------- +// CBlidTripMeterView::DoActivateL +// ---------------------------------------------------------------------------- +// +void CBlidTripMeterView::DoActivateL( + const TVwsViewId& aPrevViewId,TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/) + { + #ifdef _DEBUG + RDebug::Print(_L("CBlidTripMeterView::DoActivateL() called")); + #endif + + iIsSettingsViewActive = EFalse; + + iLocation->SetObserver(*this, EBlidTripMeterView ); + + iTripCtrl->MakeTitleL( R_BLID_TITLE_TRIPMETER ); + iTripCtrl->UpdateL(); + + if( aPrevViewId.iViewUid.iUid != EBlidNavigationView ) + { + iTripCtrl->CreateNaviPaneL( EFalse ); + iTripCtrl->ActivateTabL( *( iTripCtrl->GetNiviDecorator( ) ), EBlidTripMeterView ); + } + + // Hide the navigation control group + iCtrlDisplay->Roster().Hide( iEnv.ControlGroup( KPrimaryGroup ) ); + + // Show the control group on the display. + iCtrlDisplay->Roster().ShowL( *iTripCtrlGroup ); + + MenuBar()->SetContextMenuTitleResourceId(R_BLID_TRIP_METER_VIEW_OK_MENUBAR); + MBlidSettings* setting = iEngine->SettingsModel(); + if(setting->GetBacklightOption() == EBlidBackLightOnDuringNavigation) + { + iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightAlwaysOn); + } + + } + +// ---------------------------------------------------------------------------- +// CBlidTripMeterView::DoDeactivate +// ---------------------------------------------------------------------------- +// +void CBlidTripMeterView::DoDeactivate() + { + TRAP_IGNORE(iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightNormal)); + } + +// --------------------------------------------------------- +// CBlidTripMeterView::DynInitMenuPaneL +// --------------------------------------------------------- +// +void CBlidTripMeterView::DynInitMenuPaneL( + TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + switch( aResourceId ) + { + case R_BLID_TRIP_METER_VIEW_OK_MENU: + case R_BLID_TRIPMETER_MENU: + { + if(iLocation->HasTripStarted()) + { + aMenuPane->SetItemDimmed( EBlidCmdTripStart, ETrue ); + aMenuPane->SetItemDimmed( EBlidCmdTripResume, ETrue ); + aMenuPane->SetItemDimmed( EBlidCmdTripStop, EFalse ); + aMenuPane->SetItemDimmed( EBlidCmdTripReset, EFalse ); + + if(aResourceId != R_BLID_TRIP_METER_VIEW_OK_MENU) + { + aMenuPane->SetItemDimmed( EBlidCmdTripClear, ETrue ); + } + }else + if(iLocation->HasTripNotStarted()) + { + aMenuPane->SetItemDimmed( EBlidCmdTripStop, ETrue ); + aMenuPane->SetItemDimmed( EBlidCmdTripResume, ETrue ); + aMenuPane->SetItemDimmed( EBlidCmdTripStart, EFalse ); + aMenuPane->SetItemDimmed( EBlidCmdTripReset, ETrue ); + + if(aResourceId != R_BLID_TRIP_METER_VIEW_OK_MENU) + { + aMenuPane->SetItemDimmed( EBlidCmdTripClear, ETrue ); + } + }else + if(!iLocation->HasTripStarted()) + { + if(iLocation->IsTripCleared()) + { + aMenuPane->SetItemDimmed( EBlidCmdTripResume, ETrue ); + aMenuPane->SetItemDimmed( EBlidCmdTripReset, ETrue ); + } + else + { + aMenuPane->SetItemDimmed( EBlidCmdTripStart, ETrue ); + } + + if(iLocation->IsTripReset()) + { + aMenuPane->SetItemDimmed( EBlidCmdTripReset, ETrue ); + } + + aMenuPane->SetItemDimmed( EBlidCmdTripStop, ETrue ); + + if(aResourceId != R_BLID_TRIP_METER_VIEW_OK_MENU) + { + if(iLocation->IsTripCleared()) + { + aMenuPane->SetItemDimmed( EBlidCmdTripClear, ETrue ); + } + } + } + break; + } + case R_BLID_TRIP_VIEW_MENU: + { + // Hide the satellite status menu option + if ( !(iLocation->IsGPSDeviceConnected() && + iLocation->SatelliteCapability()) ) + { + aMenuPane->SetItemDimmed( EBlidCmdSatelliteStatus, ETrue ); + } + // hide the save position. + if(!iLocation->IsOnline()) + { + aMenuPane->SetItemDimmed( EBlidCmdCurrentLocation, ETrue ); + } + + if ( !iRouter->Count() ) + { + aMenuPane->SetItemDimmed( EBlidCmdSavedWaypoints, ETrue ); + } + + if ( FeatureManager::FeatureSupported( KFeatureIdLandmarks ) ) + { + aMenuPane->SetItemDimmed( EBlidCmdSavedWaypoints, ETrue ); + } + break; + } + case R_BLID_MAIN_MENU: + { + CBlidBaseView::HandleHelpFeatureL( aMenuPane ); + break; + } + case R_BLID_SAVE_CURRENT_LOCATION_MENU: + { + TInt settingsValue = 0; + CRepository* repository = CRepository::NewL( TUid::Uid( KCRUidLocLocalVariation) ); + CleanupStack::PushL( repository ); + User::LeaveIfError( repository->Get( KLocHideCoordinates, + settingsValue )); + CleanupStack::PopAndDestroy( repository ); + + if ( ELocCoordinatesHidden == settingsValue ) + { + aMenuPane->SetItemDimmed( EBlidCmdShowDetails, ETrue ); + } + else + { + aMenuPane->SetItemDimmed( EBlidCmdShowDetails, EFalse ); + } + } + default: + { + break; + } + } + } + +// ---------------------------------------------------------- +// Handle Resource Change Events: Display orientation switch +// ---------------------------------------------------------- +// +void CBlidTripMeterView::HandleResourceChangeL( TInt aType ) + { + if(aType == KEikDynamicLayoutVariantSwitch) + { + TRect rect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect); + + // Notify skin of changed display size. + iEnv.PrimaryDisplay().SetVisibleArea(rect); + iTripCtrl->UpdateLayoutL(); + } + } + +// ---------------------------------------------------------------------------- +// CBlidTripMeterView::GetControl +// ---------------------------------------------------------------------------- +// +CHtkTripMeterControl* CBlidTripMeterView::GetControl() + { + return iTripCtrl; + } + + +#ifdef RD_SCALABLE_UI_V2 +// --------------------------------------------------------------------------- +// CBlidTripMeterView::HandleListBoxSelectionL +// --------------------------------------------------------------------------- +// +void CBlidTripMeterView::HandleListBoxSelectionL() + { + //Nothing to do here + } +#endif // RD_SCALABLE_UI_V2 +// End of File + +