diff -r 000000000000 -r 71ca22bcf22a mmserv/audioeffectsui/equalizer/src/EqualizerEditingDialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/audioeffectsui/equalizer/src/EqualizerEditingDialog.cpp Tue Feb 02 01:08:46 2010 +0200 @@ -0,0 +1,554 @@ +/* +* 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: Defines functionality related to Equalizer Settings Dialog +* +*/ + + + +// INCLUDE FILES + +#include +#include +#include +#include +#include +//LAF and Skin changes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "EqualizerPrivateConstants.h" +#include +#include "EqualizerEditingDialog.h" +#include "EqualizerFreqBandContainer.h" +#include "Equalizer.hrh" + +// ============================ MEMBER FUNCTIONS ============================= + +// ------------------------------------------------------------------- +// CEqualizerEditingDialog* CEqualizerEditingDialog::NewL( +// CAudioEqualizerUtility& aAudEqUtility, +// const TInt aPresetIndex, TRect& aRect, const TBool aIsActivePreset) +// Create instance of concrete ECOM interface implementation +// ------------------------------------------------------------------- +// +CEqualizerEditingDialog* CEqualizerEditingDialog::NewL( +CAudioEqualizerUtility* aAudEqUtility, const TInt aPresetIndex, + TRect& aRect, const TBool aIsActivePreset, + MEqualizerPresetActivationObserver& aObserver, + TInt aPresetKey) + { + CEqualizerEditingDialog* self = new (ELeave) CEqualizerEditingDialog( + aAudEqUtility, aPresetIndex, aRect, aIsActivePreset, aObserver, + aPresetKey); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ------------------------------------------------------------------- +// CEqualizerEditingDialog::ConstructL() +// Second Phase Constructor +// ------------------------------------------------------------------- +// +void CEqualizerEditingDialog::ConstructL() + { + //Initially set these variable to EFalse + iIgnoreKeyEvents = EFalse; + iContextSensitiveMenu = EFalse; + + iPresetName = iAudEqUtility->GetPresetL(iPresetIndex); + CAudioEqualizer& audioEqualizer = iAudEqUtility->Equalizer(); + iNumberOfFreqBands = audioEqualizer.NumberOfBands(); + iMover=new(ELeave)CArrayFixSeg(KEqualizerArrayGranularity); + + iFreqBandRect = RArray(iNumberOfFreqBands); + iScaleRect = RArray(iNumberOfFreqBands); + iBackgroundRect = RArray(iNumberOfFreqBands); + iSliderRect = RArray(iNumberOfFreqBands); + GetLayoutRect(); + + // Find which drive this DLL is installed. + TFileName fileName; + + // Get the full resource file + TParse fp; + + // Add the resource dir + fp.Set( KEqualizerResourceFileName, &KDC_APP_RESOURCE_DIR, NULL); + // Get the filename with full path + fileName = fp.FullName(); + //for localisation of resource file + BaflUtils::NearestLanguageFile( iEikonEnv->FsSession(), fileName ); + iResourceFileOffset = iEikonEnv->AddResourceFileL( fileName ); + CAknDialog::ConstructL(R_EQUALIZER_SETTINGS_MENUBAR); + } + +// --------------------------------------------------------------------- +// CEqualizerEditingDialog::CEqualizerEditingDialog +// (CAudioEqualizerUtility* aAudEqUtility, TInt aPresetIndex, +// TRect& aRect, const TBool aIsActivePreset) +// First phase constructor +// --------------------------------------------------------------------- +// +CEqualizerEditingDialog::CEqualizerEditingDialog(CAudioEqualizerUtility* +aAudEqUtility, const TInt aPresetIndex, TRect& aRect, +const TBool aIsActivePreset, MEqualizerPresetActivationObserver& aObserver, +TInt aPresetKey ): +iAudEqUtility(aAudEqUtility), +iPresetIndex(aPresetIndex), iRect(aRect), +iIsActivePreset(aIsActivePreset), +iObserver( aObserver ), iPresetKey( aPresetKey ) + { + } + +// -------------------------------------------------------------------- +// CEqualizerEditingDialog::~CEqualizerEditingDialog() +// Destructor +// -------------------------------------------------------------------- +// +CEqualizerEditingDialog::~CEqualizerEditingDialog() + { + if (iResourceFileOffset) + { + iEikonEnv->DeleteResourceFile(iResourceFileOffset); + } + + if (iMover) + { + iMover->Reset(); + delete iMover; + } + + iFreqBandRect.Close(); + iScaleRect.Close(); + iBackgroundRect.Close(); + iSliderRect.Close(); + } + +// -------------------------------------------------------------------- +// SEikControlInfo CEqualizerEditingDialog:: +// CreateCustomControlL ( TInt aControlType ) +// This function is called by the framework to create a custom control +// inside the dialog +// -------------------------------------------------------------------- +// +SEikControlInfo CEqualizerEditingDialog::CreateCustomControlL ( TInt + aControlType ) + { + SEikControlInfo controlInfo; + controlInfo.iControl = NULL; + controlInfo.iTrailerTextId = 0; + controlInfo.iFlags = 0; + + SetMoverPositionsL(EFalse); + + switch ( aControlType) + { + case EEqualizerCustomCtrlDlgCtCustomControl: + controlInfo.iControl = new(ELeave) CEqualizerFreqBandContainer + (this, iAudEqUtility, iPresetIndex, iIsActivePreset, + iRect, iObserver, iPresetKey, iPresetName); + + iFreqBandContainer = (CEqualizerFreqBandContainer*) + controlInfo.iControl; + break; + default: + break; + } + + return controlInfo; + } + +// ------------------------------------------------------------------- +// void CEqualizerEditingDialog::SizeChanged() +// +// This function is called by the framework whenever the control size +// is changed +// -------------------------------------------------------------------- +// +void CEqualizerEditingDialog::SizeChanged() + { + CAknDialog::SizeChanged(); + iRect = Rect(); + GetLayoutRect(); + CAudioEqualizer& audioEqualizer = iAudEqUtility->Equalizer(); + iAudEqUtility->ModifyPresetL(iPresetIndex, iPresetName, audioEqualizer); + iMover->Reset(); + SetMoverPositionsL(EFalse); + } + +// ------------------------------------------------------------------- +// void CEqualizerEditingDialog::GetLayoutRect() +// +// This function is called to retrive the freqband rect, scale rect +// slider rect from the layout +// -------------------------------------------------------------------- +// +void CEqualizerEditingDialog::GetLayoutRect() + { + iFreqBandRect.Reset(); + iScaleRect.Reset(); + iBackgroundRect.Reset(); + iSliderRect.Reset(); + + TInt variety = EEqualizerVarietyOne; + + if(iNumberOfFreqBands == KEqualizerFiveBands) + variety = EEqualizerVarietyTwo; + + for(TInt count = 0; count < iNumberOfFreqBands; count++) + { + iFreqBandRect.Append(CEqualizerFreqBand::ComponentRect( + iRect,variety+2,count)); + iScaleRect.Append(CEqualizerFreqBand::ComponentRect( + iFreqBandRect[count],variety,EEqualizerScale)); + iBackgroundRect.Append(CEqualizerFreqBand::ComponentRect( + iScaleRect[count],EEqualizerVarietyNotUsed,EEqualizerBackground)); + iSliderRect.Append(CEqualizerFreqBand::ComponentRect( + iScaleRect[count],EEqualizerVarietyNotUsed,EEqualizerSlider)); + } + } + +// -------------------------------------------------------------------- +// void CEqualizerEditingDialog::SetMoverPositionsL(TBool aReset) +// This function is used to read the positions of the mover for the +// various bands from the engine. +// -------------------------------------------------------------------- +// +void CEqualizerEditingDialog::SetMoverPositionsL(TBool aReset) + { + //Calulate change in db level + TInt32 minBandLevel; + TInt32 maxBandLevel; + iAudEqUtility->GetPresetL(iPresetIndex); + CAudioEqualizer& audioEqualizer = iAudEqUtility->Equalizer(); + + audioEqualizer.DbLevelLimits(minBandLevel, maxBandLevel); + + //The minimum band level should always be negative and the + // maximum band level should always be positive. + if (( minBandLevel > 0 ) || (maxBandLevel < 0)) + { + User::Leave(KErrNotSupported); + } + + for (TInt i =0; i= minBandLevel) || + (curBandlevel <= maxBandLevel), User::Invariant()); + if ((curBandlevel < minBandLevel) || (curBandlevel > maxBandLevel)) + { + curBandlevel = 0; //Band level is invalid, use zero instead. + } + + if (curBandlevel > 0) + { + TReal frac = (TReal)curBandlevel / maxBandLevel; + TInt moverPos = (TInt) (scaleZeroPos - (frac * + diffUIBandLevel * sliderInc)); + if((moverPos < (iBackgroundRect[i].iTl.iY + halfSliderSize)) || + ((scaleZeroPos - moverPos) >= (diffUIBandLevel * sliderInc))) + { + moverPos = iBackgroundRect[i].iTl.iY + halfSliderSize; + } + + if (aReset) + { + (*iMover)[i] = moverPos; + } + else + { + iMover->AppendL(moverPos); + } + } + else if (curBandlevel < 0) + { + TReal frac = (TReal)curBandlevel / minBandLevel; + TInt moverPos = (TInt) (scaleZeroPos + (frac * + diffUIBandLevel * sliderInc)); + if((moverPos > ((iBackgroundRect[i].iBr.iY ) - halfSliderSize)) || + ((moverPos - scaleZeroPos) >= (diffUIBandLevel * sliderInc))) + { + moverPos = (iBackgroundRect[i].iBr.iY ) - halfSliderSize; + } + + if (aReset) + { + (*iMover)[i] = moverPos; + } + else + { + iMover->AppendL(moverPos); + } + } + else + { + if (aReset) + { + (*iMover)[i] = scaleZeroPos; + } + else + { + iMover->AppendL(scaleZeroPos); + } + } + } + } + +// --------------------------------------------------------- +// CEqualizerEditingDialog::OfferKeyEventL( +// const TKeyEvent& aKeyEvent,TEventCode aType) +// This function is used to handle key events +// --------------------------------------------------------- +// +TKeyResponse CEqualizerEditingDialog::OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + if (iIgnoreKeyEvents) + { + return EKeyWasNotConsumed; + } + else + { + return CAknDialog::OfferKeyEventL( aKeyEvent, aType ); + } + } + +// ------------------------------------------------------------------- +// void CEqualizerEditingDialog::ProcessCommandL(TInt aCommandId) +// This function is called by the framework to handle the user's +// menubar command options +// -------------------------------------------------------------------- +// +void CEqualizerEditingDialog::ProcessCommandL(TInt aCommandId) + { + // Need to do this in all cases or menu does not disappear after + // a selection is made + CAknDialog::ProcessCommandL(aCommandId); + + switch(aCommandId) + { + case EAknCmdExit : + case EEikCmdExit : + { + CAudioEqualizer& audioEqualizer = iAudEqUtility->Equalizer(); + iAudEqUtility->ModifyPresetL(iPresetIndex, iPresetName, audioEqualizer); + iAvkonAppUi->HandleCommandL( aCommandId ); + break; + } + + case EEqualizerCmdHelp: + { + HlpLauncher::LaunchHelpApplicationL + ( iEikonEnv->WsSession(), + CEikonEnv::Static()->AppUi()->AppHelpContextL() ); + break; + } + + case EEqualizerCmdReset: + { + iAudEqUtility->GetPresetL(iPresetIndex); + CAudioEqualizer& audioEqualizer = iAudEqUtility->Equalizer(); + + if (iPresetIndex < iAudEqUtility->NumberOfPreDefinedPresets()) + { + //Predefined preset + iAudEqUtility->ResetPresetL(iPresetIndex); + SetMoverPositionsL(ETrue); + } + else + { + //User defined preset, Reset manually + for (TInt i =0; iModifyPresetL(iPresetIndex, iPresetName, + audioEqualizer); + } + + if (iIsActivePreset) + { + TRAP_IGNORE(iAudEqUtility->ApplyPresetL(iPresetIndex)); + } + + // In MPX, we need to callback to observer when a preset is changed + if( iIsActivePreset ) + { + iObserver.HandlePresetActivation( iPresetKey ); + } + iFreqBandContainer->SetRect(iRect); + DrawNow(); + break; + } + + default: + { + break; + } + } + } + +// ------------------------------------------------------------------- +// void CEqualizerEditingDialog::GetHelpContext( +// TCoeHelpContext& aContext ) const +// Get help context for the control +// -------------------------------------------------------------------- +// +void CEqualizerEditingDialog::GetHelpContext( + TCoeHelpContext& aContext ) const + { + aContext.iMajor = KUidEqualizer; + aContext.iContext = KEQ_HLP_EDITING_VIEW; + } + +// --------------------------------------------------------------------------- +// CEqualizerEditingDialog::DynInitMenuPaneL( +// TInt aResourceId,CEikMenuPane* aMenuPane) +// This function is called by the EIKON framework just before it displays +// a menu pane. Its default implementation is empty, and by overriding it, +// the application can set the state of menu items dynamically according +// to the state of application data. +// --------------------------------------------------------------------------- +// +void CEqualizerEditingDialog::DynInitMenuPaneL( + TInt aResourceId, CEikMenuPane* aMenuPane) + { + if ( aResourceId == R_EQUALIZER_SETTINGS_MENU) + { + iMenuBar->SetMenuType(CEikMenuBar::EMenuOptions); + // Help should be displayed only if the feature is supported + // according to Feature Manager + if (!FeatureManager::FeatureSupported(KFeatureIdHelp)) + { + aMenuPane->SetItemDimmed(EEqualizerCmdHelp, ETrue); + } + + if(iContextSensitiveMenu) + { + iMenuBar->SetMenuType(CEikMenuBar::EMenuContext); + aMenuPane->SetItemDimmed(EAknCmdExit, ETrue); + aMenuPane->SetItemDimmed(EEqualizerCmdHelp, ETrue); + iContextSensitiveMenu = EFalse; + } + } + } + +// ---------------------------------------------------------------------------- +// CEqualizerEditingDialog::SetAudioEqualizerL(CAudioEqualizerUtility* +// aAudEqUtility) +// This function is used to set a new CAudioEqualizerUtility* +// ---------------------------------------------------------------------------- +// +void CEqualizerEditingDialog::SetAudioEqualizerL( +CAudioEqualizerUtility* aAudEqUtility) + { + iAudEqUtility=aAudEqUtility; + if (iAudEqUtility) + { + iIgnoreKeyEvents = EFalse; + iFreqBandContainer->SetAudioEqualizerL(aAudEqUtility); + } + else + { + iIgnoreKeyEvents = ETrue; + } + } + +// ------------------------------------------------------------------- +// TInt CEqualizerEditingDialog::ExecuteLD() +// This function is called to execute and delete the dialog +// -------------------------------------------------------------------- +// +TInt CEqualizerEditingDialog::ExecuteLD() + { + return CAknDialog::ExecuteLD(R_EQUALIZER_EDITING_DIALOG); + } + +// ------------------------------------------------------------------- +// TBool CEqualizerEditingDialog::OkToExitL(TInt aButtonId) +// This function is called when the OK key is pressed +// -------------------------------------------------------------------- +// +TBool CEqualizerEditingDialog::OkToExitL(TInt aButtonId) + { + TBool ret = EFalse; + if (aButtonId == EEikBidOk) + { + ret = EFalse; + } + else if (aButtonId == EAknSoftkeyBack) + { + CAudioEqualizer& audioEqualizer = iAudEqUtility->Equalizer(); + iAudEqUtility->ModifyPresetL(iPresetIndex, iPresetName, audioEqualizer); + + HBufC* iTitleText = StringLoader::LoadLC(R_QTN_EQUALIZER_TITLE_TEXT); + CEikStatusPane* sp=iEikonEnv->AppUiFactory()->StatusPane(); + CAknTitlePane* tp=(CAknTitlePane*)sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle)); + tp->SetTextL(*iTitleText); + CleanupStack::PopAndDestroy(iTitleText); + + ret = CAknDialog::OkToExitL( aButtonId ); + } + else if(aButtonId == EAknSoftkeyContextOptions) + { + iContextSensitiveMenu = ETrue; + DisplayMenuL(); + } + else + { + ret = CAknDialog::OkToExitL( aButtonId ); + } + return ret; + } + +// ------------------------------------------------------------------- +// TInt CEqualizerEditingDialog::GetMoverPosition(TInt aBandIndex) +// This function returns the current mover position for each frequency band +// -------------------------------------------------------------------- +// +TInt CEqualizerEditingDialog::GetMoverPosition(TInt aBandIndex) +{ + return (*iMover)[aBandIndex]; +} + +// End of File