--- /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