diff -r 000000000000 -r 4e91876724a2 photosgallery/slideshow/settingsdialog/src/shwslideshowsettingsdialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/slideshow/settingsdialog/src/shwslideshowsettingsdialog.cpp Thu Dec 17 08:45:44 2009 +0200 @@ -0,0 +1,375 @@ +/* +* Copyright (c) 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: Implementation of Slideshow Settings Dialog +* +*/ + + + + +// CLASS HEADER +#include "shwslideshowsettingsdialog.h" + +// EXTERNAL INCLUDES +#include // for HlpLauncher +#include // for CEikDialog +#include // for CAknAppUi +#include // for CAknTitlePane +#include // for StringLoader +#include // for BaflUtils +#include // for KDC_APP_RESOURCE_DIR +#include // for ConeUitls +#include // for Navi-scroll key events +#include + +// INTERNAL INCLUDES +#include +#include +#include // For Panics +#include +#include // for CGlxResourceUtilities +#include "shwslideshowsettings.hrh" +#include "shwslideshowengine.h" // for CShwSlideshowEngine +#include "shwslideshowsettings.hrh" // for Command Ids and Control Ids +#include "shwsettingsmodel.h" // for CShwSettingsModel +#include "shwslideshowsettingslist.h" // for CShwSlideshowSettingsList + +#define GetAppUi() (dynamic_cast(iEikonEnv->EikAppUi())) +//CONSTANTS +namespace + { + // uid and id from doc/help_parameters_for_photos.xls + const TInt KShwHelpUID = 0x2000A778; + _LIT( KSHW_HLP_SLIDESHOW_SETTINGS, "LGAL_HLP_SLIDESHOW_SETTINGS" ); + } + +//----------------------------------------------------------------------------- +// C++ default constructor. +//----------------------------------------------------------------------------- +inline CShwSlideshowSettingsDialog::CShwSlideshowSettingsDialog() + { + // No implementation required + } + +//----------------------------------------------------------------------------- +// Two-phased constructor. +//----------------------------------------------------------------------------- +CShwSlideshowSettingsDialog* CShwSlideshowSettingsDialog::NewL() + { + TRACER("CShwSlideshowSettingsDialog::NewL"); + GLX_LOG_INFO("CShwSlideshowSettingsDialog::NewL"); + CShwSlideshowSettingsDialog* self=new(ELeave)CShwSlideshowSettingsDialog(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + + +//----------------------------------------------------------------------------- +// Destructor +//----------------------------------------------------------------------------- +CShwSlideshowSettingsDialog::~CShwSlideshowSettingsDialog() + { + TRACER("CShwSlideshowSettingsDialog::~CShwSlideshowSettingsDialog"); + GLX_LOG_INFO("CShwSlideshowSettingsDialog::~CShwSlideshowSettingsDialog"); + + // Draw the toolbar + SetSlShwToolbarVisibility(ETrue); + + delete iShwSettings; + // Delete resource file + if (iResourceOffset) + { + iEikonEnv->DeleteResourceFile( iResourceOffset ); + iResourceOffset = NULL; + } + // If the status pane was enabled , set it to not visbible. + // used in FS view + if (iStatusPaneChanged) + { + iStatusPane->MakeVisible(EFalse); + } + if (iPreviousTitle) + { + delete iPreviousTitle; + } + } + +//----------------------------------------------------------------------------- +// Symbian 2nd phase constructor can leave. +//----------------------------------------------------------------------------- +void CShwSlideshowSettingsDialog::ConstructL() + { + TRACER("CShwSlideshowSettingsDialog::ConstructL"); + GLX_LOG_INFO("CShwSlideshowSettingsDialog::ConstructL"); + + // hide toolbar. + SetSlShwToolbarVisibility(EFalse); + iStatusPaneChanged = EFalse; + iStatusPane = GetAppUi()->StatusPane(); + iTitlePane = ( CAknTitlePane* )iStatusPane->ControlL( + TUid::Uid( EEikStatusPaneUidTitle )); + // If Status pane not visible, then make it visible. + // Set the status pane flag as True, to be used in destructor, if + // status pane is made visible. + // This is used in Fullscreen. + if(!iStatusPane->IsVisible()) + { + iStatusPane->MakeVisible(ETrue); + iStatusPaneChanged = ETrue; + } + // Load the dialog resource file + _LIT(KShwSettingDlgResource,"shwsettingsdialog.rsc"); + TFileName resourceFile(KDC_APP_RESOURCE_DIR); + resourceFile.Append(KShwSettingDlgResource); + CGlxResourceUtilities::GetResourceFilenameL( resourceFile ); + iResourceOffset = iCoeEnv->AddResourceFileL( resourceFile ); + + iShwSettings = CShwSettingsModel::NewL(); + + // CAknDialog takes the menu resource as constructor parameter + CAknDialog::ConstructL( R_SHW_SETTINGSLIST_MENU_BAR ); + + // set the title to the dialog, Note that avkon dialogs do not support + // setting the title in the status pane so we need to do it the hard way + // get status pane + SetTitleL(); + } + +// --------------------------------------------------------------------------- +// SetSlShwToolbarVisibility() +// --------------------------------------------------------------------------- +void CShwSlideshowSettingsDialog::SetSlShwToolbarVisibility(TBool aVisible) + { + TRACER("CShwSlideshowSettingsDialog::SetSlShwToolbarVisibility"); + CAknAppUi* appUi = GetAppUi(); + __ASSERT_DEBUG(appUi, Panic(EGlxPanicNullPointer)); + CAknToolbar* popupToolbar = appUi->PopupToolbar(); + if(popupToolbar) + { + popupToolbar->SetToolbarVisibility( !aVisible ); + popupToolbar->MakeVisible( !aVisible ); + if(!aVisible) + { + popupToolbar->DrawNow(); + } + } + + CAknToolbar* toolbar = appUi->CurrentFixedToolbar(); + if(toolbar) + { + toolbar->SetToolbarVisibility(aVisible); + toolbar->MakeVisible( aVisible ); + } + + CAknToolbar* currentPopupToolbar = appUi->CurrentPopupToolbar(); + if(currentPopupToolbar) + { + currentPopupToolbar->SetToolbarVisibility(aVisible); + currentPopupToolbar->MakeVisible( aVisible ); + } + } + +// --------------------------------------------------------------------------- +// SetTitleL() +// --------------------------------------------------------------------------- +void CShwSlideshowSettingsDialog::SetTitleL() + { + TRACER("CShwSlideshowSettingsDialog::SetTitleL"); + GLX_LOG_INFO("CShwSlideshowSettingsDialog::SetTitleL"); + // Stores the previous Title + iPreviousTitle = iTitlePane->Text()->AllocL(); + HBufC* aTitleText = StringLoader::LoadLC( + R_SHW_SETTINGSLIST_TITLE_PANE_TXT, iEikonEnv ); + + iTitlePane->SetTextL( *aTitleText ); + CleanupStack::PopAndDestroy( aTitleText ); + } + +// ----------------------------------------------------------------------------- +// SetPreviousTitleL - Restores back the previous title, used in Slideshow Settings only +// ----------------------------------------------------------------------------- +// +void CShwSlideshowSettingsDialog::SetPreviousTitleL() + { + TRACER("CShwSlideshowSettingsDialog::SetPreviousTitleL"); + GLX_LOG_INFO("CShwSlideshowSettingsDialog::SetPreviousTitleL"); + // Restore the Title back of the Calling View + iTitlePane->SetTextL( *iPreviousTitle ); + } + +//----------------------------------------------------------------------------- +// CShwSlideshowSettingsDialog::ProcessCommandL +//----------------------------------------------------------------------------- +void CShwSlideshowSettingsDialog::ProcessCommandL(TInt aCommandId) + { + TRACER("CShwSlideshowSettingsDialog::ProcessCommandL"); + GLX_LOG_INFO("CShwSlideshowSettingsDialog::ProcessCommandL"); + switch (aCommandId) + { + case EShwCmdSettingsChange: + { + CAknDialog::ProcessCommandL(aCommandId); + iItemList->UpdateListBoxL(iItemList->ListBox()->CurrentItemIndex()); + break; + } + case EShwCmdHelp: + { + TCoeHelpContext helpContext; + helpContext.iMajor = TUid::Uid( KShwHelpUID ); + helpContext.iContext.Copy( KSHW_HLP_SLIDESHOW_SETTINGS ); + + const TInt KListSz = 1; + CArrayFix* contextList = + new (ELeave) CArrayFixFlat( KListSz ); + CleanupStack::PushL(contextList); + contextList->AppendL(helpContext); + + HlpLauncher::LaunchHelpApplicationL( + iEikonEnv->WsSession(), contextList ); + CleanupStack::Pop( contextList ); + break; + } + case EShwCmdExit: + { + TryExitL(EShwCmdExit); + break; + } + default: + { + CAknDialog::ProcessCommandL(aCommandId); + break; + } + }; + } + + +//----------------------------------------------------------------------------- +// CShwSlideshowSettingsDialog::CreateCustomControlL +//----------------------------------------------------------------------------- +SEikControlInfo CShwSlideshowSettingsDialog::CreateCustomControlL(TInt + aControlType) + { + TRACER("CShwSlideshowSettingsDialog::CreateCustomControlL"); + GLX_LOG_INFO("CShwSlideshowSettingsDialog::CreateCustomControlL"); + // create control info, no flags or trailer text set + SEikControlInfo controlInfo; + controlInfo.iControl = NULL; + controlInfo.iTrailerTextId = 0; + controlInfo.iFlags = 0; + + if (aControlType == EShwCtSettingListBox) + { + iItemList = CShwSlideShowSettingsList::NewL(*iShwSettings); + controlInfo.iControl = iItemList; // giving ownership + } + return controlInfo; // returns ownership of ItemList + } + +//----------------------------------------------------------------------------- +// CShwSlideshowSettingsDialog::OkToExitL +//----------------------------------------------------------------------------- +TBool CShwSlideshowSettingsDialog::OkToExitL(TInt aKeycode) + { + TRACER("CShwSlideshowSettingsDialog::OkToExitL"); + GLX_LOG_INFO("CShwSlideshowSettingsDialog::OkToExitL"); + TBool retVal = EFalse; + switch (aKeycode) + { + case EAknSoftkeyChange: + { + iItemList->UpdateListBoxL(iItemList->ListBox()->CurrentItemIndex(), ETrue); + break; + } + case EAknSoftkeyOptions: // display menu only + { + DisplayMenuL(); + break; + } + case EAknSoftkeyBack: // exit dialog + case EEikCmdExit: + case EAknCmdExit: + case EShwCmdExit: + { + SetPreviousTitleL(); + retVal = ETrue; + break; + } + } + return retVal; + } + +//----------------------------------------------------------------------------- +// CShwSlideshowSettingsDialog::SizeChanged +//----------------------------------------------------------------------------- +void CShwSlideshowSettingsDialog::SizeChanged() + { + TRACER("CShwSlideshowSettingsDialog::SizeChanged"); + GLX_LOG_INFO("CShwSlideshowSettingsDialog::SizeChanged"); + if(iItemList) + { + iItemList->ListBox()->SetRect(Rect()); + } + CAknDialog::SizeChanged(); + } + +//----------------------------------------------------------------------------- +// CShwSlideshowSettingsDialog::OfferKeyEventL +//----------------------------------------------------------------------------- +TKeyResponse CShwSlideshowSettingsDialog::OfferKeyEventL( + const TKeyEvent& aKeyEvent, TEventCode aType) + { + TRACER("CShwSlideshowSettingsDialog::OfferKeyEventL"); + GLX_LOG_INFO("CShwSlideshowSettingsDialog::OfferKeyEventL"); + // Fix for EEBD-79UL8Q - "No Naviscroll support in Slideshow settings + // options menu" + TKeyEvent localKeyEvent = aKeyEvent; + if ( aType == EEventKey ) + { + switch ( aKeyEvent.iCode ) + { + // Handle the previous and next navi-scroll events and modify the + // key code to the corresponding values used by the dialog + case EKeyPrevious: + localKeyEvent.iCode = EKeyUpArrow; + break; + case EKeyNext: + localKeyEvent.iCode = EKeyDownArrow; + break; + default: + // nothing to change + break; + } + } + + // pass the key event up to the parent to handle + return CAknDialog::OfferKeyEventL( localKeyEvent, aType ); + } +//----------------------------------------------------------------------------- +// CShwSlideshowSettingsDialog::FocusChanged +//----------------------------------------------------------------------------- +void CShwSlideshowSettingsDialog::FocusChanged(TDrawNow aDrawNow) + { + TRACER("CShwSlideshowSettingsDialog::FocusChanged"); + GLX_LOG_INFO("CShwSlideshowSettingsDialog::FocusChanged"); + // hide toolbar. + if(aDrawNow == EDrawNow ) + { + SetSlShwToolbarVisibility(EFalse); + } + } + +// End of File