--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/basiclocationinfodisplay/blid/ui/src/CBlidNavigationView.cpp Tue Feb 02 00:16:03 2010 +0200
@@ -0,0 +1,533 @@
+/*
+* 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 compass view class methods.
+*
+*/
+
+
+// SYSTEM INCLUDE FILES
+#include <Blid.rsg>
+//Added for HTK toolkit support
+#include <alf/alfenv.h>
+#include <alf/alfcontrolgroup.h>
+#include <alf/alfdisplay.h>
+#include <alf/alftransformation.h>
+#include <alf/alfroster.h>
+//End of addition
+
+#include <csxhelp/blid.hlp.hrh>
+#include <hlplch.h>
+
+// USER INCLUDE
+#include "CBlidNavigationView.h"
+#include "Blid.hrh"
+#include "CBlidDocument.h"
+#include "CBlidAppUi.h"
+#include "CBlidEng.h"
+#include "CHtkNavigationControl.h"
+#include "CHtkTripMeterControl.h"
+#include "MBlidSettings.h"
+#include "CBlidLocSettingLauncher.h"
+#include "bliduiconsts.h"
+#include "BlidUID.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::NewLC
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+//
+CBlidNavigationView* CBlidNavigationView::NewLC( MKeyProcessor& aKeyProcessor,
+ CAlfEnv& aEnv )
+ {
+ CBlidNavigationView* self = new (ELeave) CBlidNavigationView( aKeyProcessor,aEnv );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::CBlidNavigationView
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------------------------------
+//
+CBlidNavigationView::CBlidNavigationView( MKeyProcessor& aKeyProcessor,
+ CAlfEnv& aEnv ):
+ CBlidBaseView( aKeyProcessor ),
+ iEnv(aEnv)
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CBlidNavigationView::ConstructL()
+ {
+ BaseConstructL( R_BLID_NAVIGATION_VIEW );
+
+ // Create an instance of our list control.
+ iNavigationCtrl = CHtkNavigationControl::NewL(iEnv,
+ this,
+ ClientRect(),
+ *iLocation,
+ *iRouter,
+ *iEngine,
+ *this );
+
+
+ // Create a control group.
+ iNavigationCtrlGroup = &( iEnv.NewControlGroupL( KPrimaryGroup ) );
+
+ // pass ownership of the list control to the control group
+ iNavigationCtrlGroup->AppendL(iNavigationCtrl);
+
+ iCtrlDisplay = &( iEnv.NewDisplayL( ClientRect(), CAlfEnv::ENewDisplayAsCoeControl ) );
+ // Use the Avkon skin background as the display background.
+ iCtrlDisplay->SetClearBackgroundL(CAlfDisplay::EClearWithSkinBackground);
+
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::~CBlidNavigationView
+// ----------------------------------------------------------------------------
+//
+CBlidNavigationView::~CBlidNavigationView()
+ {
+ delete iLauncher;
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::NotifyL
+// ----------------------------------------------------------------------------
+//
+void CBlidNavigationView::NotifyL( const TBool aOnlineMode )
+ {
+ iNavigationCtrl->UpdateL();
+ CBlidBaseView::NotifyL( aOnlineMode );
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::NotifyError
+// ----------------------------------------------------------------------------
+//
+void CBlidNavigationView::NotifyErrorL( TInt aErrorCode )
+ {
+ CBlidBaseView::NotifyErrorL( aErrorCode );
+ iNavigationCtrl->UpdateL();
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::ProcessKeyEventL
+// ----------------------------------------------------------------------------
+//
+TBool CBlidNavigationView::ProcessKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ return CBlidBaseView::ProcessKeyEventL( aKeyEvent,aType );
+ }
+
+// ----------------------------------------------------------------------------
+// TUid CBlidNavigationView::Id
+// ----------------------------------------------------------------------------
+//
+TUid CBlidNavigationView::Id() const
+ {
+ return TUid::Uid(EBlidNavigationView);
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::HandleCommandL
+// ----------------------------------------------------------------------------
+//
+void CBlidNavigationView::HandleCommandL(TInt aCommand)
+ {
+ switch ( aCommand )
+ {
+ case EBlidCmdWaypoint:
+ {
+ TInt index(0);
+
+ if ( iRouter->Count() > 0 )
+ {
+ index = SelectWaypointL();
+ if ( index != KErrCancel )
+ {
+ iRouter->SetWaypoint( index );
+ }
+ }
+ iNavigationCtrl->ClearNavigationInfoL();
+ iNavigationCtrl->SetUpdateOptionL( ETrue );
+ iLocation->SetNavigationStart( ETrue );
+ iNavigationCtrl->SetFlagVisualL( );
+ iNavigationCtrl->SetAccRacyVisualL();
+ CHtkNavigationControl::iInArrivedZone = EFalse;
+ if(iEngine->HasArrivedToDestination())
+ {
+ CHtkNavigationControl::iInArrivedZone = ETrue;
+ }
+ iNavigationCtrl->UpdateL();
+ break;
+ }
+ case EBlidCmdSavedWaypoints:
+ {
+ AppUi()->ActivateLocalViewL( TUid::Uid( EBlidSavedWayptsView ) );
+ break;
+ }
+ case EBlidCmdStopNavigation:
+ {
+ iRouter->ClearSetPoints();
+ iNavigationCtrl->ClearNavigationInfoL();
+ iLocation->SetNavigationStart( EFalse );
+ static_cast<CHtkTripMeterControl*>( &( iEnv.ControlGroup( KPrimaryTripGroup ).Control( 0 ) ) )->ChangeTripFocus( ETrue );
+ iNavigationCtrl->UpdateL();
+ break;
+ }
+ case EBlidCmdLmk:
+ {
+ if(LaunchLandmarksDialogL())
+ {
+ iNavigationCtrl->ClearNavigationInfoL();
+ iNavigationCtrl->SetFlagVisualL( );
+ iNavigationCtrl->SetAccRacyVisualL();
+ iNavigationCtrl->SetUpdateOptionL( ETrue );
+ iLocation->SetNavigationStart( ETrue );
+ static_cast<CHtkTripMeterControl*>( &( iEnv.ControlGroup( KPrimaryTripGroup ).Control( 0 ) ) )->ReChangeTripFocus();
+ CHtkNavigationControl::iInArrivedZone = EFalse;
+ if(iEngine->HasArrivedToDestination())
+ {
+ CHtkNavigationControl::iInArrivedZone = ETrue;
+ }
+ iNavigationCtrl->UpdateL();
+ }
+ break;
+ }
+ case EBlidCmdManualWaypoint:
+ {
+ if(LaunchManualWaypointDialogL())
+ {
+ iNavigationCtrl->ClearNavigationInfoL();
+ iNavigationCtrl->SetFlagVisualL( );
+ iNavigationCtrl->SetAccRacyVisualL();
+ iNavigationCtrl->SetUpdateOptionL( ETrue );
+ iLocation->SetNavigationStart( ETrue );
+ static_cast<CHtkTripMeterControl*>( &( iEnv.ControlGroup( KPrimaryTripGroup ).Control( 0 ) ) )->ReChangeTripFocus();
+ CHtkNavigationControl::iInArrivedZone = EFalse;
+ if(iEngine->HasArrivedToDestination())
+ {
+ CHtkNavigationControl::iInArrivedZone = ETrue;
+ }
+ iNavigationCtrl->UpdateL();
+ }
+ break;
+ }
+ case EBlidCmdSaveLocation:
+ {
+ if ( !FeatureManager::FeatureSupported( KFeatureIdLandmarks ) )
+ {
+ if ( InsertWaypointL() )
+ {
+ static_cast<CBlidDocument*>(AppUi()->Document())->SaveL();
+ }
+ else
+ {
+ User::Leave( KErrGeneral );
+ }
+ }
+ else
+ {
+ SaveCurrentPositionAsLandmarkL();
+ }
+ break;
+ }
+ case EBlidCmdSatelliteStatus:
+ {
+ TBool lBacklightNormal = EFalse;
+ iNavigationCtrl->StopPlayerL();
+ MBlidSettings* setting = iEngine->SettingsModel();
+ if(setting->GetBacklightOption() == EBlidBackLightOnDuringNavigation)
+ {
+ setting->SetBacklightOption(EBlidBackLightNormal);
+ iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightNormal);
+ lBacklightNormal = ETrue;
+ }
+ (static_cast<CBlidAppUi*>(AppUi()))->HandleCommandL( aCommand );
+ if(lBacklightNormal)
+ {
+ iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightAlwaysOn);
+ setting->SetBacklightOption(EBlidBackLightOnDuringNavigation);
+ }
+ break;
+ }
+ case EBlidCmdSettings:
+ {
+ iIsSettingsViewActive = ETrue;
+ (static_cast<CBlidAppUi*>(AppUi()))->HandleCommandL( aCommand );
+ break;
+ }
+ case EBlidCmdShowDetails:
+ {
+ iNavigationCtrl->StopPlayerL();
+ ShowCurrentPositionInfoL();
+ break;
+ }
+ case EBlidCmdLaunchPositionSettings:
+ {
+ iNavigationCtrl->StopPlayerL();
+ if(!iLauncher)
+ {
+ iLauncher = CBlidLocSettingsLauncher::NewL();
+ }
+ iLauncher->LaunchL();
+ break;
+ }
+ case EBlidSoftKeyStop:
+ {
+ iNavigationCtrl->StopPlayerL();
+ break;
+ }
+ case EBlidNavigationMskInfo:
+ {
+ iNavigationCtrl->DisplayInfoPopUpMsgL();
+ break;
+ }
+ case EAknCmdHelp:
+ {
+ TCoeHelpContext context( TUid::Uid(KBLIDUID3), KHLP_BLID_NAVIGATION );
+ CArrayFix<TCoeHelpContext>* navHelp = new CArrayFixFlat<TCoeHelpContext>(1);
+ CleanupStack::PushL( navHelp );
+ navHelp->AppendL(context);
+ HlpLauncher::LaunchHelpApplicationL(iCoeEnv->WsSession(), navHelp );
+ CleanupStack::Pop( navHelp );
+ break;
+ }
+ default:
+ {
+ (static_cast<CBlidAppUi*>(AppUi()))->HandleCommandL( aCommand );
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::DoActivateL
+// ----------------------------------------------------------------------------
+//
+void CBlidNavigationView::DoActivateL(
+ const TVwsViewId& aPrevViewId,TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/)
+ {
+ #ifdef _DEBUG
+ RDebug::Print(_L("CBlidNavigationView::DoActivateL() called"));
+ #endif
+
+ iIsSettingsViewActive = EFalse;
+
+ iLocation->SetObserver(*this, EBlidNavigationView);
+ iNavigationCtrl->MakeTitleL(R_BLID_TITLE_NAVIGATION);
+ iNavigationCtrl->UpdateL();
+
+ if( aPrevViewId.iViewUid.iUid != EBlidTripMeterView )
+ {
+ iNavigationCtrl->CreateNaviPaneL( EFalse );
+ iNavigationCtrl->ActivateTabL( *( iNavigationCtrl->GetNiviDecorator( ) ), EBlidNavigationView );
+
+ // Hide the trip meter control
+ iCtrlDisplay->Roster().Hide( iEnv.ControlGroup( KBlidMainSatelliteGroup ) );
+ }
+
+ // Hide the trip meter control
+ iCtrlDisplay->Roster().Hide( iEnv.ControlGroup( KPrimaryTripGroup ) );
+
+ // Show the control group on the display.
+ iCtrlDisplay->Roster().ShowL( *iNavigationCtrlGroup );
+
+ MenuBar()->SetContextMenuTitleResourceId(R_BLID_VIEW_OK_MENUBAR);
+ MBlidSettings* setting = iEngine->SettingsModel();
+ if(setting->GetBacklightOption() == EBlidBackLightOnDuringNavigation)
+ {
+ iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightAlwaysOn);
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::DoDeactivate
+// ----------------------------------------------------------------------------
+//
+void CBlidNavigationView::DoDeactivate()
+ {
+ TRAP_IGNORE(iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightNormal));
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::SelectWaypointL
+// ----------------------------------------------------------------------------
+//
+TInt CBlidNavigationView::SelectWaypointL()
+ {
+ TBool lBacklightNormal = EFalse;
+ MBlidSettings* setting = iEngine->SettingsModel();
+ iNavigationCtrl->StopPlayerL();
+ if(setting->GetBacklightOption() == EBlidBackLightOnDuringNavigation)
+ {
+ setting->SetBacklightOption(EBlidBackLightNormal);
+ iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightNormal);
+ lBacklightNormal = ETrue;
+ }
+ TInt index = CBlidBaseView::SelectWaypointL();
+ if(lBacklightNormal)
+ {
+ iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightAlwaysOn);
+ setting->SetBacklightOption(EBlidBackLightOnDuringNavigation);
+ }
+ return index;
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::LaunchLandmarksDialogL
+// ----------------------------------------------------------------------------
+//
+TInt CBlidNavigationView::LaunchLandmarksDialogL()
+ {
+ TBool lBacklightNormal = EFalse;
+ MBlidSettings* setting = iEngine->SettingsModel();
+ iNavigationCtrl->StopPlayerL();
+ if(setting->GetBacklightOption() == EBlidBackLightOnDuringNavigation)
+ {
+ setting->SetBacklightOption(EBlidBackLightNormal);
+ iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightNormal);
+ lBacklightNormal = ETrue;
+ }
+ TInt lResult = CBlidBaseView::LaunchLandmarksDialogL();
+ if(lBacklightNormal)
+ {
+ iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightAlwaysOn);
+ setting->SetBacklightOption(EBlidBackLightOnDuringNavigation);
+ }
+ return lResult;
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::LaunchManualWaypointDialogL
+// ----------------------------------------------------------------------------
+//
+TInt CBlidNavigationView::LaunchManualWaypointDialogL()
+ {
+ TBool lBacklightNormal = EFalse;
+ MBlidSettings* setting = iEngine->SettingsModel();
+ iNavigationCtrl->StopPlayerL();
+ if(setting->GetBacklightOption() == EBlidBackLightOnDuringNavigation)
+ {
+ setting->SetBacklightOption(EBlidBackLightNormal);
+ iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightNormal);
+ lBacklightNormal = ETrue;
+ }
+ TInt lResult = CBlidBaseView::LaunchManualWaypointDialogL();
+ if(lBacklightNormal)
+ {
+ iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightAlwaysOn);
+ setting->SetBacklightOption(EBlidBackLightOnDuringNavigation);
+ }
+ return lResult;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::InsertWaypointL
+// ----------------------------------------------------------------------------
+//
+TBool CBlidNavigationView::InsertWaypointL()
+ {
+ TBool lBacklightNormal = EFalse;
+ MBlidSettings* setting = iEngine->SettingsModel();
+ iNavigationCtrl->StopPlayerL();
+ if(setting->GetBacklightOption() == EBlidBackLightOnDuringNavigation)
+ {
+ setting->SetBacklightOption(EBlidBackLightNormal);
+ iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightNormal);
+ lBacklightNormal = ETrue;
+ }
+ TBool lResult = CBlidBaseView::InsertWaypointL();
+ if(lBacklightNormal)
+ {
+ iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightAlwaysOn);
+ setting->SetBacklightOption(EBlidBackLightOnDuringNavigation);
+ }
+ return lResult;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::SaveCurrentPositionAsLandmarkL
+// ----------------------------------------------------------------------------
+//
+void CBlidNavigationView::SaveCurrentPositionAsLandmarkL()
+ {
+ TBool lBacklightNormal = EFalse;
+ MBlidSettings* setting = iEngine->SettingsModel();
+ iNavigationCtrl->StopPlayerL();
+ if(setting->GetBacklightOption() == EBlidBackLightOnDuringNavigation)
+ {
+ setting->SetBacklightOption(EBlidBackLightNormal);
+ iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightNormal);
+ lBacklightNormal = ETrue;
+ }
+ CBlidBaseView::SaveCurrentPositionAsLandmarkL();
+ if(lBacklightNormal)
+ {
+ iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightAlwaysOn);
+ setting->SetBacklightOption(EBlidBackLightOnDuringNavigation);
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidNavigationView::GetControl
+// ----------------------------------------------------------------------------
+//
+CHtkNavigationControl* CBlidNavigationView::GetControl()
+ {
+ return iNavigationCtrl;
+ }
+
+// ----------------------------------------------------------
+// Handle Resource Change Events: Display orientation switch
+// ----------------------------------------------------------
+//
+void CBlidNavigationView::HandleResourceChangeL( TInt aType )
+ {
+ if(aType == KEikDynamicLayoutVariantSwitch)
+ {
+ TRect rect;
+ AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect);
+
+ // Notify skin of changed display size.
+ iEnv.PrimaryDisplay().SetVisibleArea(rect);
+ iNavigationCtrl->UpdateLayoutL();
+ }
+ }
+
+#ifdef RD_SCALABLE_UI_V2
+// ---------------------------------------------------------------------------
+// CBlidNavigationView::HandleListBoxSelectionL
+// ---------------------------------------------------------------------------
+//
+void CBlidNavigationView::HandleListBoxSelectionL()
+ {
+ //Do something if needed
+ }
+#endif //RD_SCALABLE_UI_V2
+
+// End of File