diff -r 6b5204869ed5 -r 89c890c70182 psln/Src/PslnGeneralThemeView.cpp --- a/psln/Src/PslnGeneralThemeView.cpp Fri Jun 25 18:53:58 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,686 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: General theme view. -* -*/ - - - -// INCLUDE FILES - -// General - services -#include -#include -#include -#include -#include -#include -#include - -// Feature manager. -#include -#include - -// Power save mode setting -#include - -// Resources -#include -#include -#include - -// Psln specific. -#include "PslnGeneralThemeView.h" -#include "PslnConst.h" -#include "PslnUi.h" -#include "PslnModel.h" -#include "PslnFeatures.h" -#include "PslnDebug.h" - - -// Path to common personalization resources. This resource file is meant for -// shared resources between application and plugins. -_LIT( KPslnCommonResourceFileName, "z:pslncommon.rsc" ); - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// C++ constructor can NOT contain any code, that might leave. -// ----------------------------------------------------------------------------- -// -CPslnGeneralThemeView::CPslnGeneralThemeView() - : iResourceLoaderCommon( *iCoeEnv ) - { - } - -// ----------------------------------------------------------------------------- -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::ConstructL() - { - BaseConstructL( R_PSLN_GENERAL_VIEW ); - - iNaviPaneContext = iPslnUi->PslnTabGroup(); - - // Find the common resource file: - TParse* parse = new (ELeave) TParse; - CleanupStack::PushL( parse ); - parse->Set( KPslnCommonResourceFileName, &KDC_APP_RESOURCE_DIR, NULL ); - TFileName* fileName = new (ELeave) TFileName( parse->FullName() ); - CleanupStack::PushL( fileName ); - - // Open resource file: - iResourceLoaderCommon.OpenL( *fileName ); - - CleanupStack::PopAndDestroy( 2, parse ); // fileName, parse - - // Normally download item is the first one. - iDownloadItemIndex = 0; - - // If enchanted embedded links are not supported, then there shouldn't be - // 'Download' item at all. - if ( !PslnFeatures::IsEnhancedEmbeddedLinksSupported() ) - { - iDownloadItemIndex = KErrNotFound; - } - } - -// ----------------------------------------------------------------------------- -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CPslnGeneralThemeView* CPslnGeneralThemeView::NewLC() - { - CPslnGeneralThemeView* self = new (ELeave) CPslnGeneralThemeView(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// Destructor -CPslnGeneralThemeView::~CPslnGeneralThemeView() - { - iResourceLoaderCommon.Close(); - } - -// ----------------------------------------------------------------------------- -// CPslnGeneralThemeView::Id -// ----------------------------------------------------------------------------- -// -TUid CPslnGeneralThemeView::Id() const - { - return KPslnGeneralView; - } - -// ----------------------------------------------------------------------------- -// CPslnGeneralThemeView::HandleCommandL -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::HandleCommandL( TInt aCommand ) - { - // First set active item and active skin. - if ( iContainer ) - { - iCurrentItem = iContainer->CurrentItemIndex(); - } - TInt activeSkinIndex = iCurrentItem; - if ( iDownloadItemIndex != KErrNotFound ) - { - activeSkinIndex--; - } - switch ( aCommand ) - { - case EPslnCmdTransitionEffectsActivate: - { - TInt PsmMode = 0; - CPsmSettings *PsmSettings = CPsmSettings::NewL(); - PsmSettings->GetCurrentMode( PsmMode ); - delete PsmSettings; - - if ( PsmMode == EPsmsrvModePowerSave ) // PSM on, setting is protected - { - HBufC* buf = StringLoader::LoadLC( R_PSLN_QTN_PSM_INFONOTE ); - CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue ); - note->ExecuteLD( *buf ); - CleanupStack::PopAndDestroy( buf ); - return; - } - - TInt error = iModel->SetTransitionEffectsL( EPslnEnableAllEffects ); - - if ( error == KErrNone ) - { - if ( PslnFeatures::IsSupported( KPslnSupportAnimBackground ) && - iModel->IsSupportAnimBg( iModel->ActiveSkinIndex() ) ) - { - error = iModel->SetAnimBackground( EPslnEnableAllEffects ); - } - } - - if ( error == KErrNoMemory ) - { - HBufC* errorBuf = StringLoader::LoadLC( - R_PSLN_NOT_ENOUGH_MEMORY ); - // Display global note. - CAknGlobalNote* errorNote = CAknGlobalNote::NewLC(); - errorNote->ShowNoteL( EAknGlobalErrorNote, *errorBuf ); - CleanupStack::PopAndDestroy( 2, errorBuf ); // errorNote also - } - else - { - User::LeaveIfError( error ); - } - } - break; - case EPslnCmdTransitionEffectsDeactivate: - iModel->SetTransitionEffectsL( EPslnDisableAllEffects ); - //Deactive AnimBackground - iModel->SetAnimBackground( EPslnDisableAllEffects ); - break; - - case EPslnCmdAnimBackgroundActivate: - { - TInt error = iModel->SetAnimBackground( EPslnEnableAllEffects ); - if ( error == KErrNoMemory ) - { - HBufC* errorBuf = StringLoader::LoadLC( - R_PSLN_NOT_ENOUGH_MEMORY ); - - CAknGlobalNote* errorNote = CAknGlobalNote::NewLC(); - errorNote->ShowNoteL( EAknGlobalErrorNote, *errorBuf ); - CleanupStack::PopAndDestroy( 2, errorBuf ); // errorNote also - } - } - break; - case EPslnCmdAnimBackgroundDeactivate: - iModel->SetAnimBackground( EPslnDisableAllEffects ); - break; - case EPslnCmdEmptyCommand: // Fallthrough - case EPslnCmdAppActivate: // Fallthrough - { - if ( iContainer ) - { - if ( iPreviewMode ) - { - //stop preview - iToBeActivatedSkinIndex = activeSkinIndex; - static_cast(iContainer)-> - LockUpAndDownKeys( ETrue ); - static_cast(iContainer)-> - CancelThemePreviewL(); - - HandlePreviewStateChange( EFalse ); - } - - if ( iToBeActivatedSkinIndex != KErrNotFound ) - { - activeSkinIndex = iToBeActivatedSkinIndex; - iToBeActivatedSkinIndex = -1; - } - // Do nothing if active theme is selected. - if ( iModel->IsActiveSkinSelected( activeSkinIndex ) ) - { - HandlePreviewStateChange( ETrue ); - static_cast(iContainer)-> - StartThemePreviewL(); - break; - } - // Check is the theme corrupted. - if ( !iModel->IsValidForActivation( activeSkinIndex ) ) - { - HBufC* errorBuf = StringLoader::LoadLC( - R_PSLN_QTN_SKINS_ERROR_CORRUPTED ); - // Display global note. - CAknGlobalNote* errorNote = CAknGlobalNote::NewLC(); - errorNote->ShowNoteL( EAknGlobalErrorNote, *errorBuf ); - CleanupStack::PopAndDestroy( 2, errorBuf ); // errorNote also - return; - } - else - { - iModel->SetCurrentSelectedSkinIndex( activeSkinIndex ); - } - static_cast(iContainer)-> - LockUpAndDownKeys( EFalse ); - } - } - case EPslnCmdAppDownload: // Fallthrough - default: - iPslnUi->HandleCommandL( aCommand ); - break; - } - } - -// --------------------------------------------------------------------------- -// CPslnGeneralThemeView::UpdateSkinListItemsL() -// --------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::UpdateSkinListItemsL( TInt aCurrentIndex ) - { - PSLN_TRACE_DEBUG("CPslnGeneralThemeView::UpdateSkinListItemsL"); - if ( iContainer ) - { - if ( aCurrentIndex == KErrNotFound ) - { - aCurrentIndex = iContainer->CurrentItemIndex(); - } - static_cast(iContainer)-> - UpdateSkinListItemsL( aCurrentIndex ); - } - CheckMiddleSoftkeyLabelL(); - } - -// ----------------------------------------------------------------------------- -// CPslnGeneralThemeView::DoActivateL -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::DoActivateL( - const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ) - { - PSLN_TRACE_DEBUG("CPslnGeneralThemeView::DoActivateL"); - - 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( - KPslnGeneralView.iUid, - KPslnGeneralView.iUid ); - } - - // Update skin list. - // Set active index and update container. - TInt currentlySelected = iModel->ActiveSkinIndex(); - iModel->SetCurrentSelectedSkinIndex( currentlySelected ); - - CheckMiddleSoftkeyLabelL(); - - iPslnUi->ToggleScreenBlankerL( EFalse, EFalse ); - iToBeActivatedSkinIndex = -1; - } - -// ----------------------------------------------------------------------------- -// CPslnGeneralThemeView::DoDeactivate -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::DoDeactivate() - { - PSLN_TRACE_DEBUG("CPslnGeneralThemeView::DoDeactivate"); - RemoveCommandFromMSK(); - CPslnBaseView::DoDeactivate(); - } - -// ----------------------------------------------------------------------------- -// CPslnGeneralThemeView::DynInitMenuPaneL -// -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::DynInitMenuPaneL( - TInt aResourceId, CEikMenuPane* aMenuPane ) - { - PSLN_TRACE_DEBUG("CPslnGeneralThemeView::DynInitMenuPaneL"); - if( aResourceId == R_PSLN_GEN_VIEW_MENUPANE ) - { - if ( iContainer ) - { - iCurrentItem = iContainer->CurrentItemIndex(); - } - - TBool downloadExists = ETrue; - // Download theme is not selected, or it is not supported. - if ( iDownloadItemIndex == KErrNotFound ) - { - // Download item is not supported. - aMenuPane->SetItemDimmed( EPslnCmdAppDownload, ETrue ); - downloadExists = EFalse; - } - else if ( iCurrentItem != iDownloadItemIndex ) - { - // Download is supported, but is not selected. - aMenuPane->SetItemDimmed( EPslnCmdAppDownload, ETrue ); - downloadExists = ETrue; - } - else - { - aMenuPane->SetItemDimmed( EPslnCmdAppActivate, ETrue ); - } - - // Update current item index in model. - // Possibly reduce by one, since UI might show Download item. - TInt skinIndex = iCurrentItem - (TInt) downloadExists; - iModel->SetCurrentSelectedSkinIndex( skinIndex ); - - if( iModel->IsActiveSkinSelected() || - !iModel->IsValidForActivation( skinIndex ) ) - { - aMenuPane->SetItemDimmed( EPslnCmdAppActivate, ETrue ); - } - } - else if ( aResourceId == R_PSLN_TRANSITION_EFFECTS_MENU_PANE ) - { - if ( ( iCurrentItem == iDownloadItemIndex && - iDownloadItemIndex != KErrNotFound ) || - !FeatureManager::FeatureSupported(KFeatureIdUiTransitionEffects) ) - { - // Remove Transition Effects when Download is highlighted. - aMenuPane->SetItemDimmed( EPslnCmdTransitionEffectsSubMenuOpen, ETrue ); - } - } - else if ( aResourceId == R_PSLN_TRANSITION_EFFECTS_CASCADE_MENU ) - { - // Do nothing with cascade menu values, if Download is highlighted. - if ( iCurrentItem != iDownloadItemIndex || - iDownloadItemIndex != KErrNotFound ) - { - TInt transitionEffectsValue = iModel->GetTransitionEffectStateL(); - // Effects are enabled if value is NOT KMaxTInt. - if( transitionEffectsValue != KMaxTInt ) - { - aMenuPane->SetItemButtonState( - EPslnCmdTransitionEffectsActivate, - EEikMenuItemSymbolOn ); - aMenuPane->SetItemButtonState( - EPslnCmdTransitionEffectsDeactivate, - EEikMenuItemSymbolIndeterminate ); - } - else - { - aMenuPane->SetItemButtonState( - EPslnCmdTransitionEffectsActivate, - EEikMenuItemSymbolIndeterminate ); - aMenuPane->SetItemButtonState( - EPslnCmdTransitionEffectsDeactivate, - EEikMenuItemSymbolOn ); - } - } - } - else if ( aResourceId == R_PSLN_ANIM_BACKGROUND_MENU_PANE ) - { - TBool downloadExists = ETrue; - if ( iDownloadItemIndex == KErrNotFound ) - { - downloadExists = EFalse; - } - TInt skinIndex = iCurrentItem - (TInt) downloadExists; - - if ( ( iCurrentItem != iDownloadItemIndex && - iDownloadItemIndex != KErrNotFound )|| - !iModel->IsActiveSkinSelected() || - !PslnFeatures::IsSupported( KPslnSupportAnimBackground ) || - !iModel->IsSupportAnimBg(skinIndex)) - { - aMenuPane->SetItemDimmed( EPslnCmdAnimBackgroundSubMenuOpen, ETrue ); - } - } - else if ( aResourceId == R_PSLN_ANIM_BACKGROUND_CASCADE_MENU ) - { - // Do nothing with cascade menu values, if Download is highlighted. - if ( iCurrentItem != iDownloadItemIndex || - iDownloadItemIndex != KErrNotFound ) - { - TInt animEffectsValue = iModel->AnimBackgroundState(); - // Animation background are enabled if value is NOT KMaxTInt. - if( animEffectsValue != KMaxTInt ) - { - aMenuPane->SetItemButtonState( - EPslnCmdAnimBackgroundActivate, - EEikMenuItemSymbolOn ); - aMenuPane->SetItemButtonState( - EPslnCmdAnimBackgroundDeactivate, - EEikMenuItemSymbolIndeterminate ); - } - else - { - aMenuPane->SetItemButtonState( - EPslnCmdAnimBackgroundActivate, - EEikMenuItemSymbolIndeterminate ); - aMenuPane->SetItemButtonState( - EPslnCmdAnimBackgroundDeactivate, - EEikMenuItemSymbolOn ); - } - } - } - else - { - PSLN_TRACE_DEBUG("CPslnGeneralThemeView::DynInitMenuPaneL empty else"); - } - CPslnBaseView::DynInitMenuPaneL( aResourceId, aMenuPane ); - } - -// ----------------------------------------------------------------------------- -// Handle listbox selection. -// -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::HandleListBoxSelectionL() - { - PSLN_TRACE_DEBUG("CPslnGeneralThemeView::HandleListBoxSelectionL"); - if ( iContainer ) - { - iCurrentItem = iContainer->CurrentItemIndex(); - } - - if ( iCurrentItem == iDownloadItemIndex ) - { - HandleCommandL( EPslnCmdAppDownload ); - } - else - { - HandleCommandL( EPslnCmdAppActivate ); - } - } - -// ----------------------------------------------------------------------------- -// Handle listbox item highlight. -// -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::HandleListBoxItemHighlightL() - { - PSLN_TRACE_DEBUG("CPslnGeneralThemeView::HandleListBoxItemHighlightL"); - if ( iContainer ) - { - HandlePreviewStateChange( ETrue ); - static_cast(iContainer)->StartThemePreviewL(); - } - } - -// ----------------------------------------------------------------------------- -// Create container. -// -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::NewContainerL() - { - iContainer = new(ELeave) CPslnGeneralThemeContainer(); - iContainer->SetMiddleSoftkeyObserver( this ); - static_cast(iContainer)-> - SetThemePreviewObserver( this ); - } - -// ----------------------------------------------------------------------------- -// Sets view specific title pane text. -// -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::SetTitlePaneL( TInt& aResourceId ) - { - aResourceId = R_PSLN_TITLE_PANE_GENERAL; - } - -// ----------------------------------------------------------------------------- -// Checks is there a need to update the middle softkey label. -// This method should do nothing but MSK issues, since it is still called -// if the framework does not support MSK. -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::CheckMiddleSoftkeyLabelL() - { - PSLN_TRACE_DEBUG("CPslnGeneralThemeView::CheckMiddleSoftkeyLabelL"); - TInt currentItem = KErrNotFound; - if ( iContainer ) - { - currentItem = iContainer->CurrentItemIndex(); - } - - TInt activeSkinIndex = 0; - if ( iModel ) - { - activeSkinIndex = iModel->ActiveSkinIndex(); - } - if ( iDownloadItemIndex != KErrNotFound ) - { - // If download item is present, increment current index, - // so that skin index maps directly to listbox indexes. - activeSkinIndex++; - } - - // First remove any prevous commands. - RemoveCommandFromMSK(); - if ( currentItem == iDownloadItemIndex && currentItem != KErrNotFound ) - { - // Set middle softkey as Download. - CPslnBaseView::SetMiddleSoftKeyLabelL( - R_PSLN_MSK_SELECT, - EPslnCmdAppDownload ); - } - else if ( currentItem != activeSkinIndex ) - { - // Set middle softkey as Apply. - CPslnBaseView::SetMiddleSoftKeyLabelL( - R_PSLN_MSK_ACTIVATE, - EPslnCmdAppActivate ); - } - else - { - // Set middle softkey as dummy. - CPslnBaseView::SetMiddleSoftKeyLabelL( - R_PSLN_MSK_DUMMY, - EPslnCmdEmptyCommand ); - } - } - -// ----------------------------------------------------------------------------- -// Requests container to update skin data for D column. -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::UpdateSkinListItemsDColumnOnlyL() - { - PSLN_TRACE_DEBUG("CPslnGeneralThemeView::UpdateSkinListItemsL"); - if ( iContainer ) - { - static_cast(iContainer)-> - UpdateSkinListItemsDColumnOnlyL(); - } - CheckMiddleSoftkeyLabelL(); - } - -// ----------------------------------------------------------------------------- -// New theme preview state available. -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::HandlePreviewStateChange( const TBool& aPreviewMode ) - { - iPreviewMode = aPreviewMode; -// TRAPD( state, iModel->GetTransitionEffectStateL() ); -// if ( state != KMaxTInt ) -// { -// CAknView::StopDisplayingMenuBar(); -// } - if ( iDelayedSkinActivation && !iPreviewMode ) - { - TRAP_IGNORE( HandleCommandL( EPslnCmdAppActivate ) ); - iDelayedSkinActivation = EFalse; - } - } - - -// --------------------------------------------------------------------------- -// Restart Quick Preview -// --------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::RestartQuickPreviewL() - { - CPslnGeneralThemeContainer* container = static_cast(iContainer); - - container->RestartQuickPreviewL(); - } - -// ----------------------------------------------------------------------------- -// Remove local skin items. -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::RemoveLocalSkinItems() - { - // Remove locally skinned items. - MAknsSkinInstance* si = AknsUtils::SkinInstance(); - if ( si ) - { - si->SetChangeEventsEnabled( EFalse ); - si->RemoveLocalItemDefs(); - si->SetChangeEventsEnabled( ETrue ); - } - } - -// ----------------------------------------------------------------------------- -// Remove MSK command mappings. -// This method should do nothing but MSK issues. -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::RemoveCommandFromMSK() - { - PSLN_TRACE_DEBUG("CPslnGeneralThemeView::RemoveCommandFromMSK"); - CEikButtonGroupContainer* cbaGroup = Cba(); - // Check if model exists => indicates that UI is not exiting. - if ( cbaGroup && iPslnUi->Model() ) - { - cbaGroup->RemoveCommandFromStack( KPslnMSKControlID, EPslnCmdAppDownload ); - cbaGroup->RemoveCommandFromStack( KPslnMSKControlID, EPslnCmdAppActivate ); - } - } -// ----------------------------------------------------------------------------- -// Handle listbox stylus down event. -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::HandleListBoxStylusDown() - { - } - -// ----------------------------------------------------------------------------- -// Handle listbox stylus move event. -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::HandleListBoxStylusDrag() - { - } -// ----------------------------------------------------------------------------- -// Hightligt Default skin -// ----------------------------------------------------------------------------- -// -void CPslnGeneralThemeView::HightlightDefaultSkin() - { - CPslnGeneralThemeContainer* container = static_cast(iContainer); - TInt modifier = container->IsEmbeddedLinkVisible( ); - container->SetCurrentItemIndex( modifier ); - } -// End of File