|
|
/////////////////////////////////////////////////////////////////////////////////
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 2000-2002.
//
// File: AddApprovalDlg.cpp
//
// Contents: Implementation of CAddApprovalDlg
//
//----------------------------------------------------------------------------
// AddApprovalDlg.cpp : implementation file
//
#include "stdafx.h"
#include "certtmpl.h"
#include "AddApprovalDlg.h"
#include "PolicyOID.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
extern POLICY_OID_LIST g_policyOIDList;
/////////////////////////////////////////////////////////////////////////////
// CAddApprovalDlg dialog
CAddApprovalDlg::CAddApprovalDlg(CWnd* pParent, const PSTR* paszUsedApprovals) : CHelpDialog(CAddApprovalDlg::IDD, pParent), m_paszReturnedApprovals (0), m_paszUsedApprovals (paszUsedApprovals) { //{{AFX_DATA_INIT(CAddApprovalDlg)
//}}AFX_DATA_INIT
}
CAddApprovalDlg::~CAddApprovalDlg() { if ( m_paszReturnedApprovals ) { for (int nIndex = 0; m_paszReturnedApprovals[nIndex]; nIndex++) delete [] m_paszReturnedApprovals[nIndex]; delete [] m_paszReturnedApprovals; } }
void CAddApprovalDlg::DoDataExchange(CDataExchange* pDX) { CHelpDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAddApprovalDlg)
DDX_Control(pDX, IDC_APPROVAL_LIST, m_issuanceList); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAddApprovalDlg, CHelpDialog) //{{AFX_MSG_MAP(CAddApprovalDlg)
ON_LBN_SELCHANGE(IDC_APPROVAL_LIST, OnSelchangeApprovalList) ON_LBN_DBLCLK(IDC_APPROVAL_LIST, OnDblclkApprovalList) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAddApprovalDlg message handlers
BOOL CAddApprovalDlg::OnInitDialog() { CHelpDialog::OnInitDialog(); for (POSITION nextPos = g_policyOIDList.GetHeadPosition (); nextPos; ) { CPolicyOID* pPolicyOID = g_policyOIDList.GetNext (nextPos); if ( pPolicyOID ) { // If this is the Application OID dialog, show only application
// OIDS, otherwise if this is the Issuance OID dialog, show only
// issuance OIDs
if ( pPolicyOID->IsIssuanceOID () ) { bool bFound = false;
// Don't display an approval that's already been used
if ( m_paszUsedApprovals ) { for (int nIndex = 0; m_paszUsedApprovals[nIndex]; nIndex++) { if ( !strcmp (pPolicyOID->GetOIDA (), m_paszUsedApprovals[nIndex]) ) { bFound = true; break; } } }
if ( !bFound ) { int nIndex = m_issuanceList.AddString (pPolicyOID->GetDisplayName ()); if ( nIndex >= 0 ) { // security review 2/21/2002 BryanWal ok
LPSTR pszOID = new char[strlen (pPolicyOID->GetOIDA ())+1]; if ( pszOID ) { strcpy (pszOID, pPolicyOID->GetOIDA ()); m_issuanceList.SetItemDataPtr (nIndex, pszOID); } else break; } } } } }
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CAddApprovalDlg::EnableControls() { GetDlgItem (IDOK)->EnableWindow (m_issuanceList.GetSelCount () > 0); }
void CAddApprovalDlg::OnOK() { int nSelectedCnt = m_issuanceList.GetSelCount ();
// allocate an array of PSTR pointers and set each item to an approval.
// Set the last to NULL
if ( nSelectedCnt ) { int* pnSelItems = new int[nSelectedCnt]; if ( pnSelItems ) { if ( LB_ERR != m_issuanceList.GetSelItems (nSelectedCnt, pnSelItems) ) { m_paszReturnedApprovals = new PSTR[nSelectedCnt+1]; if ( m_paszReturnedApprovals ) { // security review 2/21/2002 BryanWal ok
::ZeroMemory (m_paszReturnedApprovals, sizeof (PSTR) * (nSelectedCnt+1)); for (int nIndex = 0; nIndex < nSelectedCnt; nIndex++) { PSTR pszPolicyOID = (PSTR) m_issuanceList.GetItemData (pnSelItems[nIndex]); if ( pszPolicyOID ) { // security review 2/21/2002 BryanWal ok
PSTR pNewStr = new char[strlen (pszPolicyOID) + 1]; if ( pNewStr ) { // security review 2/21/2002 BryanWal ok
strcpy (pNewStr, pszPolicyOID); m_paszReturnedApprovals[nIndex] = pNewStr; } else break; } } } } delete [] pnSelItems; } }
CHelpDialog::OnOK(); }
bool CAddApprovalDlg::ApprovalAlreadyUsed(PCSTR pszOID) const { bool bResult = false;
if ( m_paszUsedApprovals ) { for (int nIndex = 0; m_paszUsedApprovals[nIndex]; nIndex++) { if ( !strcmp (m_paszUsedApprovals[nIndex], pszOID) ) { bResult = true; break; } } }
return bResult; }
void CAddApprovalDlg::DoContextHelp (HWND hWndControl) { _TRACE(1, L"Entering CAddApprovalDlg::DoContextHelp\n"); switch (::GetDlgCtrlID (hWndControl)) { case IDC_STATIC: break;
default: // Display context help for a control
if ( !::WinHelp ( hWndControl, GetContextHelpFile (), HELP_WM_HELP, (DWORD_PTR) g_aHelpIDs_IDD_ADD_APPROVAL) ) { _TRACE(0, L"WinHelp () failed: 0x%x\n", GetLastError ()); } break; } _TRACE(-1, L"Leaving CAddApprovalDlg::DoContextHelp\n"); }
void CAddApprovalDlg::OnSelchangeApprovalList() { EnableControls (); }
void CAddApprovalDlg::OnDblclkApprovalList() { OnOK (); }
|