meetingrequest/mrgui/src/cesmrfieldstorage.cpp
branchRCL_3
changeset 25 3533d4323edc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrgui/src/cesmrfieldstorage.cpp	Wed Sep 01 12:28:57 2010 +0100
@@ -0,0 +1,329 @@
+/*
+* Copyright (c) 2009 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:  ESMR UI Factory implementation
+*
+*/
+
+#include "cesmrfieldstorage.h"
+#include "cesmrfield.h"
+#include "mesmrcalentry.h"
+#include "cesmrfieldeventqueue.h"
+#include "cmrsystemnotifier.h"
+
+#include <touchfeedback.h>
+
+#include "emailtrace.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CESMRFieldStorage::CESMRFieldStorage()
+// ---------------------------------------------------------------------------
+//
+CESMRFieldStorage::CESMRFieldStorage(
+		MESMRFieldEventObserver& aEventObserver ):
+	iEventObserver( aEventObserver )
+    {
+    FUNC_LOG;
+    // Do nothing
+    }
+
+void CESMRFieldStorage::BaseConstructL()
+    {
+    FUNC_LOG;
+    // Add event observer to event queue
+    EventQueueL().AddObserverL( &iEventObserver );    
+    iSystemNotifier = CMRSystemNotifier::NewL( EventQueueL() );
+    iSystemNotifier->StartL();
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRFieldStorage::~CESMRFieldStorage()
+// ---------------------------------------------------------------------------
+//
+CESMRFieldStorage::~CESMRFieldStorage()
+    {
+    FUNC_LOG;
+    iArray.ResetAndDestroy();
+
+    delete iPlugin;
+    delete iSystemNotifier;
+    delete iEventQueue;    
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRFieldStorage::AddFieldL()
+// ---------------------------------------------------------------------------
+//
+void CESMRFieldStorage::AddFieldL( CESMRField* aField )
+    {
+    FUNC_LOG;
+    if ( aField )
+        {
+        AddFieldL( aField, ETrue );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRFieldStorage::AddFieldL()
+// ---------------------------------------------------------------------------
+//
+void CESMRFieldStorage::AddFieldL( CESMRField* aField, TBool aVisible )
+    {
+    FUNC_LOG;
+    if ( aField )
+        {
+        iArray.ReserveL( iArray.Count() + 1 );
+        aField->SetEventQueueL( iEventQueue );
+        aField->MakeVisible( aVisible );
+        iArray.AppendL( aField );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRFieldStorage::Count()
+// ---------------------------------------------------------------------------
+//
+TInt CESMRFieldStorage::Count() const
+    {
+    FUNC_LOG;
+    return iArray.Count();
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRFieldStorage::Field()
+// ---------------------------------------------------------------------------
+//
+CESMRField* CESMRFieldStorage::Field( TInt aInd ) const
+    {
+    FUNC_LOG;
+    return iArray[ aInd ];
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRFieldStorage::FieldById
+// ---------------------------------------------------------------------------
+//
+CESMRField* CESMRFieldStorage::FieldById( TESMREntryFieldId aId ) const
+    {
+    CESMRField* field = NULL;
+
+    for ( TInt i = 0; i < iArray.Count(); ++i )
+        {
+        if ( iArray[ i ]->FieldId() == aId )
+            {
+            field = iArray[ i ];
+            break;
+            }
+        }
+
+    return field;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRFieldStorage::Validate()
+// ---------------------------------------------------------------------------
+//
+TInt CESMRFieldStorage::Validate(
+		TESMREntryFieldId& /*aId */,
+		TBool /*aForceValidation*/ )
+    {
+    FUNC_LOG;
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRFieldStorage::InternalizeL()
+// ---------------------------------------------------------------------------
+//
+void CESMRFieldStorage::InternalizeL( MESMRCalEntry& aEntry )
+    {
+    FUNC_LOG;
+
+    TInt index(0);
+    while( index < iArray.Count() )
+        {
+        TInt fieldCount( iArray.Count() );
+        iArray[ index ]->InternalizeL( aEntry );
+
+        if ( fieldCount == iArray.Count() )
+            {
+            // Field that was internalized was not removed from list
+            // We can update field index. If field is removed the next
+            // field index is already the current index ...
+            index++;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRFieldStorage::ExternalizeL()
+// ---------------------------------------------------------------------------
+//
+void CESMRFieldStorage::ExternalizeL( MESMRCalEntry& aEntry )
+    {
+    FUNC_LOG;
+    for ( TInt i(0); i < iArray.Count(); i++ )
+        {
+        if(iArray[ i ]->IsVisible())
+        	{
+        	iArray[ i ]->ExternalizeL( aEntry );
+        	}
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CESMRFieldStorage::FieldBuilderL()
+// -----------------------------------------------------------------------------
+//
+MESMRFieldBuilder* CESMRFieldStorage::FieldBuilderL()
+    {
+    FUNC_LOG;
+    if(!iFieldBuilder)
+        {
+        LoadPluginL();
+        }
+    return iFieldBuilder;
+    }
+
+// -----------------------------------------------------------------------------
+// CESMRFieldStorage::LoadPluginL()
+// -----------------------------------------------------------------------------
+//
+void CESMRFieldStorage::LoadPluginL()
+    {
+    FUNC_LOG;
+    iFieldBuilder = NULL;
+    CESMRFieldBuilderInterface* plugin = NULL;
+
+	TRAPD( error, plugin =
+		CESMRFieldBuilderInterface::CreatePluginL(
+				TUid::Uid(KESMRUIFieldBuilderPluginImplUId) ) );
+
+	if ( error == KErrNone && plugin)
+		{
+		delete iPlugin;
+		iPlugin = plugin;
+
+		iFieldBuilder = iPlugin->FieldBuilderL();
+		}
+    }
+
+// -----------------------------------------------------------------------------
+// CESMRFieldStorage::CreateEditorFieldL()
+// -----------------------------------------------------------------------------
+//
+CESMRField* CESMRFieldStorage::CreateEditorFieldL(
+		MESMRFieldValidator* aValidator,
+		TESMREntryField aField )
+    {
+    FUNC_LOG;
+    CESMRField* field = NULL;
+
+    if (FieldBuilderL())
+        {
+        field = FieldBuilderL()->CreateEditorFieldL(aValidator, aField);
+        }
+
+    return field;
+    }
+
+// -----------------------------------------------------------------------------
+// CESMRFieldStorage::CreateViewerFieldL()
+// -----------------------------------------------------------------------------
+//
+CESMRField* CESMRFieldStorage::CreateViewerFieldL(
+		MESMRResponseObserver* aResponseObserver,
+		TESMREntryField aField,
+		TBool aResponseReady )
+    {
+    FUNC_LOG;
+    CESMRField* field = NULL;
+
+    if (FieldBuilderL())
+        {
+        field = FieldBuilderL()->CreateViewerFieldL(
+					aResponseObserver, aField, aResponseReady );
+        }
+    return field;
+    }
+
+// -----------------------------------------------------------------------------
+// CESMRFieldStorage::ChangePolicyL()
+// -----------------------------------------------------------------------------
+//
+void CESMRFieldStorage::ChangePolicyL(
+        const CESMRPolicy& /*aNewPolicy*/,
+        MESMRCalEntry& /*aEntry*/ )
+    {
+    ASSERT( EFalse ); // Assert for debug builds
+    User::Leave( KErrNotSupported );
+    }
+
+// -----------------------------------------------------------------------------
+// CESMRFieldStorage::EventQueueL()
+// -----------------------------------------------------------------------------
+//
+CESMRFieldEventQueue& CESMRFieldStorage::EventQueueL()
+    {
+    FUNC_LOG;
+    if ( !iEventQueue )
+        {
+        iEventQueue = CESMRFieldEventQueue::NewL();
+        }
+    return *iEventQueue;
+    }
+
+// -----------------------------------------------------------------------------
+// CESMRFieldStorage::RemoveField()
+// -----------------------------------------------------------------------------
+//
+void CESMRFieldStorage::RemoveField( TInt aInd )
+    {
+    CESMRField* field = iArray[ aInd ];
+    iArray.Remove( aInd );
+    delete field;
+    }
+
+// -----------------------------------------------------------------------------
+// CESMRFieldStorage::InsertFieldL()
+// -----------------------------------------------------------------------------
+//
+void CESMRFieldStorage::InsertFieldL( CESMRField* aField, TInt aIndex )
+    {
+    iArray.InsertL( aField, aIndex );
+    aField->SetEventQueueL( iEventQueue );
+    }
+
+// -----------------------------------------------------------------------------
+// CESMRFieldStorage::ReserveL()
+// -----------------------------------------------------------------------------
+//
+void CESMRFieldStorage::ReserveL( TInt aCount )
+    {
+    iArray.ReserveL( aCount );
+    }
+
+// -----------------------------------------------------------------------------
+// CESMRFieldStorage::Reset()
+// -----------------------------------------------------------------------------
+//
+void CESMRFieldStorage::Reset()
+    {
+    iArray.ResetAndDestroy();
+    }
+// EOF
+