videocollection/hgmyvideos/src/vcxhgmyvideoscategorymodelhandler.cpp
changeset 0 96612d01cf9f
child 8 ce5ada96ab30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideoscategorymodelhandler.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,496 @@
+    /*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:      UI level handler for category data.*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+
+#include <mpxmediageneraldefs.h>
+#include <mpxmedia.h>
+#include <mpxmediaarray.h>
+
+#include <ganes/HgScroller.h>
+#include <ganes/HgItem.h>
+
+#include <vcxhgmyvideos.rsg>
+#include <vcxmyvideosdefs.h>
+#include "IptvDebug.h"
+
+#include "vcxhgmyvideoscategorymodelhandler.h"
+#include "vcxhgmyvideosmodel.h"
+#include "vcxhgmyvideoscollectionclient.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::CVcxHgMyVideosCategoryModelHandler()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosCategoryModelHandler::CVcxHgMyVideosCategoryModelHandler(
+        CVcxHgMyVideosModel& aModel, CHgScroller& aScroller )
+    : iModel( aModel ),
+      iScroller( aScroller )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::~CVcxHgMyVideosCategoryModelHandler()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosCategoryModelHandler::~CVcxHgMyVideosCategoryModelHandler()
+    {
+    delete iCategoryList;
+    iCategoryIdArray.Reset();
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::DoModelActivateL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::DoModelActivateL()
+    {
+    IPTVLOGSTRING_LOW_LEVEL( 
+        "MPX My Videos UI # CVcxHgMyVideosCategoryModelHandler::DoModelActivateL() - Enter" );
+
+    iModel.CollectionClient().SetCategoryModelObserver( this );
+    
+    IPTVLOGSTRING_LOW_LEVEL( 
+        "MPX My Videos UI # CVcxHgMyVideosCategoryModelHandler::DoModelActivateL() - Exit" );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::DoModelDeactivate()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::DoModelDeactivate()
+    {
+    IPTVLOGSTRING_LOW_LEVEL( 
+        "MPX My Videos UI # CVcxHgMyVideosCategoryModelHandler::DoModelDeactivate() - Enter" );
+
+    iModel.CollectionClient().SetCategoryModelObserver( NULL );
+    
+    IPTVLOGSTRING_LOW_LEVEL( 
+        "MPX My Videos UI # CVcxHgMyVideosCategoryModelHandler::DoModelDeactivate() - Exit" );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::GetCategoryListL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::GetCategoryListL()
+    {
+    IPTVLOGSTRING_LOW_LEVEL( 
+        "MPX My Videos UI # CVcxHgMyVideosCategoryModelHandler::GetCategoryListL() - Enter" );
+    
+    iModel.CollectionClient().GetCategoryListL();
+    
+    IPTVLOGSTRING_LOW_LEVEL( 
+        "MPX My Videos UI # CVcxHgMyVideosCategoryModelHandler::GetCategoryListL() - Exit" );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::Highlight()
+// -----------------------------------------------------------------------------
+//
+TInt CVcxHgMyVideosCategoryModelHandler::Highlight()
+    {
+    return iScroller.SelectedIndex();
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::GetCategoryNameLC()
+// -----------------------------------------------------------------------------
+// 
+HBufC* CVcxHgMyVideosCategoryModelHandler::GetCategoryNameLC( TInt aIndex )
+    {
+    HBufC* name = NULL;
+
+    switch ( aIndex )
+        {
+        case KVcxMvcCategoryIdAll:
+            name = StringLoader::LoadLC( R_VCXHGMYVIDEOS_STORAGE_ALL_LIST );
+            break;
+        case KVcxMvcCategoryIdDownloads:
+            name = StringLoader::LoadLC( R_VCXHGMYVIDEOS_STORAGE_DOWNLOADS_LIST );
+            break;        
+        case KVcxMvcCategoryIdCaptured:
+            name = StringLoader::LoadLC( R_VCXHGMYVIDEOS_STORAGE_CAPTURED_LIST );
+            break;            
+        case KVcxMvcCategoryIdOther:
+            name = StringLoader::LoadLC( R_VCXHGMYVIDEOS_STORAGE_OTHER_LIST );
+            break;            
+        default:
+            {
+            IPTVLOGSTRING_LOW_LEVEL( 
+                "MPX My Videos UI # GetCategoryNameLC() Unexpected category!" );
+            }
+            break;
+        }
+    return name;    
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::FormatCategorySecondRowLC()
+// -----------------------------------------------------------------------------
+// 
+HBufC* CVcxHgMyVideosCategoryModelHandler::FormatCategorySecondRowLC( CMPXMedia& aMedia )
+    {
+    HBufC* details = NULL;
+    HBufC* newVideoName = NULL;
+    TInt newVideos = 0;
+    TInt videos = 0;
+
+    if ( aMedia.IsSupported( KVcxMediaMyVideosCategoryNewItemCount ) )
+        {
+        newVideos = *( aMedia.Value<TInt>( KVcxMediaMyVideosCategoryNewItemCount ) );
+        }
+    if ( aMedia.IsSupported( KVcxMediaMyVideosCategoryItemCount ) )
+        {
+        videos = *( aMedia.Value<TInt>( KVcxMediaMyVideosCategoryItemCount ) );
+        }
+
+    if ( newVideos > 0 )
+        {
+        if ( aMedia.IsSupported( KVcxMediaMyVideosCategoryNewItemName ) )
+            {
+            newVideoName = aMedia.ValueText( KVcxMediaMyVideosCategoryNewItemName ).AllocLC();
+            }
+        else
+            {
+            newVideoName = KNullDesC().AllocLC();
+            }
+
+        if ( newVideos == 1 )
+            {
+            details = StringLoader::LoadL( R_VCXHGMYVIDEOS_ONE_NEW_VIDEO, *newVideoName );
+            }
+        else
+            {
+            CDesCArrayFlat* arrayForStrings = new ( ELeave ) CDesCArrayFlat( 1 );
+            CleanupStack::PushL( arrayForStrings );
+            arrayForStrings->AppendL( *newVideoName );
+            
+            CArrayFixFlat<TInt>* arrayForInts = new ( ELeave ) CArrayFixFlat<TInt>( 3 );
+            CleanupStack::PushL( arrayForInts );
+            arrayForInts->AppendL( newVideos );
+            
+            details = StringLoader::LoadL( R_VCXHGMYVIDEOS_N_NEW_VIDEOS,
+                                           *arrayForStrings,
+                                           *arrayForInts );
+            
+            CleanupStack::PopAndDestroy( arrayForInts );
+            CleanupStack::PopAndDestroy( arrayForStrings );
+            }
+        
+        CleanupStack::PopAndDestroy( newVideoName );
+        CleanupStack::PushL( details );
+        }
+    else
+        {
+        if ( videos == 0 )
+            {
+            details = StringLoader::LoadLC( R_VCXHGMYVIDEOS_NO_VIDEOS_IN_CATEGORY );
+            }
+        else if ( videos == 1 )
+            {
+            details = StringLoader::LoadLC( R_VCXHGMYVIDEOS_ONE_VIDEO_IN_CATEGORY );            
+            }
+        else
+            {
+            details = StringLoader::LoadLC( R_VCXHGMYVIDEOS_VIDEOS_IN_CATEGORY, videos );
+            }        
+        }
+
+    return details;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::UiIndexFromMpxItemId()
+// -----------------------------------------------------------------------------
+// 
+TInt CVcxHgMyVideosCategoryModelHandler::UiIndexFromMpxItemId( TMPXItemId& aMpxItemId )
+    {
+    IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # UiIndexFromMpxItemId() - Enter" );
+    
+    TInt index ( KErrNotFound );
+    
+    if ( iCategoryList )
+        {
+        CMPXMedia* media = NULL;
+        TMPXItemId mpxItemId;
+
+        for ( TInt i = 0; i < iCategoryList->Count(); i++ )
+            {
+            media = (*iCategoryList)[i];
+
+            if ( media && media->IsSupported( KMPXMediaGeneralId ) )
+                {
+                mpxItemId = *media->Value<TMPXItemId>( KMPXMediaGeneralId );
+            
+                if ( mpxItemId == aMpxItemId )
+                    {
+                    index = ResolveCategoryArrayIndexById( i );                                        
+                    break;
+                    }
+                }
+            }
+        }
+    
+    IPTVLOGSTRING2_LOW_LEVEL( "MPX My Videos UI # UiIndexFromMpxItemId(), index = %d - Exit", index );
+    return index;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::ResolveCategoryArrayIndexById()
+// -----------------------------------------------------------------------------
+// 
+TInt CVcxHgMyVideosCategoryModelHandler::ResolveCategoryArrayIndexById( TInt aCategoryId )
+    {
+    TInt ret( 0 );
+    for(TInt i = 0; i < iCategoryIdArray.Count(); i++ )
+        {
+        if( iCategoryIdArray[ i ] == aCategoryId )
+            {
+            ret = i;
+            break;
+            }
+        }  
+    return ret;
+    }
+    
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::NewCategoryListL()
+// MPX Collection calls this callback when new category list is available.
+// -----------------------------------------------------------------------------
+// 
+void CVcxHgMyVideosCategoryModelHandler::NewCategoryListL( 
+        CMPXMediaArray* aCategoryList )
+    {
+    IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # NewCategoryListL() - Enter" );
+
+    delete iCategoryList;
+    iCategoryList = aCategoryList;
+    
+    UpdateCategoryListL();
+    
+    IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # NewCategoryListL() - Exit" );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::CategoryListModifiedL()
+// MPX Collection calls this callback when the category list is modified.
+// -----------------------------------------------------------------------------
+// 
+void CVcxHgMyVideosCategoryModelHandler::CategoryListModifiedL()
+    { 
+    IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # CategoryListModifiedL() - Enter" );
+    
+    UpdateCategoryListL();
+        
+    IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # CategoryListModifiedL() - Exit" );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::CategoryModifiedL()
+// MPX Collection calls this callback when single category is modified.
+// -----------------------------------------------------------------------------
+// 
+void CVcxHgMyVideosCategoryModelHandler::CategoryModifiedL( TMPXChangeEventType aEventType, 
+                                                            TMPXItemId& aMpxItemId )
+    {
+    IPTVLOGSTRING2_LOW_LEVEL( 
+        "MPX My Videos UI # CategoryModifiedL(event=%d)", aEventType );
+
+    switch ( aEventType )
+        {
+        case EMPXItemModified:
+            {
+            TInt uiIndex = UiIndexFromMpxItemId( aMpxItemId );
+            UpdateCategoryListItemL( uiIndex );
+            iScroller.RefreshScreen( uiIndex );
+            }
+            break;
+            
+        case EMPXItemInserted:
+        case EMPXItemDeleted:
+        default:
+            {
+            IPTVLOGSTRING_LOW_LEVEL( 
+                "MPX My Videos UI # CategoryModifiedL() Unexpected event!" );
+            }
+            break;
+        } 
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::UpdateCategoryListL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::UpdateCategoryListL()
+    {
+    IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # UpdateCategoryListL() - Enter" );
+    
+    if ( iCategoryList )
+        {        
+        TInt categoryCount = iCategoryList->Count();
+        
+        MakeCategoryIdArray( categoryCount );
+        
+        IPTVLOGSTRING2_LOW_LEVEL( 
+                "MPX My Videos UI # UpdateCategoryListL() - count = %d", categoryCount );
+        
+        if ( iCategoryIdArray.Count() != iScroller.ItemCount() )
+            {
+            iScroller.ResizeL( iCategoryIdArray.Count() );
+            }
+            
+        if ( iCategoryIdArray.Count() > 0 )
+            {                    
+            for ( TInt i = 0; i < iCategoryIdArray.Count(); i++ )
+                {
+                UpdateCategoryListItemL( i );
+                }
+            if ( iScroller.SelectedIndex() < 0 || 
+                    iScroller.SelectedIndex() >= iScroller.ItemCount() )
+                {
+                iScroller.SetSelectedIndex( 0 );    
+                }           
+            }        
+        
+        // Refresh the whole list.
+        iScroller.DrawDeferred();
+        }
+    IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # UpdateCategoryListL() - Exit" );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::UpdateCategoryListItemL()
+// -----------------------------------------------------------------------------
+// 
+void CVcxHgMyVideosCategoryModelHandler::UpdateCategoryListItemL( TInt aListIndex )
+    {
+    IPTVLOGSTRING2_LOW_LEVEL( 
+            "MPX My Videos UI # UpdateCategoryListItemL (index=%d)", aListIndex );
+    
+    if( aListIndex >= 0 && 
+        aListIndex < iScroller.ItemCount() &&
+        aListIndex < iCategoryIdArray.Count() )
+        {
+        CHgItem& listItem = iScroller.ItemL( aListIndex );
+        
+        CMPXMedia* media( NULL );        
+        media = (*iCategoryList)[ iCategoryIdArray[ aListIndex ] ];
+        
+        HBufC* categoryName( NULL );     
+        categoryName = GetCategoryNameLC( iCategoryIdArray[ aListIndex ] );
+        
+        if ( categoryName && media )
+            {
+            // Insert the category name into first row of list item.
+            listItem.SetTitleL( *categoryName );
+            CleanupStack::PopAndDestroy( categoryName );
+                    
+            // Insert video count into second row of list item.
+            HBufC* secondRow( NULL );
+            secondRow = FormatCategorySecondRowLC( *media );
+            listItem.SetTextL( *secondRow );
+            CleanupStack::PopAndDestroy( secondRow );            
+            }
+        else
+            {
+            // If category name or media was not found then 
+            // the whole list item should be removed.
+            RemoveCategoryListItem( aListIndex );
+            }
+        }
+        
+    IPTVLOGSTRING_LOW_LEVEL( 
+        "MPX My Videos UI # UpdateCategoryListItemL() - Exit" );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::RemoveCategoryListItem()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::RemoveCategoryListItem( TInt aListIndex )
+    {
+    if ( aListIndex >= 0 && aListIndex < iScroller.ItemCount() )
+        {
+        iScroller.RemoveItem( aListIndex );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::ResolveCategoryId()
+// -----------------------------------------------------------------------------
+//
+TInt CVcxHgMyVideosCategoryModelHandler::ResolveCategoryId( TInt aScrollerIndex )
+    {
+    TInt ret( -1 );
+    if ( aScrollerIndex <= iCategoryIdArray.Count() )
+        {
+        ret = iCategoryIdArray[ aScrollerIndex ];
+        }  
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::MakeCategoryIdArray()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosCategoryModelHandler::MakeCategoryIdArray( TInt aCategoriesAvailable )
+    {
+    IPTVLOGSTRING2_LOW_LEVEL( 
+            "MPX My Videos UI # MakeCategoryArray (number of categories=%d)", aCategoriesAvailable );
+    
+    iCategoryIdArray.Reset();    
+    
+    for(TInt i = 0; i < aCategoriesAvailable; i++)
+        {
+        if( AcceptCategory( i ) )
+            {
+            iCategoryIdArray.Append( i );        
+            }        
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosCategoryModelHandler::AcceptCategory()
+// -----------------------------------------------------------------------------
+//
+TBool CVcxHgMyVideosCategoryModelHandler::AcceptCategory( TInt aCategoryId )
+    {
+    TBool ret(EFalse);
+    switch ( aCategoryId )
+        {
+        case KVcxMvcCategoryIdAll:
+        case KVcxMvcCategoryIdDownloads:
+        case KVcxMvcCategoryIdCaptured:
+        case KVcxMvcCategoryIdOther:
+            IPTVLOGSTRING2_LOW_LEVEL( 
+                    "MPX My Videos UI # AcceptCategory() Accepted category: %d", aCategoryId );
+            ret = ETrue;
+            break;
+        default:
+            IPTVLOGSTRING2_LOW_LEVEL( 
+                    "MPX My Videos UI # AcceptCategory() Uknowns category: %d", aCategoryId );
+            break;            
+        }
+    
+    return ret;
+    }