250 lines
8.1 KiB
C++
250 lines
8.1 KiB
C++
// DomainListDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "resource.h"
|
|
#include "DomainListDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDomainListDlg dialog
|
|
|
|
|
|
CDomainListDlg::CDomainListDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CDomainListDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CDomainListDlg)
|
|
//}}AFX_DATA_INIT
|
|
bExcludeOne = FALSE;
|
|
}
|
|
|
|
|
|
void CDomainListDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CDomainListDlg)
|
|
DDX_Control(pDX, IDC_DOMAINTREE, m_domainTree);
|
|
DDX_Control(pDX, IDOK, m_NextBtn);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CDomainListDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CDomainListDlg)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDomainListDlg message handlers
|
|
|
|
BOOL CDomainListDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
//fill the tree control
|
|
FillTreeControl();
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CDomainListDlg::OnCancel()
|
|
{
|
|
// TODO: Add extra cleanup here
|
|
CString msg, title;
|
|
title.LoadString(IDS_EXIT_TITLE);
|
|
msg.LoadString(IDS_EXIT_MSG);
|
|
if (MessageBox(msg, title, MB_YESNO | MB_ICONQUESTION) == IDYES)
|
|
CDialog::OnCancel();
|
|
}
|
|
|
|
void CDomainListDlg::OnOK()
|
|
{
|
|
CString msg, title;
|
|
// TODO: Add extra validation here
|
|
//remove deselected items from the domain list
|
|
ModifyDomainList();
|
|
//if at least one domain was deselected, post a warning message
|
|
if (bExcludeOne)
|
|
{
|
|
title.LoadString(IDS_EXCLUDE_TITLE);
|
|
msg.LoadString(IDS_EXCLUDE_MSG);
|
|
if (MessageBox(msg, title, MB_YESNO | MB_ICONQUESTION) == IDYES)
|
|
CDialog::OnOK();
|
|
else
|
|
AddExclutedBackToList();
|
|
}
|
|
else
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
/*********************************************************************
|
|
* *
|
|
* Written by: Paul Thompson *
|
|
* Date: 17 AUG 2000 *
|
|
* *
|
|
* This protected member function of the CDomainListDlg class is *
|
|
* responsible for displaying all domains in the Protar database's *
|
|
* MigratedObjects table. *
|
|
* *
|
|
*********************************************************************/
|
|
|
|
//BEGIN FillTreeControl
|
|
void CDomainListDlg::FillTreeControl()
|
|
{
|
|
/* local variables */
|
|
POSITION currentPos; //current position in the list
|
|
CString domainName; //name of domain from the list
|
|
WCHAR sName[MAX_PATH]; //name in string format to pass to tree control
|
|
|
|
/* function body */
|
|
CWaitCursor wait; //Put up a wait cursor
|
|
|
|
//make sure the checkbox sytle is set for this tree control
|
|
long lStyles = GetWindowLong(m_domainTree.m_hWnd, GWL_STYLE);
|
|
//if checkbox style is not set, set it
|
|
if (!(lStyles & TVS_CHECKBOXES))
|
|
{
|
|
lStyles = lStyles | TVS_CHECKBOXES;
|
|
SetWindowLong(m_domainTree.m_hWnd, GWL_STYLE, lStyles);
|
|
}
|
|
|
|
//get the position and string of the first name in the list
|
|
currentPos = pDomainList->GetHeadPosition();
|
|
|
|
//while there is another entry to retrieve from the list, then
|
|
//get a name from the list and add it to the tree control
|
|
while (currentPos != NULL)
|
|
{
|
|
//get the next string in the list, starts with the first
|
|
domainName = pDomainList->GetNext(currentPos);
|
|
wcscpy(sName, (LPCTSTR)domainName);
|
|
AddOneItem((HTREEITEM)TVI_ROOT, sName);
|
|
}
|
|
|
|
wait.~CWaitCursor(); //remove the wait cursor
|
|
}
|
|
//END FillTreeControl
|
|
|
|
|
|
/*********************************************************************
|
|
* *
|
|
* Written by: Paul Thompson *
|
|
* Date: 17 AUG 2000 *
|
|
* *
|
|
* This protected member function of the CDomainListDlg class is *
|
|
* responsible for adding one item to the tree control in the *
|
|
* specified place. *
|
|
* *
|
|
*********************************************************************/
|
|
|
|
//BEGIN AddOneItem
|
|
HTREEITEM CDomainListDlg::AddOneItem(HTREEITEM hParent, LPTSTR szText)
|
|
{
|
|
/* local variables */
|
|
HTREEITEM hItem;
|
|
TV_INSERTSTRUCT tvstruct;
|
|
|
|
/* function body */
|
|
// fill the tree control
|
|
tvstruct.hParent = hParent;
|
|
tvstruct.hInsertAfter = TVI_SORT;
|
|
tvstruct.item.pszText = szText;
|
|
tvstruct.item.cchTextMax = MAX_PATH;
|
|
tvstruct.item.mask = TVIF_TEXT | TVIF_STATE;
|
|
tvstruct.item.state = INDEXTOSTATEIMAGEMASK(2);
|
|
tvstruct.item.stateMask = TVIS_STATEIMAGEMASK;
|
|
hItem = m_domainTree.InsertItem(&tvstruct);
|
|
|
|
//make sure item is checked
|
|
m_domainTree.SetCheck(hItem, TRUE);
|
|
|
|
return (hItem);
|
|
}
|
|
//END AddOneItem
|
|
|
|
|
|
/*********************************************************************
|
|
* *
|
|
* Written by: Paul Thompson *
|
|
* Date: 17 AUG 2000 *
|
|
* *
|
|
* This protected member function of the CDomainListDlg class is *
|
|
* responsible for removing list entries if they where deselected in *
|
|
* the tree control. *
|
|
* *
|
|
*********************************************************************/
|
|
|
|
//BEGIN ModifyDomainList
|
|
void CDomainListDlg::ModifyDomainList()
|
|
{
|
|
/* local variables */
|
|
HTREEITEM hItem; //current tree control item
|
|
POSITION currentPos; //current position in the list
|
|
CString domainName; //name of domain from the list
|
|
UINT ndx; //for loop counter
|
|
|
|
/* function body */
|
|
CWaitCursor wait; //Put up a wait cursor
|
|
|
|
//get the number of entries in the tree control
|
|
for (ndx=0; ndx < m_domainTree.GetCount(); ndx++)
|
|
{
|
|
if (ndx == 0)
|
|
hItem = m_domainTree.GetNextItem(NULL, TVGN_CHILD);
|
|
else
|
|
hItem = m_domainTree.GetNextItem(hItem, TVGN_NEXT);
|
|
|
|
domainName = m_domainTree.GetItemText(hItem);
|
|
//if deselected, remove from the list and add to the excluded list
|
|
if (m_domainTree.GetCheck(hItem) == 0)
|
|
{
|
|
//if we find the string in the list, remove it
|
|
currentPos = pDomainList->Find(domainName);
|
|
if (currentPos != NULL)
|
|
{
|
|
pDomainList->RemoveAt(currentPos);
|
|
pExcludeList->AddTail(domainName);
|
|
}
|
|
bExcludeOne = TRUE; //set class flag to tell one is excluded
|
|
}
|
|
}
|
|
|
|
wait.~CWaitCursor(); //remove the wait cursor
|
|
}
|
|
//END ModifyDomainList
|
|
|
|
|
|
/*********************************************************************
|
|
* *
|
|
* Written by: Paul Thompson *
|
|
* Date: 22 AUG 2000 *
|
|
* *
|
|
* This protected member function of the CDomainListDlg class is *
|
|
* responsible for taking the domain names out of the excluded list *
|
|
* and placing it back into the domain list. *
|
|
* *
|
|
*********************************************************************/
|
|
|
|
//BEGIN AddExclutedBackToList
|
|
void CDomainListDlg::AddExclutedBackToList()
|
|
{
|
|
/* local variables */
|
|
POSITION currentPos; //current position in the list
|
|
CString domainName; //name of domain from the list
|
|
/* function body */
|
|
currentPos = pExcludeList->GetHeadPosition();
|
|
while (currentPos != NULL)
|
|
{
|
|
domainName = pExcludeList->GetNext(currentPos);
|
|
pDomainList->AddTail(domainName);
|
|
}
|
|
pExcludeList->RemoveAll();
|
|
}
|
|
//END AddExclutedBackToList
|