diff -r 000000000000 -r 164170e6151a pkiutilities/SecModUI/src/SecModUIViewAccess.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkiutilities/SecModUI/src/SecModUIViewAccess.cpp Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,503 @@ +/* +* Copyright (c) 2005-2009 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 the CSecModUIViewAccess class +* +*/ + + +// INCLUDE FILES +#include "SecModUIContainerAccess.h" +#include "SecModUIViewAccess.h" +#include "SecModUIModel.h" +#include "SecModUISyncWrapper.h" +#include "secmodui.hrh" +#include +#include +#include +#include +#include +#include + +// CONSTANTS + +// ================= MEMBER FUNCTIONS ======================= + +// ----------------------------------------------------------------------------- +// CSecModUIViewAccess::CSecModUIViewAccess +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CSecModUIViewAccess::CSecModUIViewAccess(CSecModUIModel& aModel): + CSecModUIViewBase(aModel) + { + } + +// --------------------------------------------------------- +// CSecModUIViewAccess::ConstructL(const TRect& aRect) +// EPOC two-phased constructor +// --------------------------------------------------------- +// +void CSecModUIViewAccess::ConstructL() + { + BaseConstructL( R_SECMODUI_VIEW_ACCESS ); + } + +// --------------------------------------------------------- +// CSecModUIViewAccess::~CSecModUIViewAccess() +// destructor +// --------------------------------------------------------- +// +CSecModUIViewAccess::~CSecModUIViewAccess() + { + + } + +// --------------------------------------------------------- +// CSecModUIViewCode::NewLC +// Two-phased constructor. +// --------------------------------------------------------- +// +CSecModUIViewAccess* CSecModUIViewAccess::NewLC(CSecModUIModel& aModel) + { + CSecModUIViewAccess* self = new (ELeave) CSecModUIViewAccess(aModel); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------- +// TUid CSecModUIViewAccess::Id() +// +// --------------------------------------------------------- +// +TUid CSecModUIViewAccess::Id() const + { + return KSecModUIViewAccessId; + } + +// --------------------------------------------------------- +// void CSecModUIViewCode::CreateContainerL() +// Creates container +// --------------------------------------------------------- +// +void CSecModUIViewAccess::CreateContainerL() + { + iContainer = new (ELeave) CSecModUIContainerAccess(iModel, this); + } + +// --------------------------------------------------------- +// CSecModUIViewAccess::AddNavipaneLabelL() +// Default implementation is empty +// --------------------------------------------------------- +// +void CSecModUIViewAccess::AddNaviPaneLabelL() + { + DoAddNaviPaneL(R_NAVIPANE_ACCESS_TEXT); + } + +// --------------------------------------------------------- +// CSecModUIViewAccess::HandleCommandL(TInt aCommand) +// takes care of view command handling +// --------------------------------------------------------- +// +void CSecModUIViewAccess::HandleCommandL(TInt aCommand) + { + if (iModel.Wrapper().IsActive()) + { + return; + } + switch ( aCommand ) + { + case ESecModUICmdChange: + { + HandleChangeL(); + break; + } + case ESecModUICmdUnblock: + { + iModel.UnblockPinL(KPinGIndex); + UpdateListBoxItemL(EIndexCodeStatus); + UpdateListBoxItemL(EIndexCodeRequest); + UpdateCbaL(); + break; + } + case ESecModUICmdClose: + { + iModel.CloseAuthObjL(KPinGIndex); + UpdateListBoxItemL(EIndexCodeStatus); + UpdateCbaL(); + break; + } + case EAknSoftkeyChange: + { + HandleChangeL(); + break; + } + case EAknSoftkeyClose: + { + iModel.CloseAuthObjL(KPinGIndex); + UpdateListBoxItemL(EIndexCodeStatus); + UpdateCbaL(); + break; + } + + case EAknSoftkeyUnlock: + { + iModel.UnblockPinL(KPinGIndex); + UpdateListBoxItemL(EIndexCodeStatus); + UpdateListBoxItemL(EIndexCodeRequest); + UpdateCbaL(); + break; + } + default: + { + CSecModUIViewBase::HandleCommandL( aCommand ); + break; + } + } + } + +// --------------------------------------------------------- +// CSecModUIViewAccess::HandleChangeL() +// takes care of Change command handling +// --------------------------------------------------------- +// +void CSecModUIViewAccess::HandleChangeL() + { + TInt currentItem = iContainer->ListBox().CurrentItemIndex(); + + switch (currentItem) + { + case EIndexCodeLabel: + { + iModel.ChangeOrUnblockPinL(KPinGIndex); + UpdateListBoxItemL(EIndexCodeStatus); + UpdateCbaL(); + break; + } + case EIndexCodeRequest: + { + if (KErrCancel != iModel.ChangeCodeRequestL(KPinGIndex)) + { + UpdateListBoxItemL(EIndexCodeRequest); + UpdateListBoxItemL(EIndexCodeStatus); + UpdateCbaL(); + } + break; + } + default: + { + break; + } + } + } +// --------------------------------------------------------- +// CSecModUIViewAccess::HandleForegroundEventL() +// --------------------------------------------------------- +// +void CSecModUIViewAccess::HandleForegroundEventL(TBool aForeground) + { + if( aForeground && !iModel.Wrapper().IsActive() ) + { + UpdateListBoxItemL(EIndexCodeRequest); + UpdateListBoxItemL(EIndexCodeStatus); + UpdateCbaL(); + } + } + + +// --------------------------------------------------------- +// CSecModUIViewAccess::UpdateListBoxItemL(TInt aIndex) +// Updates listbox item +// --------------------------------------------------------- +// +void CSecModUIViewAccess::UpdateListBoxItemL(TInt aIndex) + { + TBuf item; + CDesCArray* itemArray = STATIC_CAST(CDesCArray*, + iContainer->ListBox().Model()->ItemTextArray()); + switch(aIndex) + { + case EIndexCodeRequest: + { + iModel.PINRequestItemL(KPinGIndex, item); + break; + } + case EIndexCodeStatus: + { + iModel.PINStatusItemL(KPinGIndex, item, EFalse); + break; + } + default: + { + return; + } + } + itemArray->Delete(aIndex); + itemArray->InsertL(aIndex, item); + iContainer->ListBox().HandleItemAdditionL(); + iContainer->DrawNow(); + } + +// --------------------------------------------------------- +// CSecModUIViewAccess::UpdateCbaL() +// Updates Cba area +// --------------------------------------------------------- +// +void CSecModUIViewAccess::UpdateCbaL() + { + TInt currentItem = iContainer->ListBox().CurrentItemIndex(); + switch (currentItem) + { + case EIndexCodeLabel: + { + if( iModel.PinChangeable(KPinGIndex) ) + { + SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK_CHANGE); + } + else + { + if( !iModel.PinUnblockable(KPinGIndex) ) + { + SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK); + } + else + { + SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK_UNBLOCK); + } + } + break; + } + case EIndexCodeRequest: + { + if( iModel.PinRequestChangeable(KPinGIndex) ) + { + SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK_CHANGE); + } + else + { + if( !iModel.PinUnblockable(KPinGIndex) ) + { + SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK); + } + else + { + SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK_UNBLOCK); + } + } + break; + } + case EIndexCodeStatus: + { + if( !iModel.PinChangeable(KPinGIndex) && iModel.PinUnblockable(KPinGIndex)) + { + SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK_UNBLOCK); + } + else if(iModel.PinOpen(KPinGIndex)) + { + SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK_CLOSE); + } + else + { + SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK); + } + + break; + } + default: + { + break; + } + } + } + + +// --------------------------------------------------------- +// CSecModUIViewAccess::SetCbaL( TInt aCbaResourceId ) +// Sets Cba area +// --------------------------------------------------------- +// +void CSecModUIViewAccess::SetCbaL( TInt aCbaResourceId ) + { + CEikButtonGroupContainer* cba = Cba(); + cba->SetCommandSetL(aCbaResourceId); + cba->DrawNow(); + } + + +// --------------------------------------------------------- +// TUid CSecModUIViewAccess::DynInitMenuPaneL( +// TInt aResourceId, CEikMenuPane* aMenuPane) +// +// --------------------------------------------------------- +// +void CSecModUIViewAccess::DynInitMenuPaneL( + TInt aResourceId, + CEikMenuPane* aMenuPane) + { + if( R_SECMODUI_VIEW_ACCESS_MENU == aResourceId ) + { + if( aResourceId == !FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + aMenuPane->DeleteMenuItem( EAknCmdHelp ); //remove help + } + + TInt currentItem = iContainer->ListBox().CurrentItemIndex(); + if( currentItem == EIndexCodeLabel ) + { + if( !iModel.PinChangeable(KPinGIndex) ) + { + aMenuPane->SetItemDimmed( ESecModUICmdChange, ETrue ); + } + } + else if( currentItem == EIndexCodeRequest ) + { + if( !iModel.PinRequestChangeable(KPinGIndex) ) + { + aMenuPane->SetItemDimmed( ESecModUICmdChange, ETrue ); + } + } + else // it is EIndexCodeStatus + { + aMenuPane->SetItemDimmed( ESecModUICmdChange, ETrue ); + } + + if( !iModel.PinUnblockable(KPinGIndex) ) + { + aMenuPane->SetItemDimmed( ESecModUICmdUnblock, ETrue ); + } + if( !iModel.PinOpen(KPinGIndex) ) + { + aMenuPane->SetItemDimmed( ESecModUICmdClose, ETrue ); + } + } + } + +// --------------------------------------------------------- +// CSecModUIViewAccess::HandleEnterKeyL(TInt aIndex) +// +// --------------------------------------------------------- +// +void CSecModUIViewAccess::HandleEnterKeyL(TInt aIndex) + { + switch(aIndex) + { + case EIndexCodeLabel: + { + HandleChangeL(); + break; + } + case EIndexCodeRequest: + { + HandleChangeL(); + break; + } + case EIndexCodeStatus: + { + iModel.CloseAuthObjL(KPinGIndex); + UpdateListBoxItemL(EIndexCodeStatus); + UpdateCbaL(); + break; + } + default: + { + break; + } + } + } + +// --------------------------------------------------------- +// CSecModUIViewAccess::HandleListBoxEventL( +// CEikListBox* aListBox, TListBoxEvent aEventType) +// --------------------------------------------------------- +// +void CSecModUIViewAccess::HandleListBoxEventL( + CEikListBox* aListBox, + TListBoxEvent aEventType) + { + if(iModel.Wrapper().IsActive()) + { + return; + } + + TInt index = aListBox->CurrentItemIndex(); + + switch( aEventType ) + { + case EEventEnterKeyPressed: + case EEventItemDoubleClicked: + case EEventItemSingleClicked: + { + HandleEnterKeyL(index); + break; + } + default: + { + break; + } + } + } + + +// --------------------------------------------------------- +// CSecModUIViewAccess::DoDeactivate() +// +// --------------------------------------------------------- +// +void CSecModUIViewAccess::DoActivateL( + const TVwsViewId& aPrevViewId,TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/) + { + + if (KNullUid == iPrevViewId.iViewUid) + { + iPrevViewId = aPrevViewId; + } + SetTitlePaneL(); + AddNaviPaneLabelL(); + + if (!iContainer) + { + CreateContainerL(); + iContainer->SetMopParent(this); + iContainer->ConstructL(ClientRect()); + iContainer->ListBox().SetListBoxObserver(this); + AppUi()->AddToStackL(*this, iContainer); + } + iContainer->MakeVisible(ETrue); + iContainer->SetRect(ClientRect()); + iContainer->ActivateL(); + + UpdateCbaL(); + } + +// --------------------------------------------------------- +// CSecModUIViewAccess::DoDeactivate() +// +// --------------------------------------------------------- +// +void CSecModUIViewAccess::DoDeactivate() + { + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + } + + delete iContainer; + iContainer = NULL; + } + +// End of File +