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