diff -r 1fc85118c3ae -r 870918037e16 basiclocationinfodisplay/blid/ui/src/CBlidAppUi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/basiclocationinfodisplay/blid/ui/src/CBlidAppUi.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,434 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include + +#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" +#include "CBlidSatelliteControl.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(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( 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 + ( 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 (View(TUid::Uid( + EBlidNavigationView))); + view->GetControl()->UpdateL(); + } + if (engine->LocationModel()->GetRegisteredViewId() + == EBlidTripMeterView) + { + CBlidTripMeterView* view = + static_cast (View(TUid::Uid( + EBlidTripMeterView))); + view->GetControl()->UpdateL(); + } + if (engine->LocationModel()->GetRegisteredViewId() + == EBlidMainSatelliteView) + { + CBlidSatelliteView* view = static_cast (View( + TUid::Uid(EBlidMainSatelliteView))); + view->GetControl()->UpdateL(); + } + if (engine->LocationModel()->GetRegisteredViewId() + == EBlidMainView) + { + CBlidMainView* view = static_cast (View( + TUid::Uid(EBlidMainView))); + view->GetControl()->UpdateL(); + } + } + } + else + { + engine->SetAppMode(CBlidEng::EAppBackground); + engine->SetBackLightStateL(CBlidEng::EBlidBacklightNormal); + if (engine->LocationModel()->GetRegisteredViewId() + == EBlidNavigationView) + { + CBlidNavigationView* view = + static_cast (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(View(TUid::Uid(EBlidNavigationView))); + NavView->HandleResourceChangeL( aType ); + + CBlidTripMeterView* TripView = static_cast(View(TUid::Uid(EBlidTripMeterView))); + TripView->HandleResourceChangeL( aType ); + + CBlidMainView* MainView = static_cast(View(TUid::Uid(EBlidMainView))); + MainView->HandleResourceChangeL( aType ); + + CBlidSatelliteView* SatView = static_cast(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(View(TUid::Uid(EBlidTripMeterView))); + if( view ) + { + view->GetControl()->ResetOdometerDistanceL(); + } + } +// End of File