348 lines
9.8 KiB
C++
348 lines
9.8 KiB
C++
/**********************************************************************/
|
|
/** 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);
|
|
}
|
|
|