diff -r f5050f1da672 -r 04becd199f91 javaextensions/pim/javapimloc/src.s60/cpimlabelprovider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/pim/javapimloc/src.s60/cpimlabelprovider.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,142 @@ +/* +* Copyright (c) 2006 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: Holds PIM API field and attribute labels +* +*/ + + +// CLASS HEADER +#include "cpimlabelprovider.h" + +// INTERNAL INCLUDES +#include "pimpanics.h" + +// EXTERNAL INCLUDES +#include +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPIMLabelProvider::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPIMLabelProvider* CPIMLabelProvider::NewL(TResourceReader& aReader) +{ + CPIMLabelProvider* self = CPIMLabelProvider::NewLC(aReader); + CleanupStack::Pop(self); + return self; +} + +// ----------------------------------------------------------------------------- +// CPIMLabelProvider::NewL +// Two-phased constructor. Created item is left to the cleanup stack +// ----------------------------------------------------------------------------- +// +CPIMLabelProvider* CPIMLabelProvider::NewLC(TResourceReader& aReader) +{ + CPIMLabelProvider* self = new(ELeave) CPIMLabelProvider(); + CleanupStack::PushL(self); + self->ConstructFromResourceL(aReader); + return self; +} + +// ----------------------------------------------------------------------------- +// CPIMLabelProvider::~CPIMLabelProvider +// Destructor +// ----------------------------------------------------------------------------- +// +CPIMLabelProvider::~CPIMLabelProvider() +{ + delete iSubElementLabels; + delete iSubElementIds; + delete iLabel; +} + +// ----------------------------------------------------------------------------- +// CPIMLabelProvider::LabelL +// Returns a label of an attribute or field. Caller takes ownership of the value +// ----------------------------------------------------------------------------- +// +HBufC* CPIMLabelProvider::LabelL(const TInt aId) const +{ + if (aId == iId) + { + __ASSERT_DEBUG(iLabel, + User::Panic(KPIMPanicCategory, EPIMPanicInvalidLabel)); + return iLabel->AllocL(); + } + return NULL; +} + +// ----------------------------------------------------------------------------- +// CPIMLabelProvider::LabelL +// Returns a label of an array element. Caller takes ownership of the value +// ----------------------------------------------------------------------------- +// +HBufC* CPIMLabelProvider::LabelL(const TInt aId, const TInt aElement) const +{ + // Check that field id matches and this field contains sub-elements + if (aId == iId && iSubElementIds) + { + TInt count = iSubElementIds->Count(); + for (TInt i(0); i < count; i++) + { + if (iSubElementIds->At(i) == aElement) + { + return iSubElementLabels->MdcaPoint(i).AllocL(); + } + } + } + return NULL; +} + +// ----------------------------------------------------------------------------- +// Default C++ constructor +// ----------------------------------------------------------------------------- +//¨ +CPIMLabelProvider::CPIMLabelProvider() +{ +} + +// ----------------------------------------------------------------------------- +// CPIMLabelProvider::ConstructFromResourceL +// ----------------------------------------------------------------------------- +//¨ +void CPIMLabelProvider::ConstructFromResourceL(TResourceReader& aReader) +{ + // Read provider identifier and label + iId = aReader.ReadInt32(); + iLabel = aReader.ReadHBufCL(); + + TBool hasSubElements(aReader.ReadInt8()); + + // Read sub elements + if (hasSubElements) + { + // Create arrays. 7 for granularity + iSubElementIds = new(ELeave) CArrayFixFlat< TInt >(7); + iSubElementLabels = new(ELeave) CDesCArrayFlat(7); + + TInt subelemCount(aReader.ReadInt16()); + for (TInt i(0); i < subelemCount; i++) + { + iSubElementIds->AppendL(aReader.ReadInt32()); + iSubElementLabels->AppendL(aReader.ReadTPtrC()); + } + } +} + +// End of file