diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpstdetailsviewplugin/src/cvimpstfieldproperty.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstdetailsviewplugin/src/cvimpstfieldproperty.cpp Wed Sep 01 12:33:36 2010 +0100 @@ -0,0 +1,211 @@ +/* +* Copyright (c) 2008 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: a single field with type + * +*/ + + +#include "cvimpstfieldproperty.h" + +#include "cvimpstfieldpropertyarray.h" +// From Virtual Phonebook +#include +#include +#include "vimpstdetailsview.hrh" +#include +#include +#include +#include +#include +// System includes +#include +#include "uiservicetabtracer.h" + +_LIT(KColon,":"); +// -------------------------------------------------------------------------- +// CVIMPSTFieldProperty::CVIMPSTFieldProperty +// -------------------------------------------------------------------------- +// +CVIMPSTFieldProperty::CVIMPSTFieldProperty( TInt aFieldId, TInt aIconId, TInt aMaxLength ) + :iFieldId( aFieldId ), + iIconId( aIconId ), + iMaxLength( aMaxLength) + { + } + +// -------------------------------------------------------------------------- +// CVIMPSTFieldProperty::~CVIMPSTFieldProperty +// -------------------------------------------------------------------------- +// +CVIMPSTFieldProperty::~CVIMPSTFieldProperty() + { + delete iDefaultLabel; + delete iFieldData; + delete iField; + } + +// -------------------------------------------------------------------------- +// CVIMPSTFieldProperty::ConstructL +// -------------------------------------------------------------------------- +// +inline void CVIMPSTFieldProperty::ConstructL(const TDesC& aDefaultLabel) + { + if( aDefaultLabel.Length() ) + { + iDefaultLabel = aDefaultLabel.AllocL(); + } + } +// -------------------------------------------------------------------------- +// CVIMPSTFieldProperty::NewLC +// -------------------------------------------------------------------------- +// +CVIMPSTFieldProperty* CVIMPSTFieldProperty::NewLC + ( TInt aFieldId, TInt aIconId, TInt aMaxLength, const TDesC& aDefaultLabel ) + { + CVIMPSTFieldProperty* self = new( ELeave ) CVIMPSTFieldProperty( aFieldId, aIconId, aMaxLength); + CleanupStack::PushL( self ); + self->ConstructL(aDefaultLabel); + return self; + } + +// -------------------------------------------------------------------------- +// CVIMPSTFieldProperty::IconId +// -------------------------------------------------------------------------- +// +TInt CVIMPSTFieldProperty::IconId() + { + return iIconId; + } + +// -------------------------------------------------------------------------- +// CVIMPSTFieldProperty::FieldId +// -------------------------------------------------------------------------- +// +TInt CVIMPSTFieldProperty::FieldId() + { + if( iFieldId == EVIMPSTFieldIdImpp || + iFieldId == EVIMPSTFieldIdEmailAddress|| + iFieldId == EVIMPSTFieldIdEmailGen ) + { + // these fields are map to one field + return EVIMPSTFieldIdImpp; + } + return iFieldId; + } +// -------------------------------------------------------------------------- +// CVIMPSTFieldProperty::DefaultLabelL +// -------------------------------------------------------------------------- +// +const TDesC& CVIMPSTFieldProperty::DefaultLabelL() + { + if( iField && !iDefaultLabel ) + { + iDefaultLabel = iField->FieldLabel().Left( iMaxLength ).AllocL(); + } + + if( iDefaultLabel ) + { + return *iDefaultLabel; + } + + return KNullDesC(); + } + +// -------------------------------------------------------------------------- +// CVIMPSTFieldProperty::SetFieldTextL +// -------------------------------------------------------------------------- +// +void CVIMPSTFieldProperty::SetFieldTextL(const TDesC& aText ) + { + if( iFieldData ) + { + delete iFieldData; + iFieldData = NULL; + } + iFieldData = aText.AllocL(); + } +// -------------------------------------------------------------------------- +// CVIMPSTFieldProperty::SetStoredFieldL +// -------------------------------------------------------------------------- +// +void CVIMPSTFieldProperty::SetStoredFieldL(MVPbkStoreContactField& aField ) + { + iField = aField.CloneLC(); + CleanupStack::Pop(); + } + +// -------------------------------------------------------------------------- +// CVIMPSTFieldProperty::FieldDataL +// -------------------------------------------------------------------------- +// +const TDesC& CVIMPSTFieldProperty::FieldDataL() + { + TRACER_AUTO; + if( iField && !iFieldData ) + { + const MVPbkContactFieldData& fieldData = iField->FieldData(); + switch( fieldData.DataType() ) + { + case EVPbkFieldStorageTypeText: + { + TPtrC text = MVPbkContactFieldTextData::Cast( fieldData ).Text(); + iFieldData = text.AllocL(); + break; + } + case EVPbkFieldStorageTypeUri: + { + const MVPbkContactFieldUriData& uri = MVPbkContactFieldUriData::Cast(fieldData); + + HBufC* user = uri.Uri().AllocLC(); + TPtr userPtr( user->Des() ); + TInt index = userPtr.Find( KColon ); + if( index != KErrNotFound ) + { + TInt length = userPtr.Length(); + iFieldData = userPtr.Right( length - index - 1 ).AllocL(); + CleanupStack::PopAndDestroy(); //user + } + else + { + CleanupStack::Pop();// user + iFieldData = user; + } + + break; + } + case EVPbkFieldStorageTypeDateTime: + { + const MVPbkContactFieldDateTimeData& dateData = + MVPbkContactFieldDateTimeData::Cast( fieldData ); + TTime date = dateData.DateTime(); + _LIT( KDateFormat, "%D%M%Y%/0%1%/1%2%/2%3%/3" ); + const TInt KDateLength( 12 ); + HBufC* dateStr = HBufC::NewLC( KDateLength ); + TPtr datePtr( dateStr->Des() ); + date.FormatL( datePtr, KDateFormat, TLocale() ); + CleanupStack::Pop( dateStr ); + iFieldData = dateStr; + break; + } + default : + { + break; + } + } + } + return iFieldData ? *iFieldData : KNullDesC(); + } + + +// End of file