uiservicetab/vimpstdetailsviewplugin/src/cvimpstfieldproperty.cpp
branchRCL_3
changeset 23 9a48e301e94b
--- /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 <MVPbkFieldType.h>
+#include <MVPbkStoreContactField.h>
+#include "vimpstdetailsview.hrh"
+#include <MVPbkBaseContactField.h>
+#include <MVPbkContactFieldData.h>
+#include <MVPbkContactFieldTextData.h>
+#include <MVPbkContactFieldUriData.h>
+#include <MVPbkContactFieldDateTimeData.h>
+// System includes
+#include <barsread.h>
+#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