///////////////////////////////////////////////////////////////////////////////// // // Microsoft Windows // Copyright (C) Microsoft Corporation, 2000-2001. // // 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 ) { LPSTR pszOID = new CHAR[strlen (pPolicyOID->GetOIDA ())+1]; if ( pszOID ) { strcpy (pszOID, pPolicyOID->GetOIDA ()); m_issuanceList.SetItemDataPtr (nIndex, pszOID); } } } } } } 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 ) { ::ZeroMemory (m_paszReturnedApprovals, sizeof (PSTR) * (nSelectedCnt+1)); for (int nIndex = 0; nIndex < nSelectedCnt; nIndex++) { PSTR pszPolicyOID = (PSTR) m_issuanceList.GetItemData (pnSelItems[nIndex]); if ( pszPolicyOID ) { PSTR pNewStr = new CHAR[strlen (pszPolicyOID) + 1]; if ( pNewStr ) { 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 (); }