diff -r 000000000000 -r 667063e416a2 locationtriggering/ltclientlib/src/lbttriggerconditionarea.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationtriggering/ltclientlib/src/lbttriggerconditionarea.cpp Tue Feb 02 01:06:48 2010 +0200 @@ -0,0 +1,269 @@ +/* +* Copyright (c) 2007 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: Implementation of data class for trigger +* condition based on the geographical area and movement of +* the terminal +* +*/ + + +#include "lbttriggerconditionbase.h" +#include "lbttriggerconditionarea.h" +#include "lbtgeocircle.h" +#include "lbtgeoareabase.h" +#include "lbtgeocell.h" +#include "lbtgeorect.h" +#include "lbtgeohybrid.h" +#include "lbterrors.h" + + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CLbtTriggerConditionArea::CLbtTriggerConditionArea() +// Default constructor +// --------------------------------------------------------------------------- +// +CLbtTriggerConditionArea::CLbtTriggerConditionArea() + { + + } + +// --------------------------------------------------------------------------- +// CLbtTriggerConditionArea::~CLbtTriggerConditionArea() +// Destructor +// --------------------------------------------------------------------------- +// +CLbtTriggerConditionArea::~CLbtTriggerConditionArea() + { + if( iArea ) + { + delete iArea; + iArea = NULL; + } + } + +// --------------------------------------------------------------------------- +// CLbtTriggerConditionArea::NewL() +// +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +EXPORT_C CLbtTriggerConditionArea* CLbtTriggerConditionArea::NewL( + CLbtGeoAreaBase* aArea, + TDirection aDirection ) + { + CLbtTriggerConditionArea* self = new( ELeave ) CLbtTriggerConditionArea; + CleanupStack::PushL( self ); + self->ConstructL(aArea,aDirection); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CLbtTriggerConditionArea::NewL() +// +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +EXPORT_C CLbtTriggerConditionArea* CLbtTriggerConditionArea::NewL( ) + { + CLbtTriggerConditionArea* self = new( ELeave ) CLbtTriggerConditionArea; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CLbtTriggerConditionArea::NewLC() +// +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +EXPORT_C CLbtTriggerConditionArea* CLbtTriggerConditionArea::NewLC( ) + { + CLbtTriggerConditionArea* self = new( ELeave ) CLbtTriggerConditionArea; + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// CLbtTriggerConditionArea::Direction() +// +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +EXPORT_C CLbtTriggerConditionArea::TDirection CLbtTriggerConditionArea::Direction() const + { + return iDirection; + } + +// --------------------------------------------------------------------------- +// CLbtTriggerConditionArea::SetDirection() +// +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +EXPORT_C void CLbtTriggerConditionArea::SetDirection( + TDirection aDirection ) + { + iDirection=aDirection; + } + +// --------------------------------------------------------------------------- +// CLbtTriggerConditionArea::TriggerArea() +// +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +EXPORT_C CLbtGeoAreaBase* CLbtTriggerConditionArea::TriggerArea() const + { + return iArea; + } +// --------------------------------------------------------------------------- +// CLbtTriggerConditionArea::SetTriggerArea() +// +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +EXPORT_C void CLbtTriggerConditionArea::SetTriggerArea( + CLbtGeoAreaBase* aArea ) + { + CLbtGeoAreaBase::TGeoAreaType areaType; + areaType=aArea->Type(); + if(areaType ==CLbtGeoAreaBase::ERectangular) + User::Panic(KLbtClientPanicCategory,ELbtErrArgument); + if( iArea ) + { + delete iArea; + iArea = NULL; + } + iArea=aArea; + } + +// --------------------------------------------------------------------------- +// CLbtTriggerConditionArea::ConstructL() +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------- +// +void CLbtTriggerConditionArea::ConstructL() + { + iArea = NULL; + iDirection=EFireOnEnter; + } + +// --------------------------------------------------------------------------- +// CLbtTriggerConditionArea::ConstructL() +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------- +// +void CLbtTriggerConditionArea::ConstructL(CLbtGeoAreaBase* aArea, + TDirection aDirection) + { + CLbtGeoAreaBase::TGeoAreaType areaType; + areaType=aArea->Type(); + if(areaType ==CLbtGeoAreaBase::ERectangular) + User::Panic(KLbtClientPanicCategory,ELbtErrArgument); + iArea=aArea; + iDirection=aDirection; + } + +// --------------------------------------------------------------------------- +// CLbtTriggerConditionArea::Type() +// +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +CLbtTriggerConditionBase::TType CLbtTriggerConditionArea::Type() const + { + return CLbtTriggerConditionBase::ETriggerConditionArea; + } + +// --------------------------------------------------------------------------- +// CLbtTriggerConditionArea::DoInternalizeL() +// +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CLbtTriggerConditionArea::DoInternalizeL( RReadStream& aStream ) + { + TInt areaType=aStream.ReadInt8L(); + if(areaType==1) + { + CLbtGeoCircle* area= CLbtGeoCircle::NewL(); + area->InternalizeL(aStream); + SetTriggerArea(area); + } + else if(areaType==2) + { + CLbtGeoRect* area=CLbtGeoRect::NewL(); + area->InternalizeL(aStream); + SetTriggerArea(area); + } + else if( areaType==3 ) + { + CLbtGeoCell* area=CLbtGeoCell::NewL(); + area->InternalizeL(aStream); + SetTriggerArea(area); + } + else if( areaType==4) + { + CLbtGeoHybrid* area=CLbtGeoHybrid::NewL(); + area->InternalizeL(aStream); + SetTriggerArea(area); + } + + TInt direction; + direction=aStream.ReadInt16L(); + if(direction==1) + iDirection=EFireOnEnter; + + else if(direction==2) + iDirection=EFireOnExit; + } + +// --------------------------------------------------------------------------- +// CLbtTriggerConditionArea::DoExternalizeL() +// +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CLbtTriggerConditionArea:: DoExternalizeL( RWriteStream& aStream ) const + { + CLbtGeoAreaBase::TGeoAreaType areaType; + + if(iArea) + { + areaType=iArea->Type(); + if(areaType==CLbtGeoAreaBase::ECircle) + aStream.WriteInt8L(1); + else if( areaType==CLbtGeoAreaBase::ERectangular ) + aStream.WriteInt8L(2); + else if( areaType==CLbtGeoAreaBase::ECellular ) + aStream.WriteInt8L(3); + + else if( areaType==CLbtGeoAreaBase::EHybrid ) + aStream.WriteInt8L(4); + iArea->ExternalizeL(aStream); + } + else + { + aStream.WriteInt8L(0); + } + + aStream.WriteInt16L(iDirection); + } +