photosgallery/viewframework/visuallistmanager/src/glxiconmanager.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:45:44 +0200
changeset 0 4e91876724a2
child 18 bcb43dc84c44
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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
	}