--- /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);
+ }
+