photosgallery/viewframework/visuallistmanager/src/glxiconmanager.cpp
changeset 0 4e91876724a2
child 18 bcb43dc84c44
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/viewframework/visuallistmanager/src/glxiconmanager.cpp	Thu Dec 17 08:45:44 2009 +0200
@@ -0,0 +1,421 @@
+/*
+* Copyright (c) 2008-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:    Icon manager base class
+*
+*/
+
+
+
+
+/**
+ * @internal reviewed 31/07/2007 by Rowland Cook
+ */
+ 
+#include "glxiconmanager.h"
+
+#include "mglxmedialistobserver.h"
+#include "mglxvisuallistobserver.h"
+#include "mglxvisuallist.h"
+
+#include <eikappui.h>
+#include <eikenv.h>
+#include <glxlog.h>
+#include <glxtracer.h>
+
+#include <glxuiutility.h>
+#include "glxtexturemanager.h"
+#include <mglxmedialist.h>
+
+#include <alf/alftexture.h>
+#include <alf/alfvisual.h>
+#include <alf/alfimage.h>
+#include <alf/alfimagebrush.h>
+#include <alf/alfbrusharray.h>
+
+// -----------------------------------------------------------------------------
+// Parameters for icon/brush creation
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TGlxIconManagerParams::TGlxIconManagerParams(TReal32 aTlX, 
+                                TReal32 aTlY, TReal32 aBrX, TReal32 aBrY,
+                                TReal32 aOpacity)
+	:iTlX(aTlX), iTlY(aTlY), iBrX(aBrX), iBrY(aBrY), iOpacity(aOpacity)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C CGlxIconManager::~CGlxIconManager()
+	{
+	TRACER("CGlxIconManager::~CGlxIconManager");
+	GLX_LOG_INFO("CGlxIconManager::~CGlxIconManager");
+	if(iUiUtility)
+		{
+        iUiUtility->Close();
+        }
+                
+    
+    // remove brushes we've added to visuals in visual list
+    TInt mcount = iMediaList.Count();
+    TInt brushCount = iImageBrushArray.Count();
+
+    for(TInt visIdx =0; visIdx<mcount; visIdx++)
+        {
+        for(TInt brIdx =0; brIdx<brushCount; brIdx++)
+            {
+            RemoveFromItem(visIdx, brIdx);
+            }
+        }
+		
+	iImageBrushArray.ResetAndDestroy();
+	iImageBrushArray.Close();
+	}
+
+// -----------------------------------------------------------------------------
+// BaseConstructL
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C void CGlxIconManager::BaseConstructL()
+	{
+	TRACER("CGlxIconManager::BaseConstructL");
+	GLX_LOG_INFO("CGlxIconManager::BaseConstructL");
+    iUiUtility = CGlxUiUtility::UtilityL();
+	}
+
+// -----------------------------------------------------------------------------
+// CreateVisualFromIconL
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C void CGlxIconManager::CreateVisualFromIconL(TInt aIconResourceId, 
+                                                            TDesC& aFilename)
+	{
+	TRACER("CGlxIconManager::CreateVisualFromIconL");
+	GLX_LOG_INFO("CGlxIconManager::CreateVisualFromIconL");
+	// create image brush for our icon
+	CAlfTexture& iconTexture = iUiUtility->GlxTextureManager().
+              CreateIconTextureL(aIconResourceId, aFilename);
+
+    CreateVisualFromTextureL( iconTexture );
+	}
+	
+// -----------------------------------------------------------------------------
+// CreateVisualFromIconL
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C void CGlxIconManager::CreateVisualFromIconL(TInt aIconResourceId, 
+                                TDesC& aFilename, TGlxIconManagerParams& aParams)
+	{
+	TRACER("CGlxIconManager::CreateVisualFromIconL");
+	GLX_LOG_INFO("CGlxIconManager::CreateVisualFromIconL");
+	// create image brush for our icon
+	CAlfTexture& iconTexture = iUiUtility->GlxTextureManager().
+              CreateIconTextureL(aIconResourceId, aFilename);
+
+    CreateVisualFromTextureL( iconTexture, aParams );
+	}
+
+// -----------------------------------------------------------------------------
+// CreateVisualFromTextureL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGlxIconManager::CreateVisualFromTextureL( CAlfTexture& aTexture )
+	{
+	TRACER("CGlxIconManager::CreateVisualFromTextureL( CAlfTexture& aTexture )");
+	GLX_LOG_INFO("CGlxIconManager::CreateVisualFromTextureL");
+    TAlfImage img( aTexture );
+    
+    CAlfImageBrush* imageBrush = 
+        CAlfImageBrush::NewL( *( iUiUtility->Env() ), img );
+    CleanupStack::PushL(imageBrush);
+    
+    imageBrush->SetLayer(EAlfBrushLayerForeground);
+
+    /// @todo Remove these 2 lines when Hui fixes the image brush rendering bug
+    imageBrush->SetBorders(-1,-1,-1,-1);
+   // imageBrush->SetClipToVisual(ETrue);
+    
+    iImageBrushArray.AppendL(imageBrush);
+    CleanupStack::Pop(imageBrush);
+	}
+
+// -----------------------------------------------------------------------------
+// CreateVisualFromTextureL
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C void CGlxIconManager::CreateVisualFromTextureL(
+        CAlfTexture& aTexture, TGlxIconManagerParams& aParams )
+	{
+	TRACER("CGlxIconManager::CreateVisualFromTextureL 2");
+	GLX_LOG_INFO("CGlxIconManager::CreateVisualFromTextureL 2");
+    TAlfImage img( aTexture );
+    img.SetTexCoords(aParams.iTlX, aParams.iTlY, aParams.iBrX, aParams.iBrY );
+    
+    CAlfImageBrush* imageBrush = 
+        CAlfImageBrush::NewL( *iUiUtility->Env(), img );
+    CleanupStack::PushL(imageBrush);
+    
+    imageBrush->SetLayer( EAlfBrushLayerForeground );
+
+    /// @todo Remove these 2 lines when Hui fixes the image brush rendering bug
+    imageBrush->SetBorders(-1,-1,-1,-1);
+   // imageBrush->SetClipToVisual(ETrue);
+    
+    TAlfTimedValue opacity( aParams.iOpacity, 0 ); 
+    imageBrush->SetOpacity( opacity );
+    
+    iImageBrushArray.AppendL(imageBrush);
+    CleanupStack::Pop(imageBrush);
+	}
+
+// -----------------------------------------------------------------------------
+// AddIconToItemL
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C void CGlxIconManager::AddIconToItemL(TInt aIndex, TInt aBrushIndex)
+	{
+	TRACER("CGlxIconManager::AddIconToItemL");
+	GLX_LOG_INFO("CGlxIconManager::AddIconToItemL");
+	CAlfVisual* vis = iVisualList.Visual(aIndex);
+	AddIconToItemL(vis, aBrushIndex);
+	}
+	
+// -----------------------------------------------------------------------------
+// AddIconToItemL
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C void CGlxIconManager::AddIconToItemL(CAlfVisual* aVisual, TInt aBrushIndex)
+	{
+	TRACER("CGlxIconManager::AddIconToItemL 2");
+	GLX_LOG_INFO("CGlxIconManager::AddIconToItemL 2");
+	if(aVisual)
+		{
+		// only add if not already present
+		if(BrushPositionInVisual(aVisual, aBrushIndex) == KErrNotFound)
+		    {
+		    aVisual->EnableBrushesL();	
+	        aVisual->Brushes()->AppendL(iImageBrushArray[aBrushIndex],
+	                                        EAlfDoesNotHaveOwnership );	
+           // aVisual->SetChanged();	                                        	
+		    }
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// RemoveFromItemL
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C void CGlxIconManager::RemoveFromItem(TInt aIndex, TInt aIconIndex)
+	{
+	TRACER("CGlxIconManager::RemoveFromItem");
+	GLX_LOG_INFO("CGlxIconManager::RemoveFromItem");
+	CAlfVisual* vis = iVisualList.Visual(aIndex);
+	RemoveFromItem(vis, aIconIndex);
+	}
+	
+// -----------------------------------------------------------------------------
+// RemoveFromItemL
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C void CGlxIconManager::RemoveFromItem(CAlfVisual* aVisual, 
+                                                        TInt aIconIndex)
+	{
+	TRACER("CGlxIconManager::RemoveFromItem 2");
+	GLX_LOG_INFO("CGlxIconManager::RemoveFromItem 2");
+	if(aVisual && aIconIndex < iImageBrushArray.Count())
+		{
+		CAlfBrushArray* brushArray = aVisual->Brushes();
+		if ( brushArray )
+		    {
+    		TInt brushCount = brushArray->Count();
+    		for(TInt i = 0; i<brushCount;i++)
+    			{
+    			CAlfBrush* brush = &(brushArray->At(i));
+    			if(brush==iImageBrushArray[aIconIndex])
+    				{
+    				brushArray->Remove(i);
+    			//	aVisual->SetChanged();
+    				break;
+    				}
+    			}
+    	    }
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// BrushPositionInVisual
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C TInt CGlxIconManager::BrushPositionInVisual(TInt aListIndex, 
+	                                                TInt aBrushIndex)
+    {
+    TRACER("CGlxIconManager::BrushPositionInVisual");
+    GLX_LOG_INFO("CGlxIconManager::BrushPositionInVisual");
+    CAlfVisual* vis = iVisualList.Visual( aListIndex );
+    return BrushPositionInVisual(vis, aBrushIndex );
+    }
+
+// -----------------------------------------------------------------------------
+// BrushPositionInVisual
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CGlxIconManager::BrushPositionInVisual( CAlfVisual* aVisual, 
+	                                                   TInt aBrushIndex)
+    { 
+    TRACER("CGlxIconManager::BrushPositionInVisual 2");
+    GLX_LOG_INFO("CGlxIconManager::BrushPositionInVisual 2");
+    TInt pos = KErrNotFound;
+    
+	if(aVisual && aBrushIndex < iImageBrushArray.Count())
+		{
+		CAlfBrushArray* brushArray = aVisual->Brushes();
+		if ( brushArray )
+		    {
+    		TInt brushCount = brushArray->Count();
+    		for(TInt i = 0; i<brushCount;i++)
+    			{
+    			CAlfBrush* brush = &(brushArray->At(i));
+    			if(brush==iImageBrushArray[aBrushIndex])
+    				{
+    			    pos = i;
+    				break;
+    				}
+    			}
+			}
+		}
+	return pos;
+    }
+
+// -----------------------------------------------------------------------------
+// HandleItemAddedL
+// -----------------------------------------------------------------------------
+//	
+void CGlxIconManager::HandleItemAddedL(TInt /*StartIndex*/, TInt /*aEndIndex*/, MGlxMediaList* /*aList*/)
+	{
+	// No implementation
+	}
+
+// -----------------------------------------------------------------------------
+// HandleMediaL
+// -----------------------------------------------------------------------------
+//
+void CGlxIconManager::HandleMediaL(TInt /*aListIndex*/, MGlxMediaList* /*aList*/)
+	{
+	// No implementation
+	}
+
+// -----------------------------------------------------------------------------
+// HandleItemRemovedL
+// -----------------------------------------------------------------------------
+//
+void CGlxIconManager::HandleItemRemovedL(TInt /*aStartIndex*/, TInt /*aEndIndex*/, MGlxMediaList* /*aList*/)
+	{
+	// No implementation
+	}
+
+// -----------------------------------------------------------------------------
+// HandleItemModifiedL
+// -----------------------------------------------------------------------------
+//
+void CGlxIconManager::HandleItemModifiedL(const RArray<TInt>& /*aItemIndexes*/, MGlxMediaList* /*aList*/)
+	{
+	// No implementation
+	}
+    
+// -----------------------------------------------------------------------------
+// HandleAttributesAvailableL
+// -----------------------------------------------------------------------------
+//
+void CGlxIconManager::HandleAttributesAvailableL(TInt /*aItemIndex*/,     
+    const RArray<TMPXAttribute>& /*aAttributes*/, MGlxMediaList* /*aList*/)
+	{
+	// No implementation
+	}
+        
+// -----------------------------------------------------------------------------
+// HandleFocusChangedL
+// -----------------------------------------------------------------------------
+//
+void CGlxIconManager::HandleFocusChangedL(NGlxListDefs::TFocusChangeType /*aType*/, TInt /*aNewIndex*/, TInt /*aOldIndex*/, MGlxMediaList* /*aList*/)
+	{
+	// No implementation
+	}
+
+// -----------------------------------------------------------------------------
+// HandleItemSelectedL
+// -----------------------------------------------------------------------------
+//
+void CGlxIconManager::HandleItemSelectedL(TInt /*aIndex*/, TBool /*aSelected*/, MGlxMediaList* /*aList*/)
+	{
+	// No implementation
+	}
+
+// -----------------------------------------------------------------------------
+// HandleMessageL
+// -----------------------------------------------------------------------------
+//
+void CGlxIconManager::HandleMessageL(const CMPXMessage& /*aMessage*/, MGlxMediaList* /*aList*/)
+	{
+	// No implementation
+	}
+
+
+// -----------------------------------------------------------------------------
+// HandleFocusChangedL
+// -----------------------------------------------------------------------------
+//
+void CGlxIconManager::HandleFocusChangedL(TInt /*aFocusIndex*/, TReal32 /*aItemsPerSecond*/, MGlxVisualList* /*aList*/, NGlxListDefs::TFocusChangeType /*aType*/)
+	{
+	// No implementation
+	}
+
+// -----------------------------------------------------------------------------
+// HandleSizeChanged
+// -----------------------------------------------------------------------------
+//
+void CGlxIconManager::HandleSizeChanged( const TSize& /*aSize*/, MGlxVisualList* /*aList*/)
+	{
+	// No implementation
+	}
+
+// -----------------------------------------------------------------------------
+// HandleVisualRemoved
+// -----------------------------------------------------------------------------
+//
+void CGlxIconManager::HandleVisualRemoved( const CAlfVisual* /*aVisual*/,  MGlxVisualList* /*aList*/ )
+	{
+	// No implementation
+	}
+
+// -----------------------------------------------------------------------------
+// HandleVisualAddedL
+// -----------------------------------------------------------------------------
+//
+void CGlxIconManager::HandleVisualAddedL(CAlfVisual* /*aVisual*/, TInt /*aIndex*/,MGlxVisualList* /*aList*/ )
+	{
+	// No implementation
+	}
+	
+// -----------------------------------------------------------------------------
+// Constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CGlxIconManager::CGlxIconManager(MGlxMediaList& aMediaList, MGlxVisualList& aVisList)
+    : iMediaList(aMediaList), iVisualList(aVisList)
+	{
+	// No implementation
+	}
+
+