diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookui/Speeddial/VPbkControlSrc/SpdiaGridDlgVPbk.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Speeddial/VPbkControlSrc/SpdiaGridDlgVPbk.cpp Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,346 @@ +/* +* Copyright (c) 2002 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: +* The main UI container element of the Speeddial Control Utility +* that contains the 3x3 grid of speeddial entries. +* +*/ + + + + + +// INCLUDE FILES +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include "SpdiaControl.hrh" +#include "speeddialprivate.h" +#include "SpdiaGridDlgVPbk.h" +#include "SpdiaGridVPbk.h" +#include "Speeddial.laf" + +const TUint KShortcutKey0('0'); +const TInt KMaxIndex(8); +// ================= MEMBER FUNCTIONS ======================= +// --------------------------------------------------------- +// CSpdiaGridDlgVPbk::NewL() +// +// --------------------------------------------------------- +CSpdiaGridDlgVPbk* CSpdiaGridDlgVPbk::NewL(TInt& aDial, const CSpeedDialPrivate& aControl) + { + CSpdiaGridDlgVPbk* self = new (ELeave) CSpdiaGridDlgVPbk(aDial, aControl); + return self; + } + +// --------------------------------------------------------- +// CSpdiaGridDlgVPbk::~CSpdiaGridDlgVPbk() +// +// --------------------------------------------------------- +CSpdiaGridDlgVPbk::~CSpdiaGridDlgVPbk() + { + + } + +// --------------------------------------------------------- +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------- +// +CSpdiaGridDlgVPbk::CSpdiaGridDlgVPbk(TInt& aDial, const CSpeedDialPrivate& aControl): iDial(aDial) + { + iControl = CONST_CAST(CSpeedDialPrivate*, &aControl); + iCbaID = R_AVKON_SOFTKEYS_BACK; + } + +// ---------------------------------------------------- +// CSpdiaGridDlgVPbk::PreLayoutDynInitL +// +// ---------------------------------------------------- +// +void CSpdiaGridDlgVPbk::PreLayoutDynInitL() + { + iGrid = STATIC_CAST(CSpdiaGridVPbk*, Control(ESpdGridItem)); + + CDesCArray* itemArray = STATIC_CAST(CDesCArray*, + iGrid->Model()->ItemTextArray()); + + itemArray->Reset(); + iControl->CreateDataL(*iGrid); + + // Set the Obsever + // CPbkContactEngine* pbkEngine = iControl->PbkEngine(); + // iPbkNotifier = pbkEngine->CreateContactChangeNotifierL(this); + } + +// ---------------------------------------------------- +// CSpdiaGridDlgVPbk::PostLayoutDynInitL +// +// ---------------------------------------------------- +// +void CSpdiaGridDlgVPbk::PostLayoutDynInitL() + { + iControl->SetLayout(Rect()); + if(AknLayoutUtils::LayoutMirrored()) + { + iGrid->SetCurrentDataIndex(0); + LoadCbaL(); + } + HandleResourceChange(KEikDynamicLayoutVariantSwitch); + } + +// --------------------------------------------------------- +// CSpdiaGridDlgVPbk::CreateCustomControlL +// +// --------------------------------------------------------- +// +SEikControlInfo CSpdiaGridDlgVPbk::CreateCustomControlL(TInt aControlType) + { + SEikControlInfo ctrlInfo; + ctrlInfo.iControl=NULL; + ctrlInfo.iTrailerTextId=0; + ctrlInfo.iFlags = EEikControlHasEars; + if (aControlType == ESpdiaGrid) + { + ctrlInfo.iControl = CSpdiaGridVPbk::NewL(*iControl); + } + return ctrlInfo; + } +// --------------------------------------------------------- +// CSpdiaGridDlgVPbk::OkToExitL +// +// --------------------------------------------------------- +// +TBool CSpdiaGridDlgVPbk::OkToExitL(TInt aButtonId) // Pressed button id + { + TBool result(ETrue); + if (aButtonId == EAknSoftkeyOk) + { + iDial = iControl->Number(iGrid->CurrentDataIndex()); + TInt index(iGrid->CurrentDataIndex()); + if (iControl->VMBoxPosition() == index) + { + result = EFalse; + } + } + return result; + } + +// --------------------------------------------------------- +// CSpdiaGridDlgVPbk::OfferKeyEventL +// +// --------------------------------------------------------- +// +TKeyResponse CSpdiaGridDlgVPbk::OfferKeyEventL + (const TKeyEvent& aKeyEvent, + TEventCode aType) + { + TBool keyConsumed(EFalse); + if (iGrid != NULL) + { + TChar code(aKeyEvent.iCode); + if(AknLayoutUtils::LayoutMirrored()) + { + if(code == EKeyLeftArrow) + { + TInt index = iGrid->CurrentDataIndex(); + if(index == KMaxIndex) + { + iGrid->SetCurrentDataIndex(0); + LoadCbaL(); + return EKeyWasConsumed; + } + } + if(code == EKeyRightArrow) + { + TInt index = iGrid->CurrentDataIndex(); + if(index == 0) + { + iGrid->SetCurrentDataIndex(KMaxIndex); + LoadCbaL(); + return EKeyWasConsumed; + } + } + } + else + { + if(code == EKeyRightArrow) + { + TInt index = iGrid->CurrentDataIndex(); + if(index == KMaxIndex) + { + iGrid->SetCurrentDataIndex(0); + LoadCbaL(); + return EKeyWasConsumed; + } + } + if(code == EKeyLeftArrow) + { + TInt index = iGrid->CurrentDataIndex(); + if(index == 0) + { + iGrid->SetCurrentDataIndex(KMaxIndex); + LoadCbaL(); + return EKeyWasConsumed; + } + } + } + TKeyResponse exitCode( + iGrid->OfferKeyEventL(aKeyEvent, aType)); + if (exitCode != EKeyWasNotConsumed) + { + if (code.IsDigit()) + { + if (aKeyEvent.iCode - KShortcutKey0 > 0) + { + iGrid->SetCurrentDataIndex( + iControl->Index(aKeyEvent.iCode - KShortcutKey0)); + LoadCbaL(); + keyConsumed = ETrue; + } + } + else if (aKeyEvent.iCode == EKeyLeftArrow || + aKeyEvent.iCode == EKeyRightArrow || + aKeyEvent.iCode == EKeyUpArrow || + aKeyEvent.iCode == EKeyDownArrow) + { + LoadCbaL(); + keyConsumed = ETrue; + } + + if (aKeyEvent.iCode == EKeyOK) + { + TryExitL(EAknSoftkeyOk); + keyConsumed = ETrue; + } + else if (aKeyEvent.iCode == EKeyEscape) + { + TryExitL(EAknSoftkeyBack); + keyConsumed = ETrue; + } + } + } + + if (keyConsumed) + { + return EKeyWasConsumed; + } + + return CEikDialog::OfferKeyEventL(aKeyEvent, aType); + } + +// --------------------------------------------------------- +// CSpdiaGridDlgVPbk::FocusChanged() +// Changes focus. +// --------------------------------------------------------- +// +void CSpdiaGridDlgVPbk::FocusChanged(TDrawNow aDrawNow) + { + if (IsFocused() && aDrawNow == EDrawNow && iControl->UpdateFlag()) + { + TRAP_IGNORE(iControl->CreateDataL(*iGrid)); + iControl->SetUpdateFlag(EFalse); + } + } + +// --------------------------------------------------------- +// CSpdiaGridDlgVPbk::LoadCbaL() +// Loads CBA buttons. +// --------------------------------------------------------- +// +void CSpdiaGridDlgVPbk::LoadCbaL() + { + TInt id(R_AVKON_SOFTKEYS_BACK); + if (iGrid->CurrentDataIndex() != iControl->VMBoxPosition()) + { + id = R_SPDCTRL_SOFTKEYS_ASSIGN_BACK_ASSIGN; + } + if (id != iCbaID) + { + iCbaID = id; + ButtonGroupContainer().SetCommandSetL(id); + ButtonGroupContainer().DrawNow(); + } + iPrevIndex = iGrid->CurrentDataIndex(); + } + +// --------------------------------------------------------- +// CSpdiaGridDlgVPbk::HandleResourceChange() +// Handle layout and skin change event. +// --------------------------------------------------------- +// +void CSpdiaGridDlgVPbk::HandleResourceChange(TInt aType) + { + TRect mainPaneRect ; + TRect statusPaneRect; + + if( aType == KEikDynamicLayoutVariantSwitch ) + { + if (Layout_Meta_Data::IsLandscapeOrientation()) + { + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane,mainPaneRect); + } + else + { + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane,mainPaneRect); + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStatusPane,statusPaneRect); + mainPaneRect.iTl= statusPaneRect.iTl; + } + SetRect(mainPaneRect); + DrawNow(); + } + else + { + CAknDialog::HandleResourceChange(aType); + } + } + + // --------------------------------------------------------- +// CSpdiaGridDlg::HandleDialogPageEventL() +// Handles the events on the dialog page (for Touch) +// --------------------------------------------------------- +// +void CSpdiaGridDlgVPbk::HandleDialogPageEventL(TInt /*aEventId*/) + { + //Get the current Index + TInt index(iGrid->CurrentDataIndex()); + //If current index is the previous index, then try opening it + if(index == iPrevIndex) + { + + TryExitL(EAknSoftkeyOk); + } + else //else load the cba buttons + { + LoadCbaL(); + } + + } +// End of File