diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook/View/src/CPbkContactEditorDateField.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook/View/src/CPbkContactEditorDateField.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,168 @@ +/* +* Copyright (c) 2002 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: +* Methods for Phonebook Contact editor date field. +* +*/ + + +// INCLUDE FILES +#include "CPbkContactEditorDateField.h" +#include "TPbkContactItemField.h" +#include "MPbkContactEditorUiBuilder.h" +#include "MPbkFieldEditorVisitor.h" + +#include + +#include +#include +#include +#include +#include + +#include + + +/// Unnamed namespace for local definitons +namespace { + +// LOCAL CONSTANTS AND MACROS + +#ifdef _DEBUG +/// Panic codes for CPbkContactEditorDateField +enum TPanicCode + { + EPanicPreCond_InitControlL, + EPanicPreCond_SaveFieldL, + EPanicPostCond_SaveFieldL + }; + +void Panic(TPanicCode aReason) + { + _LIT(KPanicText, "CPbkContactEditorDateField"); + User::Panic(KPanicText, aReason); + } +#endif // _DEBUG + +} // namespace + + +// ================= MEMBER FUNCTIONS ======================= + +inline CPbkContactEditorDateField::CPbkContactEditorDateField + (TPbkContactItemField& aField, + CPbkIconInfoContainer& aIconInfoContainer, + MPbkContactEditorUiBuilder& aUiBuilder) : + CPbkContactEditorFieldBase(aField, aIconInfoContainer, aUiBuilder) + { + } + +inline void CPbkContactEditorDateField::ConstructL() + { + __ASSERT_DEBUG(ContactItemField().StorageType() == KStorageTypeDateTime, + Panic(EPanicPreCond_InitControlL)); + + iControl = static_cast(iUiBuilder.CreateLineL( + ContactItemField().Label(), ControlId(), EEikCtDateEditor)); + + // ctrl is now owned by the dialog + TResourceReader reader; + CCoeEnv::Static()->CreateResourceReaderLC(reader, R_PBK_EDITOR_DATE_SETTINGS); + iControl->ConstructFromResourceL(reader); + CleanupStack::PopAndDestroy(); // R_PBK_EDITOR_DATE_SETTINGS + + TTime time = ContactItemField().DateTimeStorage()->Time(); + if (time == Time::NullTTime()) + { + time.HomeTime(); + } + + iControl->SetDate(time); + + // Postcond ceased to work, maybe CEikDateEditor clips the time of the day part? +// __ASSERT_DEBUG(aCtrl->Date() == aField.DateTimeStorage()->Time(), Panic(EPanicPostCond_InitControlL)); + + LoadBitmapToFieldL(iUiBuilder); + iCaptionedCtrl = iUiBuilder.LineControl(ControlId()); + iUiBuilder.SetEditableL(ETrue); + } + +CPbkContactEditorDateField* CPbkContactEditorDateField::NewL + (TPbkContactItemField& aField, + MPbkContactEditorUiBuilder& aUiBuilder, + CPbkIconInfoContainer& aIconInfoContainer) + { + CPbkContactEditorDateField* self = new(ELeave) CPbkContactEditorDateField( + aField, aIconInfoContainer, aUiBuilder); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CPbkContactEditorDateField::~CPbkContactEditorDateField() + { + } + +void CPbkContactEditorDateField::SaveFieldL() + { + // PreCond: + __ASSERT_DEBUG(iControl && Field().StorageType() == KStorageTypeDateTime, + Panic(EPanicPreCond_SaveFieldL)); + + iContactDataHasChanged = EFalse; + + // fetch the date from the date control + const TTime dateTime = iControl->Date(); + if (Field().DateTimeStorage()->Time() != dateTime) + { + // put the date in the contact item + Field().DateTimeStorage()->SetTime(dateTime); + Field().SetHidden(EFalse); + iContactDataHasChanged = ETrue; + } + + //PostCond: + __ASSERT_DEBUG(Field().DateTimeStorage()->Time() == dateTime && + !Field().IsHidden(), + Panic(EPanicPostCond_SaveFieldL)); + } + +void CPbkContactEditorDateField::AddFieldL(CPbkContactItem& aContact) + { + const TTime dateTime = iControl->Date(); + TPbkContactItemField* field = aContact.AddOrReturnUnusedFieldL + ( Field().FieldInfo() ); + if (field) + { + field->DateTimeStorage()->SetTime(dateTime); + } + } + +HBufC* CPbkContactEditorDateField::ControlTextL() const + { + return NULL; + } + +void CPbkContactEditorDateField::ActivateL() + { + iCaptionedCtrl->ActivateL(); + } + +void CPbkContactEditorDateField::AcceptL(MPbkFieldEditorVisitor& aVisitor) + { + aVisitor.VisitL(*this); + } + +// End of File