skins/AknSkins/alsrc/AknsAlShared.cpp
changeset 0 05e9090e2422
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/AknSkins/alsrc/AknsAlShared.cpp	Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,369 @@
+/*
+* Copyright (c) 2005-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:  Utility class for storing animation value and binding the animation
+*                value to timing model.
+*
+*/
+
+
+// INCLUDE FILES
+#include "AknsAlShared.h"
+
+#include "AknsRlEffectPlugin.h"
+#include "AknsAlEffectParamContainer.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+/**
+* Utility class for binding animation value to name.
+*/
+NONSHARABLE_CLASS( CAknsAlNamedReference ): public CBase
+    {
+    protected:
+        CAknsAlNamedReference();
+        void ConstructL( const TDesC& aName,
+                         const MAknsAlAnimationValue* aValue );
+
+    public:
+        ~CAknsAlNamedReference();
+        static CAknsAlNamedReference* NewL(  const TDesC& aName,
+                                             const MAknsAlAnimationValue* aValue );
+        inline void FillData( TAknsRlParameterData& aData ) const;
+
+    private:
+        HBufC* iName; // Owned
+        const MAknsAlAnimationValue* iAnimationValue; // Referenced only
+    };
+
+// -----------------------------------------------------------------------------
+// CAknsAlNamedReference::CAknsAlNamedReference
+// -----------------------------------------------------------------------------
+//
+CAknsAlNamedReference::CAknsAlNamedReference()
+    {
+    // Derived from CBase -> members are zeroed
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlNamedReference::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CAknsAlNamedReference::ConstructL(
+    const TDesC& aName, const MAknsAlAnimationValue* aValue )
+    {
+    if( NULL == aValue )
+        User::Leave( KErrArgument );
+
+    iAnimationValue = aValue;
+    iName           = aName.AllocL();
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlNamedReference::~CAknsAlNamedReference
+// -----------------------------------------------------------------------------
+//
+CAknsAlNamedReference::~CAknsAlNamedReference()
+    {
+    delete iName;
+    iAnimationValue = NULL; // Removes lint nag
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlNamedReference::NewL
+// -----------------------------------------------------------------------------
+//
+CAknsAlNamedReference* CAknsAlNamedReference::NewL(
+    const TDesC& aName, const MAknsAlAnimationValue* aValue )
+    {
+    CAknsAlNamedReference* self = new(ELeave) CAknsAlNamedReference();
+    CleanupStack::PushL( self );
+    self->ConstructL( aName, aValue);
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlNamedReference::FillData
+// -----------------------------------------------------------------------------
+//
+inline void CAknsAlNamedReference::FillData( TAknsRlParameterData& aData ) const
+    {
+    iAnimationValue->FillData( aData );
+    aData.iName   = iName;
+    }
+
+// ============================ MEMBER FUNCTIONS ===============================
+/**
+* Utility class for storing named references and providing a parameter iterator
+* access to them.
+*/
+NONSHARABLE_CLASS( CAknsAlNamedReferenceContainer ):
+    public CBase, public MAknsRlParameterIterator
+    {
+    public:
+        CAknsAlNamedReferenceContainer();
+        ~CAknsAlNamedReferenceContainer();
+        void AddNamedReferenceL( const TDesC& aName,
+                                 const MAknsAlAnimationValue* aValue );
+        void Begin();
+
+    public: // Implementation of MAknsRlParameterIterator
+        TBool HasNext();
+        const TAknsRlParameterData* NextL();
+
+    private:
+        TAknsRlParameterData iIteratorData;
+        // Stores the time bound parameters, owned
+        RPointerArray<CAknsAlNamedReference> iNamedRefs;
+        TInt iIteratorIndex;
+    };
+
+// -----------------------------------------------------------------------------
+// CAknsAlNamedReferenceContainer::CAknsAlNamedReferenceContainer
+// -----------------------------------------------------------------------------
+//
+CAknsAlNamedReferenceContainer::CAknsAlNamedReferenceContainer()
+    {
+    // Derived from CBase -> members are zeroed
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlNamedReferenceContainer::~CAknsAlNamedReferenceContainer
+// -----------------------------------------------------------------------------
+//
+CAknsAlNamedReferenceContainer::~CAknsAlNamedReferenceContainer()
+    {
+    iNamedRefs.ResetAndDestroy(); //lint !e1551 No exception thrown
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlNamedReferenceContainer::AddNamedReferenceL
+// -----------------------------------------------------------------------------
+//
+void CAknsAlNamedReferenceContainer::AddNamedReferenceL(
+    const TDesC& aName, const MAknsAlAnimationValue* aValue )
+    {
+    CAknsAlNamedReference* ref = CAknsAlNamedReference::NewL( aName, aValue );
+    CleanupStack::PushL( ref );
+    User::LeaveIfError( iNamedRefs.Append( ref ) );
+    CleanupStack::Pop( ref );
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlNamedReferenceContainer::Begin
+// -----------------------------------------------------------------------------
+//
+void CAknsAlNamedReferenceContainer::Begin()
+    {
+    iIteratorIndex = 0;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlNamedReferenceContainer::HasNext
+// -----------------------------------------------------------------------------
+//
+TBool CAknsAlNamedReferenceContainer::HasNext()
+    {
+    if( iIteratorIndex < iNamedRefs.Count() )
+        return ETrue;
+
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlNamedReferenceContainer::NextL
+// -----------------------------------------------------------------------------
+//
+const TAknsRlParameterData* CAknsAlNamedReferenceContainer::NextL()
+    {
+    if( iNamedRefs.Count() <= iIteratorIndex )
+        User::Leave( KErrOverflow );
+
+    CAknsAlNamedReference* ref = iNamedRefs[iIteratorIndex];
+    ref->FillData( iIteratorData );
+
+    iIteratorIndex++;
+
+    return &iIteratorData;
+    }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationValueContainer::CAknsAlAnimationValueContainer
+// -----------------------------------------------------------------------------
+//
+CAknsAlAnimationValueContainer::CAknsAlAnimationValueContainer()
+    {
+    // Derived from CBase -> members are zeroed
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationValueContainer::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CAknsAlAnimationValueContainer::ConstructL( MAknsAlAnimationValue* aValue,
+                 const MAknsAlTimingModel* aModel )
+    {
+    if( NULL == aValue || NULL == aModel )
+        User::Leave( KErrArgument );
+
+    iAnimationValue = aValue;
+    iTimingModel    = aModel;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationValueContainer::~CAknsAlAnimationValueContainer
+// -----------------------------------------------------------------------------
+//
+CAknsAlAnimationValueContainer::~CAknsAlAnimationValueContainer()
+    {
+    delete iAnimationValue; //lint !e1551 No exception thrown
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationValueContainer::NewL
+// -----------------------------------------------------------------------------
+//
+CAknsAlAnimationValueContainer* CAknsAlAnimationValueContainer::NewL(
+    MAknsAlAnimationValue* aValue, const MAknsAlTimingModel* aModel )
+    {
+    CAknsAlAnimationValueContainer* self = new(ELeave) CAknsAlAnimationValueContainer();
+    CleanupStack::PushL( self );
+    self->ConstructL( aValue, aModel );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationCommand::CAknsAlAnimationCommand
+// -----------------------------------------------------------------------------
+//
+CAknsAlAnimationCommand::CAknsAlAnimationCommand()
+    {
+    // Derived from CBase -> members are zeroed
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationCommand::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CAknsAlAnimationCommand::ConstructL()
+    {
+    iParamContainer = CAknsAlEffectParamContainer::NewL();
+    iReferenceContainer = new(ELeave) CAknsAlNamedReferenceContainer();
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationCommand::NewL
+// -----------------------------------------------------------------------------
+//
+CAknsAlAnimationCommand* CAknsAlAnimationCommand::NewL()
+    {
+    CAknsAlAnimationCommand* self = new(ELeave) CAknsAlAnimationCommand();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationCommand::~CAknsAlAnimationCommand
+// -----------------------------------------------------------------------------
+//
+CAknsAlAnimationCommand::~CAknsAlAnimationCommand()
+    {
+    delete iPlugin; //lint !e1551 No exception thrown
+    delete iParamContainer; //lint !e1551 No exception thrown
+    delete iReferenceContainer; //lint !e1551 No exception thrown
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationCommand::Effect
+// -----------------------------------------------------------------------------
+//
+MAknsRlEffect* CAknsAlAnimationCommand::Effect()
+    {
+    return iPlugin->Effect( KAknsRlEffectPluginInterfaceEffect );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationCommand::AddParameterL
+// -----------------------------------------------------------------------------
+//
+void CAknsAlAnimationCommand::AddParameterL( const TAknsRlParameterData& aParam )
+    {
+    iParamContainer->AddParamL( aParam );
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationCommand::AddNamedReferenceL
+// -----------------------------------------------------------------------------
+//
+void CAknsAlAnimationCommand::AddNamedReferenceL( const TDesC& aName,
+                         const MAknsAlAnimationValue* aValue )
+    {
+    iReferenceContainer->AddNamedReferenceL( aName, aValue );
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationCommand::SetPlugin
+// -----------------------------------------------------------------------------
+//
+void CAknsAlAnimationCommand::SetPlugin( CAknsRlEffectPlugin* aPlugin )
+    {
+    iPlugin = aPlugin;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationCommand::SetLayerConfig
+// -----------------------------------------------------------------------------
+//
+void CAknsAlAnimationCommand::SetLayerConfig( const TAknsRlRenderOpParam& aConfig )
+    {
+    iLayerConfig = aConfig;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationCommand::LayerConfig
+// -----------------------------------------------------------------------------
+//
+const TAknsRlRenderOpParam& CAknsAlAnimationCommand::LayerConfig() const
+    {
+    return iLayerConfig;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationCommand::ParameterIterator
+// -----------------------------------------------------------------------------
+//
+MAknsRlParameterIterator* CAknsAlAnimationCommand::ParameterIterator()
+    {
+    iParamContainer->Begin();
+    return iParamContainer;
+    }
+
+// -----------------------------------------------------------------------------
+// CAknsAlAnimationCommand::NamedReferenceIterator
+// -----------------------------------------------------------------------------
+//
+MAknsRlParameterIterator* CAknsAlAnimationCommand::NamedReferenceIterator()
+    {
+    iReferenceContainer->Begin();
+    return iReferenceContainer;
+    }
+
+// End of file.