|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1999 **/ /**********************************************************************/
/*
snappp.h Brings up the Snapin property page FILE HISTORY: */
// Snappp.cpp : implementation file
//
#include "stdafx.h"
#include "Snappp.h"
#include "root.h"
#include "server.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
#define MILLISEC_PER_MINUTE 60 * 1000
/////////////////////////////////////////////////////////////////////////////
// CSnapinPropGeneral property page
IMPLEMENT_DYNCREATE(CSnapinPropGeneral, CPropertyPageBase)
CSnapinPropGeneral::CSnapinPropGeneral() : CPropertyPageBase(CSnapinPropGeneral::IDD) { //{{AFX_DATA_INIT(CSnapinPropGeneral)
m_fLongName = FALSE; m_nOrderByName = 0; m_fValidateServers = FALSE; //}}AFX_DATA_INIT
}
CSnapinPropGeneral::~CSnapinPropGeneral() { }
void CSnapinPropGeneral::DoDataExchange(CDataExchange* pDX) { CPropertyPageBase::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSnapinPropGeneral)
DDX_Control(pDX, IDC_CHECK2, m_checkValidateServers); DDX_Check(pDX, IDC_CHECK1, m_fLongName); DDX_Radio(pDX, IDC_RADIO1, m_nOrderByName); DDX_Control(pDX, IDC_CHECK1, m_checkLongName); DDX_Control(pDX, IDC_RADIO1, m_buttonSortByName); DDX_Control(pDX, IDC_RADIO2, m_buttonSortByIP); DDX_Check(pDX, IDC_CHECK2, m_fValidateServers); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSnapinPropGeneral, CPropertyPageBase) //{{AFX_MSG_MAP(CSnapinPropGeneral)
ON_BN_CLICKED(IDC_CHECK2, OnChange) ON_BN_CLICKED(IDC_CHECK1, OnChange) ON_BN_CLICKED(IDC_RADIO1, OnChange) ON_BN_CLICKED(IDC_RADIO2, OnChange) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSnapinPropGeneral message handlers
BOOL CSnapinPropGeneral::OnApply() { if(!IsDirty()) return TRUE;
UpdateData();
GetHolder()->EnablePeekMessageDuringNotifyConsole(TRUE);
// get the root node
SPITFSNode spRootNode; CWinsRootHandler * pRoot;
spRootNode = ((CSnapinProperties*)(GetHolder()))->GetNode(); pRoot = GETHANDLER(CWinsRootHandler, spRootNode);
// set the values in the root handler
if (m_fValidateServers) pRoot->m_dwFlags |= FLAG_VALIDATE_CACHE; else pRoot->m_dwFlags &= ~FLAG_VALIDATE_CACHE;
// need to do this bcoz' changing the server order and the display name takes a
// long time
BOOL fOrderByName = (m_nOrderByName == 0) ? TRUE : FALSE;
m_bDisplayServerOrderChanged = (fOrderByName == pRoot->GetOrderByName()) ? FALSE : TRUE;
m_bDisplayFQDNChanged = (m_fLongName == pRoot->GetShowLongName()) ? FALSE : TRUE;
// don't do anything, if the properties remained the same
if (!m_bDisplayFQDNChanged && !m_bDisplayServerOrderChanged) return TRUE; // set the servername of the rootnode to the one updated
pRoot->SetShowLongName(m_fLongName); pRoot->SetOrderByName(fOrderByName);
spRootNode->SetData(TFS_DATA_DIRTY, TRUE);
return CPropertyPageBase::OnApply(); }
BOOL CSnapinPropGeneral::OnInitDialog() { CPropertyPageBase::OnInitDialog();
// get the root node
// now add the node to the tree
SPITFSNode spRootNode; CWinsRootHandler * pRoot;
spRootNode = ((CSnapinProperties*)(GetHolder()))->GetNode(); pRoot = GETHANDLER(CWinsRootHandler, spRootNode);
m_uImage = (UINT) spRootNode->GetData(TFS_DATA_IMAGEINDEX);
m_fLongName = pRoot->GetShowLongName(); BOOL fOrderByName = pRoot->GetOrderByName();
m_nOrderByName = (fOrderByName) ? 0 : 1;
if (m_fLongName) m_checkLongName.SetCheck(TRUE); else m_checkLongName.SetCheck(FALSE);
if (m_nOrderByName == 0) { m_buttonSortByName.SetCheck(TRUE); m_buttonSortByIP.SetCheck(FALSE); } else { m_buttonSortByName.SetCheck(FALSE); m_buttonSortByIP.SetCheck(TRUE); }
if (pRoot->m_dwFlags & FLAG_VALIDATE_CACHE) m_checkValidateServers.SetCheck(TRUE); else m_checkValidateServers.SetCheck(FALSE);
// load the correct icon
for (int i = 0; i < ICON_IDX_MAX; i++) { if (g_uIconMap[i][1] == m_uImage) { HICON hIcon = LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(g_uIconMap[i][0])); if (hIcon) ((CStatic *) GetDlgItem(IDC_STATIC_ICON))->SetIcon(hIcon); break; } }
SetDirty(FALSE); return TRUE; }
/////////////////////////////////////////////////////////////////////////////
//
// CSnapinProperties holder
//
/////////////////////////////////////////////////////////////////////////////
CSnapinProperties::CSnapinProperties ( ITFSNode * pNode, IComponentData * pComponentData, ITFSComponentData * pTFSCompData, LPCTSTR pszSheetName ) : CPropertyPageHolderBase(pNode, pComponentData, pszSheetName) { m_bAutoDeletePages = FALSE; // we have the pages as embedded members
m_bTheme = TRUE;
AddPageToList((CPropertyPageBase*) &m_pageGeneral); Assert(pTFSCompData != NULL); m_spTFSCompData.Set(pTFSCompData); }
CSnapinProperties::~CSnapinProperties() { RemovePageFromList((CPropertyPageBase*) &m_pageGeneral, FALSE); }
BOOL CSnapinPropGeneral::OnPropertyChange(BOOL bScope, LONG_PTR * ChangeMask) { SPITFSNode spRootNode; CWinsRootHandler * pRoot;
spRootNode = ((CSnapinProperties*)(GetHolder()))->GetNode(); pRoot = GETHANDLER(CWinsRootHandler, spRootNode);
// enumerate thro' all the nodes
HRESULT hr = hrOK; SPITFSNodeEnum spNodeEnum; SPITFSNodeEnum spNodeEnumAdd; SPITFSNode spCurrentNode; ULONG nNumReturned = 0; BEGIN_WAIT_CURSOR;
if (m_bDisplayFQDNChanged) { CHAR szStringName[MAX_PATH] = {0}; // get the enumerator for this node
spRootNode->GetEnum(&spNodeEnum);
spNodeEnum->Next(1, &spCurrentNode, &nNumReturned); while (nNumReturned) { // if the status node is encountered, just ignore
const GUID *pGuid;
pGuid = spCurrentNode->GetNodeType();
if(*pGuid == GUID_WinsServerStatusNodeType) { spCurrentNode.Release(); // get the next Server in the list
spNodeEnum->Next(1, &spCurrentNode, &nNumReturned);
continue; }
// walk the list of servers
CWinsServerHandler * pServer = GETHANDLER(CWinsServerHandler, spCurrentNode);
pServer->SetDisplay(spCurrentNode, m_fLongName);
spCurrentNode.Release(); // get the next Server in the list
spNodeEnum->Next(1, &spCurrentNode, &nNumReturned);
}// while
}
END_WAIT_CURSOR;
BOOL fValidate = pRoot->m_fValidate;
// turn off validation if it is on.
pRoot->m_fValidate = FALSE;
if (spNodeEnum) spNodeEnum.Set(NULL);
if (m_bDisplayServerOrderChanged) { const GUID *pGuid; CTFSNodeList tfsNodeList;
// get the enumerator for this node
spRootNode->GetEnum(&spNodeEnum);
// first remove all of the server nodes from the UI
spNodeEnum->Next(1, &spCurrentNode, &nNumReturned); while (nNumReturned) { pGuid = spCurrentNode->GetNodeType();
if (*pGuid == GUID_WinsServerStatusNodeType) { spCurrentNode.Release(); // get the next Server in the list
spNodeEnum->Next(1, &spCurrentNode, &nNumReturned);
continue; }
// remove from the UI
spRootNode->ExtractChild(spCurrentNode);
// add ref the pointer since we need to put it on the list
// and adding it to the list doesn't addref
spCurrentNode->AddRef(); tfsNodeList.AddTail(spCurrentNode);
// reset our smart pointer
spCurrentNode.Set(NULL);
// get the next Server in the list
spNodeEnum->Next(1, &spCurrentNode, &nNumReturned); }
// Next put them back in sorted
while (tfsNodeList.GetCount() > 0) { // get the next Server in the list
spCurrentNode = tfsNodeList.RemoveHead();
// if the status node is encountered, just ignore
pGuid = spCurrentNode->GetNodeType();
if (*pGuid == GUID_WinsServerStatusNodeType) { spCurrentNode.Release(); continue; }
// walk the list of servers
CWinsServerHandler *pServer = GETHANDLER(CWinsServerHandler, spCurrentNode);
pRoot->AddServer(pServer->m_strServerAddress, FALSE, pServer->m_dwIPAdd, pServer->GetConnected(), pServer->m_dwFlags, pServer->m_dwRefreshInterval);
// releasing here destroys the object
spCurrentNode.Release(); } }
// restore the flag
pRoot->m_fValidate = fValidate;
return FALSE; }
void CSnapinPropGeneral::OnChange() { SetDirty(TRUE); }
|