email/imum/Utils/Src/IMSPageResourceControl.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Utils/Src/IMSPageResourceControl.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2006 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:  IMSPageResourceControl.cpp
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <cstack.h>                     // CStack
+
+#include "IMSPageResourceControl.h"
+#include "ImumUtilsLogging.h"
+
+// EXTERNAL DATA STRUCTURES
+// EXTERNAL FUNCTION PROTOTYPES
+// CONSTANTS
+enum TIMSResourcePagePanicCode
+    {
+    EIRPPNoError = 0,
+    EIRPPWrongType,
+    EIRPPStackEmpty,
+    EIRPPStackNull,
+    EIRPPArrayNull,
+    EIRPPUnknownType
+    };
+
+_LIT( KIMSResourcePagePanic, "IMSResourcePagePanic" );
+
+// MACROS
+// LOCAL CONSTANTS AND MACROS
+// MODULE DATA STRUCTURES
+// LOCAL FUNCTION PROTOTYPES
+void Panic( const TIMSResourcePagePanicCode aReason );
+
+// FORWARD DECLARATIONS
+
+// ============================ LOCAL FUNCTIONS ===============================
+
+void Panic( const TIMSResourcePagePanicCode aReason )
+    {
+    User::Panic( KIMSResourcePagePanic, aReason );
+    }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// CIMSPageResourceControl::CIMSPageResourceControl()
+// ----------------------------------------------------------------------------
+//
+CIMSPageResourceControl::CIMSPageResourceControl()
+    {
+    IMUM_CONTEXT( CIMSPageResourceControl::CIMSPageResourceControl, 0, KLogUi );
+
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSPageResourceControl::~CIMSPageResourceControl()
+// ----------------------------------------------------------------------------
+//
+CIMSPageResourceControl::~CIMSPageResourceControl()
+    {
+    IMUM_CONTEXT( CIMSPageResourceControl::~CIMSPageResourceControl, 0, KLogUi );
+
+    if ( iPageResources )
+        {
+        iPageResources->ResetAndDestroy();
+        }
+
+    delete iPageResources;
+    iPageResources = NULL;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSPageResourceControl::ConstructL()
+// ----------------------------------------------------------------------------
+//
+void CIMSPageResourceControl::ConstructL()
+    {
+    IMUM_CONTEXT( CIMSPageResourceControl::ConstructL, 0, KLogUi );
+
+    iPageResources = new ( ELeave ) CResourceStackArray( EIPRLastPage );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSPageResourceControl::NewL()
+// ----------------------------------------------------------------------------
+//
+CIMSPageResourceControl* CIMSPageResourceControl::NewL()
+    {
+    IMUM_STATIC_CONTEXT( CIMSPageResourceControl::NewL, 0, utils, KLogUi );
+
+    CIMSPageResourceControl* self = NewLC();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSPageResourceControl::NewLC()
+// ----------------------------------------------------------------------------
+//
+CIMSPageResourceControl* CIMSPageResourceControl::NewLC()
+    {
+    IMUM_STATIC_CONTEXT( CIMSPageResourceControl::NewLC, 0, utils, KLogUi );
+
+    CIMSPageResourceControl* self = new ( ELeave ) CIMSPageResourceControl();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    return self;
+    }
+
+/******************************************************************************
+
+
+
+******************************************************************************/
+
+// ----------------------------------------------------------------------------
+// CIMSPageResourceControl::PushResourceL()
+// ----------------------------------------------------------------------------
+//
+void CIMSPageResourceControl::PushResourceL(
+    const TInt aType,
+    const TInt aPageResource )
+    {
+    IMUM_CONTEXT( CIMSPageResourceControl::PushResourceL, 0, KLogUi );
+
+    Stack( aType ).AppendL( aPageResource );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSPageResourceControl::Resource()
+// ----------------------------------------------------------------------------
+//
+TInt CIMSPageResourceControl::Resource(
+    const TInt aType,
+    const TBool aRemove )
+    {
+    IMUM_CONTEXT( CIMSPageResourceControl::Resource, 0, KLogUi );
+
+    CResourceStack& stack = Stack( aType );
+    TInt index = stack.Count() - 1;
+    if ( !aRemove || aRemove && !index )
+        {
+        return stack[index];
+        }
+    else
+        {
+        TInt resource = stack[index];
+        stack.Delete( index );
+        return resource;
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSPageResourceControl::Count()
+// ----------------------------------------------------------------------------
+//
+TInt CIMSPageResourceControl::Count( const TInt aType )
+    {
+    IMUM_CONTEXT( CIMSPageResourceControl::Count, 0, KLogUi );
+
+    return Stack( aType ).Count();
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSPageResourceControl::CreateStackL()
+// ----------------------------------------------------------------------------
+//
+CResourceStack* CIMSPageResourceControl::CreateStackL(
+    const TInt aPageResource )
+    {
+    IMUM_CONTEXT( CIMSPageResourceControl::CreateStackL, 0, KLogUi );
+
+    __ASSERT_DEBUG( iPageResources != NULL, Panic( EIRPPArrayNull ) );
+
+    CResourceStack* stack = new ( ELeave ) CResourceStack( EIPRLastPage );
+    CleanupStack::PushL( stack );
+
+    iPageResources->AppendL( stack );
+    stack->AppendL( aPageResource );
+
+    CleanupStack::Pop( stack );
+
+    return stack;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSPageResourceControl::operator[]()
+// ----------------------------------------------------------------------------
+//
+TInt CIMSPageResourceControl::operator[]( const TInt aType )
+    {
+    IMUM_CONTEXT( CIMSPageResourceControl::operator, 0, KLogUi );
+
+    return Resource( aType );
+    }
+
+/******************************************************************************
+
+    TOOLS
+
+******************************************************************************/
+
+
+// ----------------------------------------------------------------------------
+// CIMSPageResourceControl::Stack()
+// ----------------------------------------------------------------------------
+//
+CResourceStack& CIMSPageResourceControl::Stack( const TInt aType )
+    {
+    IMUM_CONTEXT( CIMSPageResourceControl::Stack, 0, KLogUi );
+
+    __ASSERT_DEBUG( iPageResources->Count(), Panic( EIRPPStackEmpty ) );
+    __ASSERT_DEBUG( aType < iPageResources->Count(), Panic( EIRPPUnknownType ) );
+    __ASSERT_DEBUG( ( *iPageResources )[aType] != NULL, Panic( EIRPPStackNull ) );
+    __ASSERT_DEBUG( iPageResources != NULL, Panic( EIRPPArrayNull ) );
+
+    return *( *iPageResources )[aType];
+    }
+
+// End of File