skins/AknSkins/alsrc/AknsAlEffectParamContainer.cpp
changeset 0 05e9090e2422
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/AknSkins/alsrc/AknsAlEffectParamContainer.cpp	Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2004-2008 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:  Combined container & iterator for storing RL parameters.
+*
+*/
+
+
+// INCLUDE FILES
+#include "AknsAlEffectParamContainer.h"
+
+// ============================ INTERNAL CLASSES ===============================
+NONSHARABLE_CLASS( CAknsAlParamData ): public CBase
+    {
+    private:
+
+        CAknsAlParamData()
+            {
+            // Derived from CBase -> members zeroed automatically
+            }
+
+        void ConstructL( const TAknsRlParameterData& aData )
+            {
+            iName = aData.iName->AllocL();
+            iType = aData.iType;
+
+            switch( aData.iType )
+                {
+                case EAknsRlParameterTypeNumber:
+                    iNumber = aData.iNumber;
+                    break;
+                case EAknsRlParameterTypeString:
+                    iBuffer = aData.iString->AllocL();
+                    break;
+                case EAknsRlParameterTypeGraphics:
+                    iBuffer         = aData.iGfx->iFilename->AllocL();
+                    iGfx.iFilename  = iBuffer;
+                    iGfx.iIndex     = aData.iGfx->iIndex;
+                    iGfx.iMaskIndex = aData.iGfx->iMaskIndex;
+                    break;
+                }
+            }
+
+    public:
+
+        static CAknsAlParamData* NewL( const TAknsRlParameterData& aData )
+            {
+            CAknsAlParamData* self = new(ELeave) CAknsAlParamData();
+            CleanupStack::PushL( self );
+            self->ConstructL( aData );
+            CleanupStack::Pop( self );
+            return self;
+            }
+
+        virtual ~CAknsAlParamData()
+            {
+            delete iName;
+            delete iBuffer;
+            }
+
+        void FillData( TAknsRlParameterData& aData ) const
+            {
+            aData.iName = iName;
+            aData.iType = iType;
+
+            switch( iType )
+                {
+                case EAknsRlParameterTypeNumber:
+                    aData.iNumber = iNumber;
+                    break;
+                case EAknsRlParameterTypeString:
+                    aData.iString = iBuffer;
+                    break;
+                case EAknsRlParameterTypeGraphics:
+                    aData.iGfx = &iGfx;
+                    break;
+                }
+            }
+
+    private:
+        HBufC* iName;
+        TAknsRlParameterType iType;
+        HBufC* iBuffer;
+        TInt iNumber;
+        TAknsRlGraphicsParam iGfx;
+    };
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CAknsAlEffectParamContainer::CAknsAlEffectParamContainer
+// -----------------------------------------------------------------------------
+//
+CAknsAlEffectParamContainer::CAknsAlEffectParamContainer()
+    {
+    // Derived from CBase -> members zeroed
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlEffectParamContainer::CAknsAlEffectParamContainer
+// -----------------------------------------------------------------------------
+//
+CAknsAlEffectParamContainer* CAknsAlEffectParamContainer::NewL()
+    {
+    CAknsAlEffectParamContainer* self = new(ELeave) CAknsAlEffectParamContainer();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlEffectParamContainer::~CAknsAlEffectParamContainer
+// -----------------------------------------------------------------------------
+//
+CAknsAlEffectParamContainer::~CAknsAlEffectParamContainer()
+    {
+    // Deletes the referenced parameters
+    iParams.ResetAndDestroy(); //lint !e1551 No exception thrown
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlEffectParamContainer::HasNext
+// -----------------------------------------------------------------------------
+//
+TBool CAknsAlEffectParamContainer::HasNext()
+    {
+    if( iIteratorIndex < iParams.Count() )
+        return ETrue;
+
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlEffectParamContainer::NextL
+// -----------------------------------------------------------------------------
+//
+const TAknsRlParameterData* CAknsAlEffectParamContainer::NextL()
+    {
+    if( iParams.Count() <= iIteratorIndex )
+        User::Leave( KErrOverflow );
+
+    CAknsAlParamData* param = iParams[iIteratorIndex];
+    param->FillData( iIteratorData );
+
+    iIteratorIndex++;
+
+    return &iIteratorData;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlEffectParamContainer::AddParamL
+// -----------------------------------------------------------------------------
+//
+void CAknsAlEffectParamContainer::AddParamL( const TAknsRlParameterData& aParam )
+    {
+    CAknsAlParamData* data = CAknsAlParamData::NewL( aParam );
+    CleanupStack::PushL( data );
+    iParams.AppendL( data );
+    CleanupStack::Pop( data );
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlEffectParamContainer::Begin
+// -----------------------------------------------------------------------------
+//
+void CAknsAlEffectParamContainer::Begin()
+    {
+    iIteratorIndex = 0;
+    }
+
+// End of file