phonebookui/Phonebook/View/src/CPbkContactEditorDateField.cpp
changeset 0 e686773b3f54
child 21 9da50d567e3c
--- /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 <CPbkContactItem.h>
+
+#include <e32base.h>
+#include <eikmfne.h>
+#include <barsread.h>
+#include <coemain.h>
+#include <eikcapc.h>
+
+#include <PbkView.rsg>
+
+
+/// 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<CEikDateEditor*>(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