|
|
/////////////////////////////////////////////////////////////////////////////////
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 2000-2002.
//
// File: SelectOIDDlg.cpp
//
// Contents: Implementation of CSelectOIDDlg
//
//----------------------------------------------------------------------------
//
#include "stdafx.h"
#include "certtmpl.h"
#include "SelectOIDDlg.h"
#include "NewApplicationOIDDlg.h"
#include "NewIssuanceOIDDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CSelectOIDDlg dialog
extern POLICY_OID_LIST g_policyOIDList;
CSelectOIDDlg::CSelectOIDDlg(CWnd* pParent, PCERT_EXTENSION pCertExtension, const bool bIsEKU, const PSTR* paszUsedOIDs) : CHelpDialog(CSelectOIDDlg::IDD, pParent), m_pCertExtension (pCertExtension), m_bIsEKU (bIsEKU), m_paszUsedOIDs (paszUsedOIDs), m_paszReturnedOIDs (0), m_paszReturnedFriendlyNames (0) { //{{AFX_DATA_INIT(CSelectOIDDlg)
//}}AFX_DATA_INIT
}
CSelectOIDDlg::~CSelectOIDDlg() { if ( m_paszReturnedOIDs ) delete [] m_paszReturnedOIDs;
if ( m_paszReturnedFriendlyNames ) delete [] m_paszReturnedFriendlyNames; }
void CSelectOIDDlg::DoDataExchange(CDataExchange* pDX) { CHelpDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSelectOIDDlg)
DDX_Control(pDX, IDC_OID_LIST, m_oidList); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSelectOIDDlg, CHelpDialog) //{{AFX_MSG_MAP(CSelectOIDDlg)
ON_BN_CLICKED(IDC_NEW_OID, OnNewOid) ON_LBN_SELCHANGE(IDC_OID_LIST, OnSelchangeOidList) ON_WM_DESTROY() ON_LBN_DBLCLK(IDC_OID_LIST, OnDblclkOidList) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSelectOIDDlg message handlers
void CSelectOIDDlg::OnNewOid() { INT_PTR iRet = 0; CString szFriendlyName; CString szOID;
if ( m_bIsEKU ) { CNewApplicationOIDDlg dlg (this);
CThemeContextActivator activator; iRet = dlg.DoModal (); if (IDOK == iRet ) { szFriendlyName = dlg.m_oidFriendlyName; szOID = dlg.m_oidValue; } } else { CNewIssuanceOIDDlg dlg (this);
CThemeContextActivator activator; iRet = dlg.DoModal (); if (IDOK == iRet ) { szFriendlyName = dlg.m_oidFriendlyName; szOID = dlg.m_oidValue; } } if ( IDOK == iRet ) { CPolicyOID* pPolicyOID = new CPolicyOID (szOID, szFriendlyName, m_bIsEKU ? CERT_OID_TYPE_APPLICATION_POLICY : CERT_OID_TYPE_ISSUER_POLICY); if ( pPolicyOID ) { g_policyOIDList.AddTail (pPolicyOID); int nIndex = m_oidList.AddString (szFriendlyName); if ( nIndex >= 0 ) { m_oidList.SetItemData (nIndex, (DWORD_PTR) new CString (szOID)); VERIFY (LB_ERR != m_oidList.SetSel (nIndex, TRUE)); VERIFY (LB_ERR !=m_oidList.SetTopIndex (nIndex)); EnableControls (); } } } }
BOOL CSelectOIDDlg::OnInitDialog() { CHelpDialog::OnInitDialog(); CString text;
if ( m_bIsEKU ) VERIFY (text.LoadString (IDS_ALL_APPLICATION_OIDS)); else { VERIFY (text.LoadString (IDS_ADD_ISSUANCE_POLICY)); SetWindowText (text);
VERIFY (text.LoadString (IDS_ADD_ISSUANCE_POLICY_HINT)); SetDlgItemText (IDC_ADD_POLICY_HINT, text);
VERIFY (text.LoadString (IDS_ALL_ISSUANCE_OIDS)); }
SetDlgItemText (IDC_OID_TYPE, text);
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 ( (m_bIsEKU && pPolicyOID->IsApplicationOID ()) || (!m_bIsEKU && pPolicyOID->IsIssuanceOID ()) ) { bool bFound = false;
// Don't display an OID that's already been used
if ( m_paszUsedOIDs ) { for (int nIndex = 0; m_paszUsedOIDs[nIndex]; nIndex++) { if ( !strcmp (pPolicyOID->GetOIDA (), m_paszUsedOIDs[nIndex]) ) { bFound = true; break; } } }
if ( !bFound ) { int nIndex = m_oidList.AddString (pPolicyOID->GetDisplayName ()); if ( nIndex >= 0 ) { m_oidList.SetItemData (nIndex, (DWORD_PTR) new CString (pPolicyOID->GetOIDW ())); } } } } }
EnableControls ();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CSelectOIDDlg::DoContextHelp (HWND hWndControl) { _TRACE(1, L"Entering CSelectOIDDlg::DoContextHelp\n"); switch (::GetDlgCtrlID (hWndControl)) { case IDC_OID_TYPE: case IDC_STATIC: break;
default: // Display context help for a control
if ( !::WinHelp ( hWndControl, GetContextHelpFile (), HELP_WM_HELP, (DWORD_PTR) g_aHelpIDs_IDD_SELECT_OIDS) ) { _TRACE(0, L"WinHelp () failed: 0x%x\n", GetLastError ()); } break; } _TRACE(-1, L"Leaving CSelectOIDDlg::DoContextHelp\n"); }
void CSelectOIDDlg::OnOK() { UpdateData (TRUE); int nSelCnt = m_oidList.GetSelCount (); if ( nSelCnt > 0 ) { int* pnSelItems = new int[nSelCnt]; if ( pnSelItems ) { if ( LB_ERR != m_oidList.GetSelItems (nSelCnt, pnSelItems) ) { m_paszReturnedOIDs = new CString[nSelCnt+1]; if ( m_paszReturnedOIDs ) { m_paszReturnedFriendlyNames = new CString[nSelCnt+1]; if ( m_paszReturnedFriendlyNames ) { for (int nIndex = 0; nIndex < nSelCnt; nIndex++) { m_paszReturnedOIDs[nIndex] = *(CString*) m_oidList.GetItemData (pnSelItems[nIndex]); m_oidList.GetText (pnSelItems[nIndex], m_paszReturnedFriendlyNames[nIndex]); } } } } delete [] pnSelItems; } }
CHelpDialog::OnOK(); }
void CSelectOIDDlg::EnableControls () { int nSel = m_oidList.GetSelCount (); GetDlgItem (IDOK)->EnableWindow (nSel >= 0); }
void CSelectOIDDlg::OnSelchangeOidList() { EnableControls (); }
void CSelectOIDDlg::OnDestroy() { CHelpDialog::OnDestroy(); int nCnt = m_oidList.GetCount (); for (int nIndex = 0; nIndex < nCnt; nIndex++) { CString* pszOID = (CString*) m_oidList.GetItemData (nIndex); if ( pszOID ) delete pszOID; } }
void CSelectOIDDlg::OnDblclkOidList() { OnOK (); }
|