--- /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 <e32std.h>
+#include <StringLoader.h>
+#include <csxhelp/skins.hlp.hrh>
+
+// Central repository.
+#include <centralrepository.h>
+#include <AknSkinsInternalCRKeys.h>
+#include <pslninternalcrkeys.h>
+
+// From AVKON
+#include <avkon.hrh>
+#include <aknappui.h>
+#include <aknradiobuttonsettingpage.h>
+#include <AknsSrvClient.h>
+
+// Psln Slide set specific.
+#include "pslnslidesetwallpaperdialog.h"
+#include "pslnslidesetdialog.hrh"
+#include "pslnslidesetmodel.h"
+#include "pslnslidesetconst.h"
+
+// Resources
+#include <pslnslidesetdialogrsc.rsg>
+
+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