--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIControls/src/Pbk2ContactEditorFieldFactory.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,343 @@
+/*
+* Copyright (c) 2002-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: Phonebook 2 contact editor field factory.
+*
+*/
+
+
+#include "Pbk2ContactEditorFieldFactory.h"
+
+// Phonebook 2
+#include "CPbk2ContactEditorTextField.h"
+#include "CPbk2ContactEditorNumberField.h"
+#include "CPbk2ContactEditorPhoneNumberField.h"
+#include "CPbk2ContactEditorPostalCodeField.h"
+#include "CPbk2ContactEditorReadingField.h"
+#include "CPbk2ContactEditorUrlField.h"
+#include "CPbk2ContactEditorImppField.h"
+#include "CPbk2ContactEditorDateField.h"
+#include "CPbk2ContactEditorSyncField.h"
+#include "CPbk2ContactEditorDTMFField.h"
+#include "CPbk2ContactEditorEmailField.h"
+#include "CPbk2ContactEditorRingtoneField.h"
+#include "CPbk2ContactEditorImageField.h"
+#include "MPbk2UIField.h"
+#include "CPbk2ContactEditorUIAddressField.h"
+#include "CPbk2ContactEditorUIAddressHomeField.h"
+#include "CPbk2ContactEditorUIAddressOfficeField.h"
+#include <MPbk2ContactEditorExtensionExtension.h>
+#include "CPbk2IconInfoContainer.h"
+#include <Pbk2CommonUi.rsg>
+
+#include <MPbk2ContactEditorExtension.h>
+#include <Pbk2FieldProperty.hrh>
+
+#include <MPbk2FieldProperty.h>
+#include <MPbk2FieldProperty2.h>
+#include <CPbk2PresentationContactField.h>
+
+// Virtual Phonebook
+#include <VPbkFieldType.hrh>
+#include <MVPbkContactFieldData.h>
+#include <MVPbkContactFieldUriData.h>
+
+// Debugging headers
+#include <Pbk2Debug.h>
+
+/// Unnamed namespace for local definitions
+namespace {
+
+#ifdef _DEBUG
+
+enum TPanicCode
+ {
+ EInvalidType_EPbk2FieldCtrlTypeTextEditor,
+ EInvalidType_EPbk2FieldCtrlTypeDateEditor,
+ EInvalidType_EPbk2FieldCtrlTypeNumberEditor,
+ EInvalidType_EPbk2FieldCtrlTypePhoneNumberEditor,
+ EInvalidType_EPbk2FieldCtrlURLEditor,
+ EInvalidType_EPbk2FieldCtrlEmailEditor,
+ EInvalidType_EPbk2FieldCtrlPostalCodeEditor,
+ EInvalidType_EPbk2FieldCtrlTypeReadingEditor,
+ EInvalidType_EPbk2FieldCtrlTypeChoiceItemEditor,
+ EInvalidType_EPbk2FieldCtrlTypeDTMFEditor,
+ EInvalidType_EPbk2FieldCtrlTypeRingtoneEditor,
+ EInvalidType_EPbk2FieldCtrlTypeImageEditor,
+ ECreateFieldL_PostCond
+ };
+
+void Panic(TInt aReason)
+ {
+ _LIT( KPanicText, "Pbk2ContactEditorFieldFactory" );
+ User::Panic( KPanicText, aReason );
+ }
+
+#endif // _DEBUG
+
+} /// namespace
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorFieldFactory::CPbk2ContactEditorFieldFactory
+// --------------------------------------------------------------------------
+//
+CPbk2ContactEditorFieldFactory::CPbk2ContactEditorFieldFactory
+ ( MPbk2ContactEditorUiBuilder& aUiBuilder,
+ MPbk2ContactEditorExtension& aEditorExtension )
+ :iUiBuilder(aUiBuilder), iEditorExtension(aEditorExtension)
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorFieldFactory::~CPbk2ContactEditorFieldFactory
+// --------------------------------------------------------------------------
+//
+CPbk2ContactEditorFieldFactory::~CPbk2ContactEditorFieldFactory()
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorFieldFactory::NewL
+// --------------------------------------------------------------------------
+//
+ CPbk2ContactEditorFieldFactory* CPbk2ContactEditorFieldFactory::NewL
+ ( MPbk2ContactEditorUiBuilder& aUiBuilder,
+ MPbk2ContactEditorExtension& aEditorExtension )
+ {
+ CPbk2ContactEditorFieldFactory* self =
+ new(ELeave) CPbk2ContactEditorFieldFactory( aUiBuilder, aEditorExtension );
+
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+ // --------------------------------------------------------------------------
+ // CPbk2ContactEditorFieldFactory::NewL
+ // --------------------------------------------------------------------------
+ //
+ void CPbk2ContactEditorFieldFactory::ConstructL()
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorFieldFactory::CreateFieldL
+// --------------------------------------------------------------------------
+//
+MPbk2ContactEditorField* CPbk2ContactEditorFieldFactory::CreateFieldLC
+ ( CPbk2PresentationContactField& aField,
+ TInt aCustomPosition, CPbk2IconInfoContainer& aIconInfoContainer )
+ {
+ MPbk2ContactEditorField* field = NULL;
+ TPbk2FieldCtrlType ctrlType = aField.FieldProperty().CtrlType();
+
+ // Offer the field first to extensions
+ field = iEditorExtension.CreateEditorFieldL( aField.StoreField(),
+ aField.FieldProperty(), iUiBuilder, aIconInfoContainer );
+ if ( field )
+ {
+ CleanupDeletePushL( field );
+ }
+ else
+ {
+ switch( ctrlType )
+ {
+ case EPbk2FieldCtrlTypeTextEditor:
+ {
+ __ASSERT_DEBUG( aField.FieldData().DataType() ==
+ EVPbkFieldStorageTypeText,
+ Panic( EInvalidType_EPbk2FieldCtrlTypeTextEditor ) );
+ field = CPbk2ContactEditorTextField::NewLC
+ ( aField, iUiBuilder, aIconInfoContainer );
+ break;
+ }
+ case EPbk2FieldCtrlTypeDateEditor:
+ {
+ __ASSERT_DEBUG( aField.FieldData().DataType() ==
+ EVPbkFieldStorageTypeDateTime,
+ Panic( EInvalidType_EPbk2FieldCtrlTypeDateEditor ) );
+ field = CPbk2ContactEditorDateField::NewLC
+ ( aField, iUiBuilder, aIconInfoContainer );
+ break;
+ }
+ case EPbk2FieldCtrlTypeNumberEditor:
+ {
+ __ASSERT_DEBUG( aField.FieldData().DataType() ==
+ EVPbkFieldStorageTypeText,
+ Panic( EInvalidType_EPbk2FieldCtrlTypeNumberEditor ) );
+ field = CPbk2ContactEditorNumberField::NewLC
+ ( aField, iUiBuilder, aIconInfoContainer );
+ break;
+ }
+ case EPbk2FieldCtrlTypePhoneNumberEditor:
+ {
+ __ASSERT_DEBUG( aField.FieldData().DataType() ==
+ EVPbkFieldStorageTypeText,
+ Panic( EInvalidType_EPbk2FieldCtrlTypePhoneNumberEditor ) );
+ field = CPbk2ContactEditorPhoneNumberField::NewLC
+ ( aField, iUiBuilder, aIconInfoContainer );
+ break;
+ }
+ case EPbk2FieldCtrlURLEditor:
+ {
+ __ASSERT_DEBUG( aField.FieldData().DataType() ==
+ EVPbkFieldStorageTypeText,
+ Panic( EInvalidType_EPbk2FieldCtrlURLEditor ) );
+ field = CPbk2ContactEditorUrlField::NewLC
+ ( aField, iUiBuilder, aIconInfoContainer );
+ break;
+ }
+ case EPbk2FieldCtrlEmailEditor:
+ {
+ __ASSERT_DEBUG( aField.FieldData().DataType() ==
+ EVPbkFieldStorageTypeText,
+ Panic( EInvalidType_EPbk2FieldCtrlEmailEditor ) );
+ field = CPbk2ContactEditorEmailField::NewLC
+ ( aField, iUiBuilder, aIconInfoContainer );
+ break;
+ }
+ case EPbk2FieldCtrlPostalCodeEditor:
+ {
+ __ASSERT_DEBUG( aField.FieldData().DataType() ==
+ EVPbkFieldStorageTypeText,
+ Panic( EInvalidType_EPbk2FieldCtrlPostalCodeEditor ) );
+ field = CPbk2ContactEditorPostalCodeField::NewLC
+ ( aField, iUiBuilder, aIconInfoContainer );
+ break;
+ }
+ case EPbk2FieldCtrlTypeReadingEditor:
+ {
+ __ASSERT_DEBUG( aField.FieldData().DataType() ==
+ EVPbkFieldStorageTypeText,
+ Panic( EInvalidType_EPbk2FieldCtrlTypeReadingEditor ) );
+ field = CPbk2ContactEditorReadingField::NewLC
+ ( aField, iUiBuilder, aIconInfoContainer );
+ break;
+ }
+ case EPbk2FieldCtrlTypeChoiceItems:
+ {
+ __ASSERT_DEBUG( aField.FieldData().DataType() ==
+ EVPbkFieldStorageTypeText,
+ Panic( EInvalidType_EPbk2FieldCtrlTypeChoiceItemEditor ) );
+ field = CPbk2ContactEditorSyncField::NewLC
+ ( aField, iUiBuilder, aIconInfoContainer );
+ break;
+ }
+ case EPbk2FieldCtrlTypeDTMFEditor:
+ {
+ __ASSERT_DEBUG( aField.FieldData().DataType() ==
+ EVPbkFieldStorageTypeText,
+ Panic( EInvalidType_EPbk2FieldCtrlTypeDTMFEditor ) );
+ field = CPbk2ContactEditorDTMFField::NewLC
+ ( aField, iUiBuilder, aIconInfoContainer );
+ break;
+ }
+ case EPbk2FieldCtrlTypeIMPPEditor:
+ {
+ __ASSERT_DEBUG( aField.FieldData().DataType() ==
+ EVPbkFieldStorageTypeUri,
+ Panic( EInvalidType_EPbk2FieldCtrlTypeTextEditor ) );
+
+ MPbk2FieldProperty2* fieldPropertyExtension =
+ reinterpret_cast<MPbk2FieldProperty2*>(
+ const_cast<MPbk2FieldProperty&>( aField.FieldProperty() ).
+ FieldPropertyExtension(
+ KMPbk2FieldPropertyExtension2Uid ) );
+ User::LeaveIfNull( fieldPropertyExtension );
+
+ // There is no support for fields with unspecified service name
+ TBool invalid = ((fieldPropertyExtension->XSpName() == KNullDesC) &&
+ (MVPbkContactFieldUriData::Cast(aField.FieldData()).Scheme()
+ == KNullDesC));
+
+ if ( !invalid )
+ {
+ field = CPbk2ContactEditorImppField::NewLC
+ ( aField, iUiBuilder, aIconInfoContainer );
+ }
+ break;
+ }
+ case EPbk2FieldCtrlTypeRingtoneEditor:
+ {
+ __ASSERT_DEBUG( aField.FieldData().DataType() ==
+ EVPbkFieldStorageTypeText,
+ Panic( EInvalidType_EPbk2FieldCtrlTypeRingtoneEditor ) );
+ field = CPbk2ContactEditorRingtoneField::NewLC
+ ( aField, iUiBuilder, aIconInfoContainer, aCustomPosition );
+ break;
+ }
+ case EPbk2FieldCtrlTypeImageEditor:
+ {
+ __ASSERT_DEBUG( aField.FieldData().DataType() ==
+ EVPbkFieldStorageTypeText,
+ Panic( EInvalidType_EPbk2FieldCtrlTypeImageEditor ) );
+ field = CPbk2ContactEditorImageField::NewLC
+ ( aField, iUiBuilder, aIconInfoContainer, aCustomPosition );
+ break;
+ }
+ case EPbk2FieldCtrlTypeNone: // FALLTHROUGH
+ default:
+ {
+ PBK2_DEBUG_ONLY( Panic( ECreateFieldL_PostCond ) );
+ break;
+ }
+ }
+ }
+
+ return field;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorFieldFactory::CreateFieldL
+// --------------------------------------------------------------------------
+//
+MPbk2ContactEditorUIField* CPbk2ContactEditorFieldFactory::CreateFieldLC
+ ( MPbk2UIField& aField,
+ TInt aCustomPosition,
+ MPbk2ContactEditorUiBuilder& aUiBuilder,
+ const TDesC& aCustomText, CPbk2IconInfoContainer& aIconInfoContainer )
+ {
+ MPbk2ContactEditorUIField* field = NULL;
+ MPbk2ContactEditorExtensionExtension* extext =
+ static_cast<MPbk2ContactEditorExtensionExtension*>
+ (iEditorExtension.ContactEditorExtensionExtension(TUid::Null()));
+
+ if( extext )
+ {
+ field = extext->CreateFieldLC( aField, aCustomPosition, aUiBuilder, KNullDesC(), aIconInfoContainer );
+ if( field )
+ {
+ return field;
+ }
+ }
+
+ switch(aField.CtrlType())
+ {
+ case EPbk2FieldCtrlTypeExtAddressEditor:
+ field = CPbk2ContactEditorUIAddressField::NewL(&aField, aUiBuilder, aIconInfoContainer, aCustomPosition, aCustomText);
+ CleanupStack::PushL(field);
+ break;
+ case EPbk2FieldCtrlTypeExtAddressHomeEditor:
+ field = CPbk2ContactEditorUIAddressHomeField::NewL(&aField, aUiBuilder, aIconInfoContainer, aCustomPosition, aCustomText);
+ CleanupStack::PushL(field);
+ break;
+ case EPbk2FieldCtrlTypeExtAddressOfficeEditor:
+ field = CPbk2ContactEditorUIAddressOfficeField::NewL(&aField, aUiBuilder, aIconInfoContainer, aCustomPosition, aCustomText);
+ CleanupStack::PushL(field);
+ break;
+ }
+ return field;
+ }
+
+// End of File