📄 gpstest.cpp
字号:
#include <EikEnv.h>
#include <BluetoothGPS.rsg>
#include "gps/impl/BtGpsReceiver.h"
#include "views/GpsTest.h"
#define KMaxTIntLen 8
#define KMaxMessageListLen 500
CGpsTest::CGpsTest( ) : CViewBase( ) {
}
CGpsTest::~CGpsTest( ) {
if ( iGpsReceiver ) iGpsReceiver->RemoveListenerL( this );
iGpsReceiver = NULL;
delete( iGpsText ); iGpsText = NULL;
delete( iListBox ); iListBox = NULL;
}
CGpsTest * CGpsTest::NewL( const TRect & aRect ) {
CGpsTest * self = CGpsTest::NewLC( aRect );
CleanupStack::Pop( );
return( self );
}
CGpsTest * CGpsTest::NewLC( const TRect & aRect ) {
CGpsTest * self = new ( ELeave ) CGpsTest( );
CleanupStack::PushL( self );
self->ConstructL( aRect );
return( self );
}
void CGpsTest::ConstructL( const TRect & aRect ) {
BaseConstructL( aRect );
// Texte aus den Resourcen laden.
iGpsText = iEikonEnv->AllocReadResourceL( R_GPS_INFO_LABEL );
// Bestimme den benutzerkonfigurierten GPS Receiver und melde "this" als
// Listener an.
iGpsReceiver = CBtGpsReceiver::NewL( );
iGpsReceiver->AddListenerL( this );
// Create a control to display a list of messages
iListBox = new ( ELeave ) CAknSingleNumberStyleListBox( );
iListBox->SetContainerWindowL( *this );
iListBox->ConstructL( this, 0 );
iListBox->SetRect( aRect.Size( ) );
iListBox->ActivateL( );
iListBox->CreateScrollBarFrameL( ETrue );
iListBox->ScrollBarFrame( )->SetScrollBarVisibilityL
( CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto );
// Create an array to hold the messages
iMessageList = new ( ELeave ) CDesCArrayFlat( 10 );
// Give it to the control
CTextListBoxModel * model = iListBox->Model( );
model->SetItemTextArray( iMessageList );
model->SetOwnershipType( ELbmOwnsItemArray ); // transfer ownership of iMessageList
// Show startup message
_LIT( KStarted, "Started" );
LogL( KStarted );
// Activate the window, which makes it ready to be drawn.
ActivateL( );
}
TKeyResponse CGpsTest::OfferKeyEventL( const TKeyEvent & aKeyEvent, TEventCode aType ) {
return( iListBox->OfferKeyEventL( aKeyEvent, aType ) );
}
TInt CGpsTest::CountComponentControls( ) const {
return( 1 ); // Only have one Component
}
CCoeControl * CGpsTest::ComponentControl( TInt /*aIndex*/ ) const {
return( iListBox ); // Return the component
}
void CGpsTest::GpsUpdate( const TGpsPosition & aNewPosition ) {
iLastGpsPos.Set( aNewPosition );
TRealFormat format;
format.iWidth = 5;
TBuf< 25 > numberString;
numberString.AppendNum( iLastGpsPos.Longitude( ), format );
numberString.Append( ' ' );
numberString.AppendNum( iLastGpsPos.Latitude( ), format );
LogL( numberString );
}
void CGpsTest::LogL( const TDesC & aText ) {
LogL( aText, KNullDesC );
}
void CGpsTest::LogL( const TDesC & aText, TInt aNumber ) {
TBuf< KMaxTIntLen > numberString;
numberString.Num( aNumber );
LogL( aText, numberString );
}
void CGpsTest::LogL( const TDesC & aText, const TDesC & aExtraText ) {
if ( iMessageList->Count( ) > KMaxMessageListLen )
ShrinkMessageListL( KMaxMessageListLen * 3 / 4 );
HBufC * buffer = HBufC::NewLC( KMaxTIntLen + aText.Length( ) + aExtraText.Length( ) );
buffer->Des( ).Num( ++iMsgIndex );
buffer->Des( ).Append( '\t' );
buffer->Des( ).Append( aText );
if ( aExtraText.Length( ) > 0 ) {
buffer->Des( ).Append( ':' );
buffer->Des( ).Append( aExtraText );
}
// Add the message to the list
iMessageList->AppendL( *buffer );
CleanupStack::PopAndDestroy( buffer );
// tell the control about the change
iListBox->HandleItemAdditionL( );
}
TBool CGpsTest::ContainsEntries( ) {
return( iListBox->Model( )->NumberOfItems( ) != 0 );
}
void CGpsTest::ClearMessageListL( ) {
iMessageList->Reset( );
iListBox->HandleItemRemovalL( );
iListBox->Reset( );
iMsgIndex = 0;
}
void CGpsTest::ShrinkMessageListL( TInt aRemainingSize ) {
TInt delta = iMessageList->Count( ) - aRemainingSize;
if ( delta <= 0 )
return;
iMessageList->Delete( 0, delta );
iListBox->HandleItemRemovalL( );
iListBox->Reset( );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -