📄 clocationexamplecontainer.cpp
字号:
/*
* ============================================================================
* Name : clocationexamplecontainer.cpp
* Part of : Location Example
* Created : 21.05.2007 by Forum Nokia
* Description:
* Version : 1.0
* Copyright: Nokia Corporation
* ============================================================================
*/
// INCLUDE FILES
#include <aknlists.h>
#include <barsread.h>
#include <aknnotewrappers.h>
#include <AknsDrawUtils.h>
#include <AknsBasicBackgroundControlContext.h>
#include <eikmenub.h>
#include <locationexample.rsg>
#include "clocationexamplepositionrequestor.h"
#include "clocationexamplecontainer.h"
#include "clocationexamplelocationengine.h"
// ---------------------------------------------------------
// CLocationExampleContainer::CLocationExampleContainer()
// ---------------------------------------------------------
//
CLocationExampleContainer::CLocationExampleContainer(CLocationExampleView* aParent)
: iParent(aParent), iListBox(NULL), iItemArray(NULL), iListItemBuffer(NULL),
iShowFriendPosition(EFalse)
{
}
// ---------------------------------------------------------
// CLocationExampleContainer::ConstructL(const TRect& aRect)
// Symbian OS two phased constructor
// ---------------------------------------------------------
//
void CLocationExampleContainer::ConstructL(const TRect& aRect)
{
TResourceReader rr;
// Create a window for this application view
CreateWindowL();
iEikonEnv->CreateResourceReaderLC(rr, R_LOCATIONEXAMPLE_LISTBOX_RESOURCE);
iListBox = new (ELeave) CAknDoubleStyleListBox ();
iListBox->SetContainerWindowL( *this);
iListBox->CreateScrollBarFrameL(ETrue);
iListBox->ConstructFromResourceL( rr );
iListBox->View()->ItemDrawer()->SetSkinEnabledL(ETrue);
CleanupStack::PopAndDestroy(); // rr
CEikScrollBarFrame* sb = iListBox->CreateScrollBarFrameL();
sb->SetScrollBarVisibilityL (CEikScrollBarFrame::EOn, CEikScrollBarFrame::EOn);
MDesCArray* itemList = iListBox->Model()->ItemTextArray();
iItemArray = (CDesCArray*) itemList;
ResetListBoxL();
iTextLat = CEikonEnv::Static()->AllocReadResourceAsDes16L(R_LATITUDE_TEXT);
iTextLong = CEikonEnv::Static()->AllocReadResourceAsDes16L(R_LONGITUDE_TEXT);
iTextFriendLat = CEikonEnv::Static()->AllocReadResourceAsDes16L(R_FRIEND_LATITUDE);
iTextFriendLong = CEikonEnv::Static()->AllocReadResourceAsDes16L(R_FRIEND_LONGITUDE);
iTextFriendDist = CEikonEnv::Static()->AllocReadResourceAsDes16L(R_FRIEND_DISTANCE);
// Set the windows size
SetRect(aRect);
iBgContext = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain,aRect,EFalse);
// Activate the window, which makes it visible
ActivateL();
}
// ----------------------------------------------------
// CLocationExampleContainer::ResetListBoxL()
// ----------------------------------------------------
//
void CLocationExampleContainer::ResetListBoxL()
{
TInt count = iItemArray->Count();
iItemArray->Reset();
AddItemInListL(_L("Location"),_L("Find Your friends!"));
iShowFriendPosition = EFalse;
if (iItemArray->Count() < count)
{
iListBox->HandleItemRemovalL();
}
iListBox->DrawNow();
}
// ----------------------------------------------------
// CLocationExampleContainer::~CLocationExampleContainer()
// Destructor
// Frees reserved resources
// ----------------------------------------------------
//
CLocationExampleContainer::~CLocationExampleContainer()
{
delete iListBox;
delete iTextLat;
delete iTextLong;
delete iTextFriendLat;
delete iTextFriendLong;
delete iTextFriendDist;
delete iBgContext;
}
// ----------------------------------------------------
// CLocationExampleContainer::AddItemInListL()
// ----------------------------------------------------
//
void CLocationExampleContainer::AddItemInListL(const TDesC& aLabel, const TDesC& aValue)
{
_LIT(KTab, "\t");
iListItemBuffer.Zero();
iListItemBuffer.Append(KTab);
iListItemBuffer.Append(aLabel);
iListItemBuffer.Append(KTab);
iListItemBuffer.Append(aValue);
iItemArray->AppendL(iListItemBuffer);
}
// ---------------------------------------------------------
// CLbsReferenceAppUi::PositionInfoUpdatedL()
// implements MPositionListener::PositionInfoUpdatedL
// Processes given position information and displays it to user
// This method handles TPositionInfo and TPositionSatelliteInfo
// ---------------------------------------------------------
//
void CLocationExampleContainer::PositionUpdatedL(TPositionInfoBase& aPosInfo)
{
TInt count = iItemArray->Count();
iItemArray->Reset();
// Check if position information class type is TPositionInfo
if (aPosInfo.PositionClassType() & EPositionInfoClass)
{
// Cast the TPositionInfoBase object to TPositionInfo
TPositionInfo* posInfo = static_cast<TPositionInfo*>(&aPosInfo);
// Process the position information
ProcessPositionInfoL( *posInfo );
// Show your friend distance if we have your friend position and your position
if (iShowFriendPosition)
{
ShowDistanceToFriendPositionL(posInfo);
}
}
// Show your friend position if we have it
if (iShowFriendPosition)
{
ShowFriendPositionL();
}
// Update and draw listbox
if (count < iItemArray->Count())
{
iListBox->HandleItemAdditionL();
}
else if (count > iItemArray->Count())
{
iListBox->HandleItemRemovalL();
}
else
{
iListBox->DrawNow();
}
}
// -----------------------------------------------------------------------------
// CLocationExampleContainer::ShowDistanceToFriendPositionL()
// -----------------------------------------------------------------------------
//
void CLocationExampleContainer::ShowDistanceToFriendPositionL(TPositionInfo* aYourPos)
{
// Your coordinates
TPosition yourPos;
aYourPos->GetPosition(yourPos);
TCoordinate yourCoord(yourPos.Latitude(), yourPos.Longitude());
// Friend coordinates
TCoordinate friendPos(iFriendCoordinate.Latitude(),iFriendCoordinate.Longitude());
// Calculate distance
TReal ret = iParent->Engine()->LocationEngine()->CalculateDistanceL(yourCoord,friendPos);
// Calculate compass point
TBuf<KCompassPointLength>compassPoint = iParent->Engine()->LocationEngine()->GetDirection(yourCoord,friendPos);
// Show distance
TBuf<KDistanceMetersLength + KCompassPointLength> distance;
if (ret < KDistanceMetersMaxValue)
{
distance.Format(_L("%.1f"), ret);
distance.Append(_L(" m "));
distance.Append(compassPoint);
AddItemInListL(*iTextFriendDist, distance);
}
else
{
distance.Append(_L("> 1 km"));
distance.Append(compassPoint);
AddItemInListL(*iTextFriendDist, distance);
}
}
// -----------------------------------------------------------------------------
// CLocationExampleContainer::ShowFriendPositionL()
// -----------------------------------------------------------------------------
//
void CLocationExampleContainer::ShowFriendPositionL()
{
TBuf<KDegreeLength> latitudeDegr;
GetDegreesString(iFriendCoordinate.Latitude(), latitudeDegr);
TBuf<KDegreeLength> longitudeDegr;
GetDegreesString(iFriendCoordinate.Longitude(), longitudeDegr);
AddItemInListL(*iTextFriendLat, latitudeDegr);
AddItemInListL(*iTextFriendLong, longitudeDegr);
}
// -----------------------------------------------------------------------------
// CLocationExampleContainer::FriendPositionUpdatedL()
// -----------------------------------------------------------------------------
//
void CLocationExampleContainer::FriendPositionUpdatedL(const TDesC& aInfo, const TCoordinate& aCoordinate)
{
iShowFriendPosition = ETrue;
iFriendPhone.Copy(aInfo);
iFriendCoordinate = aCoordinate;
}
// ---------------------------------------------------------
// CLbsReferenceAppUi::ShowErrorL
// Implements MPositionListener::ShowErrorL
// Informs the listener about occurred error during position
// request process
// @param aErrorString The error in string format
// ---------------------------------------------------------
//
void CLocationExampleContainer::ErrorL(const TDesC& aErrorString)
{
TInt count = iItemArray->Count();
iItemArray->Reset();
_LIT( KLocError, "Location error");
AddItemInListL( KLocError, aErrorString);
if (iItemArray->Count() < count)
{
iListBox->HandleItemRemovalL();
}
iListBox->DrawNow();
}
// ---------------------------------------------------------
// CLbsReferenceAppUi::ShowMessageL
// Implements MPositionListener::ShowMessageL
// Informs the listener about occurred error during position
// request process
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -