diff -r 473321461bba -r e06095241a65 vpnui/vpnmanagementui/src/vpnmanagementuipolicyview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnui/vpnmanagementui/src/vpnmanagementuipolicyview.cpp Wed Sep 01 12:23:21 2010 +0100 @@ -0,0 +1,399 @@ +/* +* Copyright (c) 2003-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: VPN Policy view +* +*/ + + + +// INCLUDE FILES +#include +#include // for warning & information notes +#include +#include + +#include "vpnuiloader.h" +#include "vpnmanagementuipolicyview.h" +#include "vpnmanagementuipolicycontainer.h" +#include "vpnmanagementui.hrh" +#ifdef __SERIES60_HELP +#include // For HlpLauncher +#endif //__SERIES60_HELP + +/** MSK control Id. */ +const TInt KVpnMSKControlId = 3; + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CVpnManagementUiPolicyView::CVpnManagementUiPolicyView +// --------------------------------------------------------- +// +CVpnManagementUiPolicyView::CVpnManagementUiPolicyView( + CVpnUiLoader& aLoader ) : iLoader(aLoader) + { + } + +// --------------------------------------------------------- +// CVpnManagementUiPolicyView::~CVpnManagementUiPolicyView() +// Destructor +// --------------------------------------------------------- +// +CVpnManagementUiPolicyView::~CVpnManagementUiPolicyView() + { + if ( iPolicyContainer ) + { + AppUi()->RemoveFromViewStack(*this, iPolicyContainer); + delete iPolicyContainer; + } + } + +// --------------------------------------------------------- +// CVpnManagementUiPolicyView::NewL +// --------------------------------------------------------- +// +CVpnManagementUiPolicyView* CVpnManagementUiPolicyView::NewL( + const TRect& aRect, CVpnUiLoader& aLoader ) + { + CVpnManagementUiPolicyView* self = NewLC( aRect, aLoader ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------- +// CVpnManagementUiPolicyView::NewLC +// --------------------------------------------------------- +// +CVpnManagementUiPolicyView* CVpnManagementUiPolicyView::NewLC( + const TRect& /*aRect*/, CVpnUiLoader& aLoader ) + { + CVpnManagementUiPolicyView* self = + new ( ELeave ) CVpnManagementUiPolicyView( aLoader ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------- +// CVpnManagementUiPolicyView::ConstructL() +// EPOC two-phased constructor +// --------------------------------------------------------- +// +void CVpnManagementUiPolicyView::ConstructL() + { + BaseConstructL( R_VPNUI_POLICIES_VIEW ); + } + +// --------------------------------------------------------- +// CVpnManagementUiPolicyView::DynInitMenuPaneL( +// TInt aResourceId,CEikMenuPane* aMenuPane) +// Updates Options list with correct items depending on +// whether the listbox is empty or if it has any marked items +// --------------------------------------------------------- +// +void CVpnManagementUiPolicyView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) + { + if ( aResourceId == R_VPNUI_POLICIES_VIEW_MENU ) + { + TInt currentItem = iPolicyContainer->iListBox->CurrentItemIndex(); + + if ( currentItem == -1 ) + { + aMenuPane->SetItemDimmed( EVpnUiCmdPolicyDetails, ETrue ); + aMenuPane->SetItemDimmed( EVpnUiCmdDeletePolicy, ETrue ); + + } + + } + } + +// --------------------------------------------------------- +// CVpnManagementUiPolicyView::Id() const +// Returns Authority view id +// --------------------------------------------------------- +// +TUid CVpnManagementUiPolicyView::Id() const + { + return KVpnManagementUiPolicyViewId; + } + +// --------------------------------------------------------- +// CVpnManagementUiPolicyView::HandleCommandL(TInt aCommand) +// Handles Softkey and Options list commands +// --------------------------------------------------------- +// +void CVpnManagementUiPolicyView::HandleCommandL( TInt aCommand ) + { + switch ( aCommand ) + { + case EAknSoftkeyBack: + { + iLoader.ChangeViewL( KChangeViewPrevious ); + break; + } + case EAknCmdExit: + { + ((CAknViewAppUi*)iAvkonAppUi)->HandleCommandL( EAknCmdExit ); + break; + } + + case EVpnUiCmdPolicyDetails: + { + // Show details + PolicyDetailsL(iPolicyContainer->iListBox->CurrentItemIndex()); + break; + } + + + case EVpnUiCmdDeletePolicy: + { + //confirmation query + HBufC* temp; + + TVpnPolicyName policyName; + iCurrentPosition = iPolicyContainer->iListBox->CurrentItemIndex(); + iTopItem = iPolicyContainer->iListBox->TopItemIndex(); + + if (NotAssociatedToIapL(iCurrentPosition, policyName)) + { + temp = StringLoader::LoadLC( R_VPN_QUEST_DELETE_POLICY, policyName ); + } + else + { + temp = StringLoader::LoadLC( R_VPN_QUEST_DELETE_POLICY_ASSOCIATED ); + } + CAknQueryDialog* query = CAknQueryDialog::NewL( CAknQueryDialog::EConfirmationTone ); + TInt retval = query->ExecuteLD( R_CONFIRMATION_QUERY, *temp ); + CleanupStack::PopAndDestroy(); // temp + if ( retval ) + { + //Delete policy + iLoader.VpnApiWrapperL().DeletePolicyL(iPolicyContainer->iListBox->CurrentItemIndex()); + //Update listbox + iPolicyContainer->UpdateListBoxL(iCurrentPosition); + //Update iPolicyList + iLoader.VpnApiWrapperL().PolicyListL(); + iCurrentPosition = iPolicyContainer->iListBox->CurrentItemIndex(); + } + break; + } +#ifdef __SERIES60_HELP + case EAknCmdHelp: + { + HlpLauncher::LaunchHelpApplicationL( + iEikonEnv->WsSession(), AppUi()->AppHelpContextL() ); + break; + } +#endif //__SERIES60_HELP + + default: + { + AppUi()->HandleCommandL( aCommand ); + break; + } + } + } + +// --------------------------------------------------------- +// CVpnManagementUiPolicyView::HandleClientRectChange() +// --------------------------------------------------------- +// +void CVpnManagementUiPolicyView::HandleClientRectChange() + { + if ( iPolicyContainer ) + { + iPolicyContainer->SetRect( ClientRect() ); + } + } + +// --------------------------------------------------------- +// CVpnManagementUiPolicyView::DoActivateL +// Updates the view when opening it +// --------------------------------------------------------- +// +void CVpnManagementUiPolicyView::DoActivateL( + const TVwsViewId& /*aPrevViewId*/, + TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/) + { + if ( iPolicyContainer ) + { + ((CAknViewAppUi*)iAvkonAppUi)->RemoveFromViewStack( + *this, iPolicyContainer ); + } + iPolicyContainer = new (ELeave) CVpnManagementUiPolicyContainer( + *this, iLoader ); + + iPolicyContainer->SetMopParent( this ); + iPolicyContainer->ConstructL( + ClientRect(), iCurrentPosition, iTopItem ); + iLoader.ActivateTitleL( KViewTitlePolicyView ); + iLoader.PushDefaultNaviPaneL(); + + ((CAknViewAppUi*)iAvkonAppUi)->AddToStackL( *this, iPolicyContainer ); + iPolicyContainer->DrawListBoxL( iCurrentPosition, iTopItem ); + + SetMiddleSoftKeyL(EFalse); + } + +void CVpnManagementUiPolicyView::SetMiddleSoftKeyL(TBool aDrawNow) + { + if (iPolicyContainer->iListItemCount > 0) + { + SetMiddleSoftKeyLabelL(R_MSK_VPN_DETAILS, EVpnUiCmdPolicyDetails); + } + else + { + SetMiddleSoftKeyLabelL(R_MSK_INSTALL_VPN_POLICIES, EVpnUiCmdInstallPolicies); + } + + if (aDrawNow) + { + if (Cba()) + Cba()->DrawNow(); + } + } + + +void CVpnManagementUiPolicyView::SetMiddleSoftKeyLabelL( + TInt aResourceId, TInt aCommandId) + { + CEikButtonGroupContainer* cbaGroup = Cba(); + if (cbaGroup) + { + HBufC* text = HBufC::NewLC(KMaxLengthTextDetailsBody); + ReadResourceL(*text, aResourceId); + cbaGroup->RemoveCommandFromStack( + KVpnMSKControlId, EVpnUiCmdPolicyDetails); + cbaGroup->AddCommandToStackL( + KVpnMSKControlId, aCommandId, text->Des()); + CleanupStack::PopAndDestroy(text); + } + } + +// --------------------------------------------------------- +// CVpnManagementUiPolicyView::DoDeactivate() +// Saves focus position when closing view +// --------------------------------------------------------- +// +void CVpnManagementUiPolicyView::DoDeactivate() + { + if ( iPolicyContainer ) + { + AppUi()->RemoveFromViewStack( *this, iPolicyContainer ); + + delete iPolicyContainer; + iPolicyContainer = NULL; + } + } + +// --------------------------------------------------------- +// CVpnManagementUiPolicyView::Container() +// Returns iPolicyContainer +// --------------------------------------------------------- +// +CCoeControl* CVpnManagementUiPolicyView::Container() + { + return iPolicyContainer; + } + +// --------------------------------------------------------- +// CVpnManagementUiPolicyView::PolicyDetailsL() +// Creates the whole of policy details view +// Appends strings from both resources and VPN API to one +// message body text and displays it. +// --------------------------------------------------------- +// +void CVpnManagementUiPolicyView::PolicyDetailsL(TInt aIndex) + { + TVpnPolicyDetails policyDetails; + + iLoader.VpnApiWrapperL().GetPolicyDetailsL(aIndex,policyDetails); + HBufC* message = HBufC::NewLC(KMaxLengthTextDetailsBody); + + // Description: + ReadResourceL(*message, R_VPN_DETAIL_POLICY_DESCRIPTION ); + message->Des().Append(KVpnManagementUiEnter); + message->Des().Append(policyDetails.iDescription); + message->Des().Append(KVpnManagementUiEnterTwice); + + // Policy status: + ReadResourceL(*message, R_VPN_DETAIL_POLICY_STATUS ); + message->Des().Append(KVpnManagementUiEnter); + + if (policyDetails.iUsageStatus == EUsageStatusUnused) + ReadResourceL(*message, R_VPN_DETAIL_POLICY_NOT_ASSOCIATED ); + else if (policyDetails.iUsageStatus == EUsageStatusAssignedToIap) + ReadResourceL(*message, R_VPN_DETAIL_POLICY_ASSOCIATED ); + else if (policyDetails.iUsageStatus == EUsageStatusActive) + ReadResourceL(*message, R_VPN_DETAIL_POLICY_ACTIVE ); + + message->Des().Append(KVpnManagementUiEnterTwice); + + // Certificate status: + ReadResourceL(*message, R_VPN_DETAIL_CERT_STATUS ); + message->Des().Append(KVpnManagementUiEnter); + + if (policyDetails.iPkiStatus == EPkiStatusReady) + ReadResourceL(*message, R_VPN_DETAIL_CERT_STATUS_OK ); + else if (policyDetails.iPkiStatus == EPkiStatusCertExpired) + ReadResourceL(*message, R_VPN_DETAIL_CERT_STATUS_EXPIRED ); + else if (policyDetails.iPkiStatus == EPkiStatusNoCert) + ReadResourceL(*message, R_VPN_DETAIL_CERT_STATUS_MISSING ); + else if (policyDetails.iPkiStatus == EPkiStatusCertNotValidYet) + ReadResourceL(*message, R_VPN_DETAIL_CERT_STATUS_NOT_YET_VALID ); + + message->Des().Append(KVpnManagementUiEnterTwice); + + // Policy name: + ReadResourceL(*message, R_VPN_DETAIL_POLICY_NAME ); + message->Des().Append(KVpnManagementUiEnter); + message->Des().Append(policyDetails.iName); + message->Des().Append(KVpnManagementUiEnterTwice); + + // Header for the message query dialog + + CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL(*message); + dlg->PrepareLC(R_MESSAGE_QUERY_DETAILS_VIEW); + dlg->QueryHeading()->SetTextL(policyDetails.iName); + dlg->RunLD(); + + CleanupStack::PopAndDestroy(); // message + } + +TBool CVpnManagementUiPolicyView::NotAssociatedToIapL(TInt aIndex, TVpnPolicyName& aPolicyName) + { + TVpnPolicyDetails policyDetails; + iLoader.VpnApiWrapperL().GetPolicyDetailsL(aIndex,policyDetails); + aPolicyName = policyDetails.iName; + if (policyDetails.iUsageStatus == EUsageStatusUnused) + return ETrue; + else + return EFalse; + } + +// --------------------------------------------------------- +// CVpnManagementUiPolicyView::ReadResourceL +// Reads text from resource +// --------------------------------------------------------- +// +void CVpnManagementUiPolicyView::ReadResourceL(HBufC& aText, TInt aResource) + { + HBufC* text = StringLoader::LoadLC( aResource ); + aText.Des().Append(text->Des()); + CleanupStack::PopAndDestroy(); // text + } + + +// End of File +