--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/basiclocationinfodisplay/blid/ui/src/CBlidAppUi.cpp Tue Feb 02 00:16:03 2010 +0200
@@ -0,0 +1,412 @@
+/*
+* 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 UI class methods.
+*
+*/
+
+
+// INCLUDE FILES
+#include <AknsUtils.h>
+#include <Blid.rsg>
+#include <akncontext.h>
+#include <hlplch.h>
+#include <StringLoader.h>
+#include <blid.mbg>
+#include <CSatelliteInfoUI.h>
+
+#include "CBlidAppUi.h"
+#include "Blid.hrh"
+#include "CBlidDocument.h"
+#include "CBlidMainView.h"
+#include "CBlidNavigationView.h"
+#include "CBlidTripMeterView.h"
+#include "CBlidSettingsView.h"
+#include "CBlidSavedWayptsView.h"
+#include "CBlidSatelliteView.h"
+#include "CBlidEng.h"
+#include "Blidutils.h"
+#include "CHtkNavigationControl.h"
+#include "CHtkTripMeterControl.h"
+#include "FileSystemInfo.h"
+#include "BlidUID.h"
+
+
+#ifdef _DEBUG
+_LIT( KPanicMsg, "CBlidAppUi::TabChangedL");
+
+enum TPanicCode
+ {
+ KBlidNullPointer = 1
+ };
+#endif
+
+// ================= MEMBER FUNCTIONS =======================
+//
+// ----------------------------------------------------------
+// CBlidAppUi::ConstructL
+// Second phase construction
+// ----------------------------------------------------------
+//
+void CBlidAppUi::ConstructL()
+
+ {
+ RDebug::Print(_L("CBlidAppUi::ConstructL() called"));
+
+ TLocale locale;
+ locale.SetUnitsGeneral(EUnitsMetric);
+ locale.Set();
+
+
+ BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible);
+
+ //Code added for HTK tool kit support
+ // Create the environment
+ iAlfEnv = CAlfEnv::NewL();
+
+ // assign private path to the texture manager
+ CFileSystemInfo* fileSystemInfo = CFileSystemInfo::NewLC(TUid::Uid(KBLIDUID3));
+ TFileName path = fileSystemInfo->PrivatePath();
+ CleanupStack::PopAndDestroy(fileSystemInfo);
+
+ iAlfEnv->TextureManager().SetImagePathL( path );
+
+ //End of addition.
+ iContextPane = ETrue;
+ iIsSatViewActive = EFalse;
+
+ CBlidBaseView* navigationView = CBlidNavigationView::NewLC( *this, *iAlfEnv );
+ AddViewL( navigationView ); // transfer ownership to CAknViewAppUi
+ CleanupStack::Pop( navigationView ); // navigationView
+
+ CBlidBaseView* tripMeterView = CBlidTripMeterView::NewLC( *this, *iAlfEnv );
+ AddViewL( tripMeterView );
+ CleanupStack::Pop( tripMeterView ); // tripMeterView
+
+ CBlidBaseView* settingsView = CBlidSettingsView::NewLC(*this);
+ AddViewL( settingsView );
+ CleanupStack::Pop( settingsView ); // settingsView
+
+ CBlidBaseView* savedwayptsView = CBlidSavedWayptsView::NewLC(*this);
+ AddViewL( savedwayptsView );
+ CleanupStack::Pop( savedwayptsView ); // savedwayptsView
+
+ CBlidMainView* mainview = CBlidMainView::NewLC( *this, *iAlfEnv );
+ AddViewL( mainview );
+ CleanupStack::Pop( mainview ); // mainview
+
+ CBlidSatelliteView* mainSatview = CBlidSatelliteView::NewLC( *this, *iAlfEnv );
+ AddViewL( mainSatview );
+ CleanupStack::Pop( mainSatview ); // mainSatview
+
+ SetDefaultViewL( *mainview );
+
+ //start requesting
+ CBlidEng* engine = BlidDocument()->Engine();
+
+ if( engine->LocationModel() )
+ {
+ HBufC* srvName = StringLoader::LoadLC(
+ R_BLID_SERVICE_RULE_NAME, iCoeEnv );
+
+ engine->LocationModel()->InitialLocationRequestL( *srvName );
+ CleanupStack::PopAndDestroy(srvName); //srvName
+ engine->LocationModel()->StartRequesting();
+ }
+ }
+
+// ----------------------------------------------------
+// CBlidAppUi::~CBlidAppUi
+// Destructor
+// Frees reserved resources
+// ----------------------------------------------------
+//
+CBlidAppUi::~CBlidAppUi()
+ {
+ delete iAlfEnv;
+ }
+
+// ----------------------------------------------------
+// CBlidAppUi::LocDocument
+// Returns the Location document object.
+// ----------------------------------------------------
+//
+CBlidDocument* CBlidAppUi::BlidDocument() const
+ {
+ // Explicit cast: the document must always be of type CBlidDocument
+ return static_cast<CBlidDocument*>(Document());
+ }
+
+// ----------------------------------------------------
+// CBlidAppUi::ShowDialog
+// Displayes Overwrite waypoint note
+// ----------------------------------------------------
+//
+void CBlidAppUi::ShowDialogL( const BlidNotes::TBlidNotes /*aNoteId*/ )
+ {
+ BlidNotes::OverWriteWaypointNoteL();
+ }
+
+
+
+// ----------------------------------------------------
+// CBlidAppUi::SkinChange
+// Handle skin change
+// ----------------------------------------------------
+//
+void CBlidAppUi::SkinChange()
+ {
+ iContextPane = !iContextPane;
+ }
+
+// ----------------------------------------------------
+// CBlidAppUi::HandleCommandL
+// Handle options menu commands
+// ----------------------------------------------------
+//
+void CBlidAppUi::HandleCommandL(TInt aCommand)
+ {
+ switch ( aCommand )
+ {
+ case EAknCmdHelp:
+ {
+ HlpLauncher::LaunchHelpApplicationL(iCoeEnv->WsSession(),
+ AppHelpContextL());
+ break;
+ }
+ // these all are same: save & exit
+ case EAknSoftkeyBack:
+ case EAknSoftkeyExit:
+ case EEikCmdExit:
+ {
+ CBlidTripMeterView* view = static_cast<CBlidTripMeterView*>( View( TUid::Uid( EBlidTripMeterView ) ) );
+ if( view )
+ {
+ view->GetControl()->SaveOdometerValue();
+ }
+ //////////////////////////////////////
+ RWsSession& ws = iCoeEnv->WsSession();
+ TApaTaskList taskList(ws);
+ TUid appUid = { KBLIDUID3 };
+ TApaTask task = taskList.FindApp( appUid );
+ if ( task.Exists() )
+ {
+ // stop any task runing for this application.
+ task.EndTask();
+ }
+ ////////////////////////////////////////
+ Exit();
+ break;
+ }
+ case EBlidCmdSettings:
+ {
+ ActivateLocalViewL( TUid::Uid(EBlidSettingsView) );
+ break;
+ }
+ case EBlidCmdSatelliteStatus:
+ {
+ TRAPD( error, LaunchSatelliteInfoDlgL() );
+ if ( error != KErrNone )
+ {
+ // need to be NULL, before leave
+ iSatelliteInfo = NULL;
+ User::Leave( error );
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+// ----------------------------------------------------
+// CBlidAppUi::TabChangedL
+// Called when Tab is changed, activates appropriate view
+// ----------------------------------------------------
+//
+void CBlidAppUi::TabChangedL(TInt aIndex)
+ {
+ // Gets a subpane control by ID
+ CAknNavigationControlContainer* naviCtrlContainer =
+ static_cast<CAknNavigationControlContainer*>
+ ( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+ __ASSERT_DEBUG( naviCtrlContainer,
+ User::Panic(KPanicMsg, KBlidNullPointer) );
+
+ // Return topmost object from navigation pane's object stack.
+ CAknNavigationDecorator* decorator = naviCtrlContainer->Top();
+ __ASSERT_DEBUG( decorator && decorator->ControlType() ==
+ CAknNavigationDecorator::ETabGroup,
+ User::Panic( KPanicMsg, KBlidNullPointer ) );
+
+ CAknTabGroup* tabGroup =
+ static_cast< CAknTabGroup* > ( decorator->DecoratedControl() );
+ __ASSERT_DEBUG( tabGroup && aIndex >= 0 && aIndex < tabGroup->TabCount(),
+ User::Panic(KPanicMsg, KBlidNullPointer));
+ ActivateLocalViewL(TUid::Uid(tabGroup->TabIdFromIndex(aIndex)));
+ }
+
+// ----------------------------------------------------
+// CBlidAppUi::HandleForegroundEventL
+// Called whenever app goes to background or comes to foreground
+// ----------------------------------------------------
+//
+void CBlidAppUi::HandleForegroundEventL(TBool aForeground)
+ {
+ CAknAppUi::HandleForegroundEventL( aForeground );
+ iForeground = aForeground;
+
+ CBlidEng* engine = BlidDocument()->Engine();
+ if(aForeground)
+ {
+ engine->SetAppMode(CBlidEng::EAppForeground);
+ if(engine->LocationModel() )
+ {
+ if( engine->LocationModel()->GetRegisteredViewId() == EBlidNavigationView )
+ {
+ CBlidNavigationView* view = static_cast<CBlidNavigationView*>(View(TUid::Uid(EBlidNavigationView)));
+ view->GetControl()->UpdateL();
+ }
+ if( engine->LocationModel()->GetRegisteredViewId() == EBlidTripMeterView )
+ {
+ CBlidTripMeterView* view = static_cast<CBlidTripMeterView*>( View( TUid::Uid( EBlidTripMeterView ) ) );
+ view->GetControl()->UpdateL();
+ }
+ }
+ }
+ else
+ {
+ engine->SetAppMode(CBlidEng::EAppBackground);
+ engine->SetBackLightStateL(CBlidEng::EBlidBacklightNormal);
+ if( engine->LocationModel()->GetRegisteredViewId() == EBlidNavigationView )
+ {
+ CBlidNavigationView* view = static_cast<CBlidNavigationView*>( View( TUid::Uid( EBlidNavigationView ) ) );
+ view->GetControl()->StopPlayerL();
+ }
+ }
+
+
+ if ( iSatelliteInfo )
+ {
+ iSatelliteInfo->HandleForegroundEventL( aForeground );
+ }
+
+ }
+
+// ----------------------------------------------------
+// CBlidAppUi::ProcessKeyEventL
+// Process key event
+// ----------------------------------------------------
+//
+TBool CBlidAppUi::ProcessKeyEventL( const TKeyEvent& /*aKeyEvent*/,
+ TEventCode /*aType*/ )
+ {
+ return EKeyWasNotConsumed;
+ }
+
+// ----------------------------------------------------
+// CBlidAppUi::TabObserver
+// Retruns CBlidAppUi pointer, which is Tab observer
+// ----------------------------------------------------
+//
+MAknTabObserver* CBlidAppUi::TabObserver()
+ {
+ return this;
+ }
+
+// ----------------------------------------------------
+// CBlidAppUi::LaunchSatelliteInfoDlgL
+// Launches Satellite info dialog
+// ----------------------------------------------------
+//
+void CBlidAppUi::LaunchSatelliteInfoDlgL()
+ {
+ HBufC* srvName = StringLoader::LoadLC(
+ R_BLID_SERVICE_RULE_NAME,
+ iCoeEnv );
+ iSatelliteInfo = CSatelliteInfoUI::NewL();
+ iSatelliteInfo->ExecuteLD( *srvName );
+ CleanupStack::PopAndDestroy(srvName); //srvName
+ iSatelliteInfo = NULL;
+ }
+
+// ----------------------------------------------------
+// CBlidAppUi::IsForeground
+// Checks if App is in foreground
+// ----------------------------------------------------
+//
+TBool CBlidAppUi::IsForeground()
+ {
+ return iForeground;
+ }
+
+// ----------------------------------------------------
+// CBlidAppUi::HandleResourceChangeL
+// Handles a change to the resources
+// ----------------------------------------------------
+//
+void CBlidAppUi::HandleResourceChangeL( TInt aType )
+ {
+ CAknAppUi::HandleResourceChangeL( aType );
+ CBlidEng* engine = BlidDocument()->Engine();
+
+ if( engine->LocationModel() )
+ {
+ CBlidNavigationView* NavView = static_cast<CBlidNavigationView*>(View(TUid::Uid(EBlidNavigationView)));
+ NavView->HandleResourceChangeL( aType );
+
+ CBlidTripMeterView* TripView = static_cast<CBlidTripMeterView*>(View(TUid::Uid(EBlidTripMeterView)));
+ TripView->HandleResourceChangeL( aType );
+
+ CBlidMainView* MainView = static_cast<CBlidMainView*>(View(TUid::Uid(EBlidMainView)));
+ MainView->HandleResourceChangeL( aType );
+
+ CBlidSatelliteView* SatView = static_cast<CBlidSatelliteView*>(View(TUid::Uid(EBlidMainSatelliteView)));
+ SatView->HandleResourceChangeL( aType );
+ }
+ }
+
+// ----------------------------------------------------
+// CBlidAppUi::SetSatelliteViewActive
+// Set satellite view active or inactive
+// ----------------------------------------------------
+//
+void CBlidAppUi::SetSatelliteViewActive( TBool aActive )
+ {
+ iIsSatViewActive = aActive;
+ }
+
+// ----------------------------------------------------
+// CBlidAppUi::IsSatelliteViewActive
+// Check if Satellite view is active
+// ----------------------------------------------------
+//
+TBool CBlidAppUi::IsSatelliteViewActive( )
+ {
+ return iIsSatViewActive;
+ }
+
+// ----------------------------------------------------
+// CBlidAppUi::ResetOdoMeterValueL
+// Resets the odometer value
+// ----------------------------------------------------
+//
+void CBlidAppUi::ResetOdoMeterValueL()
+ {
+ CBlidTripMeterView* view = static_cast<CBlidTripMeterView*>(View(TUid::Uid(EBlidTripMeterView)));
+ if( view )
+ {
+ view->GetControl()->ResetOdometerDistanceL();
+ }
+ }
+// End of File