--- /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 <aknmessagequerydialog.h>
+#include <aknnotewrappers.h> // for warning & information notes
+#include <vpnmanagementuirsc.rsg>
+#include <cdblen.h>
+
+#include "vpnuiloader.h"
+#include "vpnmanagementuipolicyview.h"
+#include "vpnmanagementuipolicycontainer.h"
+#include "vpnmanagementui.hrh"
+#ifdef __SERIES60_HELP
+#include <hlplch.h> // 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
+