--- a/psln/Src/PslnWallpaperView.cpp Fri Jun 25 18:53:58 2010 +0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,565 +0,0 @@
-/*
-* Copyright (c) 2005-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 view.
-*
-*/
-
-
-// INCLUDE FILES
-// Psln specific
-#include <psln.rsg>
-#include "PslnModel.h"
-#include "PslnWallpaperView.h"
-#include "PslnWallpaperContainer.h"
-#include "PslnConst.h"
-#include "PslnUi.h"
-#include "PslnDRMImplementation.h"
-#include "PslnDebug.h"
-
-// General services
-#include <MGFetch.h>
-#include <AknSkinsInternalCRKeys.h>
-#include <centralrepository.h>
-#include <StringLoader.h>
-#include <AknGlobalNote.h>
-
-#ifdef RD_SLIDESHOW_WALLPAPER
-// Slide set wallpaper.
-#include <pslnslidesetwallpaperdialog.h>
-#include <mmf/common/mmfcontrollerpluginresolver.h>
-#include <ecom/resolver.h>
-#endif // RD_SLIDESHOW_WALLPAPER
-
-// CONSTANTS
-// Granularity for wallpaper items.
-const TInt KPslnFileArrayGranularity = 4;
-// Index of selected file item from MGFetch.
-const TInt KPslnSelectedFile = 0;
-
-// Index of current wallpaper item selection.
-enum TPslnWallpaperSelection
- {
- EPslnNoneWP = 0,
- EPslnUserDefinedWP,
- EPslnSlideSetWP
- };
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CPslnWallpaperView::CPslnWallpaperView()
- {
- }
-
-// -----------------------------------------------------------------------------
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CPslnWallpaperView::ConstructL()
- {
- PSLN_TRACE_DEBUG("CPslnWallpaperView::ConstructL BEGIN");
- BaseConstructL( R_PSLN_WALLPAPER_VIEW );
-
- iNaviPaneContext = iPslnUi->PslnTabGroup();
-
- iWallpaperRepository = CRepository::NewL( KCRUidPersonalisation );
- iWallpaperNotifier = CCenRepNotifyHandler::NewL(
- *this,
- *iWallpaperRepository,
- CCenRepNotifyHandler::EIntKey,
- KPslnWallpaperType );
- iWpDlgRunnig = EFalse;
- PSLN_TRACE_DEBUG("CPslnWallpaperView::ConstructL END");
- }
-
-// -----------------------------------------------------------------------------
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CPslnWallpaperView* CPslnWallpaperView::NewLC()
- {
- CPslnWallpaperView* self = new (ELeave) CPslnWallpaperView();
- CleanupStack::PushL( self );
- self->ConstructL();
- return self;
- }
-
-// Destructor
-CPslnWallpaperView::~CPslnWallpaperView()
- {
- if ( iWallpaperNotifier )
- {
- iWallpaperNotifier->StopListening();
- }
- delete iWallpaperNotifier;
- delete iWallpaperRepository;
- }
-
-// -----------------------------------------------------------------------------
-// CPslnWallpaperView::Id
-// -----------------------------------------------------------------------------
-//
-TUid CPslnWallpaperView::Id() const
- {
- return KPslnWallpaperView;
- }
-
-// -----------------------------------------------------------------------------
-// CPslnWallpaperView::HandleCommandL
-// -----------------------------------------------------------------------------
-//
-void CPslnWallpaperView::HandleCommandL( TInt aCommand )
- {
- if ( aCommand == EAknSoftkeyOk ||
- aCommand == EPslnCmdAppSetWallpaper ||
- aCommand == EPslnCmdAppChangeWallpaper ||
- aCommand == EPslnCmdWallpaperConfigure )
- {
- if ( iContainer )
- {
- TInt setBgImage = KErrNone;
- // If User specified is selected.
- switch ( iContainer->CurrentItemIndex() )
- {
- case EPslnUserDefinedWP:
- {
- if ( iWpDlgRunnig )
- {
- return;
- }
- if ( !ShowBackgroundImageListL() )
- {
- return;
- }
- iModel->SetCurrentPropertyTypeL(
- KPslnBgIdleSettingId,
- EPslnUserDefinedWP );
- }
- break;
- case EPslnNoneWP:
- if ( iActiveWallpaper != EPslnNoneWP )
- {
- iModel->SetCurrentPropertyTypeL(
- KPslnBgIdleSettingId,
- EPslnNoneWP );
- setBgImage = iModel->SetBackgroundImagePath( KNullDesC );
- if ( setBgImage != KErrNone )
- {
- iPslnUi->HandleImageErrorsL( setBgImage );
- }
- }
- else
- {
- // No need to do anything.
- return;
- }
- break;
- case EPslnSlideSetWP:
- {
-#ifdef RD_SLIDESHOW_WALLPAPER
- if ( iWpDlgRunnig )
- {
- //Try not run slideset dialog more than once.
- return;
- }
- RImplInfoPtrArray array;
- const TUid wallpaperUid = { 0x102823AD };
- const TEComResolverParams emptyParams;
- REComSession::ListImplementationsL(
- wallpaperUid,
- emptyParams,
- KRomOnlyResolverUid,
- array );
- CleanupResetAndDestroyPushL( array );
-
- CImplementationInformation* info = array[ KPslnWallpaperSlideSettingDialog ];
- TUid implUid = info->ImplementationUid();
-
- CPslnSlidesetDialogInterface* plugin =
- CPslnSlidesetDialogInterface::NewL( implUid );
- if ( aCommand == EPslnCmdWallpaperConfigure )
- {
- plugin->SetDialogFlag(
- CPslnSlidesetDialogInterface::EPslnLaunchMode,
- CPslnSlidesetDialogInterface::EPslnConfigureOnly );
- }
- if ( aCommand == EPslnCmdAppSetWallpaper &&
- plugin->GetDialogFlag(
- CPslnSlidesetDialogInterface::EPslnConfigurability ) ==
- CPslnSlidesetDialogInterface::EPslnDirectActivationPossible )
- {
- delete plugin; // just delete the plugin as it is not needed.
- iWallpaperRepository->Set( KPslnWallpaperType, EPslnSlideSetWP );
- UpdateCurrentItem();
- }
- else
- {
- iWpDlgRunnig = ETrue;
- plugin->ExecuteDialogLD();
- iWpDlgRunnig = EFalse;
- }
-
- plugin = NULL;
- CleanupStack::PopAndDestroy(); // array
-
- // Plugin stores wallpaper type, if it deems that the user selection is valid.
-
-#endif // RD_SLIDESHOW_WALLPAPER
- }
- break;
- default:
- break;
- }
-
- // Update container.
- static_cast<CPslnWallpaperContainer*>
- (iContainer)->UpdateListBoxL();
- CheckMiddleSoftkeyLabelL();
- }
- }
- else
- {
- if ( ( aCommand == EAknSoftkeyBack ) && iWpDlgRunnig )
- {
- return;
- }
- iPslnUi->HandleCommandL( aCommand );
- }
- }
-
-// -----------------------------------------------------------------------------
-// When this method is called, view checks based on highlight focus, if the MSK
-// label is correct.
-// -----------------------------------------------------------------------------
-//
-void CPslnWallpaperView::CheckMiddleSoftkeyLabelL()
- {
- // First remove any prevous commands.
- RemoveCommandFromMSK();
-
- if ( iContainer )
- {
- iCurrentItem = iContainer->CurrentItemIndex();
- }
-
- // Set MSK label.
- if ( iActiveWallpaper != iCurrentItem )
- {
- // Set middle softkey as Apply, if:
- // a) 'None' is selected
- // b) highlight is on inactive selection
- CPslnBaseView::SetMiddleSoftKeyLabelL(
- R_PSLN_MSK_ACTIVATE,
- EPslnCmdAppSetWallpaper );
- }
- else if ( iActiveWallpaper == 0 )
- {
- CPslnBaseView::SetMiddleSoftKeyLabelL(
- R_PSLN_MSK_DUMMY,
- EPslnCmdEmptyCommand );
- }
- else
- {
- // Otherwise set middle softkey as Change.
- CPslnBaseView::SetMiddleSoftKeyLabelL(
- R_PSLN_MSK_CHANGE,
- EPslnCmdAppChangeWallpaper );
- }
- }
-
-// -----------------------------------------------------------------------------
-// If wallpaper image has changed, update container.
-// -----------------------------------------------------------------------------
-//
-void CPslnWallpaperView::HandleNotifyInt( TUint32 aId, TInt /*aNewValue*/ )
- {
- if ( ( aId == KPslnWallpaperType ) && iContainer )
- {
- TInt previousValue = UpdateCurrentItem();
- if ( iActiveWallpaper != previousValue )
- {
- UpdateContainer();
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// If the whole repository changes, update container.
-// -----------------------------------------------------------------------------
-//
-void CPslnWallpaperView::HandleNotifyGeneric( TUint32 aId )
- {
- if ( ( aId == NCentralRepositoryConstants::KInvalidNotificationId ||
- aId == KPslnWallpaperType ) && iContainer )
- {
- TInt previousValue = UpdateCurrentItem();
- if ( iActiveWallpaper != previousValue )
- {
- UpdateContainer();
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// In case of error, try to re-start listening.
-// -----------------------------------------------------------------------------
-//
-void CPslnWallpaperView::HandleNotifyError(
- TUint32 /*aId*/,
- TInt aError,
- CCenRepNotifyHandler* aHandler )
- {
- if ( ( aError != KErrNone ) && aHandler )
- {
- TRAP_IGNORE( aHandler->StartListeningL() );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CPslnWallpaperView::DoActivateL
-// -----------------------------------------------------------------------------
-//
-void CPslnWallpaperView::DoActivateL(
- const TVwsViewId& aPrevViewId,
- TUid aCustomMessageId,
- const TDesC8& aCustomMessage )
- {
- PSLN_TRACE_DEBUG("CPslnWallpaperView::DoActivateL START");
- CPslnBaseView::DoActivateL(
- aPrevViewId,
- aCustomMessageId,
- aCustomMessage );
-
- // If view is directly activated (not through main view), update
- // tab group (and main view's active folder). The static views
- // have same UID as their tab index.
- if ( aPrevViewId.iAppUid != KUidPsln )
- {
- iPslnUi->UpdateTabIndex(
- KPslnWallpaperView.iUid,
- KPslnWallpaperView.iUid );
- }
-
- if ( iContainer )
- {
- UpdateCurrentItem();
- // Set highlight to selected item.
- iContainer->SetCurrentItemIndexAndDraw( iActiveWallpaper );
- }
- if ( iWallpaperNotifier )
- {
- iWallpaperNotifier->StartListeningL();
- }
- CheckMiddleSoftkeyLabelL();
- iWpDlgRunnig = EFalse;
- PSLN_TRACE_DEBUG("CPslnWallpaperView::DoActivateL END");
- }
-
-// -----------------------------------------------------------------------------
-// CPslnWallpaperView::DynInitMenuPaneL
-// -----------------------------------------------------------------------------
-//
-void CPslnWallpaperView::DynInitMenuPaneL(
- TInt aResourceId, CEikMenuPane* aMenuPane )
- {
- if ( aResourceId == R_PSLN_WALLPAPER_MENUPANE )
- {
- if ( iContainer )
- {
- iCurrentItem = iContainer->CurrentItemIndex();
- }
- // Remove change if none is selected, or highlight is not in active item.
- if ( iActiveWallpaper != iCurrentItem )
- {
- aMenuPane->SetItemDimmed( EPslnCmdAppChangeWallpaper, ETrue );
- }
- else if ( iActiveWallpaper == 0 )
- {
- aMenuPane->SetItemDimmed( EPslnCmdAppSetWallpaper, ETrue );
- aMenuPane->SetItemDimmed( EPslnCmdAppChangeWallpaper, ETrue );
- }
- else
- {
- aMenuPane->SetItemDimmed( EPslnCmdAppSetWallpaper, ETrue );
- }
-
-#ifdef RD_SLIDESHOW_WALLPAPER
-
- if ( iCurrentItem != EPslnSlideSetWP )
- {
- aMenuPane->SetItemDimmed( EPslnCmdWallpaperConfigure, ETrue );
- }
-#endif // RD_SLIDESET_WALLPAPER
- }
- CPslnBaseView::DynInitMenuPaneL( aResourceId, aMenuPane );
- }
-
-// -----------------------------------------------------------------------------
-// CPslnWallpaperView::HandleListBoxSelectionL
-// -----------------------------------------------------------------------------
-//
-void CPslnWallpaperView::HandleListBoxSelectionL()
- {
- if ( iContainer )
- {
- iCurrentItem = iContainer->CurrentItemIndex();
- }
- HandleCommandL( EAknSoftkeyOk );
- }
-
-// -----------------------------------------------------------------------------
-// CPslnWallpaperView::HandleListBoxItemHighlightL
-// -----------------------------------------------------------------------------
-//
-void CPslnWallpaperView::HandleListBoxItemHighlightL()
- {
- }
-
-// -----------------------------------------------------------------------------
-// CPslnWallpaperView::NewContainerL
-// -----------------------------------------------------------------------------
-//
-void CPslnWallpaperView::NewContainerL()
- {
- iContainer = new(ELeave) CPslnWallpaperContainer();
- iContainer->SetMiddleSoftkeyObserver( this );
- }
-
-// -----------------------------------------------------------------------------
-// CPslnWallpaperView::SetTitlePaneL
-// -----------------------------------------------------------------------------
-//
-void CPslnWallpaperView::SetTitlePaneL( TInt& aResourceId )
- {
-#ifdef RD_CONTROL_PANEL
- aResourceId = R_PSLN_TITLE_PANE_WALLPAPER;
-#endif //RD_CONTROL_PANEL
- }
-
-// ---------------------------------------------------------------------------
-// CPslnWallpaperView::CbaExitEnabled
-// ---------------------------------------------------------------------------
-//
-TInt CPslnWallpaperView::CbaResourceId( const TVwsViewId& /*aPrevViewId*/,TUid aCustomMessageId )
- {
- return aCustomMessageId.iUid ?
- R_AVKON_SOFTKEYS_OPTIONS_EXIT : R_AVKON_SOFTKEYS_OPTIONS_BACK;
- }
-
-// ---------------------------------------------------------------------------
-// CPslnWallpaperView::ShowBackgroundImageListL
-// ---------------------------------------------------------------------------
-//
-TBool CPslnWallpaperView::ShowBackgroundImageListL()
- {
- PSLN_TRACE_DEBUG("CPslnWallpaperView::ShowBackgroundImageListL");
- TBool retVal = EFalse;
- CDesCArrayFlat* files =
- new (ELeave) CDesCArrayFlat( KPslnFileArrayGranularity );
- CleanupStack::PushL( files );
- CPslnDRMImplementation* verifier = NULL;
- verifier = CPslnDRMImplementation::NewL();
- CleanupStack::PushL( verifier );
-
- PSLN_TRACE_DEBUG("CPslnWallpaperView::ShowBackgroundImageListL MGFetch");
- iWpDlgRunnig = ETrue;
- TBool selected = EFalse;
- TRAPD( err,selected = MGFetch::RunL( *files, EImageFile, EFalse, verifier ) );
- iWpDlgRunnig = EFalse;
- User::LeaveIfError( err );
- if ( !verifier )
- {
- PSLN_TRACE_DEBUG("CPslnWallpaperView::ShowBackgroundImageListL DRM Error");
- }
-
- else if( selected && ( files->MdcaCount() > 0 ) )
- {
- PSLN_TRACE_DEBUG("CPslnWallpaperView::ShowBackgroundImageListL Fetch successful");
- TInt setBgImage = iModel->SetBackgroundImagePath(
- files->MdcaPoint( KPslnSelectedFile ) );
- if ( setBgImage != KErrNone )
- {
- if ( setBgImage == KLeaveExit )
- {
- User::Leave( KLeaveExit );
- }
- else
- {
- iPslnUi->HandleImageErrorsL( setBgImage );
- }
- }
- else
- {
- // Image selected, no DRM issues.
- retVal = ETrue;
- }
- CheckMiddleSoftkeyLabelL();
- }
- else
- {
- PSLN_TRACE_DEBUG("CPslnWallpaperView::ShowBackgroundImageListL Fetch cancelled");
- }
-
- CleanupStack::PopAndDestroy( 2, files ); // verifier, files
-
- PSLN_TRACE_DEBUG("CPslnWallpaperView::ShowBackgroundImageListL METHOD COMPLETED");
- return retVal;
- }
-
-// ---------------------------------------------------------------------------
-// Updates the container.
-// ---------------------------------------------------------------------------
-//
-void CPslnWallpaperView::UpdateContainer()
- {
- PSLN_TRACE_DEBUG("CPslnWallpaperView::UpdateContainer START");
- if ( iContainer )
- {
- TRAP_IGNORE( static_cast<CPslnWallpaperContainer*>
- (iContainer)->UpdateListBoxL();
- CheckMiddleSoftkeyLabelL();
- );
- }
- PSLN_TRACE_DEBUG("CPslnWallpaperView::UpdateContainer END");
- }
-
-// ---------------------------------------------------------------------------
-// Removes unnecessary commands from Middle softkey.
-// ---------------------------------------------------------------------------
-//
-void CPslnWallpaperView::RemoveCommandFromMSK()
- {
- CEikButtonGroupContainer* cbaGroup = Cba();
- if ( cbaGroup )
- {
- cbaGroup->RemoveCommandFromStack( KPslnMSKControlID, EPslnCmdAppSetWallpaper );
- cbaGroup->RemoveCommandFromStack( KPslnMSKControlID, EPslnCmdAppChangeWallpaper );
- }
- }
-
-// ---------------------------------------------------------------------------
-// Updates current item.
-// ---------------------------------------------------------------------------
-//
-TInt CPslnWallpaperView::UpdateCurrentItem()
- {
- TInt previousValue = iActiveWallpaper;
- iActiveWallpaper = iModel->CurrentPropertyIndex( KPslnBgIdleSettingId );
- return previousValue;
- }
-
-// End of File