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