mpxplugins/viewplugins/views/podcastview/src/mpxpodcastcollectionviewcontainer.cpp
changeset 0 ff3acec5bc43
child 15 a1247965635c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpxplugins/viewplugins/views/podcastview/src/mpxpodcastcollectionviewcontainer.cpp	Thu Dec 17 08:45:05 2009 +0200
@@ -0,0 +1,262 @@
+/*
+* Copyright (c) 2006 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 Podcast Collection view container
+*
+*/
+
+
+// INCLUDE FILES
+#include <hlplch.h>
+#include <aknappui.h>
+#include <akncontext.h>
+#include <AknIconUtils.h>
+#include <data_caging_path_literals.hrh>
+#include <eikspane.h>
+#include <eiktxlbx.h>
+#include <mpxcollectionview.mbg>
+#include <mpxplaybackframeworkdefs.h>
+#include <mpxconstants.h>
+#include <mpxlog.h>
+#include <eikon.hrh>
+
+#include "mpxpodcastcollectionview.hrh"
+#include "mpxpodcastcollectionviewlistboxarray.h"
+#include "mpxpodcastcollectionview.hlp.hrh"
+#include "mpxpodcastcollectionviewcontainer.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CMPXPodcastCollectionViewContainer* CMPXPodcastCollectionViewContainer::NewL(
+    MEikCommandObserver* aView,
+    MEikListBoxObserver* aObserver )
+    {
+    MPX_FUNC( "CMPXPodcastCollectionViewContainer::NewL" );
+    CMPXPodcastCollectionViewContainer* self =
+        new ( ELeave ) CMPXPodcastCollectionViewContainer(aView, aObserver);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+CMPXPodcastCollectionViewContainer::CMPXPodcastCollectionViewContainer(
+    MEikCommandObserver* aView,
+    MEikListBoxObserver* aObserver )
+    : iView( aView )
+    , iListBoxObserver( aObserver )
+    {
+    iCurrentView = EMPXMainPodcastMenuView;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CMPXPodcastCollectionViewContainer::~CMPXPodcastCollectionViewContainer()
+    {
+    MPX_FUNC( "CMPXPodcastCollectionViewContainer::~CMPXPodcastCollectionViewContainer" );
+    delete iCommonContainer;
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CMPXPodcastCollectionViewContainer::ConstructL()
+    {
+    MPX_FUNC( "CMPXPodcastCollectionViewContainer::ConstructL" );
+    iCommonContainer = CMPXCommonContainerFactory::NewL();
+    iCommonContainer->SetViewContainer( this );
+    iCommonContainer->SetCommandObserver( iView );
+    iCommonContainer->SetListBoxObserver( iListBoxObserver );
+    iCommonContainer->ConstructContainerL(MMPXCommonContainer::EMPXCommonContainerPodcast);
+    iLbxArray = static_cast<CMPXPodcastCollectionViewListBoxArray*>(
+        CreateListBoxArrayL() );
+    iCommonContainer->SetListBoxArrayL( iLbxArray );
+    iCommonContainer->HandleListBoxArrayEventL(
+        MMPXCommonListBoxArrayObserver::EMPXCommonListBoxArrayEventIconArrayChange );
+    }
+
+// ---------------------------------------------------------------------------
+// Sets playback status
+// ---------------------------------------------------------------------------
+//
+void CMPXPodcastCollectionViewContainer::SetPlaybackStatusByIdL(
+    TMPXItemId aId, TMPXPlaybackState aStatus )
+    {
+    MPX_FUNC( "CMPXPodcastCollectionViewContainer::SetPlaybackStatusByIdL" );
+    if ( iLbxArray && iCommonContainer )
+        {
+        TInt index( iLbxArray->SetPlaybackStatusByIdL( aId, aStatus ) );
+        if ( index != KErrNotFound )
+            {
+            // Update the previous item as not playing anymore
+            iCommonContainer->DrawLbxItem( index );
+            }
+        index = iLbxArray->GetPlaybackIndex();
+        if ( index != KErrNotFound )
+            {
+            // Update new item as playing
+            iCommonContainer->DrawLbxItem( index );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Get playback index
+// ---------------------------------------------------------------------------
+//
+TInt CMPXPodcastCollectionViewContainer::PlaybackIndex()
+    {
+    MPX_FUNC( "CMPXPodcastCollectionViewContainer::PlaybackIndex" );
+    return ( iLbxArray ? iLbxArray->GetPlaybackIndex() : KErrNotFound );
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the current view to be used to determine the correct help context
+// ---------------------------------------------------------------------------
+//
+void CMPXPodcastCollectionViewContainer::SetCurrentView(
+    const TMPXPodcastView& currentView )
+    {
+    iCurrentView = currentView;
+    }
+
+// -----------------------------------------------------------------------------
+// Creates listbox array
+// -----------------------------------------------------------------------------
+//
+CMPXCommonListBoxArrayBase* CMPXPodcastCollectionViewContainer::CreateListBoxArrayL()
+    {
+    MPX_FUNC( "CMPXPodcastCollectionViewContainer::CreateListBoxArrayL" );
+    CMPXPodcastCollectionViewListBoxArray* array = CMPXPodcastCollectionViewListBoxArray::NewL();
+    array->ConstructListBoxArrayL();
+    array->SetObserver( this );
+    return array;
+    }
+
+// ---------------------------------------------------------------------------
+// From MMPXViewContainer
+// Handles the retrieval of the view container's help context.
+// ---------------------------------------------------------------------------
+//
+void CMPXPodcastCollectionViewContainer::HandleHelpContext(
+    TCoeHelpContext& aContext ) const
+    {
+    MPX_FUNC( "CMPXPodcastCollectionViewContainer::HandleHelpContext" );
+    aContext.iMajor = KAppUidMusicPlayerX;
+
+    switch(iCurrentView)
+        {
+        case EMPXMainPodcastMenuView:
+            {
+            aContext.iContext = KMUS_HLP_PODCAST_MENU_VIEW;
+            break;
+            }
+        case EMPXPublishDateView:
+            {
+            aContext.iContext = KMUS_HLP_PODCAST_PUBLISH_DATE_CAT_VIEW;
+            break;
+            }
+        case EMPXTitlesView:
+            {
+            aContext.iContext = KMUS_HLP_PODCAST_MENU_VIEW;
+            break;
+            }
+        case EMPXEpisodesView:
+            {
+            aContext.iContext = KMUS_HLP_PODCAST_EPISODES_VIEW;
+            break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// From MMPXViewContainer
+// Handles key events.
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CMPXPodcastCollectionViewContainer::HandleKeyEventL(
+    const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    ASSERT( iCommonContainer );
+    MPX_DEBUG4( "CMPXPodcastCollectionViewContainer::HandleKeyEventL(iCode=%d, iScanCode=%d, aType=%d)",
+        aKeyEvent.iCode, aKeyEvent.iScanCode, aType );
+
+    if ( aKeyEvent.iCode == EKeyUpArrow  ||
+        aKeyEvent.iCode == EKeyPrevious )
+        {
+        iView->ProcessCommandL( EMPXCmdUpArrow );
+        }
+    else if ( aKeyEvent.iCode == EKeyDownArrow ||
+        aKeyEvent.iCode == EKeyNext)
+        {
+        iView->ProcessCommandL( EMPXCmdDownArrow );
+        }
+
+    TKeyResponse response = EKeyWasNotConsumed;
+    // Hashkey mark/unmark only works in episodes view
+    if( iCurrentView == EMPXEpisodesView ||
+        aKeyEvent.iScanCode != EStdKeyHash )
+        {
+        response = iCommonContainer->HandleKeyEventL( aKeyEvent, aType );
+        }
+
+    return response;
+    }
+
+// ---------------------------------------------------------------------------
+// From MMPXViewContainer
+// Returns the indicators for the specified item within the view container
+// Only used when using Hitchcock container.
+// ---------------------------------------------------------------------------
+//
+RArray<TInt> CMPXPodcastCollectionViewContainer::IndicatorsL( TInt aIndex )
+    {
+        return iLbxArray->IndicatorIconIndicesL( aIndex );
+    }
+
+// -----------------------------------------------------------------------------
+// Returns common container
+// -----------------------------------------------------------------------------
+//
+MMPXCommonContainer* CMPXPodcastCollectionViewContainer::Common()
+    {
+    return iCommonContainer;
+    }
+
+// ---------------------------------------------------------------------------
+// From MMPXCommonListBoxArrayObserver
+// Handle listbox array events.
+// ---------------------------------------------------------------------------
+//
+void CMPXPodcastCollectionViewContainer::HandleListBoxArrayEventL(
+    TMPXCommonListBoxArrayEvents aEvent )
+    {
+    MPX_FUNC( "CMPXPodcastCollectionViewContainer::HandleListBoxArrayEventL" );
+    ASSERT( iCommonContainer );
+    iCommonContainer->HandleListBoxArrayEventL( aEvent );
+    }
+
+//  End of File