diff -r 1fc85118c3ae -r 870918037e16 basiclocationinfodisplay/blid/ui/src/CBlidBaseView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/basiclocationinfodisplay/blid/ui/src/CBlidBaseView.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,1070 @@ +/* +* 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 main view class methods. +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include // CEikMenuBar +#include +#include +#include +#include +#include +#include +#include + +#include "CBlidBaseView.h" +#include "CBlidAppUi.h" +#include "CBlidBaseContainer.h" +#include "MBlidRouter.h" +#include "MBlidSettings.h" +#include "MBlidLocation.h" +#include "CBlidEng.h" +#include "CBlidDocument.h" +#include "Blid.hrh" +#include "bliduiconsts.h" +#include "CBlidCurrentPositionDlg.h" + +#include +#include + +enum TPanicCode + { + KBlidNullPointer = 1 + }; + +// Start with the assumption that PSY is not connected +TInt CBlidBaseView::iPSYTimeoutCount = 0; +TBool CBlidBaseView::iOnline = EFalse; + +const TInt KMiddleSKId = 3; + + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CBlidBaseView::CBlidBaseView +// First phase constructor, should not leave +// --------------------------------------------------------- +// +CBlidBaseView::CBlidBaseView( MKeyProcessor& aKeyProcessor ) + : iKeyProcessor(aKeyProcessor) + { + StringLoader::Load( iManualWaypointName, R_BLID_DESTINATION_COORDINATES, iCoeEnv ); + } + +// --------------------------------------------------------- +// CBlidBaseView::BaseConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------- +// +void CBlidBaseView::BaseConstructL( TInt aResId ) + { + FeatureManager::InitializeLibL(); + CAknView::BaseConstructL( aResId ); + + iEngine = static_cast(AppUi()->Document())->Engine(); + + if( !iEngine->LocationModel() ) + { + iEngine->CreateModelL( CBlidEng::EBlidLocation ); + } + iLocation = iEngine->LocationModel(); + __ASSERT_DEBUG( iLocation, User::Panic(_L("CBlidOwnPosView"), + KBlidNullPointer)); + + iRouter = iEngine->RouterModel(); + + iImageLoaderUtil = new (ELeave) CAlfImageLoaderUtil(); + + iConFileName.Zero(); + iConFileName.Append( _L("z") ); + iConFileName.Append( KBlidSystemIconPath ); + + iIsSettingsViewActive = EFalse; + + __ASSERT_DEBUG( iRouter, User::Panic(_L("CBlidOwnPosView"), + KBlidNullPointer)); + } + +// --------------------------------------------------------- +// CBlidBaseView::~CLocBaseView() +// Destructor, frees allocated resources +// --------------------------------------------------------- +// +CBlidBaseView::~CBlidBaseView() + { + FeatureManager::UnInitializeLib(); + delete iImageLoaderUtil; + } + +// --------------------------------------------------------- +// CBlidBaseView::ProcessKeyEventL +// Processes the key event +// --------------------------------------------------------- +// +TBool CBlidBaseView::ProcessKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + return iKeyProcessor.ProcessKeyEventL( aKeyEvent, aType ); + } + +// --------------------------------------------------------- +// CBlidBaseView::TabObserver() +// Returns the tab observer +// --------------------------------------------------------- +// +MAknTabObserver* CBlidBaseView::TabObserver() + { + return iKeyProcessor.TabObserver(); + } + +// --------------------------------------------------------- +// CBlidBaseView::DynInitMenuPaneL +// Called to initialize the menu pane at run time +// --------------------------------------------------------- +// +void CBlidBaseView::DynInitMenuPaneL( + TInt aResourceId, CEikMenuPane* aMenuPane ) + { + #ifdef _DEBUG + RDebug::Print(_L("CBlidCompassView::DynInitMenuPaneL() called")); + #endif + switch( aResourceId ) + { + case R_BLID_VIEW_MENU: + { + if ( !(iLocation->IsGPSDataAvailable() && + iLocation->SatelliteCapability()) ) + { + aMenuPane->SetItemDimmed( EBlidCmdSatelliteStatus, ETrue ); + } + if ( (!iRouter->Count()) || FeatureManager::FeatureSupported( KFeatureIdLandmarks ) ) + { + aMenuPane->SetItemDimmed( EBlidCmdSavedWaypoints, ETrue ); + } + + // hide the save position. + if(!iLocation->IsOnline()) + { + aMenuPane->SetItemDimmed( EBlidCmdCurrentLocation, ETrue ); + } + + + + } + //-fallthrough + case R_BLID_VIEW_OK_MENU: + { + if ( !iRouter->IsAnyPointSet() ) + { + aMenuPane->SetItemDimmed( EBlidCmdStopNavigation, ETrue ); + } + break; + } + case R_BLID_MAIN_MENU: + { + CBlidBaseView::HandleHelpFeatureL( aMenuPane ); + break; + } + + case R_BLID_SET_DESTINATION_MENU: + { + if ( iRouter->Count() <= 0 ) + { + aMenuPane->SetItemDimmed( EBlidCmdWaypoint, ETrue ); + } + else + { + aMenuPane->SetItemDimmed( EBlidCmdWaypoint, EFalse ); + } + + // Features manager checks for waypoint/landmarks variation + if ( FeatureManager::FeatureSupported( KFeatureIdLandmarks ) ) + { + aMenuPane->SetItemDimmed( EBlidCmdWaypoint, ETrue ); + } + else + { + aMenuPane->SetItemDimmed( EBlidCmdLmk, ETrue ); + } + + if ( FeatureManager::FeatureSupported( KFeatureIdLandmarks ) ) + { + if( IsLmAvailableL() ) + { + aMenuPane->SetItemDimmed( EBlidCmdLmk, EFalse ); + } + else + { + aMenuPane->SetItemDimmed( EBlidCmdLmk, ETrue ); + } + } + 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 ); + } + + break; + } + default: + { + break; + } + } + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::NotifyL +// Called by location model to notify about updates in location +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::NotifyL( const TBool /*aOnlineMode*/ ) + { + if( iPopupDialog ) + { + iPopupDialog->ChangeDlgSoftKey(); + } + // GPS available + CBlidBaseContainer::SetGPSAvailability(ETrue); + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::NotifyError +// Called by location model to notify about error in location +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::NotifyErrorL( TInt /*aErrorCode*/ ) + { + if( iPopupDialog ) + { + iPopupDialog->ChangeDlgSoftKey(); + } + } + +// --------------------------------------------------------- +// CBlidBaseView::HandleHelpFeatureL +// Handles the Help option command +// --------------------------------------------------------- +// +void CBlidBaseView::HandleHelpFeatureL( CEikMenuPane* aMenuPane ) const + { + //implementation for req 406-917. Hide position view based on feature variation flag + TInt helpSettingValue = ELocHelpNotHidden; + CRepository* repository = CRepository::NewL( TUid::Uid( KCRUidLocLocalVariation) ); + CleanupStack::PushL( repository ); + User::LeaveIfError( repository->Get( KLocHideHelp, + helpSettingValue )); + CleanupStack::PopAndDestroy( repository ); + + + if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) && !helpSettingValue) + { + aMenuPane->SetItemDimmed( EAknCmdHelp, EFalse ); + } + else + { + aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); + } + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::InsertWaypointL +// Insers a waypoint +// ---------------------------------------------------------------------------- +// +TBool CBlidBaseView::InsertWaypointL() + { + TBuf textData; + StringLoader::Load( textData, R_BLID_WAYPOINT_NAME, iCoeEnv ); + TInt errorCode(KErrNone); + TBool returnValue(ETrue); + TInt removedIndex; + + do + { + if(errorCode != KErrNone) + { + return EFalse; + } + + CAknTextQueryDialog* dlg = new(ELeave) CAknTextQueryDialog(textData, + CAknQueryDialog::ENoTone); + + if (!dlg->ExecuteLD(R_BLID_WAYPOINT_QUERY)) + { + return EFalse; + } + + }while( CheckIfExistL( textData, errorCode, removedIndex ) ); + + if(errorCode != KErrNone) + { + return EFalse; + } + + /// if KMaxNumberOfWaypoints or more than that is already present + /// display note. + if ( iRouter->Count() >= KMaxNumberOfWaypoints ) + { + static_cast(AppUi() + )->ShowDialogL( BlidNotes::EBlidOverWriteWaypointNote ); + return EFalse; + } + + TNamedCoordinate* waypoint = new(ELeave)TNamedCoordinate(); + CleanupStack::PushL( waypoint ); + waypoint->SetName( textData ); + TPosition position = iLocation->GetCurrentPosition(); + waypoint->SetCoordinate( position.Latitude(), + position.Longitude(), + position.Altitude() ); + position.SetHorizontalAccuracy(position.HorizontalAccuracy()); + waypoint->SetAccuracy(position.HorizontalAccuracy()); + //iRouter takes waypoint's ownership + TInt retVal = iRouter->AppendL( waypoint, ETrue); + if(retVal == KErrDiskFull) + { + delete waypoint; + BlidNotes::OutOfMemoryNoteL(); + returnValue = EFalse; + } + CleanupStack::Pop(); //waypoint + + return returnValue; + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::SelectWaypoint +// Select a waypoint +// ---------------------------------------------------------------------------- +// +TInt CBlidBaseView::SelectWaypointL() + { + TInt index(KErrCancel); + TInt currentIndex(0); + CEikFormattedCellListBox* listBox = + new(ELeave)CAknSinglePopupMenuStyleListBox; + CleanupStack::PushL( listBox ); + + HBufC* name = NULL; + TInt count( iRouter->Count() ); + TNamedCoordinate* waypoint = iRouter->Waypoint(); + + CDesCArray* array = new(ELeave)CDesCArrayFlat(KMaxNumberOfWaypoints); + CleanupStack::PushL( array ); + + TInt waypointAdditionCount = 0; + // fill up the array with waypoint's names from the engine. + for ( TInt i = 0; i < count; i++ ) + { + name = iRouter->At(i).Name(); + if ( name ) + { + CleanupStack::PushL( name ); + array->AppendL( *name ); + waypointAdditionCount ++; + CleanupStack::PopAndDestroy(name); //name + } + else + { + currentIndex = i; + } + } + + + CAknPopupList* popupList = CAknPopupList::NewL( listBox, + R_AVKON_SOFTKEYS_OK_CANCEL, + AknPopupLayouts::EPopupSNotePopupWindow); + CleanupStack::PushL(popupList); + + HBufC* title = iCoeEnv->AllocReadResourceLC( R_BLID_QUERY_WAYPOINT ); + popupList->SetTitleL( *title ); + CleanupStack::PopAndDestroy(title); //title + title = NULL; + + listBox->ConstructL( popupList, + EAknListBoxSelectionList | EAknListBoxLoopScrolling); + + listBox->CreateScrollBarFrameL(ETrue); + listBox->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EAuto, + CEikScrollBarFrame::EAuto); + + //listbox's model take ownership of array + listBox->Model()->SetItemTextArray(array); + + CleanupStack::Pop(popupList); // popupList + CleanupStack::Pop(array); //array + TBool isEmpty = array->Count() == 0; + + if ( popupList->ExecuteLD() ) + { + index = listBox->CurrentItemIndex(); + } + CleanupStack::PopAndDestroy(listBox); //listBox + + if(isEmpty) + { + return KErrCancel; + } + + if(waypoint && waypointAdditionCount != iRouter->Count()) + { + if(index >= currentIndex) + { + index += 1; + } + } + if ( index != KErrCancel ) + { + TNamedCoordinate waypoint = iRouter->At(index); + if(waypoint.Accuracy() >= KBlidPoorAccuracy) + { + HBufC* noteText = StringLoader::LoadLC( R_BLID_CONF_DEST_INACCURATE , iCoeEnv ); + CAknQueryDialog* dlg = CAknQueryDialog::NewL(CAknQueryDialog::ENoTone); + if(dlg->ExecuteLD(R_BLID_CONFIRMATION_QUERY, *noteText)) + { + CleanupStack::PopAndDestroy( noteText ); + return index; + } + else + { + CleanupStack::PopAndDestroy( noteText ); + return KErrCancel; + } + } + } + return index; + } + +// --------------------------------------------------------- +// CBlidBaseView::CheckIfExist +// Checks if a waypoint exists +// --------------------------------------------------------- +// +TBool CBlidBaseView::CheckIfExistL( const TDes& aName, TInt& aErrorCode, TInt& aRemovedIndex ) + { + TInt i(0); + TInt count( iRouter->Count() ); + HBufC* name = NULL; + TBool retVal; + aRemovedIndex = KErrNotFound; + + for ( i = 0; i < count; i++ ) + { + name = iRouter->At( i ).Name(); + if ( name && name->Compare( aName ) == 0 ) + { + CleanupStack::PushL(name); + HBufC* text; + text = StringLoader::LoadLC(R_BLID_QUERY_WAYPOINT_NAME_EXISTS, + *name, + iCoeEnv); + + CAknQueryDialog* dlg = CAknQueryDialog::NewL(); + CleanupStack::PushL(dlg); + dlg->SetPromptL( *text ); + CleanupStack::Pop( dlg ); + retVal = dlg->ExecuteLD(R_BLID_CONFIRMATION_QUERY); + + if(retVal) + { + TInt retVal = iRouter->RemoveL(i); + aRemovedIndex = i; + if(retVal == KErrDiskFull) + { + aErrorCode = KErrDiskFull; + BlidNotes::OutOfMemoryNoteL(); + } + } + CleanupStack::PopAndDestroy(2); //name and text + return !retVal; + } + delete name; + name = NULL; + } + return EFalse; + } + +// ---------------------------------------------------- +// CBlidBaseView::LaunchLandmarksDialogL +// Launch the landmarks dialog +// ---------------------------------------------------- +// +TInt CBlidBaseView::LaunchLandmarksDialogL() + { + CPosLandmarkDatabase* lDb = NULL; + TPosLmItemId selectedItem; + iLandmarkInfo = CLmkLandmarkSelectorDlg::NewL(); + iLandmarkInfo->SetMopParent(this); + TLmkItemIdDbCombiInfo* selected = new (ELeave) TLmkItemIdDbCombiInfo(); + CleanupStack::PushL(selected); + TInt retVal = iLandmarkInfo->ExecuteLD( *selected ); + if( retVal != KErrNone ) + { + selectedItem = selected->GetItemId(); + lDb = selected->GetLmDb(); + if(lDb) + { + CleanupStack::PushL( lDb ); + CPosLandmark *landmarkInfo = lDb->ReadLandmarkLC(selectedItem); + CleanupStack::PushL( landmarkInfo ); + CPosLandmark* landMark = CPosLandmark::NewL(*landmarkInfo); + CleanupStack::Pop( landmarkInfo ); + TLocality lmkPosition; + TInt error = landMark->GetPosition(lmkPosition); + if( Math::IsNaN(lmkPosition.Latitude()) || + Math::IsNaN(lmkPosition.Longitude()) ) + { + TPtrC landmarkname; + landMark->GetLandmarkName(landmarkname); + // Fix done for TSW error EPZO-75PBW8 + HBufC* lmkName = NULL; + lmkName = HBufC::NewL( landmarkname.Length() ); + lmkName->Des().Copy( landmarkname ); + TPtr lmkActualName( lmkName->Des() ); + TBuf<1> charsToRemove; + charsToRemove.Append(TChar(TInt(CEditableText::EParagraphDelimiter))); + AknTextUtils::ReplaceCharacters( lmkActualName, charsToRemove, TChar(TInt(CEditableText::ESpace))); + BlidNotes::EmptyLandmarkNoteL( *lmkName ); + delete lmkName; + // end of error fix. + delete landMark; + retVal = 0; + } + else + { + TLocality lmkPosition; + landMark->GetPosition(lmkPosition); + TReal accuracy = lmkPosition.HorizontalAccuracy(); + if(accuracy >= KBlidPoorAccuracy) + { + HBufC* noteText = StringLoader::LoadLC( R_BLID_CONF_DEST_INACCURATE , iCoeEnv ); + CAknQueryDialog* dlg = CAknQueryDialog::NewL(CAknQueryDialog::ENoTone); + if(dlg->ExecuteLD(R_BLID_CONFIRMATION_QUERY, *noteText)) + { + iRouter->SetLandmark(landMark); + } + else + { + delete landMark; + } + CleanupStack::PopAndDestroy(noteText); + } + else + { + iRouter->SetLandmark(landMark); + } + + } + CleanupStack::PopAndDestroy(1); // ReadLandmarkLC + landMark = NULL; + landmarkInfo = NULL; + CleanupStack::PopAndDestroy( lDb ); + } + } + CleanupStack::Pop(1); //selectedItem + iLandmarkInfo = NULL; + delete selected; + return retVal; + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::SaveCurrentPositionAsLandmarkL +// Called to save the current location as a landmark in landmark database +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::SaveCurrentPositionAsLandmarkL() + { + CLmkEditorDlg::TLmkEditorParams editParams; + editParams.iAttributes = CLmkEditorDlg::ELmkAll; + editParams.iEditorMode = CLmkEditorDlg::ELmkEditor; + + TPosition position = iLocation->GetCurrentPosition(); + + CPosLandmark* landmark = CPosLandmark::NewLC(); + TLocality location; + location.SetCoordinate(position.Latitude(), + position.Longitude(), + position.Altitude()); + location.SetHorizontalAccuracy(position.HorizontalAccuracy()); + location.SetVerticalAccuracy(position.VerticalAccuracy()); + + landmark->SetPositionL(location); + CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL(); + CleanupStack::PushL(db); + + CPosLmOperation* operation = db->InitializeL(); + CleanupStack::PushL(operation); + operation->ExecuteL(); + CLmkEditorDlg *dlg = CLmkEditorDlg::NewL(*db, + *landmark, + editParams); + dlg->ExecuteLD(); + CleanupStack::PopAndDestroy(3); // landmark, operation and db + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::LaunchManualWaypointDialogL +// Launches the manual waypoint dialog +// ---------------------------------------------------------------------------- +// +TInt CBlidBaseView::LaunchManualWaypointDialogL() + { + TInt retVal; + TCoordinate coord(0,0); + TLocality loc(coord,0); + TTime time; + time.HomeTime(); + TPosition pos(loc, time); + + CAknMultiLineDataQueryDialog* dlg = CAknMultiLineDataQueryDialog::NewL(pos); + retVal = dlg->ExecuteLD(R_BLID_MANUAL_LOCATION_QUERY_DIALOG); + if( retVal ) + { + iRouter->SetManualWaypoint(pos.Latitude(), pos.Longitude(), iManualWaypointName); + } + return retVal; + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::Update +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::Update(CBlidBaseContainer* aContainer) + { + aContainer->SetRect(ClientRect()); + aContainer->DrawNow(); + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::CBAPtr +// Returns the current CBA +// ---------------------------------------------------------------------------- +// +CEikButtonGroupContainer* CBlidBaseView::CBAPtr() const + { + return (Cba()); + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::SetMiddleSoftKeyLabelL +// Sets the Middle Soft Key label. +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::SetMiddleSoftKeyLabelL( + const TInt aResourceId, + const TInt aCommandId ) + { + CEikButtonGroupContainer* cbaGroup = Cba(); + if ( cbaGroup ) + { + HBufC* middleSKText = StringLoader::LoadLC( aResourceId ); + cbaGroup->AddCommandToStackL(KMiddleSKId, + aCommandId, + *middleSKText ); + CleanupStack::PopAndDestroy( middleSKText ); + } + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::RemoveMiddleSoftKeyLabel +// Remove the Middle Soft Key label. +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::RemoveMiddleSoftKeyLabel( const TInt aCommandId ) + { + CEikButtonGroupContainer* cbaGroup = Cba(); + if ( cbaGroup ) + { + cbaGroup->RemoveCommandFromStack(KMiddleSKId, + aCommandId ); + } + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::SetMSKDimmed +// Sets the Middle Soft Key as not visible. +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::SetMSKNotVisible() + { + CEikButtonGroupContainer* cbaGroup = Cba(); + if ( cbaGroup ) + { + cbaGroup->MakeCommandVisible(EAknSoftkeyContextOptions, EFalse); + iMSKVisible = EFalse; + } + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::SetMSKVisible +// Sets the Middle Soft Key as visible. +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::SetMSKVisible() + { + CEikButtonGroupContainer* cbaGroup = Cba(); + if ( cbaGroup ) + { + cbaGroup->MakeCommandVisible(EAknSoftkeyContextOptions, ETrue); + iMSKVisible = ETrue; + } + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::UpdateMskStateL +// Update Middle Soft Key label/Icon. +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::UpdateMskStateL() + { + if (!iLocation->IsGPSDataAvailable()) + { + SetMSKNotVisible(); + } + else + { + if(!iMSKVisible) + { + SetMSKVisible(); + MenuBar()->SetContextMenuTitleResourceId( + R_BLID_OWN_POS_VIEW_OK_MENUBAR); + } + } + } + +#ifdef RD_SCALABLE_UI_V2 +// --------------------------------------------------------------------------- +// CBlidBaseView::HandleListBoxEventL +// Handles listbox item selection +// --------------------------------------------------------------------------- +// +void CBlidBaseView::HandleListBoxEventL( + CEikListBox* /*aListBox*/, TListBoxEvent aEventType) + { + switch ( aEventType ) + { + case EEventEnterKeyPressed: + case EEventItemSingleClicked: + HandleListBoxSelectionL(); + break; + default: + break; + } + } + +#endif //RD_SCALABLE_UI_V2 +// --------------------------------------------------------------------------- +// CBlidBaseView::IsLmFeatureAvailable +// Checks if Landmarks feature i available +// --------------------------------------------------------------------------- +// +TBool CBlidBaseView::IsLmFeatureAvailable() + { + return FeatureManager::FeatureSupported( KFeatureIdLandmarks ); + } + +// --------------------------------------------------------------------------- +// CBlidBaseView::IsLmAvailableL +// Checks if there are any landmarks in the default database +// --------------------------------------------------------------------------- +// +TBool CBlidBaseView::IsLmAvailableL() + { + TBool lResult = ETrue; + // Check if there are any landmarks present. If not the + // dim the landmark item from the set destination menu pane + CPosLandmarkDatabase* lmkDb; + lmkDb = CPosLandmarkDatabase::OpenL(); + CleanupStack::PushL(lmkDb); + // Initialize Landmarks data base if required + CPosLmOperation* operation = lmkDb->InitializeL(); + CleanupStack::PushL(operation); + operation->ExecuteL(); + CPosLmItemIterator* iterator = lmkDb->LandmarkIteratorL(); + CleanupStack::PushL(iterator); + + if( iterator->NumOfItemsL() == 0 ) + { + lResult = EFalse; + } + else + { + lResult = ETrue; + } + CleanupStack::PopAndDestroy(3); //lmkDb, iterator and operation + return lResult; + } + +// --------------------------------------------------------------------------- +// CBlidBaseView::IsWpAvailable +// Checks if waypoints are available +// --------------------------------------------------------------------------- +// +TBool CBlidBaseView::IsWpAvailable() + { + if ( iRouter->Count() <= 0 ) + { + return EFalse; + } + return ETrue; + } + + +// ---------------------------------------------------------------------------- +// CBlidBaseView::ActivateCorrectViewL +// Activates the view +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::ActivateCorrectViewL( TInt aIndex ) + { + switch( aIndex ) + { + case EBlidNavigationViewId: + { + AppUi()->ActivateLocalViewL( TUid::Uid( EBlidNavigationView ) ); + break; + } + case EBlidTripMeterViewId: + { + AppUi()->ActivateLocalViewL( TUid::Uid( EBlidTripMeterView ) ); + break; + } + default: + break; + } + } + + +// ---------------------------------------------------------------------------- +// CBlidBaseView::ShowCurrentPositionInfoL +// Launches the current position dialog +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::ShowCurrentPositionInfoL() + { + iPopupDialog = CBlidCurrentPositionDlg::NewL( *this, iLocation, iEngine ); + iPopupDialog->ExecuteLD(); + iPopupDialog = NULL; + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::SaveCurrentPositionL +// Saves current position as landmark or as waypoint +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::SaveCurrentPositionL() + { + if ( !FeatureManager::FeatureSupported( KFeatureIdLandmarks ) ) + { + if ( InsertWaypointL() ) + { + static_cast(AppUi()->Document())->SaveL(); + } + } + else + { + SaveCurrentPositionAsLandmarkL(); + } + } + +// ---------------------------------------------------- +// CBlidBaseView::BlidDocument +// Returns the Location document object. +// ---------------------------------------------------- +// +CBlidDocument* CBlidBaseView::BlidDocument() + { + // Explicit cast: the document must always be of type CBlidDocument + return static_cast(AppUi()->Document()); + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::ActivateSatelliteViewL +// Activates the Satellite view +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::ActivateSatelliteViewL( ) + { + AppUi()->ActivateLocalViewL( TUid::Uid( EBlidMainSatelliteView ) ); + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::IsSatViewActive +// Checks if Satellite view is active +// ---------------------------------------------------------------------------- +// +TBool CBlidBaseView::IsSatViewActive( ) + { + return (static_cast(AppUi()))->IsSatelliteViewActive(); + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::IsForeGroundApp +// Checks if Blid app is in foreground +// ---------------------------------------------------------------------------- +// +TBool CBlidBaseView::IsForeGroundApp( ) + { + return ( static_cast(AppUi())->IsForeground() ); + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::ExitMainApplicationL +// Exit the application +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::ExitMainApplicationL( TInt aButtonId ) + { + static_cast(AppUi())->HandleCommandL( aButtonId ); + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::LaunchTripContextMenuL +// Launches the context menu for tripmeter view +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::LaunchTripContextMenuL() + { + CEikMenuBar* menubar = static_cast + (iAvkonAppUi)->View(TUid::Uid( EBlidTripMeterView ))->MenuBar(); + if ( menubar ) + { + menubar->SetContextMenuTitleResourceId(R_BLID_TRIP_METER_VIEW_OK_MENUBAR); + menubar->TryDisplayContextMenuBarL(); + } + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::LaunchNavigationContextMenuL +// Launches the context menu for Navigation view +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::LaunchNavigationContextMenuL() + { + CEikMenuBar* menubar = static_cast + (iAvkonAppUi)->View(TUid::Uid( EBlidNavigationView ))->MenuBar(); + + if ( menubar ) + { + menubar->SetContextMenuTitleResourceId(R_BLID_VIEW_OK_MENUBAR); + menubar->StopDisplayingMenuBar(); + menubar->TryDisplayContextMenuBarL(); + } + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::LaunchSatelliteInfoDlgL +// Launches the Satellite info dialog +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::LaunchSatelliteInfoDlgL() + { + static_cast(AppUi())->LaunchSatelliteInfoDlgL( ); + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::ActivateNavigationViewL +// Activates the navigation view +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::ActivateNavigationViewL( ) + { + AppUi()->ActivateLocalViewL( TUid::Uid( EBlidNavigationView ) ); + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::ChangeViewSoftKeyL +// Changes the soft key +// ---------------------------------------------------------------------------- +// +void CBlidBaseView::ChangeViewSoftKeyL( ) + { + CBAPtr()->SetCommandSetL( R_BLID_SOFTKEYS_INFO_EXIT ); + CBAPtr()->DrawDeferred(); + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::ApplicationRect +// Returns the application rect +// ---------------------------------------------------------------------------- +// +TRect CBlidBaseView::ApplicationRect( ) const + { + return AppUi()->ApplicationRect(); + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::ImageLoaderUtils +// Returns the image loader utils +// ---------------------------------------------------------------------------- +// +CAlfImageLoaderUtil* CBlidBaseView::ImageLoaderUtils( ) const + { + return iImageLoaderUtil; + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::ImagePathName +// Returns the image path +// ---------------------------------------------------------------------------- +// +TFileName CBlidBaseView::ImagePathName( ) const + { + return iConFileName; + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::IsSettingsViewActive +// Checks if settings view is active +// ---------------------------------------------------------------------------- +// +TBool CBlidBaseView::IsSettingsViewActive() + { + return iIsSettingsViewActive; + } + +// ---------------------------------------------------------------------------- +// CBlidBaseView::CoeEnv +// Returns the control environment +// ---------------------------------------------------------------------------- +// +CCoeEnv* CBlidBaseView::CoeEnv() + { + return iCoeEnv; + } +// End of File +