diff -r 000000000000 -r 96612d01cf9f videofeeds/vcnsscheduleview/src/CVcxNsScheduleSettingsDlTimeItem.cpp --- /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 +#include + +#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 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; iConstructL(); + 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; iSetSelectionStatus( 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(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 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