meetingrequest/mrgui/src/cesmrviewerfieldstorage.cpp
branchRCL_3
changeset 25 3533d4323edc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrgui/src/cesmrviewerfieldstorage.cpp	Wed Sep 01 12:28:57 2010 +0100
@@ -0,0 +1,232 @@
+/*
+* 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 : Storage for viewer fields
+*  Version     : %version: e002sa33#8 %
+*
+*/
+
+#include "emailtrace.h"
+#include "cesmrviewerfieldstorage.h"
+
+//<cmail>
+#include "cesmrpolicy.h"
+//</cmail>
+
+#include "cesmrfield.h"
+
+// <cmail> Removed profiling. </cmail>
+
+/// Unnamed namespace for local definitions
+namespace { // codescanner::namespace
+
+const TInt KRequiredLabel = 0;
+const TInt KStatusField = 1;
+const TInt KOptionalLabel = 2;
+
+}//namespace
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CESMRViewerFieldStorage::CESMRViewerFieldStorage
+// ---------------------------------------------------------------------------
+//
+CESMRViewerFieldStorage::CESMRViewerFieldStorage(
+        MESMRFieldEventObserver& aEventObserver )
+    : CESMRFieldStorage( aEventObserver )
+    {
+    FUNC_LOG;
+    // Do nothing
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRViewerFieldStorage::~CESMRViewerFieldStorage
+// ---------------------------------------------------------------------------
+//
+CESMRViewerFieldStorage::~CESMRViewerFieldStorage()
+    {
+    FUNC_LOG;
+    // Do nothing
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRViewerFieldStorage::NewL
+// ---------------------------------------------------------------------------
+//
+CESMRViewerFieldStorage* CESMRViewerFieldStorage::NewL(
+        const CESMRPolicy& aPolicy,
+        MESMRResponseObserver* aResponseObserver,
+        TBool aResponseReady,
+        MESMRFieldEventObserver& aEventObserver,
+        TInt aReqAttendee,
+        TInt aOptAttendee )
+    {
+    FUNC_LOG;
+    CESMRViewerFieldStorage* self =
+            new (ELeave) CESMRViewerFieldStorage( aEventObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL( aPolicy, aResponseObserver, 
+					  aResponseReady , aReqAttendee, 
+					  aOptAttendee);
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRViewerFieldStorage::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CESMRViewerFieldStorage::ConstructL(
+        const CESMRPolicy& aPolicy,
+        MESMRResponseObserver* aResponseObserver,
+        TBool aResponseReady,
+        const TInt &aReqAttendee,
+        const TInt &aOptAttendee
+        )
+    {
+    FUNC_LOG;
+    CESMRFieldStorage::BaseConstructL();
+    
+    if ( (aReqAttendee == 0) && (aOptAttendee ==0) )
+        {
+        CreatePolicyFieldsL (aPolicy,aResponseObserver, aResponseReady);
+        }
+    else// Total field count is given Tracking dialog
+        {
+        CreateTrackingFieldsL( aPolicy,
+							   aResponseObserver, 
+							   aResponseReady,
+							   aReqAttendee,
+							   aOptAttendee);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRViewerFieldStorage::ExternalizeL
+// ---------------------------------------------------------------------------
+//
+void CESMRViewerFieldStorage::ExternalizeL(
+        MESMRCalEntry& aEntry )
+    {
+    FUNC_LOG;
+    CESMRFieldStorage::ExternalizeL( aEntry );
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRViewerFieldStorage::CreatePolicyFieldsL
+// ---------------------------------------------------------------------------
+//
+void CESMRViewerFieldStorage::CreatePolicyFieldsL(
+        const CESMRPolicy& aPolicy,
+        MESMRResponseObserver* aResponseObserver,
+        TBool aResponseReady)
+    {
+    FUNC_LOG;
+    CESMRField* field = NULL;
+    
+    RArray<TESMREntryField> fields = aPolicy.Fields();
+    const TInt count = fields.Count();
+    for ( TInt i(0); i < count ; i++ )
+        {
+        field = CreateViewerFieldL( 
+        		aResponseObserver, fields[i], aResponseReady );
+
+        TBool visible( ETrue );
+                   
+        CleanupStack::PushL( field );
+        AddFieldL( field, visible );
+        CleanupStack::Pop( field );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRViewerFieldStorage::CreateTrackingFieldsL
+// ---------------------------------------------------------------------------
+//
+void CESMRViewerFieldStorage::CreateTrackingFieldsL(
+        const CESMRPolicy& aPolicy,
+        MESMRResponseObserver* aResponseObserver,
+        TBool aResponseReady,
+        const TInt &aReqAttendee,
+        const TInt &aOptAttendee)
+    {
+    FUNC_LOG;
+    CESMRField* field = NULL;
+    RArray<TESMREntryField> fields = aPolicy.Fields();
+
+    if (aReqAttendee > 0)
+        {
+        //create "required attendee" label
+        field = CreateViewerFieldL( 
+					aResponseObserver, 
+					fields[KRequiredLabel], 
+					aResponseReady);
+        CleanupStack::PushL( field );
+        AddFieldL( field );
+        CleanupStack::Pop( field );
+
+        //create attendee status
+        for ( TInt j(0); j < aReqAttendee ; j++ )
+             {
+             field = CreateViewerFieldL( 
+						 aResponseObserver, 
+						 fields[KStatusField], 
+						 aResponseReady);
+             CleanupStack::PushL( field );
+             AddFieldL( field );
+             CleanupStack::Pop( field );
+             }
+        }
+
+    if (aOptAttendee > 0)
+        {
+        //create "optional attendee" label
+        field = CreateViewerFieldL( 
+					aResponseObserver, 
+					fields[KOptionalLabel], 
+					aResponseReady);
+        CleanupStack::PushL( field );
+        AddFieldL( field );
+        CleanupStack::Pop( field );
+
+        //create attendee status
+        for ( TInt j(0); j < aOptAttendee ; j++ )
+             {
+             field = CreateViewerFieldL( 
+						 aResponseObserver, 
+						 fields[KStatusField], 
+						 aResponseReady);
+             CleanupStack::PushL( field );
+             AddFieldL( field );
+             CleanupStack::Pop( field );
+             }
+        }
+
+    //this dummy field is created as a fallback because 
+    //empty screen with no fields will crash with any key input.
+    if(!aOptAttendee && !aReqAttendee )
+        {
+        field = CreateViewerFieldL( 
+					aResponseObserver, 
+					fields[KRequiredLabel], 
+					aResponseReady);
+        CleanupStack::PushL( field );
+        AddFieldL( field );
+        CleanupStack::Pop( field );
+        }
+    }
+
+
+// EOF
+