videofeeds/hgvodui/src/vcxhgvodservicelistimpl.cpp
changeset 0 96612d01cf9f
child 1 6711b85517b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/hgvodui/src/vcxhgvodservicelistimpl.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,545 @@
+/*
+* 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:    HG VOD service list implementation*
+*/
+
+
+// Version : %version: 19 %
+
+#include <akntitle.h>
+#include <aknViewAppUi.h>
+#include <aknnotewrappers.h>
+#include <eikmenup.h> 
+#include <StringLoader.h>
+#include <vcxhgvodui.rsg>
+#include <eikbtgpc.h>
+#include <ganes/HgScroller.h>
+
+#include <csxhelp/iptv.hlp.hrh>
+#include "vcxhgvodservicelistimpl.h"
+#include "vcxhgvodservicelistmodelhandler.h"
+#include "vcxhgvodmainview.h"
+#include "vcxhgvodmainviewcontainer.h"
+#include "vcxnsserviceproviderif.h"
+#include "vcxnsservice.h"
+#include "vcxhgvodui.hrh"
+#include "vcxhgvodutils.h"
+#include "vcxnsupdateprogresshandler.h"
+
+// -----------------------------------------------------------------------------
+// CVcxHgVodServiceListImpl::~CVcxHgVodServiceListImpl()
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CVcxHgVodServiceListImpl::~CVcxHgVodServiceListImpl()
+    {
+    //always set model null to widget before destroying it
+    delete iModelHandler;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgVodServiceListImpl::NewL()
+// -----------------------------------------------------------------------------
+//
+CVcxHgVodServiceListImpl* CVcxHgVodServiceListImpl::NewL(
+    CHgScroller& aScroller, 
+    CVcxNsUiEngine& aDataProviderIf,
+    CVcxHgVodMainView& aView )
+    {
+    CVcxHgVodServiceListImpl* self = 
+        CVcxHgVodServiceListImpl::NewLC( 
+                  aScroller, aDataProviderIf, aView );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgVodServiceListImpl::NewLC()
+// -----------------------------------------------------------------------------
+//
+CVcxHgVodServiceListImpl* CVcxHgVodServiceListImpl::NewLC(
+    CHgScroller& aScroller, 
+    CVcxNsUiEngine& aDataProviderIf,
+    CVcxHgVodMainView& aView )
+    {
+    CVcxHgVodServiceListImpl* self = 
+        new (ELeave) CVcxHgVodServiceListImpl( 
+            aScroller, aDataProviderIf, aView );
+    CleanupStack::PushL( self );
+    self->ConstructL( aDataProviderIf );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CVcxHgVodServiceListImpl::DoActivateL( )
+    {
+    // refresh menu
+    SetMenuResourceId( R_VCXHG_VOD_SERVICEVIEW_MENUBAR );
+    UpdateTitlePaneL();
+    SetEmptyListTextL( R_VCXHG_VOD_OPENING_FEEDS );
+    SetMskL( R_VCXHG_VOD_MSK_BUTTON_DO_NOTHING );
+    
+    iScroller.SetSelectionObserver( *this );
+    iView.AppUi()->AddToStackL( &iScroller );
+    iScroller.SetFocus( ETrue );
+
+    iModelHandler->DoActivateModelL();
+    }
+// -----------------------------------------------------------------------------
+//  
+// -----------------------------------------------------------------------------
+void CVcxHgVodServiceListImpl::DoDeactivate( )
+    {
+    //Make sure that MSK is updated when returning to view
+    iCurrentMskResource = 0;
+    iMoving = EFalse;
+    iModelHandler->DoDeActivateModel();
+    iView.AppUi()->RemoveFromStack( &iScroller );
+    iScroller.SetFocus( EFalse );
+    }
+
+// -----------------------------------------------------------------------------
+//  Activate usable menu items before showing menu
+// -----------------------------------------------------------------------------
+void CVcxHgVodServiceListImpl::ActivateMenuPaneItemsL( 
+    CEikMenuPane* aMenuPane,
+    TInt aResourceId )
+    {
+    if ( aMenuPane && 
+         ( aResourceId == R_VCXHG_VOD_SERVICEVIEW_MENU ) )
+        {
+        TInt selected = iModelHandler->GetSelected();
+        
+        if ( !FeedRemovable( selected ) )
+            {
+            aMenuPane->SetItemDimmed( EVcxHgVodServiceRemoveCmd, ETrue );
+            }
+        
+        aMenuPane->SetItemDimmed( EVcxHgVodServiceDetailsCmd, ETrue );
+        aMenuPane->SetItemDimmed( EVcxHgVodServiceManageAccountCmd, ETrue );
+        
+        if ( !iModelHandler->IsEmptyModel() )
+            {
+            if ( iModelHandler->ServiceProvider()->HasAccountManagementUri( selected ) )
+                {
+                aMenuPane->SetItemDimmed( EVcxHgVodServiceManageAccountCmd, EFalse );
+                }
+            
+            if ( iModelHandler->ServiceProvider()->HasFeedDetails( selected ) )    
+                {
+                aMenuPane->SetItemDimmed( EVcxHgVodServiceDetailsCmd, EFalse );
+                }
+            }
+        
+        if( ! iModelHandler->IsEmptyModel() &&
+            ! iModelHandler->LastItemSelected() )
+            {
+            aMenuPane->SetItemDimmed( EVcxHgVodServiceMoveCmd, EFalse );
+            }
+        else
+            {
+            aMenuPane->SetItemDimmed( EVcxHgVodServiceMoveCmd, ETrue );
+            }
+
+        if ( !HasVideoServicesL() )
+            {
+            aMenuPane->SetItemDimmed( EVcxHgVodServiceRefreshAllCmd, ETrue );            
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgVodServiceListImpl::CVcxHgVodServiceListImpl()
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CVcxHgVodServiceListImpl::CVcxHgVodServiceListImpl( 
+    CHgScroller& aScroller,
+    CVcxNsUiEngine& aDataProviderIf,
+    CVcxHgVodMainView& aView )
+    : CVcxHgVodListImplBase( aView, aDataProviderIf, aScroller )
+    {
+    // None
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgVodServiceListImpl::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgVodServiceListImpl::ConstructL( 
+    CVcxNsUiEngine& aDataProviderIf )
+    {
+    iModelHandler = CVcxHgVodServiceListModelHandler::NewL( 
+                    aDataProviderIf, iView, iScroller, *this );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgVodServiceListImpl::HandleCommandL
+// -----------------------------------------------------------------------------
+//
+void CVcxHgVodServiceListImpl::HandleCommandL( 
+    TInt aCommand )
+    {
+    if ( !iModelHandler )
+        {
+        return;
+        }
+
+    TInt selected = iModelHandler->GetSelected();
+    
+    MVcxNsServiceProviderIf* serviceProvider = 
+        iModelHandler->ServiceProvider();
+    
+    User::LeaveIfNull( serviceProvider );
+    
+    switch ( aCommand )
+        {
+        case EAknSoftkeyOpen:
+        case EVcxHgVodServiceOpenCmd:
+            {
+            serviceProvider->OpenServiceL( selected );
+            }
+        break;
+        
+        case EVcxHgVodServiceRemoveCmd:
+            {
+            RemoveFeedL( selected );
+            }
+        break;
+        
+        case EVcxHgVodServiceRefreshAllCmd:
+            {
+            serviceProvider->RefreshAllServicesL();
+            }
+        break;
+        
+        case EVcxHgVodServiceManageAccountCmd:
+            {
+            serviceProvider->ManageAccountL( selected );
+            }
+            break;
+        case EVcxHgVodServiceSubscriptionsCmd:
+        case EVcxHgVodServiceAddManuallyCmd:
+            {
+            iView.OpenSettingsL( aCommand );
+            }
+        break;
+        
+        case EVcxHgVodServiceAddViaCatalogCmd:
+            {
+            serviceProvider->OpenVideoDirectoryL();
+            iView.ChangeListViewL();
+            }
+        break;    
+    
+        case EVcxHgVodServiceDetailsCmd:
+            {
+            iModelHandler->ShowFeedDetailsL( selected );
+            }
+        break;
+            
+        case EVcxHgVodServiceMoveCmd:
+            {
+            StartMoveL();
+            }
+        break;
+
+        case EVcxHgVodMovingSoftkeyOk:
+            {
+            StopMovingL( ETrue );
+            }
+        break;
+
+        case EVcxHgVodMovingSoftkeyCancel:
+            {
+            StopMovingL( EFalse );
+            }
+        break;
+        
+        default: 
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgVodServiceListImpl::Refresh()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgVodServiceListImpl::Refresh()
+    {
+    if ( iModelHandler )
+        {
+        iModelHandler->RefreshView();
+        }
+    }
+
+// ---------------------------------------------------------
+// 
+// ---------------------------------------------------------
+//
+TKeyResponse CVcxHgVodServiceListImpl::HandleKeyEventL( 
+        const TKeyEvent& aKeyEvent,
+        TEventCode aType )
+    {
+    if( aType == EEventKeyUp && iModelHandler && IsMoving() )
+        {
+        CheckSoftkeysL();
+        }
+     
+    if ( iModelHandler &&
+	     !IsMoving() &&
+	     aType == EEventKeyDown &&
+         aKeyEvent.iScanCode == EStdKeyBackspace && 
+		 FeedRemovable( iModelHandler->GetSelected() ) )
+        {
+        RemoveFeedL( iModelHandler->GetSelected() );
+        return EKeyWasConsumed;
+        }
+    
+    return CVcxHgVodListImplBase::HandleKeyEventL( aKeyEvent, aType );
+    }
+
+// ---------------------------------------------------------
+// 
+// ---------------------------------------------------------
+//
+void CVcxHgVodServiceListImpl::HandleSelectL( TInt /*aIndex*/ )
+    {
+    if( iModelHandler && IsMoving() )
+        {
+        CheckSoftkeysL();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgVodServiceListImpl::HandleOpenL
+// -----------------------------------------------------------------------------
+//
+void CVcxHgVodServiceListImpl::HandleOpenL( TInt /*aIndex*/ )
+    {
+    if( IsMoving() )
+        {
+        HandleCommandL( EVcxHgVodMovingSoftkeyOk );
+        }
+    else
+        {
+        iView.HandleCommandL( EVcxHgVodServiceOpenCmd );
+        }
+    }
+
+// ---------------------------------------------------------
+// 
+// ---------------------------------------------------------
+//
+void CVcxHgVodServiceListImpl::CheckSoftkeysL()
+    {
+    CEikButtonGroupContainer* cba = iView.ViewCba();
+
+    if( IsMoving() )
+        {
+        if( !iModelHandler->IsEmptyModel() &&
+            !iModelHandler->LastItemSelected() )
+            {
+            cba->SetCommandSetL( R_VCXHG_VOD_SERVICEVIEW_MOVING_SOFTKEYS );
+            }
+        else
+            {
+            cba->SetCommandSetL( R_VCXHG_VOD_SERVICEVIEW_MOVING_SOFTKEYS_OK_DISABLED );
+            }     
+        }
+    else
+        {
+        cba->SetCommandSetL( R_VCXHG_VOD_SOFTKEYS_OPTIONS_BACK__OPEN );
+        
+        if( !iModelHandler->IsEmptyModel() )
+            {
+            SetMskL( R_VCXHG_VOD_MSK_BUTTON_OPEN );
+            }
+        else
+            {
+            SetMskL( R_VCXHG_VOD_MSK_BUTTON_DO_NOTHING );
+            }
+        }
+    
+    cba->DrawNow();
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgVodServiceListImpl::FeedRemovable()
+// -----------------------------------------------------------------------------
+//
+TBool CVcxHgVodServiceListImpl::FeedRemovable( TInt aIndex ) 
+    {
+    if ( iModelHandler && 
+            iModelHandler->ServiceProvider() )
+        {
+        CVcxNsService* service = 
+            iModelHandler->ServiceProvider()->GetServiceData( aIndex );
+
+        if ( service
+               && ( service->Type() == CVcxNsService::EVcxNsEditable 
+                  || service->Type() == CVcxNsService::EVcxNsMainGroup )
+               && ( service->GetUpdateStatus() == CVcxNsService::ENotUpdating 
+                  || service->GetUpdateStatus() == CVcxNsService::EUpdateFailed ) ) 
+            {
+            return ETrue;
+            }
+        }
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgVodServiceListImpl::RemoveService
+// -----------------------------------------------------------------------------
+//
+void CVcxHgVodServiceListImpl::RemoveFeedL( TInt aIndex )
+    {
+    if ( iModelHandler && 
+            iModelHandler->ServiceProvider() )
+        {
+        CVcxNsService* service = 
+            iModelHandler->ServiceProvider()->GetServiceData( aIndex );
+    
+        if ( service )
+            {
+            //Get texts for the message query
+            HBufC* dlgText = StringLoader::LoadLC( R_VCXHG_REMOVE_FEED_QUERY_TXT, 
+                                                   service->GetName() );
+            
+            CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+            TInt result = dlg->ExecuteLD( R_VCXHG_VOD_REMOVE_FEED_QUERY, 
+                                         *dlgText ); 
+            
+            CleanupStack::PopAndDestroy( dlgText );
+            
+            if ( result == EAknSoftkeyYes || result == EAknSoftkeyOk )
+                {
+                iModelHandler->ServiceProvider()->RemoveServiceL( aIndex );
+                }
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgVodServiceListImpl::IsMoving
+// -----------------------------------------------------------------------------
+TBool CVcxHgVodServiceListImpl::IsMoving() const
+    {
+    return iMoving;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgVodServiceListImpl::StartMoveL
+// -----------------------------------------------------------------------------
+void CVcxHgVodServiceListImpl::StartMoveL()
+    {
+    if ( !iMoving )
+        {
+        iMoving = ETrue;
+
+        CheckSoftkeysL();
+
+        iSource = iModelHandler->GetSelected();
+
+        iModelHandler->MarkItem( iSource );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgVodServiceListImpl::StopMovingL
+// -----------------------------------------------------------------------------
+void CVcxHgVodServiceListImpl::StopMovingL( TBool aSave )
+    {
+    if ( !iMoving )
+        {
+        return;
+        }
+    
+    iMoving = EFalse;
+
+    CheckSoftkeysL();
+    
+    iModelHandler->UnmarkItem( iSource );
+
+    iTarget = iModelHandler->GetSelected();
+
+    if ( aSave &&
+         iTarget != iSource &&
+         iSource >= 0 && 
+         iTarget >= 0 && 
+         iSource < iModelHandler->ItemCount() && 
+         iTarget < iModelHandler->ItemCount() && 
+         ! iModelHandler->LastItemSelected() )
+        {
+        if( KErrNone == iModel.GetServiceProviderL()->MoveServiceL( iSource, iTarget ) )
+            {
+            iModelHandler->MoveItemL( iSource, iTarget );                
+            }
+        }
+    
+    if( !aSave )
+        {
+        iModelHandler->SetSelected( iSource ); 
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgVodServiceListImpl::GetHelpContext
+// -----------------------------------------------------------------------------
+//
+void CVcxHgVodServiceListImpl::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    const TUid KUidIptvMainApp = { 0x102750E2 };
+    
+    aContext.iMajor   = KUidIptvMainApp;
+    aContext.iContext = KIPTV_HLP_VODCAST_MAIN;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsVodServiceListImpl::UpdateTitlePaneL
+// -----------------------------------------------------------------------------
+//
+void CVcxHgVodServiceListImpl::UpdateTitlePaneL()
+    {
+    SetTitlePaneTextFromResourceL( R_VCXHG_VIDEO_FEEDS_TITLE );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsVodServiceListImpl::HasVideoServicesL
+// -----------------------------------------------------------------------------
+//
+TBool CVcxHgVodServiceListImpl::HasVideoServicesL()
+    {
+    TBool found (EFalse);
+    
+    if ( iModelHandler && 
+            iModelHandler->ServiceProvider() )
+        {
+        RPointerArray<CVcxNsService>& services = 
+		    iModelHandler->ServiceProvider()->GetSubscribedServicesL();
+        
+        for ( TInt i = 0; i < services.Count(); i++ )
+            {
+            if ( services[i]->Type() != CVcxNsService::EVcxNsVideoDirectory )
+                {
+                found = ETrue;
+                break;
+                }
+            }
+        }
+    
+    return found;
+    }