diff -r 000000000000 -r 2f259fa3e83a psln/pslnslidesetdialog/src/pslnslidesetwallpaperdialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/psln/pslnslidesetdialog/src/pslnslidesetwallpaperdialog.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,318 @@ +/* +* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: Wallpaper slide set setting dialog. +* +*/ + + +// General +#include +#include +#include + +// Central repository. +#include +#include +#include + +// From AVKON +#include +#include +#include +#include + +// Psln Slide set specific. +#include "pslnslidesetwallpaperdialog.h" +#include "pslnslidesetdialog.hrh" +#include "pslnslidesetmodel.h" +#include "pslnslidesetconst.h" + +// Resources +#include + +const TInt KPslnSsSettingsItemArray = 6; +const TInt KPslnSsSlideSetType = 2; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CPslnWallpaperSlidesetDialog::CPslnWallpaperSlidesetDialog() + { + } + +// ----------------------------------------------------------------------------- +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CPslnWallpaperSlidesetDialog::ConstructL() + { +#ifndef RD_SLIDESHOW_WALLPAPER + User::Leave( KErrNotSupported ); +#endif // RD_SLIDESHOW_WALLPAPER + BaseConstructL( + GetDialogFlag( CPslnSlidesetDialogInterface::EPslnDialogType ) ); + + iSlideSetTypeItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_PSLN_SLIDESET_TYPE_WP_SETTING_PAGE_LBX ); + + // Add each line separately, since it needs language-dependant conversion. + iIntervalItems = new( ELeave ) CDesCArrayFlat( KPslnSsSettingsItemArray ); + AppendIntervalItemL( R_PSLN_SLIDESET_INTERVAL_1_MINUTE ); + AppendIntervalItemL( R_PSLN_SLIDESET_INTERVAL_10_MINUTE ); + AppendIntervalItemL( R_PSLN_SLIDESET_INTERVAL_30_MINUTE ); + AppendIntervalItemL( R_PSLN_SLIDESET_INTERVAL_1_HOUR ); + AppendIntervalItemL( R_PSLN_SLIDESET_INTERVAL_1_DAY ); + } + +// ----------------------------------------------------------------------------- +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPslnWallpaperSlidesetDialog* CPslnWallpaperSlidesetDialog::NewL() + { + CPslnWallpaperSlidesetDialog* self = NewLC(); + CleanupStack::Pop(); // Self + return self; + } + +// ----------------------------------------------------------------------------- +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPslnWallpaperSlidesetDialog* CPslnWallpaperSlidesetDialog::NewLC() + { + CPslnWallpaperSlidesetDialog* self = + new ( ELeave ) CPslnWallpaperSlidesetDialog(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// Destructor +CPslnWallpaperSlidesetDialog::~CPslnWallpaperSlidesetDialog() + { + // base class destroys iSlideSetTypeItems. + delete iIntervalItems; + } + +// ----------------------------------------------------------------------------- +// Executes dialog. +// ----------------------------------------------------------------------------- +// +TInt CPslnWallpaperSlidesetDialog::ExecuteDialogLD() + { + return CAknDialog::ExecuteLD( R_PSLN_SETTINGS_DIALOG ); + } + +// ----------------------------------------------------------------------------- +// Configures dialog. +// ----------------------------------------------------------------------------- +// +void CPslnWallpaperSlidesetDialog::SetDialogFlag( + const TInt aFlag, const TInt aValue ) + { + switch( aFlag ) + { + case CPslnSlidesetDialogInterface::EPslnDialogType: + // Cannot be changed. + break; + case CPslnSlidesetDialogInterface::EPslnLaunchMode: + if ( aValue == CPslnSlidesetDialogInterface::EPslnNormal || + aValue == CPslnSlidesetDialogInterface::EPslnConfigureOnly ) + { + iLaunchMode = aValue; + } + break; + default: + break; + } + } + +// ----------------------------------------------------------------------------- +// Queries for dialog parameters. +// ----------------------------------------------------------------------------- +// +TInt CPslnWallpaperSlidesetDialog::GetDialogFlag( const TInt aFlag ) + { + TInt flagValue = KErrNotFound; + switch( aFlag ) + { + case CPslnSlidesetDialogInterface::EPslnDialogType: + flagValue = EPslnWallpaperDialog; + break; + case CPslnSlidesetDialogInterface::EPslnLaunchMode: + flagValue = iLaunchMode; + break; + case CPslnSlidesetDialogInterface::EPslnConfigurability: + TRAP_IGNORE( flagValue = DeduceActivationModeL() ); + break; + default: + break; + } + return flagValue; + } + +// ----------------------------------------------------------------------------- +// Layouts dialog before showing it. +// ----------------------------------------------------------------------------- +// +void CPslnWallpaperSlidesetDialog::PreLayoutDynInitL() + { + // Set title pane text. + SetTitlePaneL( R_PSLN_SLIDESET_WALLPAPER_DIALOG_TITLE ); + // Set middle softkey as Change. + CPslnSlidesetDialog::SetMiddleSoftKeyLabelL( + R_PSLN_MSK_CHANGE, + EPslnCmdAppSetWallpaper ); + CPslnSlidesetDialog::PreLayoutDynInitL(); + } + +// ----------------------------------------------------------------------------- +// Process command. +// ----------------------------------------------------------------------------- +// +void CPslnWallpaperSlidesetDialog::ProcessCommandL( TInt aCommandId ) + { + CPslnSlidesetDialog::ProcessCommandL( aCommandId ); + } + +// ----------------------------------------------------------------------------- +// Reimplements CAknDialog::OkToExitL. +// Possibly stores wallpaper type to cenrep. +// ----------------------------------------------------------------------------- +// +TBool CPslnWallpaperSlidesetDialog::OkToExitL( TInt aButtonId ) + { + if ( CPslnSlidesetDialog::IsFeatureSupported( EPslnSlideSetFeatureRandom ) ) + { + CRepository* repository = CRepository::NewL( KCRUidThemes ); + TInt slideSetType = KErrNotFound; + repository->Get( KThemesWallpaperSlideSetType, slideSetType ); + delete repository; + // If Random is selected, then set slide type wallpaper active. + if ( ( slideSetType == KPslnSlideSetRandomIndex ) && + ( iLaunchMode == CPslnSlidesetDialogInterface::EPslnNormal ) ) + { + CRepository* repository2 = + CRepository::NewL( KCRUidPersonalisation ); + repository2->Set( + KPslnWallpaperType, + KPslnSsSlideSetType ); + delete repository2; + } + } + return CPslnSlidesetDialog::OkToExitL( aButtonId ); + } + + +// ----------------------------------------------------------------------------- +// Adds setting list items to listbox. +// ----------------------------------------------------------------------------- +// +void CPslnWallpaperSlidesetDialog::CreateListBoxItemsL() + { + iItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_PSLN_WALLPAPER_SLIDE_SETTING_LBX_ITEMS ); + CPslnSlidesetDialog::MakeItemL( EPslnSlideSetImagesId ); + CPslnSlidesetDialog::MakeItemL( EPslnSlideSetDurationId ); // regard as interval + } + +// --------------------------------------------------------------------------- +// Gets help context for Help application. +// --------------------------------------------------------------------------- +// +void CPslnWallpaperSlidesetDialog::GetHelpContext( + TCoeHelpContext& aContext ) const + { + aContext.iMajor = KUidPsln; + aContext.iContext = KSCREENSAVER_HLP_WP_SETTINGS; + } + +// ----------------------------------------------------------------------------- +// Show slide set image interval peridod setting page. +// ----------------------------------------------------------------------------- +// +void CPslnWallpaperSlidesetDialog::ShowIntervalListL() + { + // Retrieve title txt. + TInt titleResourceID = R_PSLN_INTERVAL_SLIDE_PAGE_TITLE; + HBufC* titleText = StringLoader::LoadLC( titleResourceID ); + + // Retrieve current setting page value. + TInt currentValue = iModel->GetSlideSetInterval(); + + // Create & show the setting page. + CAknRadioButtonSettingPage* dlg = + new( ELeave ) CAknRadioButtonSettingPage( + titleText, + EAknSettingPageNoOrdinalDisplayed, + EAknCtSettingPage, + 0, + R_PSLN_IMAGE_SELECTION_SETTING_PAGE, + currentValue, + iIntervalItems ); + dlg->SetSettingId( EPslnSlideSetIntervalId ); + dlg->SetSettingPageObserver( this ); + dlg->ExecuteLD( CAknSettingPage::EUpdateWhenAccepted ); + // Base class stores new value to CenRep. + + CleanupStack::PopAndDestroy( titleText ); + } + +// ----------------------------------------------------------------------------- +// Deduce if the slide set can be activated without showing the dialog. +// ----------------------------------------------------------------------------- +// +TInt CPslnWallpaperSlidesetDialog::DeduceActivationModeL() + { + TInt retValue = CPslnSlidesetDialogInterface::EPslnNeedsToBeConfigured; + if ( CPslnSlidesetDialog::IsFeatureSupported( EPslnSlideSetFeatureRandom ) ) + { + CRepository* repository = CRepository::NewL( KCRUidThemes ); + TInt slideSetType = KErrNotFound; + repository->Get( KThemesWallpaperSlideSetType, slideSetType ); + delete repository; + // If selection type is set to random, then direct activation + // is possible. + if ( slideSetType == KPslnSlideSetRandomIndex ) + { + return CPslnSlidesetDialogInterface::EPslnDirectActivationPossible; + } + } + // If slide set image list file exists, direct activation is allowed. + if ( iModel->SlideSetImageFileExistsL( EAknsSrvInifileSSWP ) && + iModel->GetImageCountInSlideSetL( EAknsSrvInifileSSWP ) > 1 ) + { + retValue = CPslnSlidesetDialogInterface::EPslnDirectActivationPossible; + } + return retValue; + } + +// ----------------------------------------------------------------------------- +// Append one line to interval setting list - make language dependant conversion. +// ----------------------------------------------------------------------------- +// +void CPslnWallpaperSlidesetDialog::AppendIntervalItemL( TInt aResourceText ) + { + HBufC* text = iCoeEnv->AllocReadResourceLC( aResourceText ); + TPtr ptr = text->Des(); + AknTextUtils::LanguageSpecificNumberConversion( ptr ); + iIntervalItems->AppendL( ptr ); + CleanupStack::PopAndDestroy(); // textFromResourceFile + } + +// End of File