190 lines
4.8 KiB
C++
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);
|
|
}
|
|
}
|