/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1998 **/ /**********************************************************************/ /* drivers.cpp Tapi drivers config dialog FILE HISTORY: */ #include "stdafx.h" #include "drivers.h" #include "tapidb.h" #include "server.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDriverSetup dialog CDriverSetup::CDriverSetup(ITFSNode * pServerNode, ITapiInfo * pTapiInfo, CWnd* pParent /*=NULL*/) : CBaseDialog(CDriverSetup::IDD, pParent) { //{{AFX_DATA_INIT(CDriverSetup) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_spServerNode.Set(pServerNode); m_spTapiInfo.Set(pTapiInfo); m_fDriverAdded = FALSE; } void CDriverSetup::DoDataExchange(CDataExchange* pDX) { CBaseDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDriverSetup) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDriverSetup, CBaseDialog) //{{AFX_MSG_MAP(CDriverSetup) ON_BN_CLICKED(IDC_BUTTON_ADD_DRIVER, OnButtonAdd) ON_BN_CLICKED(IDC_BUTTON_EDIT_DRIVER, OnButtonEdit) ON_BN_CLICKED(IDC_BUTTON_REMOVE_DRIVER, OnButtonRemove) ON_LBN_DBLCLK(IDC_LIST_DRIVERS, OnDblclkListDrivers) ON_LBN_SELCHANGE(IDC_LIST_DRIVERS, OnSelchangeListDrivers) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDriverSetup message handlers BOOL CDriverSetup::OnInitDialog() { AFX_MANAGE_STATE(AfxGetStaticModuleState( )); CBaseDialog::OnInitDialog(); CTapiProvider tapiProvider; int i, nIndex; // fill in the listbox with the providers that are installed. for (i = 0; i < m_spTapiInfo->GetProviderCount(); i++) { // add this provider to the listbox. m_spTapiInfo->GetProviderInfo(&tapiProvider, i); nIndex = ((CListBox *) GetDlgItem(IDC_LIST_DRIVERS))->AddString(tapiProvider.m_strName); ((CListBox *) GetDlgItem(IDC_LIST_DRIVERS))->SetItemData(nIndex, tapiProvider.m_dwProviderID); } ((CListBox *) GetDlgItem(IDC_LIST_DRIVERS))->SetCurSel(0); EnableButtons(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CDriverSetup::OnButtonAdd() { CAddDriver dlgAddDriver(m_spTapiInfo); if (dlgAddDriver.DoModal() == IDOK) { CTapiServer * pServer = GETHANDLER(CTapiServer, m_spServerNode); // add to listbox int nIndex = ((CListBox *) GetDlgItem(IDC_LIST_DRIVERS))->AddString(dlgAddDriver.m_tapiProvider.m_strName); ((CListBox *) GetDlgItem(IDC_LIST_DRIVERS))->SetItemData(nIndex, dlgAddDriver.m_tapiProvider.m_dwProviderID); // add to MMC UI pServer->AddProvider(m_spServerNode, &dlgAddDriver.m_tapiProvider); m_fDriverAdded = TRUE; } EnableButtons(); } void CDriverSetup::OnButtonEdit() { HRESULT hr = hrOK; int nCurSel; DWORD dwProviderID; nCurSel = ((CListBox *) GetDlgItem(IDC_LIST_DRIVERS))->GetCurSel(); dwProviderID = (DWORD) ((CListBox *) GetDlgItem(IDC_LIST_DRIVERS))->GetItemData(nCurSel); hr = m_spTapiInfo->ConfigureProvider(dwProviderID, GetSafeHwnd()); if (FAILED(hr)) { ::TapiMessageBox(WIN32_FROM_HRESULT(hr)); } } void CDriverSetup::OnButtonRemove() { AFX_MANAGE_STATE(AfxGetStaticModuleState( )); HRESULT hr = hrOK; int nCurSel, nCount; DWORD dwProviderID; CString strMessage; CTapiProvider tapiProvider; CTapiServer * pServer = GETHANDLER(CTapiServer, m_spServerNode); nCurSel = ((CListBox *) GetDlgItem(IDC_LIST_DRIVERS))->GetCurSel(); dwProviderID = (DWORD) ((CListBox *) GetDlgItem(IDC_LIST_DRIVERS))->GetItemData(nCurSel); m_spTapiInfo->GetProviderInfo(&tapiProvider, dwProviderID); AfxFormatString2(strMessage, IDS_WARN_PROVIDER_DELETE, tapiProvider.m_strName, pServer->GetName()); if (AfxMessageBox(strMessage, MB_YESNO) == IDYES) { Assert(m_spTapiInfo); BEGIN_WAIT_CURSOR; hr = m_spTapiInfo->RemoveProvider(dwProviderID, GetSafeHwnd()); if (FAILED(hr)) { ::TapiMessageBox(WIN32_FROM_HRESULT(hr)); } else { // remove from the list box ((CListBox *) GetDlgItem(IDC_LIST_DRIVERS))->DeleteString(nCurSel); // now remove from the MMC UI pServer->RemoveProvider(m_spServerNode, dwProviderID); // update the list of installed providers m_spTapiInfo->EnumProviders(); } END_WAIT_CURSOR; } // select another item in the listbox nCount = ((CListBox *) GetDlgItem(IDC_LIST_DRIVERS))->GetCount(); ((CListBox *) GetDlgItem(IDC_LIST_DRIVERS))->SetCurSel((nCurSel == nCount) ? nCount - 1 : nCurSel); EnableButtons(); } void CDriverSetup::OnDblclkListDrivers() { OnButtonEdit(); } void CDriverSetup::OnCancel() { // TODO: Add extra cleanup here CBaseDialog::OnCancel(); } void CDriverSetup::OnSelchangeListDrivers() { EnableButtons(); } void CDriverSetup::EnableButtons() { int nIndex = ((CListBox *) GetDlgItem(IDC_LIST_DRIVERS))->GetCurSel(); if (nIndex != LB_ERR) { DWORD dwProviderID = (DWORD) ((CListBox *) GetDlgItem(IDC_LIST_DRIVERS))->GetItemData(nIndex); CTapiProvider tapiProvider; m_spTapiInfo->GetProviderInfo(&tapiProvider, dwProviderID); // enable the appropriate buttons GetDlgItem(IDC_BUTTON_REMOVE_DRIVER)->EnableWindow(tapiProvider.m_dwFlags & AVAILABLEPROVIDER_REMOVABLE); GetDlgItem(IDC_BUTTON_EDIT_DRIVER)->EnableWindow(tapiProvider.m_dwFlags & AVAILABLEPROVIDER_CONFIGURABLE); } else { GetDlgItem(IDC_BUTTON_REMOVE_DRIVER)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_EDIT_DRIVER)->EnableWindow(FALSE); } } ///////////////////////////////////////////////////////////////////////////// // CAddDriver dialog CAddDriver::CAddDriver(ITapiInfo * pTapiInfo, CWnd* pParent /*=NULL*/) : CBaseDialog(CAddDriver::IDD, pParent) { //{{AFX_DATA_INIT(CAddDriver) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_spTapiInfo.Set(pTapiInfo); } void CAddDriver::DoDataExchange(CDataExchange* pDX) { CBaseDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAddDriver) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAddDriver, CBaseDialog) //{{AFX_MSG_MAP(CAddDriver) ON_BN_CLICKED(IDC_BUTTON_ADD_NEW_DRIVER, OnButtonAdd) ON_LBN_DBLCLK(IDC_LIST_NEW_DRIVERS, OnDblclkListNewDrivers) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CAddDriver message handlers BOOL CAddDriver::OnInitDialog() { CBaseDialog::OnInitDialog(); CTapiProvider tapiProvider; int i, j, nIndex; m_spTapiInfo->EnumAvailableProviders(); for (i = 0; i < m_spTapiInfo->GetAvailableProviderCount(); i++) { // add this provider to the listbox. m_spTapiInfo->GetAvailableProviderInfo(&tapiProvider, i); if (tapiProvider.m_dwFlags & AVAILABLEPROVIDER_INSTALLABLE) { BOOL bInstalled = FALSE; /* some TAPI providers can be installed mutliple times, so just add to the list and let the server return an error if it fails. for (j = 0; j < m_spTapiInfo->GetProviderCount(); j++) { CTapiProvider tapiProviderInstalled; m_spTapiInfo->GetProviderInfo(&tapiProviderInstalled, j); if (tapiProviderInstalled.m_strFilename.CompareNoCase(tapiProvider.m_strFilename) == 0) { // this provider is already installed... don't add bInstalled = TRUE; break; } } */ if (!bInstalled) { // this provider isn't installed yet... make it available to the user nIndex = ((CListBox *) GetDlgItem(IDC_LIST_NEW_DRIVERS))->AddString(tapiProvider.m_strName); ((CListBox *) GetDlgItem(IDC_LIST_NEW_DRIVERS))->SetItemData(nIndex, i); } } } ((CListBox *) GetDlgItem(IDC_LIST_NEW_DRIVERS))->SetCurSel(0); EnableButtons(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CAddDriver::OnButtonAdd() { int nCurSel, nIndex; HRESULT hr = hrOK; // get the info on the currently selected provider nCurSel = ((CListBox *) GetDlgItem(IDC_LIST_NEW_DRIVERS))->GetCurSel(); nIndex = (int) ((CListBox *) GetDlgItem(IDC_LIST_NEW_DRIVERS))->GetItemData(nCurSel); m_spTapiInfo->GetAvailableProviderInfo(&m_tapiProvider, nIndex); BEGIN_WAIT_CURSOR; // try to add the provider to the server hr = m_spTapiInfo->AddProvider(m_tapiProvider.m_strFilename, &m_tapiProvider.m_dwProviderID, GetSafeHwnd()); if (FAILED(hr)) { ::TapiMessageBox(WIN32_FROM_HRESULT(hr)); } else { // success... we're done here // update our installed provider list hr = m_spTapiInfo->EnumProviders(); EndDialog(IDOK); } END_WAIT_CURSOR; } void CAddDriver::OnDblclkListNewDrivers() { OnButtonAdd(); } void CAddDriver::EnableButtons() { int nCount = ((CListBox *) GetDlgItem(IDC_LIST_NEW_DRIVERS))->GetCount(); GetDlgItem(IDC_BUTTON_ADD_NEW_DRIVER)->EnableWindow(nCount > 0); }