Windows-Server-2003/net/mmc/tapi/drivers.cpp

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);
}