--- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimPluginContainer.cpp Mon Jan 18 20:19:52 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,614 +0,0 @@
-/*
-* Copyright (c) 2005 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:
-* Provides ScreenSaverAnimPlugin edit list view container methods.
-*
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include <aknlists.h>
-#include <akntitle.h>
-#include <aknslider.h>
-#include <aknsettingpage.h>
-#include <aknslidersettingpage.h>
-#include <CFLDFileListContainer.h>
-#include <MGFetch.h>
-#include <DRMHelper.h>
-#include <screensaveranimplugin.rsg>
-#include <barsread.h>
-#include <centralrepository.h>
-
-#include "ScreenSaverAnimPlugin.h"
-#include "ScreenSaverAnimPluginConst.h"
-#include "ScreenSaverAnimPluginHelper.h"
-#include "ScreenSaverAnimPluginContainer.h"
-#include "ScreenSaverAnimPlugin.hrh"
-
-// ========================= MEMBER FUNCTIONS ================================
- CScreenSaverAnimPluginContainer* CScreenSaverAnimPluginContainer::NewLC(
- CScreenSaverAnimPlugin* aCaller,
- const CCoeControl* aParent,
- CScreenSaverAnimSettingObject* aSettingObject )
- {
- CScreenSaverAnimPluginContainer* self =
- new ( ELeave ) CScreenSaverAnimPluginContainer( aCaller,
- aSettingObject );
- CleanupStack::PushL( self );
- TRect rect;
- self->GetNormalScreenLayoutRect( rect );
- self->ConstructL(aParent, rect );
- return self;
-
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::NewL
-// ---------------------------------------------------------------------------
-//
-
-CScreenSaverAnimPluginContainer* CScreenSaverAnimPluginContainer::NewL(
- CScreenSaverAnimPlugin* aCaller,
- const CCoeControl* aParent,
- CScreenSaverAnimSettingObject* aSettingObject )
- {
- CScreenSaverAnimPluginContainer* self =
- CScreenSaverAnimPluginContainer::NewLC( aCaller,
- aParent,
- aSettingObject );
- CleanupStack::Pop( self );
- return self;
-
- }
-
-// ---------------------------------------------------------------------------
-// Constructor
-//
-// ---------------------------------------------------------------------------
-//
-CScreenSaverAnimPluginContainer::CScreenSaverAnimPluginContainer(
- CScreenSaverAnimPlugin* aCaller,
- CScreenSaverAnimSettingObject* aSettingObject )
- :
- iSettingObject( aSettingObject ),
- iCaller( aCaller )
- {
- }
-
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::ConstructL(const TRect& aRect)
-// EPOC two phased constructor
-//
-// ---------------------------------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::ConstructL( const CCoeControl* aParent,
- const TRect& aRect )
- {
-#ifdef SCREENSAVER_LOG_ENABLED
- _LIT( msg, "In ConstructL of container" );
- PrintDebugMsg( msg );
-#endif
-
- CreateWindowL( aParent );
-
-#ifdef SCREENSAVER_LOG_ENABLED
- _LIT( msg1, "Window Created" );
- PrintDebugMsg( msg1 );
-#endif
-
- BaseConstructL( aRect, NULL, R_SANIM_SETTING_LBX_ITEMS );
-
-#ifdef SCREENSAVER_LOG_ENABLED
- _LIT( msg2, "Base ConstructL called" );
- PrintDebugMsg( msg2 );
-#endif
-
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::BaseConstructL
-
-// ---------------------------------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::BaseConstructL(
- const TRect& aRect, TInt /* aTitleId */, TInt aResLbxId )
- {
- // Feature support should only be read once. It should not change run-time.
- GetFeatureSupportL( iFeaturesSupport );
- CEikStatusPane* sp = static_cast< CAknAppUi* >(
- CEikonEnv::Static()->EikAppUi() )->StatusPane();
- CAknTitlePane* title = static_cast<CAknTitlePane*>(
- sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle) ) );
-
- iListBox = new( ELeave ) CAknSettingStyleListBox;
-
- ConstructListBoxL( aResLbxId );
- iListBox->SetContainerWindowL( *this );
- iListBox->SetRect( aRect );
-
- iListBox->CreateScrollBarFrameL( ETrue );
- iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
- CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
-
- SetRect( aRect );
- ActivateL();
-
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::~CScreenSaverAnimPluginContainer()
-// Destructor
-// ---------------------------------------------------------------------------
-//
-CScreenSaverAnimPluginContainer::~CScreenSaverAnimPluginContainer()
- {
- delete iItems;
- delete iListBox;
- // delete iItemArray;
- }
-
-// ---------------------------------------------------------------------------
-// Sets feature support - see screensaveranimpluginconst.h for feature list.
-// ---------------------------------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::GetFeatureSupportL(
- TBitFlags& aFeatureBitFlags ) const
- {
- CRepository* featureRep = CRepository::NewLC( KCRUidThemesVariation );
- TInt value = KErrNone;
- featureRep->Get( KThemesLocalVariation, value );
-
- aFeatureBitFlags.ClearAll();
-
- //map value to feature flags
- if ( value & KScreenSaverRemoveAnimPluginTimeout )
- {
- aFeatureBitFlags.Set( EAnimPluginBacklightRemoved );
- }
-
- CleanupStack::PopAndDestroy( featureRep );
- }
-
-// ---------------------------------------------------------------------------
-// Checks if feature is supported.
-// ---------------------------------------------------------------------------
-//
-TBool CScreenSaverAnimPluginContainer::IsFeatureSupported( TInt aFeatureID )
- {
- if ( ( aFeatureID >= 0 ) && ( aFeatureID < KAnimPluginMaxFeatureID ) )
- {
- return iFeaturesSupport.IsSet( aFeatureID );
- }
- else
- {
- // invalid feature value.
- return EFalse;
- }
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::HandleListBoxEventL
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::HandleListBoxEventL(
- CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
- {
- switch ( aEventType )
- {
- case EEventEnterKeyPressed:
- case EEventItemDoubleClicked:
- case EEventItemSingleClicked:
- HandleListBoxSelectionL();
- break;
- default:
- break;
- }
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::HandleListBoxSelectionL()
-// ---------------------------------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::HandleListBoxSelectionL()
- {
- TInt index = iListBox->CurrentItemIndex();
-
- switch ( index )
- {
- case ESanimAnimFileNameId:
- if ( !iInShowFileItem )
- {
- iInShowFileItem = ETrue;
- TRAPD( err,ShowFileNameItemL() );
- iInShowFileItem = EFalse;
- User::LeaveIfError( err );
- }
- break;
- case ESanimAnimTimeoutId:
- ShowAnimTimeOutItemL();
- break;
- case ESanimLightsTimeoutId:
- ShowLightsTimeOutItemL();
- break;
- default:
- break;
- }
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::ConstructListBoxL( TInt aResLbxId )
-// ---------------------------------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::ConstructListBoxL( TInt aResLbxId )
- {
-#ifdef SCREENSAVER_LOG_ENABLED
- _LIT( msg, "In Construct ListBoxL" );
- PrintDebugMsg( msg );
-#endif
-
- iListBox->ConstructL( this, EAknListBoxSelectionList );
- iItems = iCoeEnv->ReadDesC16ArrayResourceL( aResLbxId );
- iItemArray = static_cast< CDesCArray* >( iListBox->Model()->ItemTextArray() );
- iListBox->SetListBoxObserver( this );
- CreateListBoxItemsL();
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::CreateListBoxItemsL()
-//
-//
-// ---------------------------------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::CreateListBoxItemsL()
- {
-#ifdef SCREENSAVER_LOG_ENABLED
- _LIT( msg, "Make FileName" );
- PrintDebugMsg( msg );
-#endif
-
- MakeFileNameItem();
- iItemArray->InsertL( ESanimAnimFileNameId, iItem );
-
-#ifdef SCREENSAVER_LOG_ENABLED
- _LIT( msg1, "Make Duration" );
- PrintDebugMsg( msg1 );
-#endif
-
- MakeAnimTimeOutItemL();
- iItemArray->InsertL( ESanimAnimTimeoutId, iItem );
-
- if ( !IsFeatureSupported( EAnimPluginBacklightRemoved ) )
- {
- #ifdef SCREENSAVER_LOG_ENABLED
- _LIT( msg2, "Make Backlight" );
- PrintDebugMsg( msg2 );
- #endif
-
- MakeLightsTimeOutItemL();
- iItemArray->InsertL( ESanimLightsTimeoutId, iItem );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::UpdateListBoxL( TInt aItemId )
-// ---------------------------------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::UpdateListBoxL( TInt aItemId )
- {
- switch ( aItemId )
- {
- case ESanimAnimFileNameId:
- MakeFileNameItem();
- break;
- case ESanimAnimTimeoutId:
- MakeAnimTimeOutItemL();
- break;
- case ESanimLightsTimeoutId:
- MakeLightsTimeOutItemL();
- break;
- default:
- break;
- }
-
- iItemArray->Delete( aItemId );
- iItemArray->InsertL( aItemId, iItem );
- iListBox->HandleItemAdditionL();
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::HandleResourceChange( TInt aType )
-// ---------------------------------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::HandleResourceChange( TInt aType )
- {
- CCoeControl::HandleResourceChange( aType );
- if( aType == KEikDynamicLayoutVariantSwitch )
- {
- TRect mainPaneRect;
- GetNormalScreenLayoutRect( mainPaneRect );
- SetRect(mainPaneRect);
-
- DrawNow();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::MakeFileNameItem()
-//
-// ---------------------------------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::MakeFileNameItem()
- {
- iItem = ( *iItems )[ESanimAnimFileNameId];
- TParsePtrC fileParser( iSettingObject->iFileName );
- TPtrC ptr( fileParser.NameAndExt() );
-
- // Filename may be quite long - copy only the amount there's space left
- iItem += ptr.Left( iItem.MaxLength() - iItem.Length() - 1 );
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::MakeAnimTimeOutItemL()
-//
-// ---------------------------------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::MakeAnimTimeOutItemL()
- {
- iItem = ( *iItems )[ESanimAnimTimeoutId];
-
- HBufC* animText = CAknSlider::CreateValueTextInHBufCL(
- iSettingObject->iAnimationTimeout,
- R_ANIM_TIMEOUT_SLIDER );
-
- // for A&H number conversion
- TPtr bufPtr = animText->Des();
- if( AknTextUtils::DigitModeQuery( AknTextUtils::EDigitModeShownToUser ) )
- {
- AknTextUtils::LanguageSpecificNumberConversion( bufPtr );
- }
- iItem += bufPtr;
- delete animText;
-
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::MakeLightTimeOutItemL()
-//
-// ---------------------------------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::MakeLightsTimeOutItemL()
- {
- iItem = ( *iItems )[ESanimLightsTimeoutId];
-
- HBufC* animText = NULL;
-
- if ( iSettingObject->iLightsTimeout == 0 )
- {
- animText = iCoeEnv->AllocReadResourceL( R_SANIM_SLIDER_OFF );
- }
- else
- {
- animText = CAknSlider::CreateValueTextInHBufCL(
- iSettingObject->iLightsTimeout,
- R_LIGHT_TIMEOUT_SLIDER );
- }
-
- // for A&H number conversion
- TPtr bufPtr = animText->Des();
- if( AknTextUtils::DigitModeQuery( AknTextUtils::EDigitModeShownToUser ) )
- {
- AknTextUtils::LanguageSpecificNumberConversion( bufPtr );
- }
- iItem += bufPtr;
- delete animText;
-
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::ShowFileNameItemL()
-//
-// ---------------------------------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::ShowFileNameItemL()
- {
-
- CDesCArrayFlat* selectedFile = new( ELeave )CDesCArrayFlat( 1 );
- CleanupStack::PushL( selectedFile );
-
- TResourceReader reader;
- iCoeEnv->CreateResourceReaderLC( reader,
- R_MIMETYPE_SPECIFIC_PLUGIN_ARRAY );
- TInt countResource = reader.ReadInt16();
-
- CDesCArrayFlat* mimetypesList = new( ELeave )
- CDesCArrayFlat( countResource );
-
- CleanupStack::PushL( mimetypesList );
-
- for ( TInt i = 0; i < countResource; i++ )
- {
- HBufC* mimeType = reader.ReadHBufCL();
-
- // Check plugin availability before appending mimetype
- TUid uid = iCaller->FindAnimPluginL( *mimeType );
- if ( uid != KNullUid )
- {
- mimetypesList->AppendL( *mimeType );
- }
- delete mimeType;
- reader.ReadInt32();
- }
-
- CScreenSaverAnimPluginVerifier* verifier =
- CScreenSaverAnimPluginVerifier::NewL( iCaller );
- CleanupStack::PushL( verifier );
- TBool fileSelected = MGFetch::RunL( *selectedFile,
- EAnyMediaFile,
- EFalse,
- KNullDesC,
- KNullDesC,
- mimetypesList,
- verifier );
-
- CleanupStack::PopAndDestroy( verifier );
- CleanupStack::PopAndDestroy( mimetypesList );
- CleanupStack::PopAndDestroy(); // reader
-
- if ( fileSelected )
- {
- TPtrC fileNamePtr = selectedFile->MdcaPoint( 0 );
- TFileName tempFileName;
- tempFileName.Copy( fileNamePtr );
- iSettingObject->iFileName.Copy( tempFileName );
- // Write the new setting into the central repository
- iCaller->SetAnimSettings();
- UpdateListBoxL( ESanimAnimFileNameId );
- }
-
- CleanupStack::PopAndDestroy( selectedFile );
-
- }
-
-// ----------------------------------------------------
-// CScreenSaverAnimPluginContainer::ShowAnimTimeOutItemL()
-// Display the animation time-out setting page.
-// ----------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::ShowAnimTimeOutItemL()
- {
-
- CAknSettingPage* dlg = new( ELeave ) CAknSliderSettingPage(
- R_ANIM_TIMEOUT_SETTING_PAGE,
- iSettingObject->iAnimationTimeout );
- if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
- {
- // Write the new setting into the central repository
- iCaller->SetAnimSettings();
- UpdateListBoxL( ESanimAnimTimeoutId );
- }
- }
-
-// ----------------------------------------------------
-// CScreenSaverAnimPluginContainer::ShowLightsTimeOutItemL()
-// Display the animation time-out setting page.
-// ----------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::ShowLightsTimeOutItemL()
- {
- CAknSettingPage* dlg =
- new( ELeave ) CAknSliderSettingPage( R_LIGHT_TIMEOUT_SETTING_PAGE,
- iSettingObject->iLightsTimeout );
- if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
- {
- // Write the new setting into the central repository
- iCaller->SetAnimSettings();
- UpdateListBoxL( ESanimLightsTimeoutId );
- }
- }
-
-void CScreenSaverAnimPluginContainer::SizeChanged()
- {
- if (iListBox)
- {
- // Get size from main pane, place from this rect
- TRect mainPaneRect;
- AknLayoutUtils::LayoutMetricsRect(
- AknLayoutUtils::EMainPane,
- mainPaneRect );
-
- iListBox->SetExtent( Rect().iTl, mainPaneRect.Size() );
- }
- }
-
-TInt CScreenSaverAnimPluginContainer::CountComponentControls() const
- {
- if ( iListBox )
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
-
-CCoeControl* CScreenSaverAnimPluginContainer::
- ComponentControl( TInt /*aIndex*/ ) const
- {
- if ( iListBox )
- {
- return iListBox;
- }
- else
- {
- return NULL;
- }
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::OfferKeyEventL
-// Called when a key is pressed.
-//
-// ---------------------------------------------------------------------------
-TKeyResponse CScreenSaverAnimPluginContainer::OfferKeyEventL(
- const TKeyEvent& aKeyEvent, TEventCode aType )
- {
- switch (aKeyEvent.iCode)
- {
- case EKeyLeftArrow:
- case EKeyRightArrow:
- // Listbox takes all event even if it doesn't use them
- return EKeyWasNotConsumed;
- default:
- break;
- }
- return iListBox->OfferKeyEventL( aKeyEvent, aType );
- }
-
-void CScreenSaverAnimPluginContainer::SetContainerWindowL( const CCoeControl&
- /* aContainer*/ )
- {
- }
-
-// ---------------------------------------------------------------------------
-// CScreenSaverAnimPluginContainer::FocusChanged
-// ---------------------------------------------------------------------------
-void CScreenSaverAnimPluginContainer::FocusChanged( TDrawNow aDrawNow )
- {
- // Pass focus changed event to listbox.
- if ( iListBox )
- {
- iListBox->SetFocus( IsFocused(), aDrawNow );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSvgRenderFrameControl::GetNormalScreenLayoutRect
-// Gets the normal screen layout rectangle for control from LAF.
-// -----------------------------------------------------------------------------
-//
-void CScreenSaverAnimPluginContainer::GetNormalScreenLayoutRect(
- TRect& aRect ) const // Rectangle specifying extent of control
- {
- AknLayoutUtils::LayoutMetricsRect(
- AknLayoutUtils::EApplicationWindow,
- aRect );
- }
-
-// End of File