⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clocationexamplecontainer.cpp

📁 这是一个关于s60基于c++的关于手机地图和定位的代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
* ============================================================================
*  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 + -