--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/menufw/hierarchynavigator/hnpresentationmodel/src/hnsuitemodelcontainer.cpp Thu Dec 17 08:40:49 2009 +0200
@@ -0,0 +1,263 @@
+/*
+* Copyright (c) 2007-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: suite presentation models container
+*
+*/
+
+
+#include "hnsuitesstack.h"
+#include "hneventhandler.h"
+#include "hnmdmodel.h"
+#include "hnsuitemodel.h"
+#include "hnsuitemodelcontainer.h"
+#include "hnglobals.h"
+#include "hncontrollerinterface.h"
+
+const TInt KParentSuiteDistance( 2 );
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CHnSuiteModelContainer::ConstructL(
+ MHnMdModelEventObserver& aModelObserver,
+ MHnControllerInterface& aController )
+ {
+ iSuitesStack = CHnSuitesStack::NewL( aController );
+ iEventHandler = CHnEventHandler::NewL( aModelObserver , aController );
+ }
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CHnSuiteModelContainer* CHnSuiteModelContainer::NewL(
+ MHnMdModelEventObserver& aModelObserver,
+ MHnControllerInterface& aController )
+ {
+ CHnSuiteModelContainer* self = CHnSuiteModelContainer::NewLC(
+ aModelObserver , aController );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CHnSuiteModelContainer* CHnSuiteModelContainer::NewLC(
+ MHnMdModelEventObserver& aModelObserver,
+ MHnControllerInterface& aController )
+ {
+ CHnSuiteModelContainer* self = new( ELeave ) CHnSuiteModelContainer();
+ CleanupStack::PushL( self );
+ self->ConstructL( aModelObserver, aController );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CHnSuiteModelContainer::CHnSuiteModelContainer()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CHnSuiteModelContainer::~CHnSuiteModelContainer()
+ {
+ delete iSuitesStack;
+ delete iEventHandler;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CHnSuiteModel* CHnSuiteModelContainer::PopSuiteModelL(
+ const TDesC& aSuiteName )
+ {
+ CHnSuiteModel* suiteModel = iSuitesStack->PopL();
+
+ if ( suiteModel &&
+ suiteModel->SuiteName().Compare( aSuiteName ) )
+ {
+ User::LeaveIfError( KErrNotFound );
+ }
+
+ delete suiteModel;
+ suiteModel = iSuitesStack->GetLast();
+ return suiteModel;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CHnSuiteModelContainer::OfferHnEventL( const TInt aEventId,
+ const TInt aRecipientId, CLiwGenericParamList* aEventParameters )
+ {
+ CHnSuiteModel* lastSuiteModel = GetLastSuiteModel();
+ TInt err = KErrNotFound;
+
+ if( aEventId == KKeyIdMoveHighlight )
+ {
+ for( int i( 0 ); i<GetSuiteModelCount(); i++ )
+ {
+ CHnSuiteModel* model = GetSuiteModel( i );
+ TBool isRoot( model->CustomId() == KRootId );
+ if( model && !isRoot )
+ {
+ model->SetSuiteHighlightL( model->GetSuiteHighlight() + aRecipientId );
+ }
+ }
+ }
+ else
+ {
+ if ( lastSuiteModel )
+ {
+ err = lastSuiteModel->OfferHnEventL( aEventId,
+ aRecipientId, aEventParameters );
+ }
+ }
+
+ return err;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CHnSuiteModelContainer::PushNewSuiteModelL(
+ const TDesC& aGenre )
+ {
+ CHnSuiteModel* retModel = NULL;
+ retModel = CHnSuiteModel::NewL( *iEventHandler, aGenre );
+ iSuitesStack->PushL( retModel );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CHnSuiteModel* CHnSuiteModelContainer::GetSuiteModel(
+ const TDesC& aSuiteName )
+ {
+ ASSERT( aSuiteName.Length() );
+
+ TInt count( iSuitesStack->Count() );
+ CHnSuiteModel* retModel = NULL;
+
+ for (TInt i = iSuitesStack->Count() - 1; i >= 0; i-- )
+ {
+ retModel = iSuitesStack->Get( i );
+ if ( retModel && !retModel->SuiteName().Compare( aSuiteName ) )
+ {
+ break;
+ }
+ else
+ {
+ retModel = NULL;
+ }
+ }
+
+ return retModel;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CHnSuiteModelContainer::GetSuiteModelCount() const
+ {
+ return iSuitesStack->Count();
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CHnSuiteModel* CHnSuiteModelContainer::GetLastSuiteModel()
+ {
+ return iSuitesStack->GetLast();
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CHnSuiteModel* CHnSuiteModelContainer::GetParentSuiteModel()
+ {
+ CHnSuiteModel* model = NULL;
+ if( iSuitesStack->Count() > 1 )
+ {
+ model = iSuitesStack->Get(
+ iSuitesStack->Count() - KParentSuiteDistance );
+ }
+ return model;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CHnSuiteModel* CHnSuiteModelContainer::GetSuiteModel(TInt aPosition)
+ {
+ return iSuitesStack->Get( aPosition );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CHnSuiteModel* CHnSuiteModelContainer::GetMatchingSuiteModel(
+ TInt64 aCustomId )
+ {
+ CHnSuiteModel* suiteModel( NULL );
+
+ if ( aCustomId >= 0 )
+ {
+ for( TInt i( 0 ); i < GetSuiteModelCount(); i++ )
+ {
+ CHnSuiteModel* tmpSuiteModel( GetSuiteModel( i ) );
+
+ // compare suiteCustomIds
+ if ( tmpSuiteModel && ( tmpSuiteModel->CustomId() == aCustomId ) )
+ {
+ suiteModel = tmpSuiteModel;
+ break;
+ }
+ }
+ }
+
+ return suiteModel;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CHnSuiteModelContainer::RemoveLiwObjects()
+ {
+ for( TInt i = 0; i < GetSuiteModelCount(); ++i )
+ {
+ GetSuiteModel( i )->RemoveLiwObjects();
+ }
+ }
+
+// End of file