videofeeds/vcnsscheduleview/src/CVcxNsScheduleSettingsDlTimeItem.cpp
changeset 0 96612d01cf9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/vcnsscheduleview/src/CVcxNsScheduleSettingsDlTimeItem.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,257 @@
+/*
+* 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 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:    Video on Demand setting item class for dowload time selection.*
+*/
+
+
+
+
+// INCLUDES
+#include <StringLoader.h>
+#include <vcxnsscheduleview.rsg>
+
+#include "vcxnsservicesettings.h"
+#include "CVcxNsScheduleSettingsDlTimeItem.h"
+#include "CVcxNsScheduleSettingsDlTimePage.h"
+
+// CONSTANTS
+
+// Needed for enum value iteration
+const TInt KScheduleDlTimesCount = 5;     
+const TInt KScheduleDlTimes[] = { 
+        ENight,
+        EMorning,
+        ENoon,
+        EAfternoon,
+        EEvening 
+        };
+
+const TInt KItemArrayGranularity = 5;
+
+// -----------------------------------------------------------------------------
+// CVcxNsScheduleSettingsDlTimeItem::CVcxNsScheduleSettingsDlTimeItem
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CVcxNsScheduleSettingsDlTimeItem::CVcxNsScheduleSettingsDlTimeItem( 
+        TInt aIdentifier, 
+        TUint& aDlTimes )
+    : CAknSettingItem( aIdentifier ),
+      iPopupArray( KItemArrayGranularity ),
+      iExtDlTimes( aDlTimes )
+    {
+   
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CVcxNsScheduleSettingsDlTimeItem::~CVcxNsScheduleSettingsDlTimeItem()
+    {
+    iPopupArray.ResetAndDestroy();
+    delete iSettingText;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsScheduleSettingsDlTimeItem::InitializePopupArrayL
+// -----------------------------------------------------------------------------
+//
+void CVcxNsScheduleSettingsDlTimeItem::InitializePopupArrayL()
+    {
+    iPopupArray.ResetAndDestroy();
+
+    RPointerArray<HBufC> stringArray;
+    CleanupClosePushL( stringArray );
+    stringArray.AppendL( StringLoader::LoadLC( R_VCXNS_SCHEDULE_NIGHT ) );
+    stringArray.AppendL( StringLoader::LoadLC( R_VCXNS_SCHEDULE_MORNING ) );
+    stringArray.AppendL( StringLoader::LoadLC( R_VCXNS_SCHEDULE_NOON ) );
+    stringArray.AppendL( StringLoader::LoadLC( R_VCXNS_SCHEDULE_AFTERNOON ) );
+    stringArray.AppendL( StringLoader::LoadLC( R_VCXNS_SCHEDULE_EVENING ) );
+
+    for ( TInt i=0; i<stringArray.Count(); i++ )
+        {
+        CSelectableItem* item = 
+            new (ELeave) CSelectableItem( *stringArray[i], EFalse );
+        CleanupStack::PushL( item );
+        item->ConstructL();
+        iPopupArray.AppendL( item ); // Ownership is transferred to popup array
+        CleanupStack::Pop( item );                 
+        }
+    
+    CleanupStack::PopAndDestroy( stringArray.Count() );  // Pop all strings
+    CleanupStack::PopAndDestroy( &stringArray );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsScheduleSettingsDlTimeItem::PopulatePopupArrayL
+// -----------------------------------------------------------------------------
+//
+void CVcxNsScheduleSettingsDlTimeItem::PopulatePopupArrayL()
+    {
+    TInt indexOfOnlyItem = 0;
+
+    iSelectedItems = 0;
+    for ( TInt i=0; i<iPopupArray.Count(); i++ )
+        {
+        if ( i<KScheduleDlTimesCount )
+            {
+            if ( iDownloadTimes & KScheduleDlTimes[i] )
+                {
+                iPopupArray[i]->SetSelectionStatus( ETrue );					
+                iSelectedItems++;
+                indexOfOnlyItem = i;
+                }
+            else
+                {
+                iPopupArray[i]->SetSelectionStatus( EFalse );   
+                }
+            }
+        }
+    if ( iSelectedItems == 1 )
+        {
+        delete iSettingText;
+        iSettingText = NULL;
+        iSettingText = 
+            HBufC::NewL( iPopupArray[indexOfOnlyItem]->ItemText().Length() );
+        *iSettingText = iPopupArray[indexOfOnlyItem]->ItemText();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsScheduleSettingsDlTimeItem::CompleteConstructionL
+// -----------------------------------------------------------------------------
+//	
+void CVcxNsScheduleSettingsDlTimeItem::CompleteConstructionL()
+    {
+    InitializePopupArrayL();
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsScheduleSettingsDlTimeItem::EditItemL
+// -----------------------------------------------------------------------------
+//	
+void CVcxNsScheduleSettingsDlTimeItem::EditItemL(TBool /*aCalledFromMenu*/)
+    {
+    CVcxNsScheduleSettingsDlTimePage* dlg;
+    TInt settingPageResId;
+      
+    // Note: Two separate setting page recources with different initial softkeys
+    // are needed because correct CBA for setting page must be set before showing
+    // the setting page.
+    
+    if ( iPopupArray.At(0)->SelectionStatus() )  // Check if first item is marked 
+        {
+        settingPageResId = R_VCXNS_SCHEDULE_SCHEDULESETTINGSVIEW_DOWNLOAD_TIME_PAGE_UNMARKED;
+        }
+    else
+        {
+        settingPageResId = R_VCXNS_SCHEDULE_SCHEDULESETTINGSVIEW_DOWNLOAD_TIME_PAGE_MARKED;     
+        }   
+    
+    dlg = new (ELeave) CVcxNsScheduleSettingsDlTimePage( 
+            settingPageResId,
+            &iPopupArray );
+              
+    SetSettingPage( dlg );
+    dlg->SetSettingPageObserver( this );
+    dlg->ExecuteLD();
+    SetSettingPage( NULL );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsScheduleSettingsDlTimeItem::SettingTextL
+// -----------------------------------------------------------------------------
+//  
+const TDesC& CVcxNsScheduleSettingsDlTimeItem::SettingTextL()
+    {
+    if ( iSelectedItems == 0 )
+        {
+        delete iSettingText;
+        iSettingText = NULL;
+        iSettingText = StringLoader::LoadL( R_VCXNS_SCHEDULE_NONE_SELECTED );
+    }
+    else if ( iSelectedItems > 1 )
+        {
+        delete iSettingText;
+        iSettingText = NULL;
+        iSettingText = StringLoader::LoadL( R_VCXNS_SCHEDULE_MULTIPLE_SELECTED, 
+                                            iSelectedItems );
+        }	
+    return *iSettingText;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsScheduleSettingsDlTimeItem::HandleSettingPageEventL
+// -----------------------------------------------------------------------------
+//  
+void CVcxNsScheduleSettingsDlTimeItem::HandleSettingPageEventL(
+    CAknSettingPage* aSettingPage,
+    TAknSettingPageEvent aEventType )
+    {
+    if ( aEventType == EEventSettingOked )	
+        {
+        SaveSelectionsL();
+        PopulatePopupArrayL();
+	    UpdateListBoxTextL();
+        }
+    else if ( aEventType == EEventSettingChanged )
+        {
+        static_cast<CVcxNsScheduleSettingsDlTimePage*>(aSettingPage)->SetCbaL();
+        }
+    else if ( aEventType == EEventSettingCancelled )
+        {
+        PopulatePopupArrayL(); // Restore old settings
+        }
+
+    CAknSettingItem::HandleSettingPageEventL( aSettingPage, aEventType );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsScheduleSettingsDlTimeItem::SaveSelectionsL
+// -----------------------------------------------------------------------------
+//  
+void CVcxNsScheduleSettingsDlTimeItem::SaveSelectionsL()
+    {
+    iDownloadTimes = 0;
+    for ( TInt i=0; i<KScheduleDlTimesCount; i++ )
+        {
+        if ( iPopupArray.Count() > i && iPopupArray[i]->SelectionStatus() )
+            {
+            iDownloadTimes = iDownloadTimes | KScheduleDlTimes[i];
+            }	
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsScheduleSettingsDlTimeItem::LoadL
+// -----------------------------------------------------------------------------
+//  
+void CVcxNsScheduleSettingsDlTimeItem::LoadL()
+    {
+    iDownloadTimes = iExtDlTimes;
+    PopulatePopupArrayL();
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxNsScheduleSettingsDlTimeItem::StoreL
+// -----------------------------------------------------------------------------
+//     
+void CVcxNsScheduleSettingsDlTimeItem::StoreL()
+    {
+    iExtDlTimes = iDownloadTimes;
+    }
+    
+// End of File