540 lines
9.5 KiB
C++
540 lines
9.5 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 1994-95 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
sdomdlg.cpp
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Select domain dialog implementation.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Don Ryan (donryan) 20-Jan-1995
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
User Mode - Win32
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "llsmgr.h"
|
||
|
#include "sdomdlg.h"
|
||
|
#include <lmerr.h>
|
||
|
#include <lmcons.h>
|
||
|
#include <lmapibuf.h>
|
||
|
extern "C" {
|
||
|
#include <icanon.h>
|
||
|
}
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#undef THIS_FILE
|
||
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CSelectDomainDialog, CDialog)
|
||
|
//{{AFX_MSG_MAP(CSelectDomainDialog)
|
||
|
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_SELECT_DOMAIN_DOMAINS, OnItemExpandingDomains)
|
||
|
ON_NOTIFY(TVN_SELCHANGED, IDC_SELECT_DOMAIN_DOMAINS, OnSelChangedDomain)
|
||
|
ON_NOTIFY(NM_DBLCLK, IDC_SELECT_DOMAIN_DOMAINS, OnDblclkDomain)
|
||
|
ON_NOTIFY(NM_RETURN, IDC_SELECT_DOMAIN_DOMAINS, OnReturnDomains)
|
||
|
//}}AFX_MSG_MAP
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
|
||
|
CSelectDomainDialog::CSelectDomainDialog(CWnd* pParent /*=NULL*/)
|
||
|
: CDialog(CSelectDomainDialog::IDD, pParent)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Constructor for select domain dialog
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
pParent - parent window handle.
|
||
|
|
||
|
Return Values:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
//{{AFX_DATA_INIT(CSelectDomainDialog)
|
||
|
m_strDomain = _T("");
|
||
|
//}}AFX_DATA_INIT
|
||
|
|
||
|
m_bIsFocusDomain = FALSE;
|
||
|
m_bAreCtrlsInitialized = FALSE;
|
||
|
|
||
|
m_fUpdateHint = UPDATE_INFO_NONE;
|
||
|
}
|
||
|
|
||
|
|
||
|
void CSelectDomainDialog::DoDataExchange(CDataExchange* pDX)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Called by framework to exchange dialog data.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
pDX - data exchange object.
|
||
|
|
||
|
Return Values:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
CDialog::DoDataExchange(pDX);
|
||
|
//{{AFX_DATA_MAP(CSelectDomainDialog)
|
||
|
DDX_Control(pDX, IDC_SELECT_DOMAIN_DOMAIN, m_domEdit);
|
||
|
DDX_Control(pDX, IDC_SELECT_DOMAIN_DOMAINS, m_serverTree);
|
||
|
DDX_Text(pDX, IDC_SELECT_DOMAIN_DOMAIN, m_strDomain);
|
||
|
//}}AFX_DATA_MAP
|
||
|
}
|
||
|
|
||
|
|
||
|
void CSelectDomainDialog::InitCtrls()
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Initializes dialog controls.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Values:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
TV_ITEM tvItem = {0};
|
||
|
HTREEITEM htItem;
|
||
|
TV_INSERTSTRUCT tvInsert;
|
||
|
|
||
|
CString strLabel;
|
||
|
|
||
|
tvItem.mask = TVIF_TEXT|
|
||
|
TVIF_PARAM|
|
||
|
TVIF_CHILDREN|
|
||
|
TVIF_SELECTEDIMAGE|
|
||
|
TVIF_IMAGE;
|
||
|
|
||
|
tvItem.cChildren = TRUE;
|
||
|
|
||
|
tvItem.iImage = BMPI_ENTERPRISE;
|
||
|
tvItem.iSelectedImage = BMPI_ENTERPRISE;
|
||
|
|
||
|
strLabel.LoadString(IDS_ENTERPRISE);
|
||
|
tvItem.pszText = MKSTR(strLabel);
|
||
|
|
||
|
tvItem.lParam = (LPARAM)(LPVOID)LlsGetApp();
|
||
|
|
||
|
tvInsert.item = tvItem;
|
||
|
tvInsert.hInsertAfter = (HTREEITEM)TVI_ROOT;
|
||
|
tvInsert.hParent = (HTREEITEM)NULL;
|
||
|
|
||
|
VERIFY(htItem = m_serverTree.InsertItem(&tvInsert));
|
||
|
m_serverTree.SetImageList(&theApp.m_smallImages, TVSIL_NORMAL);
|
||
|
|
||
|
m_bAreCtrlsInitialized = TRUE; // validate now...
|
||
|
|
||
|
VERIFY(m_serverTree.Select(htItem, TVGN_CARET)); // redraw now...
|
||
|
|
||
|
if (!IsConnectionDropped(LlsGetLastStatus()))
|
||
|
{
|
||
|
m_serverTree.Expand(htItem, TVE_EXPAND);
|
||
|
}
|
||
|
else if (LlsGetApp()->IsFocusDomain())
|
||
|
{
|
||
|
CDomain* pDomain = (CDomain*)MKOBJ(LlsGetApp()->GetActiveDomain());
|
||
|
VALIDATE_OBJECT(pDomain, CDomain);
|
||
|
|
||
|
m_strDomain = pDomain->m_strName;
|
||
|
UpdateData(FALSE); // upload...
|
||
|
|
||
|
m_domEdit.SetSel(0,-1);
|
||
|
m_domEdit.SetFocus();
|
||
|
|
||
|
pDomain->InternalRelease(); // release now...
|
||
|
|
||
|
m_bIsFocusDomain = TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
BOOL CSelectDomainDialog::OnInitDialog()
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Message handler for WM_INITDIALOG.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Values:
|
||
|
|
||
|
Returns false if focus set manually.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
CDialog::OnInitDialog();
|
||
|
|
||
|
PostMessage(WM_COMMAND, ID_INIT_CTRLS);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
BOOL CSelectDomainDialog::OnCommand(WPARAM wParam, LPARAM lParam)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Message handler for WM_COMMAND.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
wParam - message specific.
|
||
|
lParam - message specific.
|
||
|
|
||
|
Return Values:
|
||
|
|
||
|
Returns true if message processed.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
if (wParam == ID_INIT_CTRLS)
|
||
|
{
|
||
|
if (!m_bAreCtrlsInitialized)
|
||
|
{
|
||
|
InitCtrls();
|
||
|
}
|
||
|
|
||
|
return TRUE; // processed...
|
||
|
}
|
||
|
|
||
|
return CDialog::OnCommand(wParam, lParam);
|
||
|
}
|
||
|
|
||
|
|
||
|
void CSelectDomainDialog::OnDblclkDomain(NMHDR* pNMHDR, LRESULT* pResult)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Notification handler for WM_LBUTTONDBLCLK.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
pNMHDR - notification message header.
|
||
|
pResult - return status.
|
||
|
|
||
|
Return Values:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
if (!m_strDomain.IsEmpty())
|
||
|
{
|
||
|
OnOK();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (theApp.OpenDocumentFile(NULL)) // open enterprise
|
||
|
{
|
||
|
m_fUpdateHint = UPDATE_DOMAIN_SELECTED;
|
||
|
EndDialog(IDOK);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
*pResult = 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
void CSelectDomainDialog::OnItemExpandingDomains(NMHDR* pNMHDR, LRESULT* pResult)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Notification handler for TVN_ITEMEXPANDING.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
pNMHDR - notification message header.
|
||
|
pResult - return status.
|
||
|
|
||
|
Return Values:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
|
||
|
TV_ITEM tvItem = pNMTreeView->itemNew;
|
||
|
|
||
|
if (!(tvItem.state & TVIS_EXPANDEDONCE))
|
||
|
{
|
||
|
BeginWaitCursor(); // hourglass...
|
||
|
|
||
|
CApplication* pApplication = (CApplication*)tvItem.lParam;
|
||
|
VALIDATE_OBJECT(pApplication, CApplication);
|
||
|
|
||
|
CDomains* pDomains;
|
||
|
|
||
|
if (pDomains = pApplication->m_pDomains)
|
||
|
{
|
||
|
pDomains->InternalAddRef();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
VARIANT va;
|
||
|
VariantInit(&va);
|
||
|
|
||
|
pDomains = (CDomains*)MKOBJ(pApplication->GetDomains(va));
|
||
|
}
|
||
|
|
||
|
if (pDomains)
|
||
|
{
|
||
|
InsertDomains(tvItem.hItem, pDomains);
|
||
|
pDomains->InternalRelease();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
theApp.DisplayLastStatus();
|
||
|
}
|
||
|
|
||
|
EndWaitCursor(); // hourglass...
|
||
|
}
|
||
|
|
||
|
*pResult = 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
void CSelectDomainDialog::OnOK()
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Message handler for IDOK.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Values:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
if (!UpdateData(TRUE))
|
||
|
return;
|
||
|
|
||
|
LPCTSTR pszDomain = m_strDomain;
|
||
|
|
||
|
while (_istspace(*pszDomain)) //
|
||
|
pszDomain = _tcsinc(pszDomain); // CString::TrimLeft does not work for UNICODE...
|
||
|
m_strDomain = pszDomain; //
|
||
|
|
||
|
m_strDomain.TrimRight();
|
||
|
|
||
|
if (!m_strDomain.IsEmpty())
|
||
|
{
|
||
|
DWORD NetStatus;
|
||
|
|
||
|
pszDomain = m_strDomain;
|
||
|
|
||
|
if ((pszDomain[0] == _T('\\')) &&
|
||
|
(pszDomain[1] == _T('\\')))
|
||
|
{
|
||
|
NetStatus = NetpNameValidate(
|
||
|
NULL,
|
||
|
(LPTSTR)(pszDomain + 2),
|
||
|
NAMETYPE_COMPUTER,
|
||
|
0
|
||
|
);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
NetStatus = NetpNameValidate(
|
||
|
NULL,
|
||
|
(LPTSTR)pszDomain,
|
||
|
NAMETYPE_DOMAIN,
|
||
|
0
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if (NetStatus == ERROR_SUCCESS)
|
||
|
{
|
||
|
if (theApp.OpenDocumentFile(m_strDomain))
|
||
|
{
|
||
|
m_fUpdateHint = UPDATE_DOMAIN_SELECTED;
|
||
|
EndDialog(IDOK);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AfxMessageBox(IDP_ERROR_INVALID_DOMAIN);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AfxMessageBox(IDP_ERROR_INVALID_DOMAIN);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void CSelectDomainDialog::OnSelChangedDomain(NMHDR* pNMHDR, LRESULT* pResult)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Notification handler for TVN_SELCHANGED.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
pNMHDR - notification message header.
|
||
|
pResult - return status.
|
||
|
|
||
|
Return Values:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
|
||
|
TV_ITEM tvItem = pNMTreeView->itemNew;
|
||
|
|
||
|
if (tvItem.hItem != m_serverTree.GetRootItem())
|
||
|
{
|
||
|
CDomain* pDomain = (CDomain*)tvItem.lParam;
|
||
|
VALIDATE_OBJECT(pDomain, CDomain);
|
||
|
|
||
|
m_strDomain = pDomain->m_strName;
|
||
|
UpdateData(FALSE); // upload...
|
||
|
|
||
|
m_bIsFocusDomain = TRUE;
|
||
|
}
|
||
|
else if (tvItem.hItem == m_serverTree.GetRootItem())
|
||
|
{
|
||
|
m_strDomain = _T("");
|
||
|
UpdateData(FALSE);
|
||
|
|
||
|
m_bIsFocusDomain = FALSE;
|
||
|
}
|
||
|
|
||
|
*pResult = 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
void CSelectDomainDialog::OnReturnDomains(NMHDR* pNMHDR, LRESULT* pResult)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Notification handler for NM_RETURN.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
pNMHDR - notification message header.
|
||
|
pResult - return status.
|
||
|
|
||
|
Return Values:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
OnDblclkDomain(pNMHDR, pResult);
|
||
|
}
|
||
|
|
||
|
|
||
|
void CSelectDomainDialog::InsertDomains(HTREEITEM hParent, CDomains* pDomains)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Inserts domain list.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
hParent - parent item.
|
||
|
pDomains - domain collection.
|
||
|
|
||
|
Return Values:
|
||
|
|
||
|
None.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
VALIDATE_OBJECT(pDomains, CDomains);
|
||
|
|
||
|
TV_ITEM tvItem = {0};
|
||
|
TV_INSERTSTRUCT tvInsert;
|
||
|
long nDomains = pDomains->GetCount();
|
||
|
|
||
|
tvItem.mask = TVIF_TEXT|
|
||
|
TVIF_PARAM|
|
||
|
TVIF_IMAGE|
|
||
|
TVIF_SELECTEDIMAGE;
|
||
|
|
||
|
tvItem.iImage = BMPI_DOMAIN;
|
||
|
tvItem.iSelectedImage = BMPI_DOMAIN;
|
||
|
|
||
|
tvInsert.hInsertAfter = (HTREEITEM)TVI_LAST;
|
||
|
tvInsert.hParent = (HTREEITEM)hParent;
|
||
|
|
||
|
VARIANT va;
|
||
|
VariantInit(&va);
|
||
|
|
||
|
for (va.vt = VT_I4, va.lVal = 0; va.lVal < nDomains; va.lVal++)
|
||
|
{
|
||
|
CDomain* pDomain = (CDomain*)MKOBJ(pDomains->GetItem(va));
|
||
|
VALIDATE_OBJECT(pDomain, CDomain);
|
||
|
|
||
|
tvItem.pszText = MKSTR(pDomain->m_strName);
|
||
|
tvItem.lParam = (LPARAM)(LPVOID)pDomain;
|
||
|
|
||
|
tvInsert.item = tvItem;
|
||
|
m_serverTree.InsertItem(&tvInsert);
|
||
|
|
||
|
pDomain->InternalRelease();
|
||
|
}
|
||
|
}
|