windows-nt/Source/XPSP1/NT/net/mmc/dhcp/addtoss.cpp
2020-09-26 16:20:57 +08:00

190 lines
4.8 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1999 - 1999 **/
/**********************************************************************/
/*
addtoss.cpp
The add scope to superscope dialog
FILE HISTORY:
*/
#include "stdafx.h"
#include "AddToSS.h"
#include "server.h"
#include "scope.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAddScopeToSuperscope dialog
CAddScopeToSuperscope::CAddScopeToSuperscope
(
ITFSNode * pScopeNode,
LPCTSTR pszTitle,
CWnd* pParent /*=NULL*/
) : CBaseDialog(CAddScopeToSuperscope::IDD, pParent)
{
//{{AFX_DATA_INIT(CAddScopeToSuperscope)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_strTitle = pszTitle;
m_spScopeNode.Set(pScopeNode);
}
void CAddScopeToSuperscope::DoDataExchange(CDataExchange* pDX)
{
CBaseDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAddScopeToSuperscope)
DDX_Control(pDX, IDOK, m_buttonOk);
DDX_Control(pDX, IDC_LIST_SUPERSCOPES, m_listSuperscopes);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAddScopeToSuperscope, CBaseDialog)
//{{AFX_MSG_MAP(CAddScopeToSuperscope)
ON_LBN_SELCHANGE(IDC_LIST_SUPERSCOPES, OnSelchangeListSuperscopes)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAddScopeToSuperscope message handlers
BOOL CAddScopeToSuperscope::OnInitDialog()
{
CBaseDialog::OnInitDialog();
SPITFSNode spServerNode;
SPITFSNode spCurrentNode;
SPITFSNodeEnum spNodeEnum;
ULONG nNumReturned = 0;
m_spScopeNode->GetParent(&spServerNode);
spServerNode->GetEnum(&spNodeEnum);
spNodeEnum->Next(1, &spCurrentNode, &nNumReturned);
while (nNumReturned)
{
if (spCurrentNode->GetData(TFS_DATA_TYPE) == DHCPSNAP_SUPERSCOPE)
{
// found a superscope
//
CString strName;
CDhcpSuperscope * pSuperscope = GETHANDLER(CDhcpSuperscope, spCurrentNode);
strName = pSuperscope->GetName();
m_listSuperscopes.AddString(strName);
}
spCurrentNode.Release();
spNodeEnum->Next(1, &spCurrentNode, &nNumReturned);
}
SetButtons();
if (!m_strTitle.IsEmpty())
SetWindowText(m_strTitle);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CAddScopeToSuperscope::OnOK()
{
DWORD err;
CString strSuperscope;
// Get the currently selected node
int nCurSel = m_listSuperscopes.GetCurSel();
Assert(nCurSel != LB_ERR);
m_listSuperscopes.GetText(nCurSel, strSuperscope);
if (strSuperscope.IsEmpty())
Assert(FALSE);
// now try to set this scope as part of the superscope
CDhcpScope * pScope = GETHANDLER(CDhcpScope, m_spScopeNode);
BEGIN_WAIT_CURSOR;
err = pScope->SetSuperscope(strSuperscope, FALSE);
END_WAIT_CURSOR;
if (err != ERROR_SUCCESS)
{
::DhcpMessageBox(err);
return;
}
// that worked, now move the UI stuff around.
SPITFSNode spServerNode;
SPITFSNode spCurrentNode;
SPITFSNodeEnum spNodeEnum;
ULONG nNumReturned = 0;
m_spScopeNode->GetParent(&spServerNode);
spServerNode->GetEnum(&spNodeEnum);
// remove the scope from the UI
spServerNode->RemoveChild(m_spScopeNode);
pScope->SetInSuperscope(FALSE);
// find the superscope we want to add this scope to and refresh it so that
// the scope shows up in that node
spNodeEnum->Next(1, &spCurrentNode, &nNumReturned);
while (nNumReturned)
{
if (spCurrentNode->GetData(TFS_DATA_TYPE) == DHCPSNAP_SUPERSCOPE)
{
// found a superscope
CString strName;
CDhcpSuperscope * pSuperscope = GETHANDLER(CDhcpSuperscope, spCurrentNode);
strName = pSuperscope->GetName();
// is this the one?
if (strName.Compare(strSuperscope) == 0)
{
// this is the one we are adding to. Force a refresh.
pSuperscope->OnRefresh(spCurrentNode, NULL, 0, 0, 0);
break;
}
}
// go to the next one
spCurrentNode.Release();
spNodeEnum->Next(1, &spCurrentNode, &nNumReturned);
}
CBaseDialog::OnOK();
}
void CAddScopeToSuperscope::OnSelchangeListSuperscopes()
{
SetButtons();
}
void CAddScopeToSuperscope::SetButtons()
{
if (m_listSuperscopes.GetCurSel() != LB_ERR)
{
m_buttonOk.EnableWindow(TRUE);
}
else
{
m_buttonOk.EnableWindow(FALSE);
}
}