photosgallery/viewframework/views/gridview/src/glxgridviewimp.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 21 Jun 2010 15:40:32 +0300
branchRCL_3
changeset 47 f9e827349359
parent 35 420f6808bf21
child 56 b023a8d2866a
permissions -rw-r--r--
Revision: 201023 Kit: 2010125

/*
* 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:    Implementation of Grid view
*
*/





// INCLUDE FILES
#include <aknbutton.h>
#include <StringLoader.h>
#include <AknsBasicBackgroundControlContext.h>

//Gallery Headers
#include <glxactivemedialistregistry.h>                 // For medialist registry
#include <glxcommandhandlers.hrh>                       // For EGlxCmdFullScreenBack                   
#include <glxgridviewdata.rsg>                          // Gridview resource

#include <mglxmedialist.h>                              // CGlxMedialist
#include <glxsetappstate.h>
#include <glxtracer.h>                                  // For Tracer
#include <glxlog.h>

// User Includes
#include "glxgridviewimp.h"                         
#include "glxgridviewmlobserver.h"                      // medialist observer for Hg Grid                
#include "glxgridviewcontainer.h"

// For transition effects
#include <akntranseffect.h>                             
#include <gfxtranseffect/gfxtranseffect.h>
#include "glxgfxtranseffect.h"  // For transition effects

const TInt KGlxToolbarButtonUnLatched = 0;              // Toolbar mark button's unlatched state defined in the rss file

// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// Two-phased constructor.
// ---------------------------------------------------------------------------
//
CGlxGridViewImp* CGlxGridViewImp::NewL(
		MGlxMediaListFactory* aMediaListFactory,
		const TGridViewResourceIds& aResourceIds,
		TInt aViewUID,
		const TDesC& aTitle)
	{
	TRACER("CGlxGridViewImp::NewL");
	CGlxGridViewImp* self = CGlxGridViewImp::NewLC(aMediaListFactory, 
			aResourceIds,
			aViewUID,
			aTitle);
	CleanupStack::Pop(self);
	return self;
	}

// ---------------------------------------------------------------------------
// Two-phased constructor.
// ---------------------------------------------------------------------------
//
CGlxGridViewImp* CGlxGridViewImp::NewLC(
		MGlxMediaListFactory* aMediaListFactory,
		const TGridViewResourceIds& aResourceIds,
		TInt aViewUID,
		const TDesC& aTitle)
	{
	TRACER("CGlxGridViewImp::NewLC()");
	CGlxGridViewImp* self = 
	new (ELeave) CGlxGridViewImp(aResourceIds, aViewUID);
	CleanupStack::PushL(self);
	self->ConstructL(aMediaListFactory, aTitle);
	return self;
	}

// ---------------------------------------------------------------------------
// C++ default constructor can NOT contain any code, that
// might leave.
// ---------------------------------------------------------------------------
//
CGlxGridViewImp::CGlxGridViewImp(const TGridViewResourceIds& aResourceIds,
		TInt aViewUID) :
		iResourceIds(aResourceIds),
		iViewUID(aViewUID),
		iPreviousFocusChangeType(NGlxListDefs::EUnknown)
    	{
    	TRACER("CGlxGridViewImp::CGlxGridViewImp()");
    	}

// ---------------------------------------------------------------------------
// Symbian 2nd phase constructor can leave.
// ---------------------------------------------------------------------------
//  
void CGlxGridViewImp::ConstructL(MGlxMediaListFactory* aMediaListFactory,
		const TDesC& aTitle)
	{
	TRACER("CGlxGridViewImp::ConstructL()");
	BaseConstructL(iResourceIds.iViewId);
	ViewBaseConstructL();
	MLViewBaseConstructL(aMediaListFactory, aTitle);   

	// Get object that stores the active media list registry
	iActiveMediaListRegistry = CGlxActiveMediaListRegistry::InstanceL();
	}

// ---------------------------------------------------------------------------
// From CAknView
// Handles a view activation.
// ---------------------------------------------------------------------------
//
void CGlxGridViewImp::DoMLViewActivateL(
		const TVwsViewId& /*aPrevViewId*/, 
		TUid /* aCustomMessageId */,
		const TDesC8& aCustomMessage)
	{
	TRACER("CGlxGridViewImp::DoMLViewActivateL()");

    TUint transitionID = (iUiUtility->ViewNavigationDirection()==
          EGlxNavigationForwards)?KActivateTransitionId:KFSDeActivateTransitionId; 
    
    HBufC8* activationParam = HBufC8::NewLC(KMaxUidName);
    activationParam->Des().AppendNum(KGlxActivationCmdShowAll);    

    // Start Animating the view when launched from other views 
    // except if launched from Camera App.
    if (aCustomMessage.Compare(activationParam->Des()) != 0) 
        {
        GfxTransEffect::BeginFullScreen( transitionID, TRect(),
                                    AknTransEffect::EParameterType, 
                                    AknTransEffect::GfxTransParam( KPhotosUid,
                                    AknTransEffect::TParameter::EEnableEffects) );	
        GfxTransEffect::EndFullScreen();
        }
    else
    	{
		// Launched from Camera App, Check if there is any existing filter
    	// and clear the 'MaxCount' filter, if supported to show all images.
		GLX_DEBUG1("CGlxGridViewImp::DoMLViewActivateL() - "
				"Launched From Camera");
		CMPXFilter* filter = iMediaList->Filter();
		if (filter && filter->IsSupported(KGlxFilterGeneralMaxCount))
			{
			GLX_DEBUG1( "CGlxGridViewImp::DoMLViewActivateL()- "
					"Clear MaxCount filter");
			filter->SetTObjectValueL<TInt> (KGlxFilterGeneralMaxCount, 0);
			iMediaList->SetFilterL(filter);
			}
    	}
    
	CleanupStack::PopAndDestroy(activationParam);
	
	if(StatusPane())
		{
		StatusPane()->MakeVisible(ETrue);
		CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
		CAknTitlePane* titlePane = ( CAknTitlePane* )statusPane->ControlL(
				TUid::Uid( EEikStatusPaneUidTitle ));     
		const TDesC* titleText = titlePane->Text();
		HBufC* tempTitle = titleText->AllocLC();
		TPtr titleptr = tempTitle->Des();
		titleptr.Trim();
		if(!tempTitle->Length())
			{
			if( iTitletext )
				{
				// Set the required Title
				titlePane->SetTextL( *iTitletext );
				}
			}
		CleanupStack::PopAndDestroy(tempTitle);        
		}

	GlxSetAppState::SetState(EGlxInCarouselView);
	// Setting the Context sensitive menu id
	MenuBar()->SetContextMenuTitleResourceId( iResourceIds.iOkOptionsMenuId );
	iActiveMediaListRegistry->RegisterActiveMediaList(iMediaList);
	if(!iToolbar)
        {
        iToolbar = CAknToolbar::NewL(R_GLX_GRID_VIEW_TOOLBAR);
        SetGridToolBar(iToolbar);
        SetToolbarObserver(this);
        //Make the toolbar visible only when the medialist is populated
        iToolbar->SetToolbarVisibility(iMediaList->IsPopulated());
        }
	//Create gridview container
	iGlxGridViewContainer = CGlxGridViewContainer::NewL(iMediaList,
            iUiUtility, *this, iToolbar);
	iEikonEnv->AppUi()->AddToStackL(*this,iGlxGridViewContainer);
	iUiUtility->DestroyScreenClearer();
	}

// ---------------------------------------------------------------------------
// From CAknView
// View deactivation function.
// ---------------------------------------------------------------------------
//
void CGlxGridViewImp::DoMLViewDeactivate()
	{
	TRACER("CGlxGridViewImp::DoMLViewDeactivate");
	if(StatusPane())
		{
		if(iTitletext)
			{
			delete iTitletext;
			iTitletext = NULL;
			}
		CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
		TRAP_IGNORE(CAknTitlePane* titlePane = ( CAknTitlePane* )statusPane->ControlL(
				TUid::Uid( EEikStatusPaneUidTitle ));        
		iTitletext = titlePane->Text()->AllocL());
		}
	// Deregister active media list pointer
	iActiveMediaListRegistry->DeregisterActiveMediaList(iMediaList);
	if(iToolbar)
        {
         delete iToolbar;
         iToolbar = NULL;
		 //set the gridtoolbar to NULL in viewbase.
         SetGridToolBar(iToolbar);
        }
	// Destroy Grid widget before going to next view
	DestroyGridWidget();
	}

// ---------------------------------------------------------------------------
// DestroyGridWidget
// ---------------------------------------------------------------------------
//  
void CGlxGridViewImp::DestroyGridWidget()
	{
	TRACER("CGlxGridViewImp::DestroyGridWidget()");
	//while view deactivating need to remove from the control stack.
	iEikonEnv->AppUi()->RemoveFromViewStack(*this,iGlxGridViewContainer);        
	delete iGlxGridViewContainer;
    iGlxGridViewContainer = NULL;
	}

// ---------------------------------------------------------------------------
// Destructor
// ---------------------------------------------------------------------------
//
CGlxGridViewImp::~CGlxGridViewImp()
	{
	TRACER("CGlxGridViewImp::~CGlxGridViewImp");
	delete iTitletext;
	if(iToolbar)
	    {
        delete iToolbar;
        iToolbar = NULL;
	    }
	if (iActiveMediaListRegistry)
		{
		iActiveMediaListRegistry->Close();
		}    
	}

// ---------------------------------------------------------------------------
// From CAknView
// Returns views id.
// ---------------------------------------------------------------------------
TUid CGlxGridViewImp::Id() const
{
TRACER("CGlxGridViewImp::Id()");
return TUid::Uid(iViewUID);
}

// ---------------------------------------------------------------------------
// From CAknView
// Command handling function.
// ---------------------------------------------------------------------------
TBool CGlxGridViewImp::HandleViewCommandL(TInt aCommand)
	{
	TRACER("CGlxGridViewImp::HandleViewCommandL()");
    GLX_LOG_INFO1( "CGlxGridViewImp::HandleViewCommandL(%x) entering", aCommand );
    return iGlxGridViewContainer->HandleViewCommandL(aCommand);
	}

// ---------------------------------------------------------------------------
// From CAknView
// HandleForegroundEventL
// Foreground event handling function.
// ---------------------------------------------------------------------------
//
void CGlxGridViewImp::HandleForegroundEventL(TBool aForeground)
	{
    TRACER("CGlxGridViewImp::HandleForegroundEventL()");
	if(iMMCState)
	    {
        iMMCState = EFalse;
        ProcessCommandL(EAknSoftkeyClose);
	    }
	CAknView::HandleForegroundEventL(aForeground);
	}

// ---------------------------------------------------------------------------
// From MGlxHandleGridEvents
// HandleGridEventsL()
// handles processcommandL related commands
// -----------------------------------------------------------------------------
//
void CGlxGridViewImp::HandleGridEventsL(TInt aCmd)
	{
	TRACER("CGlxGridViewImp::HandleGridEventsL()");
	//do processcmd related event handling
	if(EAknSoftkeyClose == aCmd)
	    {
        iMMCState = ETrue;
	    }
	ProcessCommandL(aCmd);
	}

// ---------------------------------------------------------------------------
// From MGlxHandleButtonMark
// HandleLatchToolbar()
// sets toolbar mark unmark status
// -----------------------------------------------------------------------------
//
void CGlxGridViewImp::HandleLatchToolbar()
	{
	TRACER("CGlxGridViewImp::HandleLatchToolbarL()");
	CAknButton* markButton = static_cast<CAknButton*>
									(iToolbar->ControlOrNull( EGlxCmdStartMultipleMarking ));

	if(markButton)
		{
		markButton->SetCurrentState( KGlxToolbarButtonUnLatched, ETrue );
		}	
	}
//  End of File