--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/basiclocationinfodisplay/blid/ui/src/CBlidBaseView.cpp Tue Feb 02 00:16:03 2010 +0200
@@ -0,0 +1,1088 @@
+/*
+* 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 <aknlists.h>
+#include <AknQueryDialog.h>
+#include <StringLoader.h>
+#include <eikmenub.h> // CEikMenuBar
+#include <Blid.rsg>
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmItemIterator.h>
+#include <e32std.h>
+#include <CLmkEditorDlg.h>
+#include <TLmkItemIdDbCombiInfo.h>
+#include <alf/alfimageloaderutil.h>
+
+#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 <locationvariationdomaincrkeys.h>
+#include <centralrepository.h>
+
+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<CBlidDocument*>(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::HandleHelpFeature( 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::HandleHelpFeature
+// Handles the Help option command
+// ---------------------------------------------------------
+//
+void CBlidBaseView::HandleHelpFeature( 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()
+ {
+ TInt index(KErrCancel);
+ TBuf<KBlidWaypointNameMaxLen> 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<CBlidAppUi*>(AppUi()
+ )->ShowDialogL( BlidNotes::EBlidOverWriteWaypointNote );
+ return EFalse;
+ }
+
+ TInt retVal(KErrNone);
+ if ( index >=0 )
+ {
+ if ( iRouter->IndexOfWaypoint() >=0 &&
+ index >= iRouter->IndexOfWaypoint() )
+ {
+ index++;
+ }
+ retVal = iRouter->RemoveL( index );
+ if(retVal == KErrDiskFull)
+ {
+ BlidNotes::OutOfMemoryNoteL();
+ }
+ }
+
+ if(retVal == KErrNone)
+ {
+ 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<CBlidDocument*>(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<CBlidDocument*>(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<CBlidAppUi*>(AppUi()))->IsSatelliteViewActive();
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidBaseView::IsForeGroundApp
+// Checks if Blid app is in foreground
+// ----------------------------------------------------------------------------
+//
+TBool CBlidBaseView::IsForeGroundApp( )
+ {
+ return ( static_cast<CBlidAppUi*>(AppUi())->IsForeground() );
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidBaseView::ExitMainApplicationL
+// Exit the application
+// ----------------------------------------------------------------------------
+//
+void CBlidBaseView::ExitMainApplicationL( TInt aButtonId )
+ {
+ static_cast<CBlidAppUi*>(AppUi())->HandleCommandL( aButtonId );
+ }
+
+// ----------------------------------------------------------------------------
+// CBlidBaseView::LaunchTripContextMenuL
+// Launches the context menu for tripmeter view
+// ----------------------------------------------------------------------------
+//
+void CBlidBaseView::LaunchTripContextMenuL()
+ {
+ CEikMenuBar* menubar = static_cast<CAknViewAppUi*>
+ (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<CAknViewAppUi*>
+ (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<CBlidAppUi*>(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
+